class CubistFrontController extends BaseController
{
public $data = [];
+ protected $_inited = false;
- public function __construct()
+ protected function _404()
+ {
+ abort(404, 'Please go back to our <a href="' . url('') . '">homepage</a>.');
+ }
+
+ 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 <a href="' . url('') . '">homepage</a>.');
+ $this->init();
+ return parent::callAction($method, $parameters);
}
-
-
}
public function index(Request $request, $id)
{
+ $this->init();
+
$class = CMSPage::getPageClass();
/** @var CMSPage $page */
$page = Menu::getNavigation()->findOneById($id)->getEntity();
$path = 'home';
}
$nav = Menu::getNavigation();
- $item = $nav->findItemWithURL($path,true);
+ $item = $nav->findItemWithURL($path, true);
if (null === $item) {
$redirectItem = $nav->findOneWithAlias($path);
$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']]);
}
}
*/
protected $_variant = '';
+ /**
+ * @var bool
+ */
+ protected $_status = true;
+
/**
* @var array
*/
* @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);
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
*/
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;
*/
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();
}
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;
});
$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;
--- /dev/null
+<?php
+
+namespace Cubist\Backpack\app\Middleware;
+
+use Closure;
+use Cubist\Backpack\app\Http\Controllers\CubistFrontController;
+use Illuminate\Http\Request;
+
+class FrontControllerInit extends CubistMiddleware
+{
+ public function handle(Request $request, Closure $next)
+ {
+ if (!$request->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();
+ }
+}