forked from projects/fipamo
ro
c85e145774
the theme controller was grabbing the index by its page name, which was bad because that might change. that was replaced with a getById function since the index id will always be 0 since it's the first page. this is a seperate function from getByUuid which is a unique indentifier for each page which was being used interchangably before the fix. all of those references have been cleaned up to reference which type of id is needed there was also a bug that happened on rendering when there were special characters in the title. this was solved by saving the title as a urlencoded string and then just decodded when it was needed for display on the front end
98 lines
3 KiB
PHP
98 lines
3 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Interfaces\PageRepositoryInterface;
|
|
use App\Services\Assets\AssetService;
|
|
use App\Interfaces\MemberRepositoryInterface;
|
|
use App\Services\Data\SortingService;
|
|
use App\Services\Data\ThemeService;
|
|
|
|
class ThemeController extends Controller
|
|
{
|
|
protected PageRepositoryInterface $pages;
|
|
protected MemberRepositoryInterface $member;
|
|
protected AssetService $assets;
|
|
protected SortingService $sort;
|
|
protected ThemeService $themes;
|
|
|
|
public function __construct(
|
|
PageRepositoryInterface $pageRepository,
|
|
MemberRepositoryInterface $memberRepo,
|
|
AssetService $assetService,
|
|
SortingService $sortService,
|
|
ThemeService $themeService,
|
|
) {
|
|
$this->pages = $pageRepository;
|
|
$this->member = $memberRepo;
|
|
$this->assets = $assetService;
|
|
$this->sort = $sortService;
|
|
$this->themes = $themeService;
|
|
}
|
|
|
|
public function start()
|
|
{
|
|
if ($this->member::status()) {
|
|
return view('theme.start', [
|
|
"status" => $this->member::status(),
|
|
"title" => "Fipamo Theme Kit",
|
|
"pages" => $this->themes->getCustomViews('page')
|
|
]);
|
|
} else {
|
|
return redirect('dashboard');
|
|
}
|
|
}
|
|
|
|
public function getView($view = 'index', $id = null)
|
|
{
|
|
//move assets to theme testing dir
|
|
$this->assets->moveToTheme();
|
|
$currentTheme = $this->assets->getCurrentTheme();
|
|
$template;
|
|
$pageData = [];
|
|
switch ($view) {
|
|
case "index":
|
|
case "page":
|
|
$page;
|
|
if ($view == 'index') {
|
|
$template = $currentTheme . '.index';
|
|
$page = $this->pages->getById(0);
|
|
} else {
|
|
$template = $currentTheme . '.page';
|
|
//if coming from theme page, grabs id of latest page
|
|
if ($id == null) {
|
|
$uuid = $this->getPageUUID();
|
|
}
|
|
$page = $this->pages->getByUuid($uuid);
|
|
}
|
|
$pageData = $this->sort->page($page);
|
|
break;
|
|
case "tags":
|
|
$template = $currentTheme . '.tags';
|
|
$pageData = $this->sort->tags();
|
|
break;
|
|
case "archives":
|
|
case "archive":
|
|
$template = $currentTheme . '.archive';
|
|
$pageData = $this->sort->archive();
|
|
break;
|
|
default:
|
|
$template = $currentTheme . '.index';
|
|
$page = $this->pages->getBySlug('first');
|
|
$pageData = $this->sort->page($page);
|
|
}
|
|
if ($this->member::status()) {
|
|
return view($template, $pageData);
|
|
} else {
|
|
return redirect('dashboard/start');
|
|
}
|
|
}
|
|
|
|
private function getPageUUID()
|
|
{
|
|
$book = $this->pages->getAll();
|
|
$page = $book->where('layout', 'page')->first();
|
|
return $page['uuid'];
|
|
}
|
|
}
|