diff --git a/Controller.php b/Controller.php index a3fae0e..4cf6034 100644 --- a/Controller.php +++ b/Controller.php @@ -157,4 +157,168 @@ class Controller extends ModuleAbstract implements WebInterface return $view; } + + public function apiQAQuestionCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) + { + if (!empty($val = $this->validateQAQuestionCreate($request))) { + $response->set('qa_question_create', new FormValidation($val)); + + return; + } + + $question = $this->createQAQuestionFromRquest($request); + QAQuestionMapper::create($question); + $response->set('question', $question->jsonSerialize()); + } + + public function createQAQuestionFromRquest(RequestAbstract $request) : QAQuestion + { + $mardkownParser = new Markdown(); + + $question = new QAQuestion(); + $question->setName($request->getData('title')); + $question->setQuestion($request->getData('plain')); + $question->setLanguage($request->getData('language')); + $question->setCategory((int) $request->getData('category')); + $question->setStatus((int) $request->getData('status')); + $question->setBadges((array) $request->getData('badges')); + + return $question; + } + + private function validateQAQuestionCreate(RequestAbstract $request) : array + { + $val = []; + if ( + ($val['title'] = empty($request->getData('title'))) + || ($val['plain'] = empty($request->getData('plain'))) + || ($val['language'] = empty($request->getData('language'))) + || ($val['category'] = empty($request->getData('category'))) + || ($val['badges'] = empty($request->getData('badges'))) + || ($val['status'] = ( + $request->getData('status') !== null + && !QAQuestionStatus::isValidValue(strtolower($request->getData('status'))) + )) + ) { + return $val; + } + + return []; + } + + public function apiQAAnswerCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) + { + if (!empty($val = $this->validateQAAnswerCreate($request))) { + $response->set('qa_answer_create', new FormValidation($val)); + + return; + } + + $answer = $this->createQAAnswerFromRquest($request); + QAAnswerMapper::create($answer); + $response->set('answer', $answer->jsonSerialize()); + } + + public function createQAAnswerFromRquest(RequestAbstract $request) : QAAnswer + { + $mardkownParser = new Markdown(); + + $answer = new QAAnswer(); + $answer->setName($request->getData('title')); + $answer->setQuestion($request->getData('plain')); + $answer->setQuestion((int) $request->getData('question')); + $answer->setStatus((int) $request->getData('status')); + + return $answer; + } + + private function validateQAAnswerCreate(RequestAbstract $request) : array + { + $val = []; + if ( + ($val['title'] = empty($request->getData('title'))) + || ($val['plain'] = empty($request->getData('plain'))) + || ($val['question'] = empty($request->getData('question'))) + || ($val['status'] = ( + $request->getData('status') !== null + && !QAAnswerStatus::isValidValue(strtolower($request->getData('status'))) + )) + ) { + return $val; + } + + return []; + } + + public function apiQACategoryCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) + { + if (!empty($val = $this->validateQACategoryCreate($request))) { + $response->set('qa_category_create', new FormValidation($val)); + + return; + } + + $category = $this->createQACategoryFromRquest($request); + QACategoryMapper::create($category); + $response->set('category', $category->jsonSerialize()); + } + + public function createQACategoryFromRquest(RequestAbstract $request) : QACategory + { + $mardkownParser = new Markdown(); + + $category = new QACategory(); + $category->setName($request->getData('title')); + $category->setParent((int) $request->getData('parent')); + + return $category; + } + + private function validateQACategoryCreate(RequestAbstract $request) : array + { + $val = []; + if ( + ($val['title'] = empty($request->getData('title'))) + || ($val['parent'] = empty($request->getData('parent'))) + ) { + return $val; + } + + return []; + } + + public function apiQABadgeCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) + { + if (!empty($val = $this->validateQABadgeCreate($request))) { + $response->set('qa_badge_create', new FormValidation($val)); + + return; + } + + $badge = $this->createQABadgeFromRquest($request); + QABadgeMapper::create($badge); + $response->set('badge', $badge->jsonSerialize()); + } + + public function createQABadgeFromRquest(RequestAbstract $request) : QABadge + { + $mardkownParser = new Markdown(); + + $badge = new QABadge(); + $badge->setName($request->getData('title')); + + return $badge; + } + + private function validateQABadgeCreate(RequestAbstract $request) : array + { + $val = []; + if ( + ($val['title'] = empty($request->getData('title'))) + ) { + return $val; + } + + return []; + } }