forked from projects/fipamo
ro
d8ed8b62c0
page tasks have been changed to accept JSON data for the sake of consistency across the API. The only API method that will accept form data is file uploads. Also restored the post, put and delete pattern for better organization and clarity describing what each page method is for
176 lines
5.7 KiB
PHP
176 lines
5.7 KiB
PHP
<?php
|
|
|
|
namespace App\Repositories;
|
|
|
|
use App\Interfaces\PageRepositoryInterface;
|
|
//Asset Services
|
|
use App\Services\Assets\DocService;
|
|
use App\Services\Assets\RenderService;
|
|
//Data Services
|
|
use App\Services\Data\SettingsService;
|
|
use App\Services\Data\ContentService;
|
|
use App\Services\Data\PaginateService;
|
|
use App\Services\Data\SortingService;
|
|
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($page)
|
|
{
|
|
return $this->editPage($page, $this->pages->where('uuid', $page->uuid)->first(), 'delete');
|
|
}
|
|
|
|
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';
|
|
//set body object with prexisting data
|
|
$body->id = $page['id'];
|
|
$body->layout = $page['layout'];
|
|
$body->slug = $page['slug'];
|
|
$body->title = $page['title'];
|
|
$body->imageList = $page['feature'];
|
|
$body->fileList = $page['files'];
|
|
$body->tags = $page['tags'];
|
|
$body->content = $page['content'];
|
|
} 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,
|
|
];
|
|
}
|
|
}
|
|
}
|