You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
175 lines
6.3 KiB
PHP
175 lines
6.3 KiB
PHP
<?php
|
|
|
|
namespace brain\api\v1;
|
|
|
|
use brain\data\Book;
|
|
use brain\data\Settings;
|
|
use brain\data\Session;
|
|
use brain\utility\StringTools;
|
|
use function _\filter;
|
|
|
|
class PagesAPI
|
|
{
|
|
public function __construct()
|
|
{
|
|
}
|
|
public static function getPageContent($request, $args)
|
|
{
|
|
$task = $args['fourth'];
|
|
$pages = (new Book('../content/pages'))->getContents();
|
|
$content = [];
|
|
foreach ($pages as $page) {
|
|
$entry = [
|
|
'id' => $page['id'],
|
|
'uuid' => $page['uuid'],
|
|
'title' => $page['title'],
|
|
'feature' => $page['feature'],
|
|
'path' => $page['path'],
|
|
'layout' => $page['layout'],
|
|
'tags' => $page['tags'],
|
|
'author' => $page['author'],
|
|
'created' => $page['created'],
|
|
'updated' => $page['updated'],
|
|
'deleted' => $page['deleted'],
|
|
'menu' => $page['menu'],
|
|
'featured' => $page['featured'],
|
|
'published' => $page['published'],
|
|
'slug' => $page['slug'],
|
|
'content' => StringTools::sanitizeContent($page['content']),
|
|
];
|
|
|
|
array_push($content, $entry);
|
|
}
|
|
switch ($task) {
|
|
case 'published':
|
|
$published = filter($content, function ($item) {
|
|
return $item['published'] == true && $item['deleted'] == false;
|
|
});
|
|
|
|
$result = ['pages' => $published, 'totalItems' => count($published)];
|
|
break;
|
|
case 'featured':
|
|
$featured = filter($content, function ($item) {
|
|
return $item['featured'] == true && $item['deleted'] == false;
|
|
});
|
|
|
|
$result = [
|
|
'pages' => $featured,
|
|
'totalItems' => count($featured),
|
|
];
|
|
break;
|
|
case 'menu':
|
|
$menu = filter($content, function ($item) {
|
|
return $item['menu'] == true && $item['deleted'] == false;
|
|
});
|
|
|
|
$result = ['pages' => $menu, 'totalItems' => count($menu)];
|
|
break;
|
|
case 'single':
|
|
$uuid = $args['fifth'];
|
|
$page = (new Book('../content/pages'))->findPageById($uuid);
|
|
|
|
$entry = [
|
|
'id' => $page['id'],
|
|
'uuid' => $page['uuid'],
|
|
'title' => $page['title'],
|
|
'feature' => $page['feature'],
|
|
'path' => $page['path'],
|
|
'layout' => $page['layout'],
|
|
'tags' => $page['tags'],
|
|
'author' => $page['author'],
|
|
'created' => $page['created'],
|
|
'updated' => $page['updated'],
|
|
'deleted' => $page['deleted'],
|
|
'menu' => $page['menu'],
|
|
'featured' => $page['featured'],
|
|
'published' => $page['published'],
|
|
'slug' => $page['slug'],
|
|
'content' => StringTools::sanitizeContent($page['content']),
|
|
];
|
|
$result = $entry;
|
|
break;
|
|
case 'tags':
|
|
$result = Settings::getTags();
|
|
break;
|
|
default:
|
|
$result = [
|
|
'message' => "Hm, no task. That's unfortunate",
|
|
'type' => 'TASK_NONE',
|
|
];
|
|
break;
|
|
}
|
|
return $result;
|
|
}
|
|
public static function handlePageTask($request, $args)
|
|
{
|
|
$task = $args['fourth'];
|
|
switch ($task) {
|
|
case 'delete':
|
|
case 'create':
|
|
case 'write':
|
|
$body = $request->getParsedBody();
|
|
$passed = true;
|
|
if (!isset($body['form_token'])) {
|
|
$result = [
|
|
'message' => 'No form token. Not good, sport.',
|
|
'type' => 'TASK_FORM_AUTH',
|
|
];
|
|
} else {
|
|
if ($body['form_token'] == Session::get('form_token')) {
|
|
//TODO: Verify form fields
|
|
$keys = [
|
|
'id',
|
|
'uuid',
|
|
'layout',
|
|
'current_title',
|
|
'content',
|
|
'title',
|
|
'created',
|
|
'slug',
|
|
'tags',
|
|
'menu',
|
|
'featured',
|
|
'published',
|
|
'form_token',
|
|
'feature_image',
|
|
];
|
|
|
|
foreach ($body as $key => $item) {
|
|
if (!in_array($key, $keys)) {
|
|
//found unnecessary key, so reject submission
|
|
$passed = false;
|
|
}
|
|
}
|
|
if ($passed) {
|
|
$result = (new Book())->editPage($task, $request);
|
|
} else {
|
|
$result = [
|
|
'message' => 'Unneccessary key found. Post not authorized, slick.',
|
|
'type' => 'TASK_FORM_AUTH',
|
|
];
|
|
}
|
|
} else {
|
|
$result = [
|
|
'message' => 'Form token, auth failed. Uh oh.',
|
|
'type' => 'TASK_FORM_AUTH',
|
|
];
|
|
}
|
|
}
|
|
|
|
break;
|
|
case 'add-entry-image':
|
|
$result = ImagesAPI::uploadImage($request);
|
|
break;
|
|
default:
|
|
$result = [
|
|
'message' => "Hm, no task. That's unfortunate",
|
|
'type' => 'TASK_NONE',
|
|
];
|
|
break;
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
}
|