public static function saveTemplates($themeId) { if (!empty(self::$_fileTemplateBlocks)) { foreach (self::$_fileTemplateBlocks as $template => $blocks) { if (empty(self::$_databaseTemplates[$template]) && strpos($template, '__core_') !== 0) { $newTemplate = new Template(); $newTemplate->theme_id = $themeId; $newTemplate->template = $template; $newTemplate->label = ucwords(str_replace('_', ' ', $template)) . ' Template'; $newTemplate->save(); self::$_databaseTemplates[$template] = $newTemplate; self::$_databaseTemplateIds[$newTemplate->id] = $newTemplate; } } } }
public function getList($pageId = 0) { $page = Page::find($pageId); if (!empty($page)) { $block_cats = Template::template_blocks(config('coaster::frontend.theme'), $page->template); foreach ($block_cats as $block_cat) { foreach ($block_cat as $block) { if ($block->type == 'gallery') { $gallery_blocks[] = $block; } } } } if (isset($gallery_blocks)) { if (count($gallery_blocks) == 1) { return \redirect()->route('coaster.admin.gallery.edit', ['pageId' => $pageId, 'blockId' => $gallery_blocks[0]->id]); } $page_lang_data = PageLang::preload($pageId); if (!empty($page_lang_data)) { $name = $page_lang_data->name; if ($page->parent != 0) { $parent_lang_data = PageLang::preload($page->parent); $name = $parent_lang_data->name . " / " . $name; } } else { $name = ''; } $this->layoutData['content'] = View::make('coaster::pages.gallery.list', array('page_name' => $name, 'page_id' => $pageId, 'galleries' => $gallery_blocks)); } else { $this->layoutData['content'] = 'No Galleries Found'; } return null; }
/** * @param $blockId * @param $pageId * @return static|null */ public static function getBlockOnPage($blockId, $pageId) { if ($page = Page::find($pageId)) { $blocksByCat = Template::template_blocks(config('coaster::frontend.theme'), $page->template); } else { $blocksByCat = Theme::theme_blocks(config('coaster::frontend.theme')); } foreach ($blocksByCat as $blocks) { foreach ($blocks as $block) { if ($block->id == $blockId) { return static::find($blockId); } } } return null; }
public function getEdit($pageId, $versionId = 0) { // get page data if (!($page = Page::find($pageId))) { return 'Page Not Found'; } PageVersionSchedule::checkPageVersionIds(); $publishingOn = config('coaster::admin.publishing') > 0; $auth = ['can_publish' => $publishingOn && Auth::action('pages.version-publish', ['page_id' => $pageId]) || !$publishingOn && Auth::action('pages.edit', ['page_id' => $pageId]), 'can_duplicate' => $page->canDuplicate()]; // get page lang data if (!($page_lang = $page->pageCurrentLang)) { if (!($page_lang = $page->pageDefaultLang)) { return 'Page Lang Data Not Found'; } $page_lang = $page_lang->replicate(); $page_lang->language_id = Language::current(); $page_lang->save(); } $page_lang->url = ltrim($page_lang->url, '/'); // get version data $versionData = []; $versionData['latest'] = PageVersion::latest_version($pageId); $versionData['editing'] = $versionId == 0 || $versionId > $versionData['latest'] ? $versionData['latest'] : $versionId; $versionData['live'] = $page_lang->live_version; // get frontend link (preview or direct link if document) $frontendLink = Path::getFullUrl($pageId); if (!$page->is_live() && $page->link == 0) { $live_page_version = PageVersion::where('page_id', '=', $pageId)->where('version_id', '=', $versionData['live'])->first(); if (!empty($live_page_version)) { $frontendLink .= '?preview=' . $live_page_version->preview_key; } } // if loading a non live version get version template rather than current page template if ($versionData['live'] != $versionData['editing']) { if ($page_version = PageVersion::where('version_id', '=', $versionData['editing'])->where('page_id', '=', $pageId)->first()) { $page->template = $page_version->template; } else { return 'Page Version Data Not Found'; } } // load blocks content if ($page->link == 0) { $blocks = Template::template_blocks(config('coaster::frontend.theme'), $page->template); $blocks_content = PageBlock::preloadPage($pageId, $versionData['editing']); list($tab_headers, $tab_contents) = Block::getTabs($blocks, $blocks_content, $page->id); } else { $tab_headers = []; $tab_contents = []; } // load page info and order so page info is first and block categories are in order list($tab_headers[0], $tab_contents[0]) = $page->tabInfo(); ksort($tab_headers); // load version / publish requests if ($publishingOn && count($tab_headers) > 1) { $tab_headers[-1] = 'Versions'; $tab_contents[-1] = View::make('coaster::partials.tabs.versions.main', ['content' => PageVersion::version_table($page->id)])->render(); list($tab_headers[-2], $tab_contents[-2]) = $page->tabRequests(); } // remove empty tabs $tab_headers = array_filter($tab_headers); // get item name, or default to page $item_name = $page->groupItemsNames() ?: 'Page'; $tab_data = ['headers' => View::make('coaster::partials.tabs.header', ['tabs' => $tab_headers])->render(), 'contents' => View::make('coaster::partials.tabs.content', ['tabs' => $tab_contents, 'item' => $item_name, 'new_page' => false, 'publishing' => $publishingOn, 'can_publish' => $auth['can_publish'], 'page' => $page])->render()]; // add required modals if ($publishingOn) { $intervals = PageVersionSchedule::selectOptions(); $this->layoutData['modals'] = View::make('coaster::modals.pages.publish')->render() . View::make('coaster::modals.pages.publish_schedule', ['intervals' => $intervals, 'live_version' => $versionData['live']])->render() . View::make('coaster::modals.pages.request_publish')->render() . View::make('coaster::modals.pages.rename_version')->render(); } $this->layoutData['content'] = View::make('coaster::pages.pages.edit', ['page' => $page, 'page_lang' => $page_lang, 'item_name' => $item_name, 'publishingOn' => $publishingOn, 'tab' => $tab_data, 'frontendLink' => $frontendLink, 'version' => $versionData, 'auth' => $auth]); return null; }
public static function _pageImportData($theme) { $importPath = $themePath = base_path() . '/resources/views/themes/' . $theme->theme . '/import/'; if (is_dir($importPath)) { // wipe data DB::table((new Page())->getTable())->truncate(); DB::table((new PageLang())->getTable())->truncate(); DB::table((new PageVersion())->getTable())->truncate(); DB::table((new PagePublishRequests())->getTable())->truncate(); DB::table((new PageGroup())->getTable())->truncate(); DB::table((new PageGroupAttribute())->getTable())->truncate(); DB::table((new PageGroupPage())->getTable())->truncate(); DB::table((new Menu())->getTable())->truncate(); DB::table((new MenuItem())->getTable())->truncate(); DB::table((new PageBlockDefault())->getTable())->truncate(); DB::table((new PageBlock())->getTable())->truncate(); DB::table((new PageBlockRepeaterData())->getTable())->truncate(); DB::table((new PageBlockRepeaterRows())->getTable())->truncate(); $templateIds = []; $templates = Template::where('theme_id', '=', $theme->id)->get(); foreach ($templates as $template) { $templateIds[$template->template] = $template->id; } $blockIds = []; $blocks = Block::all(); foreach ($blocks as $block) { $blockIds[$block->name] = $block->id; } $pagesCsv = $importPath . 'pages.csv'; $groupsCsv = $importPath . 'pages/groups.csv'; $groupAttributesCsv = $importPath . 'pages/group_attributes.csv'; $menusCsv = $importPath . 'pages/menus.csv'; $menuItemsCsv = $importPath . 'pages/menu_items.csv'; $pageBlocksCsv = $importPath . 'pages/page_blocks.csv'; $repeaterBlocksCsv = $importPath . 'pages/repeater_blocks.csv'; // checks $error = 'pages data not imported, invalid columns in: '; if (!($pagesFileHandle = Csv::check($pagesCsv, 14))) { if (file_exists($pagesCsv)) { throw new \Exception($error . $pagesCsv); } } if (!($groupsHandle = Csv::check($groupsCsv, 5))) { if (file_exists($groupsCsv)) { throw new \Exception($error . $groupsCsv); } } if (!($groupAttributesHandle = Csv::check($groupAttributesCsv, 6))) { if (file_exists($groupAttributesCsv)) { throw new \Exception($error . $groupAttributesCsv); } } if (!($menusHandle = Csv::check($menusCsv, 3))) { if (file_exists($menusCsv)) { throw new \Exception($error . $menusCsv); } } if (!($menuItemsCsvHandle = Csv::check($menuItemsCsv, 5))) { if (file_exists($menuItemsCsv)) { throw new \Exception($error . $menuItemsCsv); } } if (!($pageBlocksCsvHandle = Csv::check($pageBlocksCsv, 3))) { if (file_exists($pageBlocksCsv)) { throw new \Exception($error . $pageBlocksCsv); } } if (!($repeaterBlocksCsvHandle = Csv::check($repeaterBlocksCsv, 4))) { if (file_exists($repeaterBlocksCsv)) { throw new \Exception($error . $repeaterBlocksCsv); } } // add pages if ($pagesFileHandle) { $row = 0; while (($data = fgetcsv($pagesFileHandle)) !== false) { if ($row++ == 0 && $data[0] == 'Page Id') { continue; } list($pageId, $pageName, $pageUrl, $templateName, $parentId, $defaultChildTemplateName, $order, $link, $live, $sitemap, $groupContainer, $groupContainerUrlPriority, $canonicalParentPageId, $groupIds) = $data; $newPage = new Page(); $newPage->id = $pageId; $newPage->template = !empty($templateIds[$templateName]) ? $templateIds[$templateName] : 0; $newPage->parent = $parentId ?: 0; $newPage->child_template = !empty($templateIds[$defaultChildTemplateName]) ? $templateIds[$defaultChildTemplateName] : 0; $newPage->order = $order; $newPage->link = $link; $newPage->live = $live; $newPage->sitemap = $sitemap; $newPage->group_container = $groupContainer ?: 0; $newPage->group_container_url_priority = $groupContainerUrlPriority ?: 0; $newPage->canonical_parent = $canonicalParentPageId ?: 0; $newPage->save(); $newPageLang = new PageLang(); $newPageLang->page_id = $pageId; $newPageLang->language_id = Language::current(); $newPageLang->name = $pageName; $newPageLang->url = $pageUrl; $newPageLang->live_version = 1; $newPageLang->save(); PageVersion::add_new($pageId); $groupIds = trim($groupIds); $groupIds = $groupIds ? explode(',', $groupIds) : []; foreach ($groupIds as $groupId) { $newPageGroupPage = new PageGroupPage(); $newPageGroupPage->page_id = $pageId; $newPageGroupPage->group_id = $groupId; $newPageGroupPage->save(); } } } // add page groups if ($groupsHandle) { $row = 0; while (($data = fgetcsv($groupsHandle)) !== false) { if ($row++ == 0 && $data[0] == 'Group Id') { continue; } list($groupId, $groupName, $itemName, $defaultContainerPageId, $defaultTemplate) = $data; $newGroup = new PageGroup(); $newGroup->id = $groupId; $newGroup->name = $groupName; $newGroup->item_name = $itemName; $newGroup->url_priority = $defaultContainerPageId; $newGroup->default_template = !empty($templateIds[$defaultTemplate]) ? $templateIds[$defaultTemplate] : 0; $newGroup->save(); } } if ($groupAttributesHandle) { $row = 0; while (($data = fgetcsv($groupAttributesHandle)) !== false) { if ($row++ == 0 && $data[0] == 'Attribute Id') { continue; } list($attributeId, $groupId, $blockName, $orderPriority, $orderDir, $filerByBlockName) = $data; $newGroupAttribute = new PageGroupAttribute(); $newGroupAttribute->id = $attributeId; $newGroupAttribute->group_id = $groupId; $newGroupAttribute->item_block_id = !empty($blockIds[$blockName]) ? $blockIds[$blockName] : 0; $newGroupAttribute->item_block_order_priority = $orderPriority; $newGroupAttribute->item_block_order_dir = $orderDir == 'desc' ? $orderDir : 'asc'; $newGroupAttribute->filter_by_block_id = !empty($blockIds[$filerByBlockName]) ? $blockIds[$filerByBlockName] : 0; $newGroupAttribute->save(); } } // add menus if ($menusHandle) { $menuIds = []; $row = 0; while (($data = fgetcsv($menusHandle)) !== false) { if ($row++ == 0 && $data[0] == 'Menu Identifier') { continue; } list($name, $label, $maxSublevel) = $data; $newMenu = new Menu(); $newMenu->label = $label; $newMenu->name = $name; $newMenu->max_sublevel = $maxSublevel; $newMenu->save(); $menuIds[$name] = $newMenu->id; } } if ($menuItemsCsvHandle) { $row = 0; while (($data = fgetcsv($menuItemsCsvHandle)) !== false) { if ($row++ == 0 && $data[0] == 'Menu Identifier') { continue; } list($menuIdentifier, $pageId, $order, $subLevels, $customName) = $data; if (!empty($menuIds[$menuIdentifier])) { $newMenuItem = new MenuItem(); $newMenuItem->menu_id = $menuIds[$menuIdentifier]; $newMenuItem->page_id = $pageId; $newMenuItem->order = $order; $newMenuItem->sub_levels = $subLevels; $newMenuItem->custom_name = $customName; $newMenuItem->save(); } } } // add page content if ($pageBlocksCsvHandle) { $row = 0; while (($data = fgetcsv($pageBlocksCsvHandle)) !== false) { if ($row++ == 0 && $data[0] == 'Page Id') { continue; } list($pageId, $blockName, $content) = $data; if (!empty($blockIds[$blockName])) { if ($pageId) { $newPageBlock = new PageBlock(); $newPageBlock->page_id = $pageId; } else { $newPageBlock = new PageBlockDefault(); } $newPageBlock->block_id = $blockIds[$blockName]; $newPageBlock->version = 1; $newPageBlock->content = $content; $newPageBlock->save(); } } } if ($repeaterBlocksCsvHandle) { $row = 0; $existingRepeaterRowKeys = []; while (($data = fgetcsv($repeaterBlocksCsvHandle)) !== false) { if ($row++ == 0 && $data[0] == 'Repeater Id') { continue; } list($repeaterId, $repeaterRowId, $blockName, $content) = $data; if (!empty($blockIds[$blockName])) { if ($decodedContent = json_decode($content)) { if (!is_string($decodedContent)) { $content = serialize($decodedContent); } } if (!isset($existingRepeaterRowKeys[$repeaterId . '-' . $repeaterRowId])) { $newRepeaterRow = new PageBlockRepeaterRows(); $newRepeaterRow->repeater_id = $repeaterId; $newRepeaterRow->row_id = $repeaterRowId; $newRepeaterRow->save(); $existingRepeaterRowKeys[$repeaterId . '-' . $repeaterRowId] = $newRepeaterRow->id; $newRepeaterData = new PageBlockRepeaterData(); $newRepeaterData->row_key = $existingRepeaterRowKeys[$repeaterId . '-' . $repeaterRowId]; $newRepeaterData->block_id = 0; $newRepeaterData->version = 1; $newRepeaterData->content = $repeaterRowId; $newRepeaterData->save(); } $newRepeaterData = new PageBlockRepeaterData(); $newRepeaterData->row_key = $existingRepeaterRowKeys[$repeaterId . '-' . $repeaterRowId]; $newRepeaterData->block_id = $blockIds[$blockName]; $newRepeaterData->version = 1; $newRepeaterData->content = $content; $newRepeaterData->save(); } } } PageSearchData::updateAllSearchData(); } }
/** * Load theme name, template name and content type to return */ public function _loadPageTemplate() { $theme = Theme::find(config('coaster::frontend.theme')); $lowestLevelPage = count($this->pageLevels) > 0 ? end($this->pageLevels) : null; $this->theme = !empty($theme) && is_dir(base_path('/resources/views/themes/' . $theme->theme)) ? $theme->theme : 'default'; $this->template = $lowestLevelPage ? Template::name($this->previewVersion ? $this->previewVersion->template : $lowestLevelPage->template) : ''; $this->contentType = $this->feedExtension ? Feed::getMimeType($this->feedExtension) : 'text/html; charset=UTF-8'; }
public function tabInfo() { $contents = ''; $publishingOn = config('coaster::admin.publishing') > 0; $canPublish = $publishingOn && Auth::action('pages.version-publish', ['page_id' => $this->id]) || !$publishingOn; // page parent (only updated for new pages) if (!$this->id) { $parentPages = [-1 => '-- None --', 0 => '-- Top Level Page --'] + static::get_page_list(['links' => false, 'exclude_home' => true, 'group_pages' => false]); if (!array_key_exists($this->parent, $parentPages)) { $this->parent = -1; } } else { $parentPages = null; } // beacons selection (only updated for existing pages) if ($this->id && Auth::action('themes.beacons-update')) { $beaconSelect = BlockBeacon::getDropdownOptions($this->id); $beaconSelect = empty($beaconSelect->options) ? null : $beaconSelect; } else { $beaconSelect = null; } // page name, url $pageLang = $this->id ? PageLang::where('page_id', '=', $this->id)->where('language_id', '=', Language::current())->first() : new PageLang(); $fullUrls = [-1 => '?', 0 => '/']; foreach (Path::all() as $pageId => $details) { $fullUrls[$pageId] = rtrim($details->fullUrl, '/') . '/'; } $urlPrefixes = $this->parentPathIds(); foreach ($urlPrefixes as $pageId => $urlPrefix) { if (!key_exists($pageId, $fullUrls)) { $fullUrls[$pageId] = '?'; } } $contents .= View::make('coaster::partials.tabs.page_info.page_info', ['page' => $this, 'page_lang' => $pageLang, 'parentPages' => $parentPages, 'beacon_select' => $beaconSelect, 'urlArray' => $fullUrls, 'urlPrefixes' => $urlPrefixes, 'publishing_on' => $publishingOn, 'can_publish' => $canPublish])->render(); // groups $groups = PageGroup::all(); if (!$groups->isEmpty() || config('coaster::site.groups') !== '') { $contents .= View::make('coaster::partials.tabs.page_info.groups', ['page' => $this, 'groups' => $groups])->render(); } //template if (empty($this->template)) { $this->template = config('coaster::admin.default_template'); $parentPage = static::find($this->parent); if ($parentPage && ($parentTemplate = Template::find($parentPage->template))) { $this->template = $parentTemplate->child_template; } } $templateData = Template::find($this->template); $templates = Theme::get_template_list($this->template); $templateSelectHidden = !empty($templateData) ? $templateData->hidden : false; // menu selection $menus = Menu::all(); if (!$menus->isEmpty() && Auth::action('menus')) { $in_menus = $this->id ? MenuItem::get_page_menus($this->id) : []; foreach ($menus as $k => $menu) { $menus[$k]->in_menu = in_array($menu->id, $in_menus); } } else { $menus = []; } $contents .= View::make('coaster::partials.tabs.page_info.display_info', ['page' => $this, 'template' => $this->template, 'templates' => $templates, 'templateSelectHidden' => $templateSelectHidden, 'menus' => $menus, 'can_publish' => $canPublish])->render(); // live options, sitemap $liveOptions = [0 => 'Not Live (Hidden)', 1 => 'Live (Ignores Dates)', 2 => 'Live Between Specific Dates/Times']; $sitemapOptions = [0 => 'Excluded From Sitemap', 1 => 'Included in Sitemap (If Page Live)']; $contents .= View::make('coaster::partials.tabs.page_info.live_options', ['page' => $this, 'liveOptions' => $liveOptions, 'sitemapOptions' => $sitemapOptions, 'disabled' => !$canPublish])->render(); return ['Page Info', $contents]; }