From 78962fd3042dc4873f6d2fceed03382548aa81c7 Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Sat, 26 Mar 2022 15:01:45 +0100 Subject: [PATCH] undo serialize deprecation and switch to installExternal api calls --- Admin/Installer.php | 49 +++++++++--- Controller/ApiController.php | 144 +++++++++++++++++++++++++++++++++++ Models/EditorDoc.php | 3 +- Models/EditorDocHistory.php | 3 +- Models/EditorDocType.php | 3 +- Models/EditorDocTypeL11n.php | 3 +- 6 files changed, 187 insertions(+), 18 deletions(-) diff --git a/Admin/Installer.php b/Admin/Installer.php index cd2cebe..59e9361 100755 --- a/Admin/Installer.php +++ b/Admin/Installer.php @@ -21,9 +21,12 @@ use Modules\Editor\Models\EditorDocTypeMapper; use phpOMS\Application\ApplicationAbstract; use phpOMS\Config\SettingsInterface; use phpOMS\DataStorage\Database\DatabasePool; +use phpOMS\Message\Http\HttpRequest; +use phpOMS\Message\Http\HttpResponse; use phpOMS\Module\InstallerAbstract; use phpOMS\Module\ModuleInfo; use phpOMS\System\File\PathException; +use phpOMS\Uri\HttpUri; /** * Installer class. @@ -52,7 +55,7 @@ final class Installer extends InstallerAbstract $types = include __DIR__ . '/Install/Types/types.php'; foreach ($types as $type) { - self::createType($app->dbPool, $type); + self::createType($app, $type); } } @@ -97,10 +100,22 @@ final class Installer extends InstallerAbstract 'type' => [], ]; + $apiApp = new class() extends ApplicationAbstract + { + protected string $appName = 'Api'; + }; + + $apiApp->dbPool = $app->dbPool; + $apiApp->orgId = $app->orgId; + $apiApp->accountManager = $app->accountManager; + $apiApp->appSettings = $app->appSettings; + $apiApp->moduleManager = $app->moduleManager; + $apiApp->eventManager = $app->eventManager; + foreach ($editorData as $editor) { switch ($editor['type']) { case 'type': - $result['type'][] = self::createType($app->dbPool, $editor); + $result['type'][] = self::createType($apiApp, $editor); break; default: } @@ -112,25 +127,39 @@ final class Installer extends InstallerAbstract /** * Create type. * - * @param DatabasePool $dbPool Database instance + * @param ApplicationAbstract $app Application * @param array $data Type info * * @return EditorDocType * * @since 1.0.0 */ - private static function createType(DatabasePool $dbPool, array $data) : EditorDocType + private static function createType(ApplicationAbstract $app, array $data) : EditorDocType { - $type = new EditorDocType(); - $type->name = $data['name'] ?? ''; + /** @var \Modules\Editor\Controller\ApiController $module */ + $module = $app->moduleManager->get('Editor'); - $id = EditorDocTypeMapper::create()->execute($type); + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('name', $data['name'] ?? ''); + + $module->apiEditorDocTypeCreate($request, $response); + + $type = $response->get('')['response']; + $id = $type->getId(); foreach ($data['l11n'] as $l11n) { - $l11n = new EditorDocTypeL11n($l11n['title'], $l11n['lang']); - $l11n->type = $id; + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); - EditorDocTypeL11nMapper::create()->execute($l11n); + $request->header->account = 1; + $request->setData('title', $l11n['title'] ?? ''); + $request->setData('lang', $l11n['lang'] ?? null); + $request->setData('type', $id); + + $module->apiEditorDocTypeL11nCreate($request, $response); } return $type; diff --git a/Controller/ApiController.php b/Controller/ApiController.php index 3f2794f..b57a0aa 100755 --- a/Controller/ApiController.php +++ b/Controller/ApiController.php @@ -20,6 +20,10 @@ use Modules\Editor\Models\EditorDoc; use Modules\Editor\Models\EditorDocHistory; use Modules\Editor\Models\EditorDocHistoryMapper; use Modules\Editor\Models\EditorDocMapper; +use Modules\Editor\Models\EditorDocType; +use Modules\Editor\Models\EditorDocTypeL11n; +use Modules\Editor\Models\EditorDocTypeL11nMapper; +use Modules\Editor\Models\EditorDocTypeMapper; use Modules\Media\Models\CollectionMapper; use Modules\Media\Models\MediaMapper; use Modules\Media\Models\NullMedia; @@ -45,6 +49,145 @@ 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 validateEditorDocTypeCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['name'] = empty($request->getData('name'))) + ) { + return $val; + } + + return []; + } + + /** + * 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 apiEditorDocTypeCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void + { + if (!empty($val = $this->validateEditorDocTypeCreate($request))) { + $response->set('editor_doc_type_create', new FormValidation($val)); + $response->header->status = RequestStatusCode::R_400; + + return; + } + + $type = $this->createDocTypeFromRequest($request); + $this->createModel($request->header->account, $type, EditorDocTypeMapper::class, 'doc_type', $request->getOrigin()); + + $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Document', 'Document type successfully created', $type); + } + + /** + * Method to create task from request. + * + * @param RequestAbstract $request Request + * + * @return EditorDoc + * + * @since 1.0.0 + */ + private function createDocTypeFromRequest(RequestAbstract $request) : EditorDocType + { + $type = new EditorDocType(); + $type->name = $request->getData('name'); + + if (!empty($request->getData('title'))) { + $type->setL11n($request->getData('title'), $request->getData('lang') ?? $request->getLanguage()); + } + + return $type; + } + + /** + * Validate l11n create request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateEditorDocTypeL11nCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['title'] = empty($request->getData('title'))) + || ($val['type'] = empty($request->getData('type'))) + ) { + return $val; + } + + return []; + } + + /** + * Api method to create tag localization + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiEditorDocTypeL11nCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void + { + if (!empty($val = $this->validateEditorDocTypeL11nCreate($request))) { + $response->set('editor_doc_type_l11n_create', new FormValidation($val)); + $response->header->status = RequestStatusCode::R_400; + + return; + } + + $l11nEditorDocType = $this->createEditorDocTypeL11nFromRequest($request); + $this->createModel($request->header->account, $l11nEditorDocType, EditorDocTypeL11nMapper::class, 'editor_doc_type_l11n', $request->getOrigin()); + + $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Localization', 'Category localization successfully created', $l11nEditorDocType); + } + + /** + * Method to create tag localization from request. + * + * @param RequestAbstract $request Request + * + * @return EditorDocTypeL11n + * + * @since 1.0.0 + */ + private function createEditorDocTypeL11nFromRequest(RequestAbstract $request) : EditorDocTypeL11n + { + $l11nEditorDocType = new EditorDocTypeL11n(); + $l11nEditorDocType->type = (int) ($request->getData('type') ?? 0); + $l11nEditorDocType->setLanguage((string) ( + $request->getData('language') ?? $request->getLanguage() + )); + $l11nEditorDocType->title = (string) ($request->getData('title') ?? ''); + + return $l11nEditorDocType; + } + /** * Validate document create request * @@ -127,6 +270,7 @@ final class ApiController extends Controller EditorDocMapper::writer()->createRelationTable('media', [$media->getId()], $doc->getId()); $ref = new Reference(); + $ref->name = $media->name; $ref->source = new NullMedia($media->getId()); $ref->createdBy = new NullAccount($request->header->account); $ref->setVirtualPath($accountPath = '/Accounts/' . $account->getId() . ' ' . $account->login . '/Editor/' . $doc->createdAt->format('Y') . '/' . $doc->createdAt->format('m') . '/' . $doc->getId()); diff --git a/Models/EditorDoc.php b/Models/EditorDoc.php index dab6417..65e7d3b 100755 --- a/Models/EditorDoc.php +++ b/Models/EditorDoc.php @@ -18,7 +18,6 @@ use Modules\Admin\Models\Account; use Modules\Admin\Models\NullAccount; use Modules\Media\Models\Media; use Modules\Tag\Models\Tag; -use phpOMS\Contract\ArrayableInterface; /** * News article class. @@ -28,7 +27,7 @@ use phpOMS\Contract\ArrayableInterface; * @link https://karaka.app * @since 1.0.0 */ -class EditorDoc implements \JsonSerializable, ArrayableInterface +class EditorDoc implements \JsonSerializable { /** * Article ID. diff --git a/Models/EditorDocHistory.php b/Models/EditorDocHistory.php index a8bd9da..4d7341a 100644 --- a/Models/EditorDocHistory.php +++ b/Models/EditorDocHistory.php @@ -18,7 +18,6 @@ use Modules\Admin\Models\Account; use Modules\Admin\Models\NullAccount; use Modules\Media\Models\Media; use Modules\Tag\Models\Tag; -use phpOMS\Contract\ArrayableInterface; /** * News article class. @@ -28,7 +27,7 @@ use phpOMS\Contract\ArrayableInterface; * @link https://karaka.app * @since 1.0.0 */ -class EditorDocHistory implements \JsonSerializable, ArrayableInterface +class EditorDocHistory implements \JsonSerializable { /** * Article ID. diff --git a/Models/EditorDocType.php b/Models/EditorDocType.php index ba4723f..275835b 100644 --- a/Models/EditorDocType.php +++ b/Models/EditorDocType.php @@ -14,7 +14,6 @@ declare(strict_types=1); namespace Modules\Editor\Models; -use phpOMS\Contract\ArrayableInterface; use phpOMS\Localization\ISO639x1Enum; /** @@ -25,7 +24,7 @@ use phpOMS\Localization\ISO639x1Enum; * @link https://karaka.app * @since 1.0.0 */ -class EditorDocType implements \JsonSerializable, ArrayableInterface +class EditorDocType implements \JsonSerializable { /** * Article ID. diff --git a/Models/EditorDocTypeL11n.php b/Models/EditorDocTypeL11n.php index 7eb3966..469645b 100644 --- a/Models/EditorDocTypeL11n.php +++ b/Models/EditorDocTypeL11n.php @@ -14,7 +14,6 @@ declare(strict_types=1); namespace Modules\Editor\Models; -use phpOMS\Contract\ArrayableInterface; use phpOMS\Localization\ISO639x1Enum; /** @@ -25,7 +24,7 @@ use phpOMS\Localization\ISO639x1Enum; * @link https://karaka.app * @since 1.0.0 */ -class EditorDocTypeL11n implements \JsonSerializable, ArrayableInterface +class EditorDocTypeL11n implements \JsonSerializable { /** * ID.