96 lines
2.7 KiB
PHP
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;
|
|
}
|
|
} |