%PDF- %PDF-
Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/modules/wiki/controllers/rest/ |
Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/modules/wiki/controllers/rest/WikiController.php |
<?php /** * @link https://www.humhub.org/ * @copyright Copyright (c) 2018 HumHub GmbH & Co. KG * @license https://www.humhub.com/licences */ namespace humhub\modules\wiki\controllers\rest; use humhub\modules\content\components\ContentActiveRecord; use humhub\modules\content\components\ContentContainerActiveRecord; use humhub\modules\content\models\ContentContainer; use humhub\modules\content\models\forms\MoveContentForm; use humhub\modules\rest\components\BaseContentController; use humhub\modules\wiki\helpers\RestDefinitions; use humhub\modules\wiki\models\forms\PageEditForm; use humhub\modules\wiki\models\forms\WikiPageItemDrop; use humhub\modules\wiki\models\WikiPage; use Yii; class WikiController extends BaseContentController { public static $moduleId = 'wiki'; /** * {@inheritdoc} */ public function getContentActiveRecordClass() { return WikiPage::class; } /** * {@inheritdoc} */ public function returnContentDefinition(ContentActiveRecord $contentRecord) { /** @var WikiPage $contentRecord */ return RestDefinitions::getWikiPage($contentRecord); } private function saveWikiPage(PageEditForm $wikiForm): bool { return $wikiForm->load($data = Yii::$app->request->getBodyParams()) && $wikiForm->save() && (!method_exists($this, 'updateContent') || $this->updateContent($wikiForm->page, $data)); } public function actionCreate($containerId) { $containerRecord = ContentContainer::findOne(['id' => $containerId]); if ($containerRecord === null) { return $this->returnError(404, 'Content container not found!'); } /** @var ContentContainerActiveRecord $container */ $container = $containerRecord->getPolymorphicRelation(); $pageParams = Yii::$app->request->post('WikiPage', []); $title = ! empty($pageParams['title']) ? $pageParams['title'] : null; $categoryId = ! empty($pageParams['parent_page_id']) ? $pageParams['parent_page_id'] : null; $wikiForm = (new PageEditForm(['container' => $container]))->forPage(null, $title, $categoryId); if ($this->saveWikiPage($wikiForm)) { return $this->returnContentDefinition($wikiForm->page); } if ($wikiForm->hasErrors() || $wikiForm->page->hasErrors()) { return $this->returnError(422, 'Validation failed', [ 'wikiForm' => $wikiForm->getErrors(), 'page' => $wikiForm->page->getErrors(), ]); } else { Yii::error('Could not create validated wiki page.', 'api'); return $this->returnError(500, 'Internal error while save valid wiki page!'); } } public function actionUpdate($id) { $page = WikiPage::findOne(['id' => $id]); if (! $page) { return $this->returnError(404, 'Page not found!'); } $wikiForm = (new PageEditForm(['container' => $page->content->container]))->forPage($page->id, $page->title, $page->parent_page_id); $bodyParams = Yii::$app->request->getBodyParams(); if (!isset($bodyParams['PageEditForm']['latestRevisionNumber'])) { // Don't check latest revision on update from API by default $bodyParams['PageEditForm']['latestRevisionNumber'] = $wikiForm->latestRevisionNumber; $bodyParams['PageEditForm']['confirmOverwriting'] = 1; } if ($this->saveWikiPage($wikiForm)) { return $this->returnContentDefinition(WikiPage::findOne(['id' => $wikiForm->page->id])); } if ($wikiForm->hasErrors() || $wikiForm->page->hasErrors()) { return $this->returnError(422, 'Validation failed', [ 'wikiForm' => $wikiForm->getErrors(), 'page' => $wikiForm->page->getErrors(), ]); } else { Yii::error('Could not update validated wiki page.', 'api'); return $this->returnError(500, 'Internal error while update wiki page!'); } } public function actionChangeIndex($id) { $page = WikiPage::findOne(['id' => $id]); if (! $page) { return $this->returnError(404, 'Page not found!'); } if (!$page->canEditWikiPage()) { return $this->returnError(403, 'You cannot edit the page!'); } $requestParams = Yii::$app->request->getBodyParams(); if (empty($requestParams['target_id'])) { return $this->returnError(400, 'Target category is required.'); } $targetPage = WikiPage::findOne(['id' => $requestParams['target_id']]); if (! $targetPage || ! $targetPage->is_category) { return $this->returnError(400, 'Wrong target category.'); } if (!$targetPage->canEditWikiPage()) { return $this->returnError(403, 'You cannot edit the target page!'); } $formParams = [ 'id' => $id, 'targetId' => $targetPage->id, 'index' => isset($requestParams['index']) ? $requestParams['index'] : 0 ]; $moveModel = new WikiPageItemDrop(['contentContainer' => $page->content->container]); if($moveModel->load($formParams, '') && $moveModel->save()) { return $this->returnSuccess('Wiki page successfully moved!'); } else { Yii::error('Could not move wiki page.', 'api'); return $this->returnError(500, 'Internal error while change wiki page index!'); } } public function actionMove($id) { $page = WikiPage::findOne(['id' => $id]); if (! $page) { return $this->returnError(404, 'Page not found!'); } if (! $page->content) { return $this->returnError(404, 'Page content not found!'); } if (!$page->canEditWikiPage()) { return $this->returnError(403, 'You cannot move the page!'); } $target = Yii::$app->request->post('target', null); if (! $target) { return $this->returnError(400, 'Target content container guid is required!'); } $moveForm = new MoveContentForm(['id' => $page->content->id]); $formData['MoveContentForm']['target'][] = $target; if($moveForm->load($formData) && $moveForm->save()) { return $this->returnSuccess('Wiki page successfully moved!'); } if ($moveForm->hasErrors()) { return $this->returnError(422, 'Validation failed', [ 'errors' => $moveForm->getErrors() ]); } else { Yii::error('Could not move wiki page.', 'api'); return $this->returnError(500, 'Internal error while move wiki page!'); } } }