Files
core/app/Http/Controllers/Visitor/ContentPage.php
T

72 lines
1.6 KiB
PHP

<?php
namespace App\Http\Controllers\Visitor;
use App\CMS\Contracts\Repositories\Content;
use App\Http\Controllers\Controller;
use App\Models\Content\Content as ContentModel;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Cache;
class ContentPage extends Controller
{
/**
* @var Content
*/
protected $content;
/**
* @param Content $content
*/
function __construct(Content $content)
{
$this->content = $content;
}
/**
* Load page by URL
*
* This method also caches content
*
* @param $url
*
* @return mixed
*/
public function getPage($url)
{
$contentRepository = $this->content;
$page = Cache::remember('content-' . $url, setting('contentCacheLifetime', 5), function () use ($contentRepository, $url) {
return $contentRepository->getByURL($url);
});
// no page available
if (!$page) {
abort(404);
}
return $this->renderPage($page);
}
/**
* Method used for rendering page for visitor
*
* @param ContentModel $page
*
* @return mixed
* @throws \Exception
*/
protected function renderPage(ContentModel $page)
{
// test if loaded page is visible or not
if ($page->isProtected() && !Auth::user()) {
abort(404);
}
$displayPipeline = app('displayPipeline');
$page = $displayPipeline->run($page);
return Controller::visitorsView($page->template, ['page' => $page]);
}
}