public static function boot() { parent::boot(); static::deleted(function (MenuItem $menuItem) { $log = 'Menu Item \'' . Path::getFullName($menuItem->page_id) . '\' deleted from \'' . Menu::name($menuItem->menu_id) . '\''; $menuItem->addLogWithBackup($log, $menuItem); }); }
/** * @param array $menuName * @param array $options * @return string */ public static function menu($menuName, $options = []) { $menu = Menu::get_menu($menuName); if (!empty($menu)) { self::_setOptions($options); return self::_buildMenu($menu->items()->get(), 0, 1); } else { return ''; } }
public function postRename() { $itemId = substr(Request::input('id'), 5); $item = MenuItem::find($itemId); if (!empty($item)) { $item->custom_name = Request::input('custom_name'); $item->save(); $this->preload_menu_item_names(); // log action $item_name = $this->page_names[$item->page_id]; if ($item->custom_name) { AdminLog::new_log('Renamed menu item \'' . $item_name . '\' in \'' . Menu::name($item->menu_id) . '\' to ' . $item->custom_name); } else { AdminLog::new_log('Removed custom name for menu item \'' . $item_name . '\' in \'' . Menu::name($item->menu_id) . '\''); } return 1; } 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(); } }
/** * @param $menu_name * @param array $options * @return string */ public function menu($menu_name, $options = []) { if (!isset($this->loadMenus)) { $menus = Menu::all(); $this->loadMenus = []; foreach ($menus as $menu) { $this->loadMenus[$menu->name] = $menu; } } if (empty($this->loadMenus[$menu_name])) { $menuView = 'themes.' . $this->theme . '.menus.' . (!empty($options['view']) ? $options['view'] : 'default'); $subLevel = 1; while (View::exists($menuView . '.submenu_' . $subLevel)) { $subLevel++; } $subLevel--; $newMenu = new Menu(); $newMenu->label = ucwords(str_replace('_', ' ', $menu_name)); $newMenu->name = $menu_name; $newMenu->max_sublevel = $subLevel; $newMenu->save(); $this->loadMenus[$newMenu->name] = $newMenu; } return MenuBuilder::customMenu([], 0, 1, 0, $options); }
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]; }