ro
cb99c44a33
html page rendering works, so the next step was to get dynamic page rendering up and running, meaning instead of pages being exported to html, they are instead rendered on the fly when the corresponding URL is hit. the StartController that handles page routing needs to be organized a bit better as there is some confusion between index and regular page files so it's clear where requests are going and what is the expected response
164 lines
5.1 KiB
PHP
164 lines
5.1 KiB
PHP
<?php
|
|
|
|
namespace App\Repositories;
|
|
|
|
use App\Interfaces\PageRepositoryInterface;
|
|
use App\Services\SettingsService;
|
|
use App\Services\ContentService;
|
|
use App\Services\PaginateService;
|
|
use App\Services\DocService;
|
|
use App\Services\SortingService;
|
|
use App\Services\RenderService;
|
|
use Carbon\Carbon;
|
|
|
|
class PageRepository implements PageRepositoryInterface
|
|
{
|
|
protected $content;
|
|
protected $setttings;
|
|
protected $paginate;
|
|
protected $pages;
|
|
protected $docs;
|
|
protected $sort;
|
|
protected $render;
|
|
|
|
public function __construct(
|
|
ContentService $contentService,
|
|
SettingsService $settingsService,
|
|
PaginateService $paginateService,
|
|
DocService $docService,
|
|
SortingService $sortingService,
|
|
RenderService $renderService
|
|
) {
|
|
$this->content = $contentService;
|
|
$this->settings = $settingsService;
|
|
$this->paginate = $paginateService;
|
|
$this->docs = $docService;
|
|
$this->sort = $sortingService;
|
|
$this->render = $renderService;
|
|
$this->pages = $this->content->loadAllPages();
|
|
}
|
|
|
|
public function getAll()
|
|
{
|
|
return $this->pages;
|
|
}
|
|
|
|
public function getById($uuid)
|
|
{
|
|
$page = $this->pages->where('uuid', $uuid)->first();
|
|
//quick check to see if layout is set
|
|
$page['layout'] == '' ? $page['layout'] = 'page' : $page['layout'] = $page['layout'];
|
|
return $page;
|
|
}
|
|
|
|
public function getBySlug($slug)
|
|
{
|
|
$page = $this->pages->where('slug', $slug)->first();
|
|
//quick check to see if layout is set
|
|
$page['layout'] == '' ? $page['layout'] = 'page' : $page['layout'] = $page['layout'];
|
|
return $page;
|
|
}
|
|
|
|
public function delete($uuid)
|
|
{
|
|
}
|
|
|
|
public function create($page)
|
|
{
|
|
return $this->editPage($page, null, 'create');
|
|
}
|
|
|
|
public function update($page)
|
|
{
|
|
return $this->editPage($page, $this->pages->where('uuid', $page->uuid)->first(), 'update');
|
|
}
|
|
|
|
public function getGroup($num, $limit, $sort = "all")
|
|
{
|
|
return $this->paginate->getPage($num, $limit, $sort);
|
|
}
|
|
|
|
private function editPage($body, $page, $task)
|
|
{
|
|
$path;
|
|
$file;
|
|
$writePath;
|
|
$message;
|
|
$deleted;
|
|
if ($task != 'create') {
|
|
$path = date('Y', date($page['rawCreated'])) .
|
|
'/' .
|
|
date('m', date($page['rawCreated']));
|
|
} else {
|
|
$path = date('Y') . '/' . date('m');
|
|
}
|
|
|
|
if ($task == 'delete') {
|
|
$deleted = 'true';
|
|
$body->menu = 'false';
|
|
$body->published = 'false';
|
|
$body->featured = 'false';
|
|
} else {
|
|
$deleted = isset($page['deleted']) ? $page['deleted'] : 'false';
|
|
}
|
|
|
|
$created = $task != 'create' ? new Carbon($page['rawCreated']) : Carbon::now();
|
|
$updated = Carbon::now();
|
|
|
|
// grab current index from settings and update
|
|
$id = $task != 'create' ? $body->id : $this->settings->getSettings()['library_stats']['current_index'];
|
|
$uuid = $task != 'create' ? $body->uuid : createUUID();
|
|
//set variables post body for saving
|
|
$body->id = $id;
|
|
$body->uuid = $uuid;
|
|
$body->path = $path;
|
|
$body->author = session('member')['handle'];
|
|
$body->created = $created->format("Y-m-d\TH:i:sP");
|
|
$body->updated = $updated->format("Y-m-d\TH:i:sP");
|
|
$body->deleted = $deleted;
|
|
//set path to save file
|
|
if ($body->layout == 'index') {
|
|
$writePath = '../content/pages/start/index.md';
|
|
} else {
|
|
$writePath = '../content/pages/' . $path . '/' . $body->slug . '.md';
|
|
}
|
|
//write file to path
|
|
$saved = $this->docs::writePages($task, $path, $writePath, $this->docs::objectToMD($body));
|
|
//handle post save result
|
|
if ($saved) {
|
|
if (
|
|
$this->settings->getGlobal()['renderOnSave'] == 'true' &&
|
|
$this->settings->getGlobal()['dynamicRender'] == 'false'
|
|
) {
|
|
$this->render->tags();
|
|
$this->render->archive();
|
|
$this->render->pages();
|
|
$message = 'Filed edited and rendered. NOICE.';
|
|
} else {
|
|
$message = 'File edited. Nice work';
|
|
}
|
|
|
|
//upadte settings if needed
|
|
$body->path = $path;
|
|
$this->settings->updateMenu($body);
|
|
$this->settings->updateTags($this->sort->tags());
|
|
// if new page added, update current index in Settings file
|
|
if ($task == 'create') {
|
|
$this->settings->updatePageIndex();
|
|
}
|
|
|
|
return [
|
|
'message' => $message,
|
|
'type' => $task == 'update' ? 'postUpdated' : 'postAdded',
|
|
'id' => $uuid,
|
|
];
|
|
} else {
|
|
return $response = [
|
|
'message' => "Uh oh. File save problem. Don't panic",
|
|
'type' => 'postError',
|
|
'id' => $uuid,
|
|
];
|
|
}
|
|
}
|
|
}
|