undo serialize deprecation and switch to installExternal api calls

This commit is contained in:
Dennis Eichhorn 2022-03-26 15:01:45 +01:00
parent 9c536c8490
commit 78962fd304
6 changed files with 187 additions and 18 deletions

View File

@ -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;

View File

@ -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<string, bool>
*
* @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<string, bool>
*
* @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());

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.