diff --git a/Admin/Routes/Web/Api.php b/Admin/Routes/Web/Api.php index d672568..45a3e06 100644 --- a/Admin/Routes/Web/Api.php +++ b/Admin/Routes/Web/Api.php @@ -16,5 +16,32 @@ return [ 'state' => PermissionState::DOC, ], ], + [ + 'dest' => '\Modules\Editor\Controller\ApiController:apiEditorUpdate', + 'verb' => RouteVerb::SET, + 'permission' => [ + 'module' => ApiController::MODULE_NAME, + 'type' => PermissionType::MODIFY, + 'state' => PermissionState::DOC, + ], + ], + [ + 'dest' => '\Modules\Editor\Controller\ApiController:apiEditorGet', + 'verb' => RouteVerb::GET, + 'permission' => [ + 'module' => ApiController::MODULE_NAME, + 'type' => PermissionType::READ, + 'state' => PermissionState::DOC, + ], + ], + [ + 'dest' => '\Modules\Editor\Controller\ApiController:apiEditorDelete', + 'verb' => RouteVerb::DELETE, + 'permission' => [ + 'module' => ApiController::MODULE_NAME, + 'type' => PermissionType::DELETE, + 'state' => PermissionState::DOC, + ], + ], ], ]; diff --git a/Controller/ApiController.php b/Controller/ApiController.php index 40fd4ca..4520c63 100644 --- a/Controller/ApiController.php +++ b/Controller/ApiController.php @@ -34,6 +34,15 @@ use phpOMS\Utils\Parser\Markdown\Markdown; final class ApiController extends Controller { + /** + * Validate document create request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ private function validateEditorCreate(RequestAbstract $request) : array { $val = []; @@ -47,6 +56,8 @@ final class ApiController extends Controller } /** + * Api method to create document + * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response * @param mixed $data Generic data @@ -89,4 +100,83 @@ final class ApiController extends Controller return $doc; } + + /** + * Api method to create document + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiEditorUpdate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void + { + $old = clone EditorDocMapper::get((int) $request->getData('id')); + $new = $this->updateEditorFromRequest($request); + $this->updateModel($request, $old, $new, EditorDocMapper::class, 'doc'); + $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Document', 'Document successfully updated', $new); + } + + /** + * Method to update document from request. + * + * @param RequestAbstract $request Request + * + * @return EditorDoc + * + * @since 1.0.0 + */ + private function updateEditorFromRequest(RequestAbstract $request) : EditorDoc + { + $doc = EditorDocMapper::get((int) $request->getData('id')); + $doc->setTitle((string) ($request->getData('title') ?? $doc->getTitle())); + $doc->setPlain((string) ($request->getData('plain') ?? $doc->getPlain())); + $doc->setContent(Markdown::parse((string) ($request->getData('plain') ?? $doc->getPlain()))); + + return $doc; + } + + /** + * Api method to get a document + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiEditorGet(RequestAbstract $request, ResponseAbstract $response, $data = null) : void + { + $doc = EditorDocMapper::get((int) $request->getData('id')); + $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Document', 'Document successfully returned', $doc); + } + + /** + * Api method to delete document + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiEditorDelete(RequestAbstract $request, ResponseAbstract $response, $data = null) : void + { + $doc = EditorDocMapper::get((int) $request->getData('id')); + $this->deleteModel($request, $doc, EditorDocMapper::class, 'doc'); + $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Document', 'Document successfully deleted', $doc); + } }