Files
template_base/OnePage/Pipeline/Display/AttachPagesToHomepage.php
T

96 lines
2.7 KiB
PHP

<?php
namespace Templates\Base\OnePage\Pipeline\Display;
use App\CMS\Contracts\Content\DisplayPipeline\Process;
use App\CMS\Contracts\Repositories\Content as IContent;
use App\CMS\Helpers\PageRenderer;
use App\CMS\Helpers\Template;
use App\Http\Controllers\Controller;
use App\Models\Content\Content;
use Templates\Base\OnePage\Handlers\OnePage;
class AttachPagesToHomepage implements Process
{
/**
* Name of settings key for list of pages used on homepage
*/
protected static $homepagePagesInitialized = false;
protected static $homepagePages = [];
/**
* Process and modify given page
*
* @param Content $content
*
* @return mixed|void
*/
function handle(Content & $content)
{
if (!$content->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;
}
}