/app/Model/TaskExport.php
https://gitlab.com/x33n/kanboard · PHP · 143 lines · 91 code · 14 blank · 38 comment · 3 complexity · f720aa78578a2f75aabd338373022779 MD5 · raw file
- <?php
- namespace Model;
- use PDO;
- /**
- * Task Export model
- *
- * @package model
- * @author Frederic Guillot
- */
- class TaskExport extends Base
- {
- /**
- * Fetch tasks and return the prepared CSV
- *
- * @access public
- * @param integer $project_id Project id
- * @param mixed $from Start date (timestamp or user formatted date)
- * @param mixed $to End date (timestamp or user formatted date)
- * @return array
- */
- public function export($project_id, $from, $to)
- {
- $tasks = $this->getTasks($project_id, $from, $to);
- $swimlanes = $this->swimlane->getList($project_id);
- $results = array($this->getColumns());
- foreach ($tasks as &$task) {
- $results[] = array_values($this->format($task, $swimlanes));
- }
- return $results;
- }
- /**
- * Get the list of tasks for a given project and date range
- *
- * @access public
- * @param integer $project_id Project id
- * @param mixed $from Start date (timestamp or user formatted date)
- * @param mixed $to End date (timestamp or user formatted date)
- * @return array
- */
- public function getTasks($project_id, $from, $to)
- {
- $sql = '
- SELECT
- tasks.id,
- projects.name AS project_name,
- tasks.is_active,
- project_has_categories.name AS category_name,
- tasks.swimlane_id,
- columns.title AS column_title,
- tasks.position,
- tasks.color_id,
- tasks.date_due,
- creators.username AS creator_username,
- users.username AS assignee_username,
- tasks.score,
- tasks.title,
- tasks.date_creation,
- tasks.date_modification,
- tasks.date_completed,
- tasks.date_started,
- tasks.time_estimated,
- tasks.time_spent
- FROM tasks
- LEFT JOIN users ON users.id = tasks.owner_id
- LEFT JOIN users AS creators ON creators.id = tasks.creator_id
- LEFT JOIN project_has_categories ON project_has_categories.id = tasks.category_id
- LEFT JOIN columns ON columns.id = tasks.column_id
- LEFT JOIN projects ON projects.id = tasks.project_id
- WHERE tasks.date_creation >= ? AND tasks.date_creation <= ? AND tasks.project_id = ?
- ORDER BY tasks.id ASC
- ';
- 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)));
- }
- $rq = $this->db->execute($sql, array($from, $to, $project_id));
- return $rq->fetchAll(PDO::FETCH_ASSOC);
- }
- /**
- * Format the output of a task array
- *
- * @access public
- * @param array $task Task properties
- * @param array $swimlanes List of swimlanes
- * @return array
- */
- public function format(array &$task, array &$swimlanes)
- {
- $colors = $this->color->getList();
- $task['is_active'] = $task['is_active'] == Task::STATUS_OPEN ? e('Open') : e('Closed');
- $task['color_id'] = $colors[$task['color_id']];
- $task['score'] = $task['score'] ?: 0;
- $task['swimlane_id'] = isset($swimlanes[$task['swimlane_id']]) ? $swimlanes[$task['swimlane_id']] : '?';
- $this->dateParser->format($task, array('date_due', 'date_modification', 'date_creation', 'date_started', 'date_completed'), 'Y-m-d');
- return $task;
- }
- /**
- * Get column titles
- *
- * @access public
- * @return string[]
- */
- public function getColumns()
- {
- return array(
- e('Task Id'),
- e('Project'),
- e('Status'),
- e('Category'),
- e('Swimlane'),
- e('Column'),
- e('Position'),
- e('Color'),
- e('Due date'),
- e('Creator'),
- e('Assignee'),
- e('Complexity'),
- e('Title'),
- e('Creation date'),
- e('Modification date'),
- e('Completion date'),
- e('Start date'),
- e('Time estimated'),
- e('Time spent'),
- );
- }
- }