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 / 6
CRAP
0.00% covered (danger)
0.00%
0 / 99
AbstractTaskController
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 6
56
0.00% covered (danger)
0.00%
0 / 99
 getTaskById
0.00% covered (danger)
0.00%
0 / 1
6
0.00% covered (danger)
0.00%
0 / 7
 canCreateTask
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 3
 canManageTasks
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 3
 actionExport
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 17
 collectExportColumns
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 12
 anonymous function
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 2
<?php
namespace humhub\modules\tasks\controllers;
use humhub\components\export\DateTimeColumn;
use humhub\components\export\SpreadsheetExport;
use humhub\modules\content\components\ContentContainerController;
use humhub\modules\tasks\models\forms\TaskFilter;
use humhub\modules\tasks\models\Task;
use humhub\modules\tasks\permissions\CreateTask;
use humhub\modules\tasks\permissions\ManageTasks;
use humhub\modules\tasks\traits\DataExport;
use Yii;
use yii\data\ActiveDataProvider;
use yii\web\HttpException;
abstract class AbstractTaskController extends ContentContainerController
{
    use DataExport;
    protected function getTaskById($id)
    {
        $task = Task::find()->contentContainer($this->contentContainer)->readable()->where(['task.id' => $id])->one();
        if ($task === null) {
            throw new HttpException(404, "Could not load task!");
        }
        return $task;
    }
    protected function canCreateTask()
    {
        return $this->contentContainer->can(CreateTask::class);
    }
    protected function canManageTasks()
    {
        return $this->contentContainer->can(ManageTasks::class);
    }
    /**
     * Export user list as csv or xlsx
     * @param string $format supported format by phpspreadsheet
     * @return \yii\web\Response
     * @throws \PhpOffice\PhpSpreadsheet\Exception
     * @throws \PhpOffice\PhpSpreadsheet\Writer\Exception
     * @throws \yii\base\Exception
     */
    public function actionExport($format)
    {
        $filterModel = new TaskFilter(['contentContainer' => $this->contentContainer]);
        $filterModel->load(Yii::$app->request->get());
        $query = $filterModel->query();
        $dataProvider = new ActiveDataProvider([
            'query' => $query
        ]);
        $exporter = new SpreadsheetExport([
            'dataProvider' => $dataProvider,
            'columns' => $this->collectExportColumns(clone $query),
            'resultConfig' => [
                'fileBaseName' => 'humhub_tasks',
                'writerType' => $format,
            ],
        ]);
        return $exporter->export()->send();
    }
    /**
     * Return array with columns for data export
     * @param $query
     * @return array
     */
    private function collectExportColumns($query)
    {
        $relationsData = $this->prepareData('id', $query->with(['items', 'users.profile'])->asArray()->all());
        return [
            'id',
            'title',
            'description',
            [
                'attribute' => 'Space',
                'value' => $this->getRelatedContainer()
            ],
            [
                'attribute' => 'SpaceId',
                'value' =>  function ($model) {
                    return $model->content->container->id;
                }
            ],
            [
                'class' => DateTimeColumn::class,
                'attribute' => 'created_at',
            ],
            'created_by',
            [
                'class' => DateTimeColumn::class,
                'attribute' => 'updated_at',
            ],
            'updated_by',
            [
                'class' => DateTimeColumn::class,
                'attribute' => 'start_datetime',
                'label' => 'Start Date Time',
            ],
            [
                'class' => DateTimeColumn::class,
                'attribute' => 'end_datetime',
                'label' => 'End Date Time',
            ],
            'max_users',
            'status',
            [
                'attribute' => 'Checklist',
                'value' => $this->getTaskItems($relationsData)
            ],
            [
                'attribute' => 'Assigned Users',
                'value' => $this->getAssignedUsers($relationsData)
            ],
            [
                'attribute' => 'Responsible Users',
                'value' => $this->getResponsibleUsers($relationsData)
            ],
            [
                'attribute' => 'Comments',
                'value' => $this->getComments()
            ],
            'color',
            [
                'attribute' => 'review',
                'label' => 'Review required'
            ],
            'scheduling',
            'all_day',
            'cal_mode',
            'time_zone',
            'request_sent',
            [
                'attribute' => 'task_list_id',
                'label' => 'Task List'
            ],
        ];
    }
}