|
<?php |
|
|
|
namespace Kanboard\Export; |
|
|
|
use Kanboard\Core\Base; |
|
use Kanboard\Model\CategoryModel; |
|
use Kanboard\Model\ColumnModel; |
|
use Kanboard\Model\ProjectModel; |
|
use Kanboard\Model\SwimlaneModel; |
|
use Kanboard\Model\TaskModel; |
|
use Kanboard\Model\UserModel; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TaskExport extends Base |
|
{ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function export($project_id, $from, $to) |
|
{ |
|
$tasks = $this->getTasks($project_id, $from, $to); |
|
$taskIds = array_column($tasks, 'id'); |
|
$tags = $this->taskTagModel->getTagsByTaskIds($taskIds); |
|
$colors = $this->colorModel->getList(); |
|
$results = array($this->getColumns()); |
|
|
|
foreach ($tasks as &$task) { |
|
$task = $this->format($task, $colors, $tags); |
|
$results[] = array_values($task); |
|
} |
|
|
|
return $results; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected function getTasks($project_id, $from, $to) |
|
{ |
|
if (!is_numeric($from)) { |
|
$from = $this->dateParser->removeTimeFromTimestamp($this->dateParser->getTimestamp($from)); |
|
} |
|
|
|
if (!is_numeric($to)) { |
|
$to = $this->dateParser->removeTimeFromTimestamp(strtotime('+1 day', $this->dateParser->getTimestamp($to))); |
|
} |
|
|
|
return $this->db->table(TaskModel::TABLE) |
|
->columns( |
|
TaskModel::TABLE . '.id', |
|
TaskModel::TABLE . '.reference', |
|
ProjectModel::TABLE . '.name AS project_name', |
|
TaskModel::TABLE . '.is_active', |
|
CategoryModel::TABLE . '.name AS category_name', |
|
SwimlaneModel::TABLE . '.name AS swimlane_name', |
|
ColumnModel::TABLE . '.title AS column_title', |
|
TaskModel::TABLE . '.position', |
|
TaskModel::TABLE . '.color_id', |
|
TaskModel::TABLE . '.date_due', |
|
'uc.username AS creator_username', |
|
'uc.name AS creator_name', |
|
UserModel::TABLE . '.username AS assignee_username', |
|
UserModel::TABLE . '.name AS assignee_name', |
|
TaskModel::TABLE . '.score', |
|
TaskModel::TABLE . '.title', |
|
TaskModel::TABLE . '.date_creation', |
|
TaskModel::TABLE . '.date_modification', |
|
TaskModel::TABLE . '.date_completed', |
|
TaskModel::TABLE . '.date_started', |
|
TaskModel::TABLE . '.time_estimated', |
|
TaskModel::TABLE . '.time_spent', |
|
TaskModel::TABLE . '.priority' |
|
) |
|
->join(UserModel::TABLE, 'id', 'owner_id', TaskModel::TABLE) |
|
->left(UserModel::TABLE, 'uc', 'id', TaskModel::TABLE, 'creator_id') |
|
->join(CategoryModel::TABLE, 'id', 'category_id', TaskModel::TABLE) |
|
->join(ColumnModel::TABLE, 'id', 'column_id', TaskModel::TABLE) |
|
->join(SwimlaneModel::TABLE, 'id', 'swimlane_id', TaskModel::TABLE) |
|
->join(ProjectModel::TABLE, 'id', 'project_id', TaskModel::TABLE) |
|
->gte(TaskModel::TABLE . '.date_creation', $from) |
|
->lte(TaskModel::TABLE . '.date_creation', $to) |
|
->eq(TaskModel::TABLE . '.project_id', $project_id) |
|
->asc(TaskModel::TABLE.'.id') |
|
->findAll(); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected function format(array &$task, array $colors, array &$tags) |
|
{ |
|
$task['is_active'] = $task['is_active'] == TaskModel::STATUS_OPEN ? e('Open') : e('Closed'); |
|
$task['color_id'] = $colors[$task['color_id']]; |
|
$task['score'] = $task['score'] ?: 0; |
|
$task['tags'] = ''; |
|
|
|
$task = $this->dateParser->format( |
|
$task, |
|
array('date_due', 'date_modification', 'date_creation', 'date_started', 'date_completed'), |
|
$this->dateParser->getUserDateTimeFormat() |
|
); |
|
|
|
if (isset($tags[$task['id']])) { |
|
$taskTags = array_column($tags[$task['id']], 'name'); |
|
$task['tags'] = implode(', ', $taskTags); |
|
} |
|
|
|
return $task; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected function getColumns() |
|
{ |
|
return array( |
|
e('Task Id'), |
|
e('Reference'), |
|
e('Project'), |
|
e('Status'), |
|
e('Category'), |
|
e('Swimlane'), |
|
e('Column'), |
|
e('Position'), |
|
e('Color'), |
|
e('Due date'), |
|
e('Creator'), |
|
e('Creator Name'), |
|
e('Assignee Username'), |
|
e('Assignee Name'), |
|
e('Complexity'), |
|
e('Title'), |
|
e('Creation date'), |
|
e('Modification date'), |
|
e('Completion date'), |
|
e('Start date'), |
|
e('Time estimated'), |
|
e('Time spent'), |
|
e('Priority'), |
|
e('Tags'), |
|
); |
|
} |
|
} |
|
|