Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 6 |
CRAP | |
0.00% |
0 / 99 |
AbstractTaskController | |
0.00% |
0 / 1 |
|
0.00% |
0 / 6 |
56 | |
0.00% |
0 / 99 |
getTaskById | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 7 |
|||
canCreateTask | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
canManageTasks | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
actionExport | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 17 |
|||
collectExportColumns | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 12 |
|||
anonymous function | |
0.00% |
0 / 1 |
2 | |
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' | |
], | |
]; | |
} | |
} |