Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 13
CRAP
0.00% covered (danger)
0.00%
0 / 93
ListController
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 13
756
0.00% covered (danger)
0.00%
0 / 93
 getAccessRules
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 6
 actionIndex
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 7
 actionEdit
0.00% covered (danger)
0.00%
0 / 1
30
0.00% covered (danger)
0.00%
0 / 12
 actionDelete
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 5
 actionLoadClosedLists
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 3
 actionLoadCompleted
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 3
 getTaskListById
0.00% covered (danger)
0.00%
0 / 1
6
0.00% covered (danger)
0.00%
0 / 7
 actionLoadTaskDetails
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 3
 actionDropTask
0.00% covered (danger)
0.00%
0 / 1
12
0.00% covered (danger)
0.00%
0 / 9
 actionDropTaskList
0.00% covered (danger)
0.00%
0 / 1
12
0.00% covered (danger)
0.00%
0 / 7
 actionShowMoreCompleted
0.00% covered (danger)
0.00%
0 / 1
20
0.00% covered (danger)
0.00%
0 / 18
 actionLoadAjax
0.00% covered (danger)
0.00%
0 / 1
12
0.00% covered (danger)
0.00%
0 / 10
 actionLoadAjaxTask
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 3
<?php
/**
 * @link https://www.humhub.org/
 * @copyright Copyright (c) 2018 HumHub GmbH & Co. KG
 * @license https://www.humhub.com/licences
 *
 */
namespace humhub\modules\tasks\controllers;
use humhub\modules\content\components\ContentContainerControllerAccess;
use humhub\modules\space\models\Space;
use humhub\modules\tasks\models\lists\TaskListItemDrop;
use humhub\modules\tasks\models\lists\TaskListRootItemDrop;
use humhub\modules\tasks\models\lists\TaskList;
use humhub\modules\tasks\models\lists\TaskListInterface;
use humhub\modules\tasks\models\lists\UnsortedTaskList;
use humhub\modules\tasks\permissions\ManageTasks;
use humhub\modules\tasks\widgets\lists\CompletedTaskListItem;
use humhub\modules\tasks\widgets\lists\CompletedTaskListView;
use humhub\modules\tasks\widgets\lists\TaskListDetails;
use humhub\modules\tasks\widgets\lists\TaskListItem;
use humhub\modules\tasks\widgets\lists\TaskListWidget;
use humhub\modules\tasks\widgets\lists\UnsortedTaskListWidget;
use humhub\widgets\ModalClose;
use Yii;
use yii\web\HttpException;
class ListController extends AbstractTaskController
{
    public function getAccessRules()
    {
        return [
            [ContentContainerControllerAccess::RULE_USER_GROUP_ONLY => [Space::USERGROUP_MEMBER]],
            ['permission' => ManageTasks::class, 'actions' => ['edit', 'delete', 'drop-task', 'drop-task-list']],
        ];
    }
    public function actionIndex()
    {
        return $this->render('index', [
            'contentContainer' => $this->contentContainer,
            'canManage' =>  $this->canManageTasks(),
            'canCreate' => $this->canCreateTask(),
            'taskLists' => TaskList::findOverviewLists($this->contentContainer)->all()]);
    }
    public function actionEdit($id = null)
    {
        $taskList = ($id) ? $this->getTaskListById($id) : new TaskList($this->contentContainer);
        if(!$taskList) {
            throw new HttpException(404);
        }
        if($taskList->load(Yii::$app->request->post()) && $taskList->save()) {
            return ModalClose::widget();
        }
        return $this->renderAjax('edit', [
            'model' => $taskList,
        ]);
    }
    public function actionDelete($id)
    {
        $this->forcePostRequest();
        $this->getTaskListById($id)->delete();
        return $this->asJson(['success' => true]);
    }
    public function actionLoadClosedLists()
    {
        return CompletedTaskListView::widget(['contentContainer' => $this->contentContainer]);
    }
    public function actionLoadCompleted($id)
    {
        return CompletedTaskListItem::widget(['contentContainer' => $this->contentContainer, 'taskList' =>  $this->getTaskListById($id)]);
    }
    public function getTaskListById($id)
    {
        $taskList = TaskList::findById($id, $this->contentContainer);
        if(!$taskList) {
            throw new HttpException(404);
        }
        return $taskList;
    }
    public function actionLoadTaskDetails($id)
    {
        return TaskListDetails::widget(['task' => $this->getTaskById($id)]);
    }
    public function actionDropTask()
    {
        $model = new TaskListItemDrop(['contentContainer' => $this->contentContainer]);
        if ($model->load(Yii::$app->request->post()) && $model->save()) {
            return $this->asJson([
                'success' => true
            ]);
        }
        return $this->asJson(['success' => false]);
    }
    public function actionDropTaskList()
    {
        $model = new TaskListRootItemDrop(['contentContainer' => $this->contentContainer]);
        if ($model->load(Yii::$app->request->post()) && $model->save()) {
            return $this->asJson(['success' => true]);
        }
        return $this->asJson(['success' => false]);
    }
    public function actionShowMoreCompleted($id = null, $offset)
    {
        /** @var $taskList TaskListInterface */
        $taskList = $id ? TaskList::findById($id, $this->contentContainer) :  new UnsortedTaskList(['contentContainer' => $this->contentContainer]);
        if(!$taskList) {
            throw new HttpException(404);
        }
        $tasks = $taskList->getShowMoreCompletedTasks($offset, 10);
        $completedTaskCount = $taskList->getCompletedTasks()->count();
        $result = [];
        foreach ($tasks as $task) {
            $result[] = TaskListItem::widget(['task' => $task]);
        }
        $remainingCount = $completedTaskCount - ($offset + count($result));
        return $this->asJson([
            'tasks' => $result,
            'remainingCount' => $remainingCount,
            'showMoreMessage' => Yii::t('TasksModule.base','Show {count} more completed {n,plural,=1{task} other{tasks}}', ['n' => $remainingCount, 'count' => $remainingCount])
        ]);
    }
    public function actionLoadAjax($id = null)
    {
        if(!$id) {
            return UnsortedTaskListWidget::widget(['canManage' =>  $this->canManageTasks(), 'canCreate' => $this->canCreateTask()]);
        }
        $taskList = TaskList::findById($id, $this->contentContainer);
        if(!$taskList) {
            throw new HttpException(404);
        }
        return TaskListWidget::widget(['list' => $taskList, 'canManage' =>  $this->canManageTasks(), 'canCreate' => $this->canCreateTask()]);
    }
    public function actionLoadAjaxTask($id)
    {
        return TaskListItem::widget(['task' => $this->getTaskById($id), 'details' => true]);
    }
}