diff --git a/Controller.php b/Controller.php index d07067f..92e31a8 100644 --- a/Controller.php +++ b/Controller.php @@ -25,6 +25,11 @@ use Modules\Knowledgebase\Models\WikiCategoryMapper; use Modules\Knowledgebase\Models\NullWikiCategory; use Modules\Knowledgebase\Models\WikiDocMapper; use Modules\Knowledgebase\Models\NullWikiDoc; +use Modules\Knowledgebase\Models\WikiStatus; +use Modules\Knowledgebase\Models\WikiStatusMapper; +use Modules\Knowledgebase\Models\WikiDoc; +use Modules\Knowledgebase\Models\WikiCategory; +use Modules\Knowledgebase\Models\WikiBadge; /** * Task class. @@ -209,4 +214,121 @@ class Controller extends ModuleAbstract implements WebInterface return $view; } + public function apiWikiDocCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) + { + if (!empty($val = $this->validateWikiDocCreate($request))) { + $response->set('wiki_doc_create', new FormValidation($val)); + + return; + } + + $doc = $this->createWikiDocFromRquest($request); + WikiDocMapper::create($doc); + $response->set('doc', $doc->jsonSerialize()); + } + + public function createWikiDocFromRquest(RequestAbstract $request) : WikiDoc + { + $mardkownParser = new Markdown(); + + $doc = new WikiDoc(); + $doc->setName($request->getData('title')); + $doc->setDoc($request->getData('plain')); + $doc->setCategory((int) $request->getData('category')); + $doc->setBadges((array) $request->getData('badges')); + $doc->setStatus((int) $request->getData('status')); + + return $doc; + } + + private function validateWikiDocCreate(RequestAbstract $request) : array + { + $val = []; + if ( + ($val['title'] = empty($request->getData('title'))) + || ($val['plain'] = empty($request->getData('plain'))) + || ($val['category'] = empty($request->getData('category'))) + || ($val['badges'] = empty($request->getData('badges'))) + || ($val['status'] = ( + $request->getData('status') !== null + && !WikiStatus::isValidValue(strtolower($request->getData('status'))) + )) + ) { + return $val; + } + + return []; + } + + public function apiWikiCategoryCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) + { + if (!empty($val = $this->validateWikiCategoryCreate($request))) { + $response->set('wiki_category_create', new FormValidation($val)); + + return; + } + + $category = $this->createWikiCategoryFromRquest($request); + WikiCategoryMapper::create($category); + $response->set('category', $category->jsonSerialize()); + } + + public function createWikiCategoryFromRquest(RequestAbstract $request) : WikiCategory + { + $mardkownParser = new Markdown(); + + $category = new WikiCategory(); + $category->setName($request->getData('title')); + $category->setParent((int) $request->getData('parent')); + + return $category; + } + + private function validateWikiCategoryCreate(RequestAbstract $request) : array + { + $val = []; + if ( + ($val['title'] = empty($request->getData('title'))) + || ($val['parent'] = empty($request->getData('parent'))) + ) { + return $val; + } + + return []; + } + + public function apiWikiBadgeCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) + { + if (!empty($val = $this->validateWikiBadgeCreate($request))) { + $response->set('wiki_badge_create', new FormValidation($val)); + + return; + } + + $badge = $this->createWikiBadgeFromRquest($request); + WikiBadgeMapper::create($badge); + $response->set('badge', $badge->jsonSerialize()); + } + + public function createWikiBadgeFromRquest(RequestAbstract $request) : WikiBadge + { + $mardkownParser = new Markdown(); + + $badge = new WikiBadge(); + $badge->setName($request->getData('title')); + + return $badge; + } + + private function validateWikiBadgeCreate(RequestAbstract $request) : array + { + $val = []; + if ( + ($val['title'] = empty($request->getData('title'))) + ) { + return $val; + } + + return []; + } }