public static function getSystemMenu() { $systemMenuItems = ['Open Frontend' => ['link' => URL::to('/') . '" target="_blank', 'icon' => 'fa fa-tv'], 'Help' => ['link' => config('coaster::admin.help_link') . '" target="_blank', 'icon' => 'fa fa-life-ring']]; if (Auth::admin()) { if (Language::count() > 1) { $page_lang = Language::find(Language::current()); $systemMenuItems['Language:' . $page_lang->language] = ['link' => route('coaster.admin.account.language'), 'icon' => 'fa fa-language']; } if (Auth::action('account')) { $systemMenuItems['My Account'] = ['link' => route('coaster.admin.account'), 'icon' => 'fa fa-lock']; } if (Auth::action('system')) { $systemMenuItems['System Settings'] = ['link' => route('coaster.admin.system'), 'icon' => 'fa fa-cog']; } $systemMenuItems['Logout'] = ['link' => route('coaster.admin.logout'), 'icon' => 'fa fa-sign-out']; } else { $systemMenuItems['Login'] = ['link' => route('coaster.admin.login'), 'icon' => 'fa fa-lock']; } $systemMenu = ''; foreach ($systemMenuItems as $systemMenuItem => $details) { $details = ['item' => $systemMenuItem] + $details; $systemMenu .= View::make('coaster::menus.system.item', $details)->render(); } return $systemMenu; }
public static function getBlockData($blockId, $versionId) { $getDataQuery = static::where('block_id', '=', $blockId)->where('language_id', '=', Language::current()); if (!empty($versionId)) { $getDataQuery = $getDataQuery->where('version', '<=', $versionId); } $blockData = $getDataQuery->orderBy('version', 'desc')->first(); return $blockData ? $blockData->content : null; }
public static function getBlockData($blockId, $versionId, $repeaterId, $repeaterRowId) { $repeaterRowKey = PageBlockRepeaterRows::getRowKey($repeaterId, $repeaterRowId); $getDataQuery = static::where('block_id', '=', $blockId)->where('row_key', '=', $repeaterRowKey)->where('language_id', '=', Language::current()); if (!empty($versionId)) { $getDataQuery = $getDataQuery->where('version', '<=', $versionId); } $blockData = $getDataQuery->orderBy('version', 'desc')->first(); return $blockData ? $blockData->content : null; }
/** * @param string|int $key * @param bool $force * @return static */ public static function preload($key, $force = false) { if (!static::_preloadIsset() || $force) { $languages = [Language::current()]; if (config('coaster::frontend.language_fallback') == 1 && !in_array(config('coaster::frontend.language'), $languages)) { $languages[] = config('coaster::frontend.language'); } foreach ($languages as $language) { $data = self::where('language_id', '=', $language)->get(); static::_preload($data); } } return static::traitPreload($key); }
public static function updateText($content, $blockId, $pageId, $languageId = null) { $languageId = $languageId ?: Language::current(); $searchData = static::where('block_id', '=', $blockId)->where('page_id', '=', $pageId)->where('language_id', '=', $languageId)->first() ?: new static(); if ($content) { $searchData->block_id = $blockId; $searchData->page_id = $pageId; $searchData->language_id = Language::current(); $searchData->search_text = $content; $searchData->save(); } elseif ($searchData->exists) { $searchData->delete(); } }
public function postLanguage() { $input = Request::get('language'); Language::set($input); return \redirect()->route('coaster.admin.account.language'); }
/** * @param array $categorisedBlocks * @param array $blockContents * @param int $pageId * @return array */ public static function getTabs($categorisedBlocks, $blockContents, $pageId = 0) { $tabHeaders = []; $tabContents = []; foreach ($categorisedBlocks as $categoryId => $categoryBlocks) { $category = BlockCategory::preload($categoryId); $tabIndex = $category->order; while (!empty($tabHeaders[$tabIndex])) { $tabIndex++; } $tabHeaders[$tabIndex] = $category->name; $tabContents[$tabIndex] = ''; foreach ($categoryBlocks as $blockId => $block) { /** @var Block $block */ $blockContent = isset($blockContents[$blockId][Language::current()]) ? $blockContents[$blockId][Language::current()]->content : ''; $tabContents[$tabIndex] .= $block->setPageId($pageId)->getTypeObject()->edit($blockContent); } } return [$tabHeaders, $tabContents]; }
public function postSort() { $pages = Request::input('list'); if (!empty($pages)) { $rootPages = Page::join('page_lang', 'page_lang.page_id', '=', 'pages.id')->where(function ($query) { $query->whereIn('page_lang.url', ['', '/']); })->where('page_lang.language_id', '=', Language::current())->where('link', '=', 0)->get(['pages.*'])->all(); $rootPageIds = array_map(function ($rootPage) { return $rootPage->id; }, $rootPages); $order = []; $changeUnderParentIds = []; foreach ($pages as $pageId => $parent) { $currentPage = Page::preload($pageId); if ($currentPage->exists) { $parent = empty($parent) || $parent == 'null' ? 0 : $parent; if ($currentPage->parent != $parent && $parent != 0 && (in_array($currentPage->id, $rootPageIds) || in_array($parent, $rootPageIds))) { return 0; // don't allow root/home page to be moved under other pages or other pages to be moved under it } // get the order value for current page $order[$parent] = isset($order[$parent]) ? $order[$parent] : 0; $order[$parent]++; if ($currentPage->parent != $parent || $currentPage->order != $order[$parent]) { if (Auth::action('pages.sort', ['page_id' => $parent]) && Auth::action('pages.sort', ['page_id' => $currentPage->parent])) { $parentPageName = $parent ? PageLang::preload($parent)->name : 'top level'; $pageName = PageLang::preload($pageId)->name; if ($parent != $currentPage->parent) { array_push($changeUnderParentIds, $parent, $currentPage->parent); AdminLog::new_log('Moved page \'' . $pageName . '\' under \'' . $parentPageName . '\' (Page ID ' . $currentPage->id . ')'); } if (!in_array($parent, $changeUnderParentIds)) { $changeUnderParentIds[] = $parent; AdminLog::new_log('Re-ordered pages in \'' . $parentPageName . '\' (Page ID ' . $currentPage->id . ')'); } $changeUnderParentIds = array_unique($changeUnderParentIds); $currentPage->parent = $parent; $currentPage->order = $order[$parent]; $currentPage->save(); } else { return 0; // error, can't move page to new location } } } else { return 0; // error, moved page no longer exists } } } return 1; }
public static function version_table($page_id) { $versionsQuery = static::with(['user', 'scheduled_versions'])->where('page_id', '=', $page_id)->orderBy('version_id', 'desc'); $versions = $versionsQuery->paginate(15); $pagination = PaginatorRender::admin($versions); $page_lang = PageLang::where('page_id', '=', $page_id)->where('language_id', '=', Language::current())->first(); $live_version = static::where('page_id', '=', $page_id)->where('version_id', '=', $page_lang ? $page_lang->live_version : 0)->first(); $live_version = $live_version ?: new static(); $can_publish = Auth::action('pages.version-publish', ['page_id' => $page_id]); return View::make('coaster::partials.tabs.versions.table', ['versions' => $versions, 'pagination' => $pagination, 'live_version' => $live_version, 'can_publish' => $can_publish])->render(); }
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(); } }
public function getIndex() { $database_structure = $this->_db_messages(); $search_data = PageSearchData::orderBy('updated_at', 'asc')->first(); if (!empty($search_data)) { $last_indexed_search = DateTimeHelper::display($search_data->updated_at); } else { $last_indexed_search = false; } $update = Auth::action('system.update'); if ($update) { $settings = Setting::where('hidden', '=', '0')->orWhere('editable', '=', 1)->get(); } else { $settings = Setting::where('hidden', '=', '0')->get(); } foreach ($settings as $k => $setting) { if (!$update) { $settings[$k]->editable = 0; } $note = ''; switch ($setting->name) { case 'frontend.language': $custom = new \stdClass(); $custom->selected = $setting->value; $custom->options = Language::selectArray(); break; case 'frontend.theme': $custom = new \stdClass(); $custom->selected = $setting->value; $custom->options = Theme::selectArray(); break; case 'admin.default_template': $custom = new \stdClass(); $custom->selected = $setting->value; $custom->options = Theme::get_template_list($setting->value); break; case 'frontend.language_fallback': case 'frontend.strong_tags': case 'admin.advanced_permissions': case 'admin.publishing': $custom = new \stdClass(); $custom->selected = $setting->value; $custom->options = [1 => 'On', 0 => 'Off']; break; case 'admin.title_block': $custom = new \stdClass(); $custom->selected = $setting->value; $custom->options = Block::nameToNameArray(); break; case 'site.pages': $total_pages = Page::get_total(); $note = 'set to 0 for no limit - currently ' . $total_pages . ' normal pages in use'; break; case 'site.groups': $total_pages = Page::get_total(true); $note = 'set to 0 for no limit on group pages - currently ' . $total_pages . ' pages in use'; break; case 'site.secure_folders': $note = 'list of comma separated folders, will copy files to secure folders and vice versa on update'; break; default: $custom = null; } if (empty($custom)) { $settings[$k]->value = $setting->value; } else { $settings[$k]->value = $custom; } $settings[$k]->note = !empty($note) ? $note : null; $settings[$k]->name = str_replace('.', $this->dot_replace, $setting->name); } $upgrade = new \stdClass(); $upgrade->from = config('coaster::site.version'); $upgrade->to = Setting::latestTag(); $upgrade->required = version_compare(config('coaster::site.version'), Setting::latestTag(), '<'); $this->layoutData['content'] = View::make('coaster::pages.system', array('database_structure' => $database_structure, 'last_indexed_search' => $last_indexed_search, 'site_details' => $settings, 'can_index_search' => Auth::action('system.search'), 'can_validate' => Auth::action('system.validate-db'), 'can_upgrade' => Auth::action('system.upgrade'), 'upgrade' => $upgrade)); }
/** * Saves page data * @param PageVersion $pageVersion * @param array $pagePost * @param array $pageLangPost * @param array $pageGroupsPost * @param array $pageInfoOther * @return bool */ public function savePostData($pageVersion, $pagePost, $pageLangPost, $pageGroupsPost, $pageInfoOther = []) { /* * Post data fixes */ foreach ($pagePost as $k => $pagePostField) { if (is_array($pagePostField) && array_key_exists('exists', $pagePostField)) { $pagePost[$k] = array_key_exists('select', $pagePostField) ? $pagePostField['select'] : 0; } } if (array_key_exists('live_start', $pagePost)) { $pagePost['live_start'] = DateTimeHelper::jQueryToMysql($pagePost['live_start']) ?: null; } if (array_key_exists('live_end', $pagePost)) { $pagePost['live_end'] = DateTimeHelper::jQueryToMysql($pagePost['live_end']) ?: null; } foreach ($pageInfoOther as $k => $pageInfoOtherField) { if (is_array($pageInfoOtherField) && array_key_exists('exists', $pageInfoOtherField) && array_key_exists('select', $pageInfoOtherField)) { $pageInfoOther[$k] = $pageInfoOtherField['select']; } } /* * Overwrite default/existing data with posted data */ $pageDefaults = array_merge(['template' => 0, 'parent' => 0, 'child_template' => 0, 'order' => 0, 'group_container' => 0, 'group_container_url_priority' => 0, 'canonical_parent' => 0, 'link' => 0, 'live' => 0, 'sitemap' => 1, 'live_start' => null, 'live_end' => null], $this->getAttributes()); foreach ($pageDefaults as $pageAttribute => $pageDefault) { $this->{$pageAttribute} = $pageDefault; switch ($pageAttribute) { case 'template': $pageVersion->{$pageAttribute} = $pagePost[$pageAttribute]; break; default: $this->{$pageAttribute} = array_key_exists($pageAttribute, $pagePost) ? $pagePost[$pageAttribute] : $this->{$pageAttribute}; } } if (!$this->pageCurrentLang) { $this->setRelation('pageCurrentLang', ($d = $this->pageDefaultLang) ? $d->replicate() : new PageLang()); unset($this->pageCurrentLang->language_id); } $pageLang = $this->pageLang(); $pageLangDefaults = array_merge(['language_id' => Language::current(), 'url' => '', 'name' => '', 'live_version' => 1], $pageLang->getAttributes()); foreach ($pageLangDefaults as $pageLangAttribute => $pageLangDefault) { $pageLang->{$pageLangAttribute} = array_key_exists($pageLangAttribute, $pageLangPost) ? $pageLangPost[$pageLangAttribute] : $pageLangDefault; } /* * Check page parent exists if set and page limit is not hit */ $parent = static::find($this->parent); if ($this->parent > 0 && !$parent) { return false; } if (!$this->id && !$this->link && static::at_limit($this->parent == -1)) { return false; } /* * Check page name/url set and does not conflict */ $pageLang->url = trim($pageLang->url); if (!$this->link) { $pageLang->url = strtolower(str_replace(['/', ' '], '-', $pageLang->url)); if (preg_match('#^[-]+$#', $pageLang->url)) { $pageLang->url = ''; } if ($pageLang->url == '' && !$this->parent) { $pageLang->url = '/'; } $siblings = []; foreach ($pageGroupsPost as $pageGroupId => $checkedVal) { $pageGroup = PageGroup::preload($pageGroupId); $siblings = array_merge($pageGroup->exists ? $pageGroup->itemPageIds() : [], $siblings); } if ($this->parent >= 0) { $siblings = array_merge(static::getChildPageIds($this->parent), $siblings); } $siblings = array_unique($siblings); } if (!$pageLang->name) { FormMessage::add('page_info_lang[name]', 'page name required'); } if (!$pageLang->url) { FormMessage::add('page_info_lang[url]', 'page url required'); } if (!empty($siblings)) { $same_level = PageLang::where('url', '=', $pageLang->url)->whereIn('page_id', $siblings); $same_level = $this->id ? $same_level->where('page_id', '!=', $this->id) : $same_level; if (!$same_level->get()->isEmpty()) { FormMessage::add('page_info_lang[url]', 'url in use by another page!'); $pageLang->url = ''; } } if (!$pageLang->name || !$pageLang->url) { return false; } /* * If adding a page as a group container, create container / check exists */ if ($this->group_container == -1) { $groupContainer = new PageGroup(); $groupContainer->name = $pageLang->name; $groupContainer->item_name = 'Page'; $groupContainer->default_template = 0; $groupContainer->save(); $this->group_container = $groupContainer->id; } elseif ($this->group_container) { $groupContainer = PageGroup::preload($this->group_container); if (!$groupContainer->exists || $pageDefaults['group_container'] != $this->group_container && !$groupContainer->canEditItems()) { $this->group_container = 0; } } /* * Check if page info can be updated (based on publishing auth action, or allowed if new page) */ $authPageIdCheck = $this->id ?: ($this->parent > 0 ? $this->parent : 0); $canPublish = config('coaster::admin.publishing') > 0 && Auth::action('pages.version-publish', ['page_id' => $authPageIdCheck]) || config('coaster::admin.publishing') == 0 && Auth::action('pages.edit', ['page_id' => $authPageIdCheck]); $canPublish = $canPublish || isset($groupContainer) && (config('coaster::admin.publishing') > 0 && $groupContainer->canPublishItems() || config('coaster::admin.publishing') == 0 && $groupContainer->canEditItems()); $willPublish = !$this->id || $canPublish; /* * Check and save page changes */ if ($willPublish) { // if new page set as last ordered page if ($this->parent >= 0 && !$this->id) { $lastSibling = static::where('parent', '=', $this->parent)->orderBy('order', 'desc')->first(); $this->order = $lastSibling ? $lastSibling->order + 1 : 1; } // if new page publish template $this->template = $this->id ? $this->template : $pageVersion->template; // if link remove live template $this->template = $this->link ? 0 : $this->template; // set page live between but no dates set set as hidden, or if can't publish set as hidden $this->live = $this->live == 2 && is_null($this->live_end) && is_null($this->live_start) ? 0 : $this->live; $this->live = $canPublish ? $this->live : 0; // save page data $this->save(); $pageLang->page_id = $this->id; $pageLang->save(); } $pageVersion->page_id = $this->id; $pageVersion->save(); /* * Update title block to the page name is new page */ if (!$this->id && ($titleBlock = Block::where('name', '=', config('coaster::admin.title_block'))->first())) { $titleBlock->setVersionId($pageVersion->version_id)->setPageId($this->id)->getTypeObject()->save($pageLang->name); PageSearchData::updateText(strip_tags($pageLang->name), 0, $this->id); } /* * Save Page Groups */ $currentGroupIds = $this->groupIds(); $newGroupIds = array_keys($pageGroupsPost); PageGroupPage::where('page_id', '=', $this->id)->whereIn('group_id', array_diff($currentGroupIds, $newGroupIds))->delete(); foreach (array_diff($newGroupIds, $currentGroupIds) as $addGroupId) { $this->groups()->attach($addGroupId); } /* * Save other page info */ if ($willPublish && Auth::action('menus')) { MenuItem::set_page_menus($this->id, array_key_exists('menus', $pageInfoOther) ? $pageInfoOther['menus'] : []); } if ($canPublish && array_key_exists('beacons', $pageInfoOther) && Auth::action('themes.beacons-update')) { BlockBeacon::updatePage($this->id, $pageInfoOther['beacons']); } return true; }
public function createPost($data) { $pageLang = PageLang::where('name', '=', $data->title->rendered)->first(); $uporc = 'updated'; if (empty($pageLang)) { $uporc = 'created'; $page = new Page(); $pageLang = new PageLang(); } else { $page = Page::find($pageLang->page_id); $comments = $this->getComments($data, $page); $latestVersion = PageVersion::latest_version($page->id, true); if (!empty($latestVersion)) { $latestVersion->publish(); } if (!empty($data->yoast)) { $this->getMetas($data->yoast, $data, $page->id); } $res = new \stdClass(); $res->message = 'Post ' . $uporc . ': ' . $pageLang->name; $res->oldLink = $data->link; $res->newLink = Path::getFullUrl($page->id); $res->categories = 'UPDATE RUN'; $res->tags = 'UPDATE RUN'; return $res; } $page->live = 2; $page->live_start = $this->carbonDate($data->date)->format("Y-m-d H:i:s"); $page->created_at = $this->carbonDate($data->date); $page->updated_at = $this->carbonDate($data->modified); $page->parent = $this->groupPage->id; $page->template = $this->group->default_template; $page->save(); $page->groups()->sync([$this->group->id]); $comments = $this->getComments($data, $page); $categories = $this->getCategory($data->_embedded->{"wp:term"}, $page->id); // Page Lang $pageLang->live_version = 0; $pageLang->page_id = $page->id; $pageLang->language_id = Language::current(); $pageLang->name = $data->title->rendered; $pageLang->url = str_slug($pageLang->name); $pageLang->save(); $tags = $this->syncTags($page, $data->_embedded->{"wp:term"}); $date_block = Block::where('name', '=', 'post_date')->first(); if (!empty($date_block)) { $date_block->setPageId($page->id)->getTypeObject()->save($this->carbonDate($data->date)->format("Y-m-d H:i:s")); } $title_block = Block::where('name', '=', config('coaster::admin.title_block'))->first(); if (!empty($title_block)) { $title_block->setPageId($page->id)->getTypeObject()->save($pageLang->name); } $content_block = Block::where('name', '=', 'content')->first(); if (!empty($content_block)) { $content_block->setPageId($page->id)->getTypeObject()->save($this->processContent($data->content->rendered)); } $leadText_block = Block::where('name', '=', 'lead_text')->first(); if (!empty($leadText_block)) { $leadText_block->setPageId($page->id)->getTypeObject()->save($data->excerpt->rendered); } $latestVersion = PageVersion::latest_version($page->id, true); if (!empty($latestVersion)) { $latestVersion->publish(); } if (!empty($data->yoast)) { $this->getMetas($data->yoast, $data, $page->id); } $res = new \stdClass(); $res->message = 'Post ' . $uporc . ': ' . $pageLang->name; $res->oldLink = $data->link; $res->newLink = Path::getFullUrl($page->id); $res->categories = $categories; $res->tags = $tags; return $res; }
/** * Load page block data for all live versions of a block across all pages * @param int $blockId * @param bool $reload * @return PageBlock[] */ public static function livePageBlocksForBlock($blockId, $reload = false) { if ($reload) { static::_preloadClear('liveBlocks'); } if (!static::_preloadIsset('liveBlocks', $blockId)) { $pageBlocks = Block::getDataForVersion(new static(), -1, ['block_id' => $blockId, 'language_id' => Language::current()]); static::_preload($pageBlocks, 'liveBlocks', [['block_id']], null, true); } return static::_preloadGet('liveBlocks', $blockId) ?: []; }
/** * @param string $blockName * @param array $options * @return mixed|string */ public function block($blockName, $options = []) { // force query available if block details changed in current request $block = Block::preloadClone($blockName, isset($options['force_query'])); $pageId = !empty($options['page_id']) ? Path::unParsePageId($options['page_id']) : $this->pageId(); $usingGlobalContent = false; $blockData = null; if (($customBlockData = $this->_getCustomBlockData($blockName)) !== null) { // load custom block data for (is also used for repeater content) $blockData = $customBlockData; } elseif ($block->exists) { // load block data $globalBlockData = PageBlockDefault::preload($block->id); $pageBlockData = PageBlock::preloadPageBlock($pageId, $block->id, $this->pageVersion($pageId)); // get languages $loadForLanguages = [Language::current()]; if (config('coaster::frontend.language_fallback') == 1 && !in_array(config('coaster::frontend.language'), $loadForLanguages)) { $loadForLanguages[] = config('coaster::frontend.language'); } // run through languages until block data found foreach ($loadForLanguages as $language) { if (!empty($pageBlockData[$language])) { // if custom page block for selected language exists $blockData = $pageBlockData[$language]->content; } elseif (!empty($globalBlockData[$language])) { // if default block for selected language exists $blockData = $globalBlockData[$language]->content; $usingGlobalContent = true; break; } } // return raw data if (isset($options['raw']) && $options['raw']) { return $blockData; } } else { return 'block not found'; } // set version that data has been grabbed for (0 = latest) if (empty($options['version'])) { $options['version'] = $usingGlobalContent ? 0 : $this->pageVersion($pageId); } // pass block details and data to display class return $block->setPageId($pageId)->setVersionId($options['version'])->getTypeObject()->display($blockData, $options); }