%PDF- %PDF-
Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/modules/tasks/controllers/ |
Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/modules/tasks/controllers/TaskController.php |
<?php namespace humhub\modules\tasks\controllers; use humhub\modules\stream\actions\StreamEntryResponse; use humhub\modules\tasks\helpers\TaskUrl; use humhub\modules\user\models\User; use humhub\modules\content\components\ContentContainerControllerAccess; use humhub\modules\space\models\Space; use humhub\modules\tasks\models\forms\ItemDrop; use humhub\modules\tasks\models\forms\TaskForm; use humhub\modules\user\models\UserPicker; use humhub\widgets\ModalClose; use humhub\modules\tasks\models\Task; use Yii; use yii\web\HttpException; use yii\web\Response; class TaskController extends AbstractTaskController { public $hideSidebar = true; public function getAccessRules() { return [ [ContentContainerControllerAccess::RULE_USER_GROUP_ONLY => [Space::USERGROUP_MEMBER, User::USERGROUP_SELF]], [ContentContainerControllerAccess::RULE_SPACE_ONLY => ['task-assigned-picker', 'task-responsible-picker']] ]; } /** * Add a Task from wall stream * * @param int|null $id * @param bool $cal * @param bool $redirect * @param int|null $listId used while task creation and is ignored for edits * @return string|Response * @throws HttpException * @throws \yii\base\Exception * @throws \yii\base\InvalidConfigException */ public function actionAddFromWall($id = null, $cal = false, $redirect = false, $listId = null) { return $this->actionEdit($id, $cal, $redirect, $listId, true); } /** * @param int|null $id * @param bool $cal * @param bool $redirect * @param int|null $listId used while task creation and is ignored for edits * @param bool $wall True when a Task is created/updated from wall stream * @return string|Response * @throws HttpException * @throws \yii\base\Exception * @throws \yii\base\InvalidConfigException */ public function actionEdit($id = null, $cal = false, $redirect = false, $listId = null, $wall = null) { $isNewTask = empty($id); if ($isNewTask) { $taskForm = new TaskForm([ 'cal' => $cal, 'wall' => $wall, 'taskListId' => $listId ]); $taskForm->createNew($this->contentContainer); } else { $taskForm = new TaskForm([ 'task' => Task::find()->contentContainer($this->contentContainer)->where(['task.id' => $id])->one(), 'cal' => $cal, 'redirect' => $redirect, 'wall' => $wall, 'taskListId' => $listId ]); } if (!$taskForm->task) { throw new HttpException(404); } else if(!$taskForm->task->content->canEdit()) { throw new HttpException(403); } if ($taskForm->load(Yii::$app->request->post()) && $taskForm->save()) { if ($cal) { return ModalClose::widget(['saved' => true]); } else if ($redirect) { return $this->htmlRedirect(TaskUrl::viewTask($taskForm->task)); } else if ($wall) { $entry = StreamEntryResponse::getAsArray($taskForm->task->content); $entry['reloadWall'] = true; $entry['success'] = true; // Rename 'output' in order to don't put it into global modal $entry['content'] = $entry['output']; unset($entry['output']); return $this->asJson($entry); } return $this->asJson([ 'reloadLists' => $taskForm->reloadListId, 'reloadTask' => empty($taskForm->reloadListId) ? $taskForm->task->id : false, // Workaround for humhub modal bug in v1.2.5 'output' => '<div class="modal-dialog"><div class="modal-content"></div></div></div>' ]); } return $this->renderAjax('edit', ['taskForm' => $taskForm]); } public function actionProceed($id, $status) { $this->forcePostRequest(); $task = $this->getTaskById($id); if(!$task->state->canProceed($status)) { throw new HttpException(403); } return $this->asJson(['success' => $task->state->proceed($status)]); } public function actionRevert($id, $status) { $this->forcePostRequest(); $task = $this->getTaskById($id); if(!$task->state->canRevert($status)) { throw new HttpException(403); } return $this->asJson(['success' => $task->state->revert($status)]); } public function actionTaskAssignedPicker($keyword = '') { $query = $this->getSpace()->getMembershipUser(); return $this->asJson(UserPicker::filter([ 'query' => $query, 'keyword' => $keyword, 'fillUser' => true ])); } public function actionTaskResponsiblePicker($keyword = '') { $query = $this->getSpace()->getMembershipUser(); return $this->asJson(UserPicker::filter([ 'keyword' => $keyword, 'query' => $query, 'fillUser' => true ])); } public function actionView($id) { $task = Task::find()->contentContainer($this->contentContainer)->where(['task.id' => $id])->one(); if(!$task) { throw new HttpException(404); } if(!$task->content->canView()) { throw new HttpException(403); } return $this->render("task", [ 'task' => $task, 'contentContainer' => $this->contentContainer ]); } public function actionModal($id, $cal) { $task = $this->getTaskById($id); if(!$task->content->canView()) { throw new HttpException(403); } return $this->renderAjax('modal', [ 'task' => $task, 'editUrl' => TaskUrl::editTask($task, $cal), 'canManageEntries' => $task->content->canEdit() ]); } public function actionDelete($id) { $this->forcePostRequest(); $task = $this->getTaskById($id); if(!$task->content->canEdit()) { throw new HttpException(403); } $task->delete(); return $this->asJson([ 'success' => true ]); } /** * @param $id * @return string * @throws HttpException * @throws \yii\base\Exception * @throws \Throwable */ public function actionExtend($id) { $task = $this->getTaskById($id); if( !$task->content->canView() && !$task->schedule->canRequestExtension() ) { throw new HttpException(401, Yii::t('TasksModule.base', 'You have insufficient permissions to perform that operation!')); } if ($task->schedule->hasRequestedExtension()) { $this->view->error(Yii::t('TasksModule.base', 'Already requested')); } else { $task->schedule->sendExtensionRequest(); $task->updateAttributes(['request_sent' => 1]); $this->view->success(Yii::t('TasksModule.base', 'Request sent')); } return $this->htmlRedirect(TaskUrl::viewTask($task)); } public function actionDrop($taskId) { $dropModel = new ItemDrop(['modelClass' => Task::class, 'modelId' => $taskId]); if ($dropModel->load(Yii::$app->request->post()) && $dropModel->save()) { $result = []; foreach ($dropModel->model->items as $item) { $result[$item->id] = [ 'sortOrder' => $item->sort_order, 'checked' => $item->completed, 'statChanged' => false, ]; } return $this->asJson(['success' => true, 'items' => $result]); } return $this->asJson(['success' => false]); } }