Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 11 |
CRAP | |
0.00% |
0 / 136 |
TaskController | |
0.00% |
0 / 1 |
|
0.00% |
0 / 11 |
1122 | |
0.00% |
0 / 136 |
getAccessRules | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 5 |
|||
actionEdit | |
0.00% |
0 / 1 |
132 | |
0.00% |
0 / 35 |
|||
actionProceed | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 8 |
|||
actionRevert | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 8 |
|||
actionTaskAssignedPicker | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 8 |
|||
actionTaskResponsiblePicker | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 8 |
|||
actionView | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 13 |
|||
actionModal | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 11 |
|||
actionDelete | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 11 |
|||
actionExtend | |
0.00% |
0 / 1 |
20 | |
0.00% |
0 / 14 |
|||
actionDrop | |
0.00% |
0 / 1 |
20 | |
0.00% |
0 / 15 |
<?php | |
namespace humhub\modules\tasks\controllers; | |
use humhub\modules\tasks\helpers\TaskUrl; | |
use Yii; | |
use yii\web\HttpException; | |
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\tasks\models\user\TaskUser; | |
use humhub\modules\tasks\permissions\CreateTask; | |
use humhub\modules\tasks\permissions\ManageTasks; | |
use humhub\modules\user\models\UserPicker; | |
use humhub\widgets\ModalClose; | |
use humhub\modules\tasks\models\Task; | |
class TaskController extends AbstractTaskController | |
{ | |
public $hideSidebar = true; | |
public function getAccessRules() | |
{ | |
return [ | |
[ContentContainerControllerAccess::RULE_USER_GROUP_ONLY => [Space::USERGROUP_MEMBER]] | |
]; | |
} | |
/** | |
* @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 | |
* @throws HttpException | |
* @throws \yii\base\Exception | |
* @throws \yii\base\InvalidConfigException | |
*/ | |
public function actionEdit($id = null, $cal = false, $redirect = false, $listId = null) | |
{ | |
$isNewTask = empty($id); | |
if($isNewTask && !$this->contentContainer->can([CreateTask::class, ManageTasks::class])) { | |
throw new HttpException(403); | |
} | |
if ($isNewTask) { | |
$taskForm = new TaskForm(['cal' => $cal, '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, | |
'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)); | |
} | |
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($id = null, $keyword) | |
{ | |
$query = $this->getSpace()->getMembershipUser(); | |
return $this->asJson(UserPicker::filter([ | |
'query' => $query, | |
'keyword' => $keyword, | |
'fillUser' => true | |
])); | |
} | |
public function actionTaskResponsiblePicker($id = null, $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 | |
*/ | |
public function actionExtend($id) | |
{ | |
$task = $this->getTaskById($id); | |
if( !$task->content->canView() && !$task->schedule->canRequestExtension() ) { | |
throw new HttpException(401, Yii::t('TasksModule.controller', 'You have insufficient permissions to perform that operation!')); | |
} | |
if ($task->schedule->hasRequestedExtension()) { | |
$this->view->error(Yii::t('TasksModule.controller', 'Already requested')); | |
} else { | |
$task->schedule->sendExtensionRequest(); | |
$task->updateAttributes(['request_sent' => 1]); | |
$this->view->success(Yii::t('TasksModule.controller', '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]); | |
} | |
} |