* * @since 1.0.0 */ private function validateEditorCreate(RequestAbstract $request) : array { $val = []; if (($val['title'] = empty($request->getData('title'))) || ($val['plain'] = empty($request->getData('plain'))) ) { 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 apiEditorCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void { if (!empty($val = $this->validateEditorCreate($request))) { $response->set('editor_create', new FormValidation($val)); $response->header->status = RequestStatusCode::R_400; return; } $doc = $this->createDocFromRequest($request); $this->createModel($request->header->account, $doc, EditorDocMapper::class, 'doc', $request->getOrigin()); $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Document', 'Document successfully created', $doc); } /** * Method to create task from request. * * @param RequestAbstract $request Request * * @return EditorDoc * * @since 1.0.0 */ private function createDocFromRequest(RequestAbstract $request) : EditorDoc { $doc = new EditorDoc(); $doc->title = (string) ($request->getData('title') ?? ''); $doc->plain = (string) ($request->getData('plain') ?? ''); $doc->content = Markdown::parse((string) ($request->getData('plain') ?? '')); $doc->setVirtualPath((string) ($request->getData('virtualpath') ?? '/')); $doc->createdBy = new NullAccount($request->header->account); if (!empty($tags = $request->getDataJson('tags'))) { foreach ($tags as $tag) { if (!isset($tag['id'])) { $request->setData('title', $tag['title'], true); $request->setData('color', $tag['color'], true); $request->setData('icon', $tag['icon'] ?? null, true); $request->setData('language', $tag['language'], true); $internalResponse = new HttpResponse(); $this->app->moduleManager->get('Tag')->apiTagCreate($request, $internalResponse, null); $doc->addTag($internalResponse->get($request->uri->__toString())['response']); } else { $doc->addTag(new NullTag((int) $tag['id'])); } } } if (!empty($uploadedFiles = $request->getFiles() ?? [])) { $uploaded = $this->app->moduleManager->get('Media')->uploadFiles( [''], $uploadedFiles, $request->header->account, __DIR__ . '/../../../Modules/Media/Files/Modules/Editor', '/Modules/Editor', ); foreach ($uploaded as $media) { $doc->addMedia($media); } } if (!empty($mediaFiles = $request->getDataJson('media') ?? [])) { foreach ($mediaFiles as $media) { $doc->addMedia(new NullMedia($media)); } } 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 { /** @var \Modules\Editor\Models\EditorDoc $old */ $old = clone EditorDocMapper::get((int) $request->getData('id')); $new = $this->updateEditorFromRequest($request); $this->updateModel($request->header->account, $old, $new, EditorDocMapper::class, 'doc', $request->getOrigin()); $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 { /** @var \Modules\Editor\Models\EditorDoc $doc */ $doc = EditorDocMapper::get((int) $request->getData('id')); $doc->title = (string) ($request->getData('title') ?? $doc->title); $doc->plain = (string) ($request->getData('plain') ?? $doc->plain); $doc->content = Markdown::parse((string) ($request->getData('plain') ?? $doc->plain)); 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 { /** @var \Modules\Editor\Models\EditorDoc $doc */ $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 { /** @var \Modules\Editor\Models\EditorDoc $doc */ $doc = EditorDocMapper::get((int) $request->getData('id')); $this->deleteModel($request->header->account, $doc, EditorDocMapper::class, 'doc', $request->getOrigin()); $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Document', 'Document successfully deleted', $doc); } /** * Api method to create files * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response * @param mixed $data Generic data * * @return void * * @api * * @since 1.0.0 */ public function apiFileCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void { $uploadedFiles = $request->getFiles() ?? []; if (empty($uploadedFiles)) { $this->fillJsonResponse($request, $response, NotificationLevel::ERROR, 'Editor', 'Invalid file', $uploadedFiles); $response->header->status = RequestStatusCode::R_400; return; } $uploaded = $this->app->moduleManager->get('Media')->uploadFiles( [$request->getData('name') ?? ''], $uploadedFiles, $request->header->account, __DIR__ . '/../../../Modules/Media/Files/Modules/Editor/' . ($request->getData('doc') ?? '0'), '/Modules/Editor/' . ($request->getData('doc') ?? '0'), $request->getData('type', 'int'), '', '', PathSettings::FILE_PATH ); $this->createModelRelation( $request->header->account, (int) $request->getData('doc'), \reset($uploaded)->getId(), EditorDocMapper::class, 'media', '', $request->getOrigin() ); $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'File', 'File successfully updated', $uploaded); } }