From 7db8241a804f8c9f9edfead5660954a8504554bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Sat, 2 Sep 2017 14:15:50 +0200 Subject: [PATCH] FIX: just a bugfix of few historical bugs --- OnePage/Handlers/OnePage.php | 83 +--------------- .../Display/AttachPagesToHomepage.php | 96 +++++++++++++++++++ OnePage/Providers/OnePageTemplate.php | 5 + .../views/admin/homepage/set.blade.php | 4 +- OnePage/config.php | 2 +- 5 files changed, 105 insertions(+), 85 deletions(-) create mode 100644 OnePage/Pipeline/Display/AttachPagesToHomepage.php diff --git a/OnePage/Handlers/OnePage.php b/OnePage/Handlers/OnePage.php index 39acbad..2adad94 100755 --- a/OnePage/Handlers/OnePage.php +++ b/OnePage/Handlers/OnePage.php @@ -22,12 +22,7 @@ use Templates\Base\OnePage\Widgets\OnePageMenu\OnePageMenu; abstract class OnePage implements TemplateHandler, InstallableModule { - /** - * Name of settings key for list of pages used on homepage - */ const HOMEPAGE_PAGES_SETTINGS_KEY = 'template.onepage.homepagePages'; - protected static $homepagePagesInitialized = false; - protected static $homepagePages; /** * Register admin menu (or multiple ones) @@ -40,83 +35,7 @@ abstract class OnePage implements TemplateHandler, InstallableModule public static function registerAdminMenu(User $user) { $menu = \Menu::instance('mainMenu'); -// $menu->route('template.setHomepage', trans('template::admin/mainMenu.setHomepage'), [], 1, ['icon' => 'fa fa-fw fa-home']); - } - - /** - * Getter for pages displayed on homepage - * - * @return array - */ - public static function getPagesOnHomepage() - { - if (!self::$homepagePagesInitialized) { - $pageIds = (array)json_decode(Settings::get(self::HOMEPAGE_PAGES_SETTINGS_KEY, '[]')); - - if (empty($pageIds)) { - return []; - } - - // get all available pages - $pages = Content::whereIn('id', $pageIds); - - if (Auth::user()) { - $pages = $pages->where('status', '!=', IContent::STATUS_DRAFT); - } else { - $pages = $pages->where('status', IContent::STATUS_PUBLIC); - } - - $homepagePages = $pages->get() - ->getDictionary(); - - foreach ($pageIds as $pageId) { - if (!isset($homepagePages[$pageId])) { - continue; - } - - self::$homepagePages[] = $homepagePages[$pageId]; - } - - self::$homepagePagesInitialized = true; - } - - return self::$homepagePages; - } - - /** - * Prepare Content object to be rendered using Blade template - * - * @param Content $content - * - * @return array - */ - public static function beforeRender(Content & $content) - { - if ($content->isHomepage) { - $pages = self::getPagesOnHomepage(); - - // create real content from pages - $pagesRaw = $pagesInTemplates = []; - foreach ($pages as $page) { - // save pages as models only - $pagesRaw[$page->url] = $page; - - // save rendered pages - try { - $pagesInTemplates[$page->url] = PageRenderer::render($page) - ->render(); - } catch (\Exception $e) { - if (Auth::user()) { - $pagesInTemplates[$page->url] = view(Template::name('errors.cannotRender'), ['page' => $page])->render(); - } - } - } - - // return pages into template - return ['pagesHtml' => $pagesInTemplates, 'pagesRaw' => $pagesRaw]; - } - - return []; + $menu->route('template.setHomepage', trans('template::admin/mainMenu.setHomepage'), [], 1, ['icon' => 'fa fa-fw fa-home']); } /** diff --git a/OnePage/Pipeline/Display/AttachPagesToHomepage.php b/OnePage/Pipeline/Display/AttachPagesToHomepage.php new file mode 100644 index 0000000..2de4c62 --- /dev/null +++ b/OnePage/Pipeline/Display/AttachPagesToHomepage.php @@ -0,0 +1,96 @@ +isHomepage) { + return; + } + + $pages = $this->getPagesOnHomepage(); + + // create real content from pages + $pagesRaw = $pagesInTemplates = []; + foreach ($pages as $page) { + // save pages as models only + $pagesRaw[$page->url] = $page; + + // save rendered pages + try { + $pagesInTemplates[$page->url] = Controller::getView($page->template, ['page' => $page]) + ->render(); + } catch (\Exception $e) { + if (\Auth::user()) { + $pagesInTemplates[$page->url] = view(Template::name('errors.cannotRender'), [ + 'page' => $page, + 'exception' => $e + ])->render(); + } + } + } + + // set page contents + $content->pages = $pagesInTemplates; + $content->rawPages = $pagesRaw; + } + + /** + * Getter for pages displayed on homepage + * @return array + */ + public function getPagesOnHomepage() + { + $pageIds = (array)json_decode(setting(OnePage::HOMEPAGE_PAGES_SETTINGS_KEY, '[]')); + + if (empty($pageIds)) { + return []; + } + + // get all available pages + $pages = Content::whereIn('id', $pageIds) + ->with('subpages'); + + if (\Auth::user()) { + $pages = $pages->where('status', '!=', IContent::STATUS_DRAFT); + } else { + $pages = $pages->where('status', IContent::STATUS_PUBLIC); + } + + $homepagePages = $pages->get() + ->getDictionary(); + + foreach ($pageIds as $pageId) { + if (!isset($homepagePages[$pageId])) { + continue; + } + + self::$homepagePages[] = $homepagePages[$pageId]; + } + + return self::$homepagePages; + } +} \ No newline at end of file diff --git a/OnePage/Providers/OnePageTemplate.php b/OnePage/Providers/OnePageTemplate.php index 6de33b5..df2be40 100755 --- a/OnePage/Providers/OnePageTemplate.php +++ b/OnePage/Providers/OnePageTemplate.php @@ -2,6 +2,7 @@ namespace Templates\Base\OnePage\Providers; use Illuminate\Support\ServiceProvider; +use Templates\Base\OnePage\Pipeline\Display\AttachPagesToHomepage; use Templates\Base\OnePage\Widgets\OnePageMenu\OnePageMenu; class OnePageTemplate extends ServiceProvider @@ -23,6 +24,9 @@ class OnePageTemplate extends ServiceProvider // register event service provider for this template $this->app->register(EventProvider::class); + + $registrator = $this->app->make('displayPipeline'); + $registrator->add(AttachPagesToHomepage::class); } /** @@ -52,6 +56,7 @@ class OnePageTemplate extends ServiceProvider { $registrator = $this->app->make('registerWidget'); + // register all available widgets $registrator->register(OnePageMenu::class); } diff --git a/OnePage/Resources/views/admin/homepage/set.blade.php b/OnePage/Resources/views/admin/homepage/set.blade.php index cfa6d1b..9f67f8b 100755 --- a/OnePage/Resources/views/admin/homepage/set.blade.php +++ b/OnePage/Resources/views/admin/homepage/set.blade.php @@ -17,7 +17,7 @@ Improvement: http://www.html5rocks.com/en/tutorials/dnd/basics/ 'title' => $homepage->title.' '.trans($homepage->module_name).'', 'body' => '

'.str_limit(strip_tags($homepage->content), 200).'

', 'footerClass' => 'text-right', - 'footer' => '' + 'footer' => '' ]) @else
@lang('template::admin/setHomepage.noHomepageSet')
@@ -38,7 +38,7 @@ Improvement: http://www.html5rocks.com/en/tutorials/dnd/basics/ 'body' => '

'.str_limit(strip_tags($allPages[$pageId]->content), 200).'

', 'footerClass' => 'text-right', 'footer' => ' - + ' ]) diff --git a/OnePage/config.php b/OnePage/config.php index a94cf0f..7456c53 100755 --- a/OnePage/config.php +++ b/OnePage/config.php @@ -1,7 +1,7 @@ [\Templates\Base\OnePage\Providers\OnePageTemplate::class], - 'files' => [__DIR__ . '/Http/routes.php'], + 'files' => ['templates/Base/OnePage/Http/routes.php'], 'handler' => null, 'name' => null, 'description' => null,