143 lines
4.0 KiB
PHP
143 lines
4.0 KiB
PHP
<?php
|
|
|
|
namespace App\Providers;
|
|
|
|
use App\Models\Settings;
|
|
use Illuminate\Support\Facades\App;
|
|
use Illuminate\Support\Facades\Blade;
|
|
use Illuminate\Support\ServiceProvider;
|
|
|
|
class GlobalViewDataProvider extends ServiceProvider
|
|
{
|
|
/**
|
|
* Bootstrap the application services.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function boot()
|
|
{
|
|
// ignore running from artisan
|
|
if (App::runningInConsole()) {
|
|
return;
|
|
}
|
|
|
|
view()->share('currentUrl', \Request::url());
|
|
|
|
$this->extendBlade();
|
|
}
|
|
|
|
/**
|
|
* Creates pattern for matching Blade directives
|
|
*
|
|
* @param $function
|
|
*
|
|
* @return string
|
|
*/
|
|
private function createPattern($function)
|
|
{
|
|
return '/(?<!\w)(\s*)@' . $function.'\(([^)]+)*\)/';
|
|
}
|
|
|
|
/**
|
|
* Register the application services.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function register()
|
|
{
|
|
//
|
|
}
|
|
|
|
/**
|
|
* Create new Blade directives
|
|
*/
|
|
private function extendBlade()
|
|
{
|
|
// extend Blade "@extends" macro - with this macro allows to use "hierarchy" in templates
|
|
Blade::extend(function ($view) {
|
|
$pattern = $this->createPattern('extendVisitor');
|
|
$code = '@extends(\App\Helpers\Template::name($2))';
|
|
|
|
return preg_replace($pattern, $code, $view);
|
|
});
|
|
|
|
// shortcut for loading uploaded files
|
|
Blade::extend(function ($view) {
|
|
$pattern = $this->createPattern('upload');
|
|
$code = '<?php echo \App\Helpers\Template::upload($2); ?>';
|
|
|
|
return preg_replace($pattern, $code, $view);
|
|
});
|
|
|
|
// shortcut for loading thumbnails of uploaded images
|
|
Blade::extend(function ($view) {
|
|
$pattern = $this->createPattern('thumbnail');
|
|
$code = '<?php echo \App\Helpers\Template::thumbnail($2); ?>';
|
|
|
|
return preg_replace($pattern, $code, $view);
|
|
});
|
|
|
|
// shortcut for displaying Gravatar
|
|
Blade::extend(function ($view) {
|
|
$pattern = $this->createPattern('gravatar');
|
|
$code = '<?php echo \App\Helpers\Gravatar::img($2); ?>';
|
|
|
|
return preg_replace($pattern, $code, $view);
|
|
});
|
|
|
|
// shortcut for assets (placed in /public/assets/<theme>
|
|
Blade::extend(function ($view) {
|
|
$pattern = $this->createPattern('asset');
|
|
$code = '<?php echo \App\Helpers\Template::asset($2); ?>';
|
|
|
|
return preg_replace($pattern, $code, $view);
|
|
});
|
|
|
|
Blade::extend(function ($view) {
|
|
$pattern = $this->createPattern('date');
|
|
$code = '<?php echo \App\Helpers\Template::date($2); ?>';
|
|
|
|
return preg_replace($pattern, $code, $view);
|
|
});
|
|
|
|
Blade::extend(function ($view) {
|
|
$pattern = $this->createPattern('customDate');
|
|
$code = '<?php echo \App\Helpers\Date::dateFormatted($2); ?>';
|
|
|
|
return preg_replace($pattern, $code, $view);
|
|
});
|
|
|
|
Blade::extend(function ($view) {
|
|
$pattern = $this->createPattern('monthName');
|
|
$code = '<?php echo \App\Helpers\Date::monthName($2); ?>';
|
|
|
|
return preg_replace($pattern, $code, $view);
|
|
});
|
|
|
|
|
|
// register extension for rendering widget areas
|
|
Blade::extend(function ($view) {
|
|
$pattern = $this->createPattern('widgetArea');
|
|
|
|
return preg_replace($pattern, '<?php \App\Helpers\WidgetAreas::render($2); ?>', $view);
|
|
});
|
|
|
|
// register extension for preview of widget
|
|
Blade::extend(function ($view) {
|
|
$pattern = $this->createPattern('widgetPreview');
|
|
$code = '
|
|
<?php
|
|
if ($2 instanceof \App\Models\Widget) {
|
|
$handler = $2->widget_type_handler;
|
|
$presenter = call_user_func([$handler, "getPresenter"]);
|
|
|
|
echo call_user_func([$presenter, "render"], json_decode($2->settings));
|
|
}
|
|
?>
|
|
';
|
|
|
|
return preg_replace($pattern, $code, $view);
|
|
});
|
|
}
|
|
}
|