Files
core/app/Providers/GlobalViewDataProvider.php
T

144 lines
4.1 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());
view()->share('loggedUser', \Auth::user());
$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);
});
}
}