| Current Path : /var/www/html/dynaweb-starter/plugin/dynaweb-site/src/Classes/ |
| Current File : /var/www/html/dynaweb-starter/plugin/dynaweb-site/src/Classes/LoadComponents.php |
<?php
namespace Dynaweb\DynawebSite\Classes;
use Illuminate\Support\Facades\Storage;
use Dynaweb\DynawebSite\Enums\FrontendComponentType;
use Dynaweb\DynawebSite\Models\FrontendComponent;
use Illuminate\Support\Facades\View;
class LoadComponents
{
private ?String $site_slug;
private ?String $page_slug;
private $meta;
public const BASE_PATH = '/storage/app/';
public const LAYOUT_SITE_PATH = 'LAYOUTS.SITE.';
public const LAYOUT_PAGE_PATH = 'LAYOUTS.PAGE.';
public const LAYOUT_FILE_PATH = 'PHP.';
public const PAGE_ENTRY_PATH = '/app/ENTRY/PAGE/';
public const PAGE_ENTRY_EXT = '.blade.php';
public const SHARED_VARIABLE = '__shared__';
public function __construct(
public $handler,
public $meta_provider
) {
}
/**
* Handle the component loading
*/
public function handle()
{
if(empty($this->handler->site_slug) || empty($this->handler->page_slug)) {
throw new \Exception("Not enough slug information send");
}
return $this->loadMeta();
}
public function loadMeta()
{
$this->meta = json_decode($this->meta_provider->getSiteMeta());
return $this;
}
public function exportComponent()
{
$__site_slug__ = $this->handler->site_slug;
$__page_slug__ = $this->handler->page_slug;
$__component__ = $this->meta?->{$__site_slug__}?->page?->{$__page_slug__}?->component;
$__export_component__ = [];
$__view__ = $this->setViewNamespace();
$__path__ = storage_path(self::PAGE_ENTRY_PATH) . $__page_slug__ . self::PAGE_ENTRY_EXT;
if(file_exists($__path__)) {
include($__path__);
}
/** shared variable */
$__shared__ = get_defined_vars();
$__shared__ = $this->unsetShared($__shared__);
if(!empty($__component__)) {
foreach ($__component__ as $ckey => $cdata) {
$__export_component__[$cdata->component_code] = View('storage::' . self::LAYOUT_FILE_PATH . $cdata->component_code, $__shared__);
;
}
}
$export = [];
$export = $this->exportHeader($export, $__shared__);
$export = $this->exportPageLayout($export, $__export_component__, $__shared__);
$export = $this->exportFooter($export, $__shared__);
/** export shared variable */
$export += $__shared__;
return $export;
}
public function setViewNamespace()
{
return View::addNamespace('storage', base_path() . self::BASE_PATH);
;
}
public function exportHeader($export, $__shared__)
{
$site_slug = $this->handler->site_slug;
$header = $this->meta?->{$site_slug}?->header;
$export['__header__'] = View('storage::' . self::LAYOUT_FILE_PATH . $header, $__shared__);
return $export;
}
public function exportFooter($export, $__shared__)
{
$site_slug = $this->handler->site_slug;
$footer = $this->meta?->{$site_slug}?->footer;
$export['__footer__'] = View('storage::' . self::LAYOUT_FILE_PATH . $footer, $__shared__);
return $export;
}
public function exportPageLayout($export, $component)
{
$this->setViewNamespace();
$page_slug = $this->handler->page_slug;
$export['__page__'] = View('storage::' . self::LAYOUT_PAGE_PATH . $page_slug, $component);
return $export;
}
public function exportSiteLayout()
{
$this->setViewNamespace();
$site_slug = $this->handler->site_slug;
return View('storage::' . self::LAYOUT_SITE_PATH . $site_slug);
}
private function unsetShared($shared) {
unset($shared['__component__']);
unset($shared['__export_component__']);
unset($shared['__view__']);
unset($shared['__path__']);
return $shared;
}
}