You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
seacms-app/SeacmsAppPlugin.php

139 lines
4.0 KiB

<?php
// SPDX-License-Identifier: EUPL-1.2
// Authors: see README.md
use SeaCMS\Api\LateApiAware;
use SeaCMS\Api\JsonResponse;
use SeaCMS\App\MdResponse;
/**
* A plugin for SeaCMS-app.
*/
class SeacmsAppPlugin extends AbstractPicoPlugin implements LateApiAware
{
/**
* Pico API version.
* @var int
*/
const API_VERSION = 3;
/**
* return api routes
* @return array
*/
public function registerApiRoutes():array
{
return [
];
}
/**
* 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',
'GET pages/(.*)/(.*)/md' => 'apiPageAsMd2Levels',
'GET pages/(.*)/(.*)/(.*)/md' => 'apiPageAsMd3Levels',
'GET pages/(.*)/(.*)/(.*)/(.*)/md' => 'apiPageAsMd4Levels',
];
}
/**
* method to create a page
* @return JsonResponse
*/
public function createPage(string $pageName): JsonResponse
{
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'],[
'Content-Disposition' => 'inline; filename="'.str_replace('/','-',$pageName).'.md"'
]);
} else {
return new JsonResponse(404,['code'=>404,'reason'=>"Page '$pageName' has not been found !"]);
}
}
/**
* method to see page as md
* @return JsonResponse
*/
public function apiPageAsMd2Levels(string $folder1,string $pageName): JsonResponse
{
return $this->apiPageAsMd("$folder1/$pageName");
}
/**
* method to see page as md
* @return JsonResponse
*/
public function apiPageAsMd3Levels(string $folder1,string $folder2,string $pageName): JsonResponse
{
return $this->apiPageAsMd("$folder1/$folder2/$pageName");
}
/**
* method to see page as md
* @return JsonResponse
*/
public function apiPageAsMd4Levels(string $folder1,string $folder2,string $folder3,string $pageName): JsonResponse
{
return $this->apiPageAsMd("$folder1/$folder2/$folder3/$pageName");
}
}