From f32507d423c46e8e9612b5239728e6c617e4cbcb Mon Sep 17 00:00:00 2001 From: Frederic Guillot Date: Fri, 4 Mar 2016 17:57:45 -0500 Subject: Add namespace Export and move classes --- app/Console/Base.php | 6 +- app/Controller/Export.php | 2 +- app/Core/Base.php | 7 +- app/Export/SubtaskExport.php | 124 ++++++++++++++++++++++++++++ app/Export/TaskExport.php | 148 ++++++++++++++++++++++++++++++++++ app/Export/TransitionExport.php | 77 ++++++++++++++++++ app/Model/SubtaskExport.php | 119 --------------------------- app/Model/TaskExport.php | 146 --------------------------------- app/Model/TransitionExport.php | 76 ----------------- app/ServiceProvider/ClassProvider.php | 8 +- 10 files changed, 361 insertions(+), 352 deletions(-) create mode 100644 app/Export/SubtaskExport.php create mode 100644 app/Export/TaskExport.php create mode 100644 app/Export/TransitionExport.php delete mode 100644 app/Model/SubtaskExport.php delete mode 100644 app/Model/TaskExport.php delete mode 100644 app/Model/TransitionExport.php (limited to 'app') diff --git a/app/Console/Base.php b/app/Console/Base.php index b2066a63..25d48e44 100644 --- a/app/Console/Base.php +++ b/app/Console/Base.php @@ -11,16 +11,16 @@ use Symfony\Component\Console\Command\Command; * @package console * @author Frederic Guillot * + * @property \Kanboard\Export\SubtaskExport $subtaskExport + * @property \Kanboard\Export\TaskExport $taskExport + * @property \Kanboard\Export\TransitionExport $transitionExport * @property \Kanboard\Model\Notification $notification * @property \Kanboard\Model\Project $project * @property \Kanboard\Model\ProjectPermission $projectPermission * @property \Kanboard\Model\ProjectDailyColumnStats $projectDailyColumnStats * @property \Kanboard\Model\ProjectDailyStats $projectDailyStats - * @property \Kanboard\Model\SubtaskExport $subtaskExport * @property \Kanboard\Model\Task $task - * @property \Kanboard\Model\TaskExport $taskExport * @property \Kanboard\Model\TaskFinder $taskFinder - * @property \Kanboard\Model\Transition $transition * @property \Kanboard\Model\UserNotification $userNotification * @property \Kanboard\Model\UserNotificationFilter $userNotificationFilter * @property \Symfony\Component\EventDispatcher\EventDispatcher $dispatcher diff --git a/app/Controller/Export.php b/app/Controller/Export.php index 726edd42..c2ff652e 100644 --- a/app/Controller/Export.php +++ b/app/Controller/Export.php @@ -80,6 +80,6 @@ class Export extends Base */ public function transitions() { - $this->common('transition', 'export', t('Transitions'), 'transitions', t('Task transitions export')); + $this->common('transitionExport', 'export', t('Transitions'), 'transitions', t('Task transitions export')); } } diff --git a/app/Core/Base.php b/app/Core/Base.php index c84fcbac..d4ab6c81 100644 --- a/app/Core/Base.php +++ b/app/Core/Base.php @@ -90,14 +90,12 @@ use Pimple\Container; * @property \Kanboard\Model\ProjectNotificationType $projectNotificationType * @property \Kanboard\Model\RememberMeSession $rememberMeSession * @property \Kanboard\Model\Subtask $subtask - * @property \Kanboard\Model\SubtaskExport $subtaskExport * @property \Kanboard\Model\SubtaskTimeTracking $subtaskTimeTracking * @property \Kanboard\Model\Swimlane $swimlane * @property \Kanboard\Model\Task $task * @property \Kanboard\Model\TaskAnalytic $taskAnalytic * @property \Kanboard\Model\TaskCreation $taskCreation * @property \Kanboard\Model\TaskDuplication $taskDuplication - * @property \Kanboard\Model\TaskExport $taskExport * @property \Kanboard\Model\TaskExternalLink $taskExternalLink * @property \Kanboard\Model\TaskFinder $taskFinder * @property \Kanboard\Model\TaskFilter $taskFilter @@ -108,7 +106,6 @@ use Pimple\Container; * @property \Kanboard\Model\TaskStatus $taskStatus * @property \Kanboard\Model\TaskMetadata $taskMetadata * @property \Kanboard\Model\Transition $transition - * @property \Kanboard\Model\TransitionExport $transitionExport * @property \Kanboard\Model\User $user * @property \Kanboard\Model\UserLocking $userLocking * @property \Kanboard\Model\UserMention $userMention @@ -121,7 +118,6 @@ use Pimple\Container; * @property \Kanboard\Validator\AuthValidator $authValidator * @property \Kanboard\Validator\ColumnValidator $columnValidator * @property \Kanboard\Validator\CategoryValidator $categoryValidator - * @property \Kanboard\Validator\ColumnValidator $columnValidator * @property \Kanboard\Validator\CommentValidator $commentValidator * @property \Kanboard\Validator\CurrencyValidator $currencyValidator * @property \Kanboard\Validator\CustomFilterValidator $customFilterValidator @@ -137,6 +133,9 @@ use Pimple\Container; * @property \Kanboard\Validator\UserValidator $userValidator * @property \Kanboard\Import\TaskImport $taskImport * @property \Kanboard\Import\UserImport $userImport + * @property \Kanboard\Export\SubtaskExport $subtaskExport + * @property \Kanboard\Export\TaskExport $taskExport + * @property \Kanboard\Export\TransitionExport $transitionExport * @property \Psr\Log\LoggerInterface $logger * @property \PicoDb\Database $db * @property \Symfony\Component\EventDispatcher\EventDispatcher $dispatcher diff --git a/app/Export/SubtaskExport.php b/app/Export/SubtaskExport.php new file mode 100644 index 00000000..386c566b --- /dev/null +++ b/app/Export/SubtaskExport.php @@ -0,0 +1,124 @@ +subtask_status = $this->subtask->getStatusList(); + $subtasks = $this->getSubtasks($project_id, $from, $to); + $results = array($this->getColumns()); + + foreach ($subtasks as $subtask) { + $results[] = $this->format($subtask); + } + + return $results; + } + + /** + * Get column titles + * + * @access public + * @return string[] + */ + public function getColumns() + { + return array( + e('Subtask Id'), + e('Title'), + e('Status'), + e('Assignee'), + e('Time estimated'), + e('Time spent'), + e('Task Id'), + e('Task Title'), + ); + } + + /** + * Format the output of a subtask array + * + * @access public + * @param array $subtask Subtask properties + * @return array + */ + public function format(array $subtask) + { + $values = array(); + $values[] = $subtask['id']; + $values[] = $subtask['title']; + $values[] = $this->subtask_status[$subtask['status']]; + $values[] = $subtask['assignee_name'] ?: $subtask['assignee_username']; + $values[] = $subtask['time_estimated']; + $values[] = $subtask['time_spent']; + $values[] = $subtask['task_id']; + $values[] = $subtask['task_title']; + + return $values; + } + + /** + * Get all subtasks for a given project + * + * @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 getSubtasks($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(Subtask::TABLE) + ->eq('project_id', $project_id) + ->columns( + Subtask::TABLE.'.*', + User::TABLE.'.username AS assignee_username', + User::TABLE.'.name AS assignee_name', + Task::TABLE.'.title AS task_title' + ) + ->gte('date_creation', $from) + ->lte('date_creation', $to) + ->join(Task::TABLE, 'id', 'task_id') + ->join(User::TABLE, 'id', 'user_id') + ->asc(Subtask::TABLE.'.id') + ->findAll(); + } +} diff --git a/app/Export/TaskExport.php b/app/Export/TaskExport.php new file mode 100644 index 00000000..b98582aa --- /dev/null +++ b/app/Export/TaskExport.php @@ -0,0 +1,148 @@ +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, + users.name AS assignee_name, + 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']] : '?'; + + $task = $this->dateParser->format($task, array('date_due', 'date_modification', 'date_creation', 'date_started', 'date_completed'), DateParser::DATE_FORMAT); + + 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 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'), + ); + } +} diff --git a/app/Export/TransitionExport.php b/app/Export/TransitionExport.php new file mode 100644 index 00000000..97dc28a7 --- /dev/null +++ b/app/Export/TransitionExport.php @@ -0,0 +1,77 @@ +getColumns()); + $transitions = $this->transition->getAllByProjectAndDate($project_id, $from, $to); + + foreach ($transitions as $transition) { + $results[] = $this->format($transition); + } + + return $results; + } + + /** + * Get column titles + * + * @access protected + * @return string[] + */ + protected function getColumns() + { + return array( + e('Id'), + e('Task Title'), + e('Source column'), + e('Destination column'), + e('Executer'), + e('Date'), + e('Time spent'), + ); + } + + /** + * Format the output of a transition array + * + * @access protected + * @param array $transition + * @return array + */ + protected function format(array $transition) + { + $values = array( + (int) $transition['id'], + $transition['title'], + $transition['src_column'], + $transition['dst_column'], + $transition['name'] ?: $transition['username'], + date($this->config->get('application_datetime_format', DateParser::DATE_TIME_FORMAT), $transition['date']), + round($transition['time_spent'] / 3600, 2) + ); + + return $values; + } +} diff --git a/app/Model/SubtaskExport.php b/app/Model/SubtaskExport.php deleted file mode 100644 index 7c4e941d..00000000 --- a/app/Model/SubtaskExport.php +++ /dev/null @@ -1,119 +0,0 @@ -subtask_status = $this->subtask->getStatusList(); - $subtasks = $this->getSubtasks($project_id, $from, $to); - $results = array($this->getColumns()); - - foreach ($subtasks as $subtask) { - $results[] = $this->format($subtask); - } - - return $results; - } - - /** - * Get column titles - * - * @access public - * @return string[] - */ - public function getColumns() - { - return array( - e('Subtask Id'), - e('Title'), - e('Status'), - e('Assignee'), - e('Time estimated'), - e('Time spent'), - e('Task Id'), - e('Task Title'), - ); - } - - /** - * Format the output of a subtask array - * - * @access public - * @param array $subtask Subtask properties - * @return array - */ - public function format(array $subtask) - { - $values = array(); - $values[] = $subtask['id']; - $values[] = $subtask['title']; - $values[] = $this->subtask_status[$subtask['status']]; - $values[] = $subtask['assignee_name'] ?: $subtask['assignee_username']; - $values[] = $subtask['time_estimated']; - $values[] = $subtask['time_spent']; - $values[] = $subtask['task_id']; - $values[] = $subtask['task_title']; - - return $values; - } - - /** - * Get all subtasks for a given project - * - * @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 getSubtasks($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(Subtask::TABLE) - ->eq('project_id', $project_id) - ->columns( - Subtask::TABLE.'.*', - User::TABLE.'.username AS assignee_username', - User::TABLE.'.name AS assignee_name', - Task::TABLE.'.title AS task_title' - ) - ->gte('date_creation', $from) - ->lte('date_creation', $to) - ->join(Task::TABLE, 'id', 'task_id') - ->join(User::TABLE, 'id', 'user_id') - ->asc(Subtask::TABLE.'.id') - ->findAll(); - } -} diff --git a/app/Model/TaskExport.php b/app/Model/TaskExport.php deleted file mode 100644 index 64f5e77a..00000000 --- a/app/Model/TaskExport.php +++ /dev/null @@ -1,146 +0,0 @@ -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, - users.name AS assignee_name, - 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']] : '?'; - - $task = $this->dateParser->format($task, array('date_due', 'date_modification', 'date_creation', 'date_started', 'date_completed'), DateParser::DATE_FORMAT); - - 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 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'), - ); - } -} diff --git a/app/Model/TransitionExport.php b/app/Model/TransitionExport.php deleted file mode 100644 index 33becb82..00000000 --- a/app/Model/TransitionExport.php +++ /dev/null @@ -1,76 +0,0 @@ -getColumns()); - $transitions = $this->transition->getAllByProjectAndDate($project_id, $from, $to); - - foreach ($transitions as $transition) { - $results[] = $this->format($transition); - } - - return $results; - } - - /** - * Get column titles - * - * @access protected - * @return string[] - */ - protected function getColumns() - { - return array( - e('Id'), - e('Task Title'), - e('Source column'), - e('Destination column'), - e('Executer'), - e('Date'), - e('Time spent'), - ); - } - - /** - * Format the output of a transition array - * - * @access protected - * @param array $transition - * @return array - */ - protected function format(array $transition) - { - $values = array( - (int) $transition['id'], - $transition['title'], - $transition['src_column'], - $transition['dst_column'], - $transition['name'] ?: $transition['username'], - date($this->config->get('application_datetime_format', DateParser::DATE_TIME_FORMAT), $transition['date']), - round($transition['time_spent'] / 3600, 2) - ); - - return $values; - } -} diff --git a/app/ServiceProvider/ClassProvider.php b/app/ServiceProvider/ClassProvider.php index 6612844b..f939a9b5 100644 --- a/app/ServiceProvider/ClassProvider.php +++ b/app/ServiceProvider/ClassProvider.php @@ -53,14 +53,12 @@ class ClassProvider implements ServiceProviderInterface 'ProjectUserRoleFilter', 'RememberMeSession', 'Subtask', - 'SubtaskExport', 'SubtaskTimeTracking', 'Swimlane', 'Task', 'TaskAnalytic', 'TaskCreation', 'TaskDuplication', - 'TaskExport', 'TaskExternalLink', 'TaskFinder', 'TaskFile', @@ -72,7 +70,6 @@ class ClassProvider implements ServiceProviderInterface 'TaskStatus', 'TaskMetadata', 'Transition', - 'TransitionExport', 'User', 'UserLocking', 'UserMention', @@ -113,6 +110,11 @@ class ClassProvider implements ServiceProviderInterface 'TaskImport', 'UserImport', ), + 'Export' => array( + 'SubtaskExport', + 'TaskExport', + 'TransitionExport', + ), 'Core' => array( 'DateParser', 'Helper', -- cgit v1.2.3