Files
core/app/Providers/GlobalViewDataProvider.php
T

93 lines
2.3 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;
}
$settings = new Settings();
foreach ($settings->getForView() as $key => $value) {
view()->share($key, $value);
}
$this->extendBlade();
}
/**
* Creates pattern for matching Blade directives
*
* @param $function
*
* @return string
*/
private function createPattern($function)
{
return '/(?<!\w)(\s*)@' . $function . '\(\s*(.*)\)/';
}
/**
* 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);
});
// 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);
});
}
}