feat(api pages/<name>/md): create
This commit is contained in:
parent
da1b58fb05
commit
eb364c285b
4
App.php
4
App.php
@ -10,6 +10,7 @@ namespace SeaCMS;
|
|||||||
use Exception;
|
use Exception;
|
||||||
use Pico;
|
use Pico;
|
||||||
use SeacmsAppPlugin;
|
use SeacmsAppPlugin;
|
||||||
|
use SeaCMS\Api\SpecialOutputException;
|
||||||
use Throwable;
|
use Throwable;
|
||||||
|
|
||||||
set_error_handler(function (
|
set_error_handler(function (
|
||||||
@ -94,12 +95,15 @@ class App
|
|||||||
$app = new App($contentFolderFromRoot);
|
$app = new App($contentFolderFromRoot);
|
||||||
$output = $app->runPico();
|
$output = $app->runPico();
|
||||||
self::appendErrorMessagesIfNeeded($output);
|
self::appendErrorMessagesIfNeeded($output);
|
||||||
|
} catch (SpecialOutputException $th) {
|
||||||
|
$output = $th->getJsonResponse()->send();
|
||||||
} catch (Throwable $th) {
|
} catch (Throwable $th) {
|
||||||
$output = <<<HTML
|
$output = <<<HTML
|
||||||
<div style="color:red;">
|
<div style="color:red;">
|
||||||
Exception : {$th->__toString()}
|
Exception : {$th->__toString()}
|
||||||
</div>
|
</div>
|
||||||
HTML;
|
HTML;
|
||||||
|
self::appendErrorMessagesIfNeeded($output);
|
||||||
} finally {
|
} finally {
|
||||||
echo $output;
|
echo $output;
|
||||||
}
|
}
|
||||||
|
@ -2,13 +2,14 @@
|
|||||||
// SPDX-License-Identifier: EUPL-1.2
|
// SPDX-License-Identifier: EUPL-1.2
|
||||||
// Authors: see README.md
|
// Authors: see README.md
|
||||||
|
|
||||||
use SeaCMS\Api\ApiAware;
|
use SeaCMS\Api\LateApiAware;
|
||||||
use SeaCMS\Api\JsonResponse;
|
use SeaCMS\Api\JsonResponse;
|
||||||
|
use SeaCMS\App\MdResponse;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A plugin for SeaCMS-app.
|
* A plugin for SeaCMS-app.
|
||||||
*/
|
*/
|
||||||
class SeacmsAppPlugin extends AbstractPicoPlugin implements ApiAware
|
class SeacmsAppPlugin extends AbstractPicoPlugin implements LateApiAware
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Pico API version.
|
* Pico API version.
|
||||||
@ -23,7 +24,20 @@ class SeacmsAppPlugin extends AbstractPicoPlugin implements ApiAware
|
|||||||
public function registerApiRoutes():array
|
public function registerApiRoutes():array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
'pages/(.*)/create' => 'createPage', // TODO only define for POST
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* return api routes
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function registerLateApiRoutes():array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'POST pages/(.*)/create' => 'createPage', // TODO only define for POST
|
||||||
|
'GET pages' => 'apiPagesBase',
|
||||||
|
'GET pages/(.*)' => 'apiPageBase',
|
||||||
|
'GET pages/(.*)/md' => 'apiPageAsMd'
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -36,4 +50,61 @@ class SeacmsAppPlugin extends AbstractPicoPlugin implements ApiAware
|
|||||||
return new JsonResponse(501,['code'=>501,'reason'=>"work in progress for '$pageName'"]);
|
return new JsonResponse(501,['code'=>501,'reason'=>"work in progress for '$pageName'"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to see base of pages api
|
||||||
|
* @return JsonResponse
|
||||||
|
*/
|
||||||
|
public function apiPagesBase(): JsonResponse
|
||||||
|
{
|
||||||
|
return new JsonResponse(200,[
|
||||||
|
'title' => 'Base api route to see pages',
|
||||||
|
'routes' => [
|
||||||
|
'Base for one page' => urldecode($this->getPico()->getPageUrl('index',[
|
||||||
|
'api' => 'pages/<NameOfPage>'
|
||||||
|
])),
|
||||||
|
'page as Markdown' => urldecode($this->getPico()->getPageUrl('index',[
|
||||||
|
'api' => 'pages/<NameOfPage>/md'
|
||||||
|
])),
|
||||||
|
'page as Markdown Extra' => urldecode($this->getPico()->getPageUrl('index',[
|
||||||
|
'api' => 'pages/<NameOfPage>/mdx'
|
||||||
|
]))
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to see base of page api
|
||||||
|
* @return JsonResponse
|
||||||
|
*/
|
||||||
|
public function apiPageBase(string $pageName): JsonResponse
|
||||||
|
{
|
||||||
|
return new JsonResponse(200,[
|
||||||
|
'title' => 'Base api route to see page',
|
||||||
|
'routes' => [
|
||||||
|
'page as Markdown' => $this->getPico()->getPageUrl('index',[
|
||||||
|
'api' => "pages/$pageName/md"
|
||||||
|
]),
|
||||||
|
'page as Markdown Extra' => $this->getPico()->getPageUrl('index',[
|
||||||
|
'api' => "pages/$pageName/mdx"
|
||||||
|
])
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method to see page as md
|
||||||
|
* @return JsonResponse
|
||||||
|
*/
|
||||||
|
public function apiPageAsMd(string $pageName): JsonResponse
|
||||||
|
{
|
||||||
|
$pages = $this->getPico()->getPages();
|
||||||
|
if (array_key_exists($pageName,$pages)){
|
||||||
|
|
||||||
|
return new MdResponse(200,$pages[$pageName]['raw_content']);
|
||||||
|
} else {
|
||||||
|
return new JsonResponse(404,['code'=>404,'reason'=>"Page '$pageName' has not been found !"]);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -32,7 +32,10 @@
|
|||||||
"picocms/pico-theme": "Default pico theme : revision ^3.0"
|
"picocms/pico-theme": "Default pico theme : revision ^3.0"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"classmap": ["App.php","SeacmsAppPlugin.php"]
|
"classmap": ["App.php","SeacmsAppPlugin.php"],
|
||||||
|
"psr-4": {
|
||||||
|
"SeaCMS\\App\\": "src"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"extra": {
|
"extra": {
|
||||||
"pico-plugin-dir": "vendor/picocms/plugins/",
|
"pico-plugin-dir": "vendor/picocms/plugins/",
|
||||||
|
4
composer.lock
generated
4
composer.lock
generated
@ -264,7 +264,7 @@
|
|||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://git.defis.info/SeaCMS/seacms-api",
|
"url": "https://git.defis.info/SeaCMS/seacms-api",
|
||||||
"reference": "c0695eca2f95357f1b77d022c56d9bf8e395ed62"
|
"reference": "49055e46711590f78a6d72ecb389d65d0a28e7a8"
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": "^8.0"
|
"php": "^8.0"
|
||||||
@ -302,7 +302,7 @@
|
|||||||
"issues": "https://git.defis.info/SeaCMS/seacms-api/issues",
|
"issues": "https://git.defis.info/SeaCMS/seacms-api/issues",
|
||||||
"source": "https://git.defis.info/SeaCMS/seacms-api"
|
"source": "https://git.defis.info/SeaCMS/seacms-api"
|
||||||
},
|
},
|
||||||
"time": "2023-02-28T00:58:35+00:00"
|
"time": "2023-03-02T15:44:25+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "seacms/seacms-auth",
|
"name": "seacms/seacms-auth",
|
||||||
|
63
src/MdResponse.php
Normal file
63
src/MdResponse.php
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
<?php
|
||||||
|
// SPDX-License-Identifier: EUPL-1.2
|
||||||
|
// Authors: see README.md
|
||||||
|
|
||||||
|
namespace SeaCMS\App;
|
||||||
|
|
||||||
|
use SeaCMS\Api\JsonResponse;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Response for http response
|
||||||
|
*/
|
||||||
|
class MdResponse extends JsonResponse
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* content as string
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $stringContent;
|
||||||
|
|
||||||
|
public function __construct(int $code, string $content, array $headers = [],?Cookies $cookies = null){
|
||||||
|
parent::__construct($code,[],[],$cookies);
|
||||||
|
$this->stringContent = $content;
|
||||||
|
$this->headers = array_merge([
|
||||||
|
'Content-Type' => 'text/markdown',
|
||||||
|
'Access-Control-Allow-Origin' => '*',
|
||||||
|
'Access-Control-Allow-Credentials' => 'true',
|
||||||
|
'Access-Control-Allow-Headers' => 'X-Requested-With, Location, Slug, Accept, Content-Type',
|
||||||
|
'Access-Control-Expose-Headers' => 'Location, Slug, Accept, Content-Type',
|
||||||
|
'Access-Control-Allow-Methods' => 'POST, GET, OPTIONS, DELETE, PUT, PATCH',
|
||||||
|
'Access-Control-Max-Age' => '86400'
|
||||||
|
], $headers);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === Getters === */
|
||||||
|
/**
|
||||||
|
* return stringContent
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getStringContent(): string
|
||||||
|
{
|
||||||
|
return $this->stringContent;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* return content as String
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
protected function returnContent(): string
|
||||||
|
{
|
||||||
|
return $this->getStringContent();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* export class as array
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function jsonSerialize(): mixed
|
||||||
|
{
|
||||||
|
return array_merge(parent::jsonSerialize(),[
|
||||||
|
'stringContent' => $this->getStringContent()
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user