From: Vincent Vanwaelscappel Date: Wed, 23 Oct 2024 16:58:09 +0000 (+0200) Subject: wip #7118 @7 X-Git-Url: http://git.cubedesigners.com/?a=commitdiff_plain;h=045ec96119a2ca6beeac4485fae4a0fb4515caa7;p=cubist_cms-back.git wip #7118 @7 --- diff --git a/src/app/Http/Controllers/CubistFrontController.php b/src/app/Http/Controllers/CubistFrontController.php index 0c503d1..07be345 100644 --- a/src/app/Http/Controllers/CubistFrontController.php +++ b/src/app/Http/Controllers/CubistFrontController.php @@ -12,20 +12,28 @@ use Illuminate\Routing\Controller as BaseController; class CubistFrontController extends BaseController { public $data = []; + protected $_inited = false; - public function __construct() + protected function _404() + { + abort(404, 'Please go back to our homepage.'); + } + + public function init() { + if ($this->_inited) { + return; + } + $this->_inited = true; $this->data['variant'] = App::getVariant(); $this->data['global'] = Settings::getData(); $this->data['locales'] = Locale::getLocalesDataForFront(); $this->data['nav'] = Menu::getNavigation(); } - - protected function _404() + public function callAction($method, $parameters) { - abort(404, 'Please go back to our homepage.'); + $this->init(); + return parent::callAction($method, $parameters); } - - } diff --git a/src/app/Http/Controllers/CubistPageController.php b/src/app/Http/Controllers/CubistPageController.php index ccf32ad..3fdd612 100644 --- a/src/app/Http/Controllers/CubistPageController.php +++ b/src/app/Http/Controllers/CubistPageController.php @@ -14,6 +14,8 @@ class CubistPageController extends CubistFrontController public function index(Request $request, $id) { + $this->init(); + $class = CMSPage::getPageClass(); /** @var CMSPage $page */ $page = Menu::getNavigation()->findOneById($id)->getEntity(); @@ -49,7 +51,7 @@ class CubistPageController extends CubistFrontController $path = 'home'; } $nav = Menu::getNavigation(); - $item = $nav->findItemWithURL($path,true); + $item = $nav->findItemWithURL($path, true); if (null === $item) { $redirectItem = $nav->findOneWithAlias($path); @@ -65,6 +67,6 @@ class CubistPageController extends CubistFrontController $c['params'] = ['request' => $request] + $c['params']; } - return call_user_func_array([app('App\\Http\\Controllers\\' . $c['controller']), $c['action']], $c['params']); + return call_user_func_array([app('App\\Http\\Controllers\\' . $c['controller']), 'callAction'], [$c['action'], $c['params']]); } } diff --git a/src/app/Magic/Menu/Item.php b/src/app/Magic/Menu/Item.php index 678d0d3..ee400ff 100644 --- a/src/app/Magic/Menu/Item.php +++ b/src/app/Magic/Menu/Item.php @@ -111,6 +111,11 @@ class Item */ protected $_variant = ''; + /** + * @var bool + */ + protected $_status = true; + /** * @var array */ @@ -129,30 +134,30 @@ class Item * @param string $id */ - public function initFromDatabase($id = '#root') + public function initFromDatabase($id = '#root', $viewOffline = false) { $class = CMSPage::getPageClass(); /** @var $all CMSPage[] */ - /** @var Eloquent $r */ - $all = $class::whereVariant($this->getVariant())->orderBy('lft')->get(); - + /** @var CMSPage $r */ + $r = $class::whereVariant($this->getVariant())->orderBy('lft'); + $all = $r->get(); $this->setId('#root'); $this->setBreadcrumbs(false); $this->setName($id); - $this->setChildrenFromData($all, null); + $this->setChildrenFromData($all, null, $viewOffline); } /** * @param $data CMSPage[] * @param $filter null|string */ - public function setChildrenFromData($data, $filter = null) + public function setChildrenFromData($data, $filter = null, $viewOffline = false) { foreach ($data as $item) { if ($item->parent_id != $filter) { continue; } - if (!$item->status) { + if (!$viewOffline && !$item->status) { continue; } $this->addChildFromData($item, $data); @@ -793,6 +798,22 @@ class Item return $this->getParent()->getRoot(); } + /** + * @return bool + */ + public function getStatus(): bool + { + return $this->_status; + } + + /** + * @param bool $status + */ + public function setStatus(bool $status): void + { + $this->_status = $status; + } + /** * @param CubistMagicPageModel $entity */ diff --git a/src/app/Magic/Menu/Menu.php b/src/app/Magic/Menu/Menu.php index 5e0ede9..580cef6 100644 --- a/src/app/Magic/Menu/Menu.php +++ b/src/app/Magic/Menu/Menu.php @@ -2,8 +2,6 @@ namespace Cubist\Backpack\app\Magic\Menu; -use Cubist\Backpack\app\Template\Navigation; -use Cubist\Backpack\app\Template\Redirection; use Cubist\Backpack\Facades\App; use Lavary\Menu\Menu as BaseMenu; use Illuminate\Support\Facades\Cache; @@ -52,9 +50,12 @@ class Menu extends BaseMenu */ public static function getNavigation($locale = null, $variant = null) { + $viewOffline = backpack_user() !== null && backpack_user(); + if (null === $locale) { $locale = App::getLocale(); } + if (null === $variant) { $variant = App::getVariant(); } @@ -65,12 +66,12 @@ class Menu extends BaseMenu if (!isset(self::$_nav[$variant][$locale])) { \Barryvdh\Debugbar\Facade::startMeasure('nav', 'Init Navigation object ' . $variant . ', ' . $locale); - self::$_nav[$variant][$locale] = Cache::tags(self::CACHE_TAG)->remember('navigation_' . $variant . '_' . $locale, 43200, function () use ($locale, $variant) { + self::$_nav[$variant][$locale] = Cache::tags(self::CACHE_TAG)->remember('navigation_' . $variant . '_' . $locale . '_' . $viewOffline, 43200, function () use ($locale, $variant, $viewOffline) { \Barryvdh\Debugbar\Facade::startMeasure('donav', 'Do Navigation object ' . $variant . ', ' . $locale); $nav = new Item(); $nav->setLocale($locale); $nav->setVariant($variant); - $nav->initFromDatabase(); + $nav->initFromDatabase('#root', $viewOffline); \Barryvdh\Debugbar\Facade::stopMeasure('donav'); return $nav; }); diff --git a/src/app/Magic/Menu/PageItem.php b/src/app/Magic/Menu/PageItem.php index 5f6b344..71dd277 100644 --- a/src/app/Magic/Menu/PageItem.php +++ b/src/app/Magic/Menu/PageItem.php @@ -53,6 +53,7 @@ class PageItem extends Item $this->setSlug($data->get('slug')); $this->setTitle($data->get('title')); $this->setRobots($data->get('robots', true)); + $this->setStatus($data->get('status', true)); $this->setAvailableVariants($data->get('variant', App::getVariants())); $desktop = $entity->menu_desktop == '' ? 'children' : $entity->menu_desktop; diff --git a/src/app/Middleware/FrontControllerInit.php b/src/app/Middleware/FrontControllerInit.php new file mode 100644 index 0000000..3947ada --- /dev/null +++ b/src/app/Middleware/FrontControllerInit.php @@ -0,0 +1,24 @@ +route()) { + return $this->getResponse(); + } + if ($c = $request->route()->getController()) { + if ($c instanceof CubistFrontController && method_exists($c, 'init')) { + $c->init(); + } + } + parent::handle($request, $next); + return $this->getResponse(); + } +}