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', '!=', Content::STATUS_DRAFT); } else { $pages = $pages->where('status', Content::STATUS_PUBLIC); } self:: $homepagePages = $pages->get(); 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->is_homepage) { $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 []; } /** * Install module */ public static function install() { // register action log types $types = [ [ 'string_id' => 'pageRemovedFromHomepage', 'name' => 'template::admin/setHomepage.events.names.removedPage', 'value' => 'template::admin/setHomepage.events.descriptions.removedPage', ], [ 'string_id' => 'pageAddedIntoHomepage', 'name' => 'template::admin/setHomepage.events.names.addedPage', 'value' => 'template::admin/setHomepage.events.descriptions.addedPage', ], ]; foreach ($types as $type) { ActionLogType::create($type); } } /** * Uninstall template * * @param Module $template */ public static function uninstall(Module $template) { // delete action log types ActionLogType::whereIn('string_id', ['pageRemovedFromHomepage', 'pageAddedIntoHomepage']) ->delete(); // delete settings with pages on homepage SettingsModel::where('key', self::HOMEPAGE_PAGES_SETTINGS_KEY) ->delete(); } }