createCommentList(); $this->createModel($request->header->account, $commentList, CommentListMapper::class, 'comment_list', $request->getOrigin()); } /** * Create a comment list * * @return CommentList * * @since 1.0.0 */ public function createCommentList() : CommentList { $list = new CommentList(); return $list; } /** * Api method to create comment * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response * @param mixed $data Generic data * * @return void * * @api * * @since 1.0.0 */ public function apiCommentCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void { if (!empty($val = $this->validateCommentCreate($request))) { $response->set('news_create', new FormValidation($val)); $response->header->status = RequestStatusCode::R_400; return; } $comment = $this->createCommentFromRequest($request); $this->createModel($request->header->account, $comment, CommentMapper::class, 'comment', $request->getOrigin()); $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Comment', 'Comment successfully created', $comment); } /** * Validate comment create request * * @param RequestAbstract $request Request * * @return array * * @since 1.0.0 */ private function validateCommentCreate(RequestAbstract $request) : array { $val = []; if (($val['plain'] = empty($request->getData('plain'))) || ($val['list'] = empty($request->getData('list'))) ) { return $val; } return []; } /** * Method to create comment from request. * * @param RequestAbstract $request Request * * @return Comment * * @since 1.0.0 */ private function createCommentFromRequest(RequestAbstract $request) : Comment { $comment = new Comment(); $comment->createdBy = new NullAccount($request->header->account); $comment->title = (string) ($request->getData('title') ?? ''); $comment->contentRaw = (string) ($request->getData('plain') ?? ''); $comment->content = Markdown::parse((string) ($request->getData('plain') ?? '')); $comment->setRef($request->getData('ref') !== null ? (int) $request->getData('ref') : null); $comment->setList((int) ($request->getData('list') ?? 0)); return $comment; } /** * Api method to create comment * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response * @param mixed $data Generic data * * @return void * * @api * * @since 1.0.0 */ public function apiCommentUpdate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void { $old = clone CommentMapper::get((int) $request->getData('id')); $new = $this->updateCommentFromRequest($request); $this->updateModel($request->header->account, $old, $new, CommentMapper::class, 'comment', $request->getOrigin()); $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Comment', 'Comment successfully updated', $new); } /** * Method to update comment from request. * * @param RequestAbstract $request Request * * @return Comment * * @since 1.0.0 */ private function updateCommentFromRequest(RequestAbstract $request) : Comment { $comment = CommentMapper::get((int) $request->getData('id')); $comment->setTitle($request->getData('title') ?? $comment->getTitle()); $comment->setContentRaw($request->getData('plain') ?? $comment->getContentRaw()); $comment->setContent(Markdown::parse((string) ($request->getData('plain') ?? $comment->getPlain()))); $comment->setRef($request->getData('ref') ?? $comment->getRef()); return $comment; } /** * Api method to get a comment * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response * @param mixed $data Generic data * * @return void * * @api * * @since 1.0.0 */ public function apiCommentGet(RequestAbstract $request, ResponseAbstract $response, $data = null) : void { $comment = CommentMapper::get((int) $request->getData('id')); $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Comment', 'Comment successfully returned', $comment); } /** * Api method to delete comment * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response * @param mixed $data Generic data * * @return void * * @api * * @since 1.0.0 */ public function apiCommentDelete(RequestAbstract $request, ResponseAbstract $response, $data = null) : void { $comment = CommentMapper::get((int) $request->getData('id')); $this->deleteModel($request->header->account, $comment, CommentMapper::class, 'comment', $request->getOrigin()); $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Comment', 'Comment successfully deleted', $comment); } }