From d1d04d6feeebeba2aea5333d7a4229fcec799f75 Mon Sep 17 00:00:00 2001 From: Frederic Guillot Date: Sun, 4 Jan 2015 21:14:57 -0500 Subject: Add subtasks export and move export actions to a specific controller --- app/Console/SubtaskExport.php | 34 ++++++++ app/Controller/Export.php | 75 ++++++++++++++++ app/Controller/Project.php | 66 -------------- app/Locale/da_DK/translations.php | 7 ++ app/Locale/de_DE/translations.php | 7 ++ app/Locale/es_ES/translations.php | 7 ++ app/Locale/fi_FI/translations.php | 7 ++ app/Locale/fr_FR/translations.php | 7 ++ app/Locale/hu_HU/translations.php | 7 ++ app/Locale/it_IT/translations.php | 7 ++ app/Locale/ja_JP/translations.php | 7 ++ app/Locale/pl_PL/translations.php | 7 ++ app/Locale/pt_BR/translations.php | 7 ++ app/Locale/ru_RU/translations.php | 7 ++ app/Locale/sv_SE/translations.php | 7 ++ app/Locale/th_TH/translations.php | 7 ++ app/Locale/zh_CN/translations.php | 7 ++ app/Model/Acl.php | 14 +-- app/Model/SubTask.php | 6 +- app/Model/SubtaskExport.php | 119 ++++++++++++++++++++++++++ app/ServiceProvider/ClassProvider.php | 1 + app/Template/export/subtasks.php | 24 ++++++ app/Template/export/summary.php | 26 ++++++ app/Template/export/tasks.php | 24 ++++++ app/Template/project/export_daily_summary.php | 26 ------ app/Template/project/export_tasks.php | 24 ------ app/Template/project/sidebar.php | 7 +- 27 files changed, 414 insertions(+), 130 deletions(-) create mode 100644 app/Console/SubtaskExport.php create mode 100644 app/Controller/Export.php create mode 100644 app/Model/SubtaskExport.php create mode 100644 app/Template/export/subtasks.php create mode 100644 app/Template/export/summary.php create mode 100644 app/Template/export/tasks.php delete mode 100644 app/Template/project/export_daily_summary.php delete mode 100644 app/Template/project/export_tasks.php (limited to 'app') diff --git a/app/Console/SubtaskExport.php b/app/Console/SubtaskExport.php new file mode 100644 index 00000000..167a9225 --- /dev/null +++ b/app/Console/SubtaskExport.php @@ -0,0 +1,34 @@ +setName('export:subtasks') + ->setDescription('Subtasks CSV export') + ->addArgument('project_id', InputArgument::REQUIRED, 'Project id') + ->addArgument('start_date', InputArgument::REQUIRED, 'Start date (YYYY-MM-DD)') + ->addArgument('end_date', InputArgument::REQUIRED, 'End date (YYYY-MM-DD)'); + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + $data = $this->subtaskExport->export( + $input->getArgument('project_id'), + $input->getArgument('start_date'), + $input->getArgument('end_date') + ); + + if (is_array($data)) { + Tool::csv($data); + } + } +} diff --git a/app/Controller/Export.php b/app/Controller/Export.php new file mode 100644 index 00000000..1997a4ea --- /dev/null +++ b/app/Controller/Export.php @@ -0,0 +1,75 @@ +getProject(); + $from = $this->request->getStringParam('from'); + $to = $this->request->getStringParam('to'); + + if ($from && $to) { + $data = $this->$model->$method($project['id'], $from, $to); + $this->response->forceDownload($filename.'.csv'); + $this->response->csv($data); + } + + $this->response->html($this->projectLayout('export/'.$action, array( + 'values' => array( + 'controller' => 'export', + 'action' => $action, + 'project_id' => $project['id'], + 'from' => $from, + 'to' => $to, + ), + 'errors' => array(), + 'date_format' => $this->config->get('application_date_format'), + 'date_formats' => $this->dateParser->getAvailableFormats(), + 'project' => $project, + 'title' => $page_title, + ))); + } + + /** + * Task export + * + * @access public + */ + public function tasks() + { + $this->common('taskExport', 'export', t('Tasks'), 'tasks', t('Tasks Export')); + } + + /** + * Subtask export + * + * @access public + */ + public function subtasks() + { + $this->common('subtaskExport', 'export', t('Subtasks'), 'subtasks', t('Subtasks Export')); + } + + /** + * Daily project summary export + * + * @access public + */ + public function summary() + { + $this->common('projectDailySummary', 'getAggregatedMetrics', t('Summary'), 'summary', t('Daily project summary export')); + } +} diff --git a/app/Controller/Project.php b/app/Controller/Project.php index 95779154..d0da53d0 100644 --- a/app/Controller/Project.php +++ b/app/Controller/Project.php @@ -56,72 +56,6 @@ class Project extends Base ))); } - /** - * Task export - * - * @access public - */ - public function exportTasks() - { - $project = $this->getProject(); - $from = $this->request->getStringParam('from'); - $to = $this->request->getStringParam('to'); - - if ($from && $to) { - $data = $this->taskExport->export($project['id'], $from, $to); - $this->response->forceDownload('Tasks_'.date('Y_m_d_H_i').'.csv'); - $this->response->csv($data); - } - - $this->response->html($this->projectLayout('project/export_tasks', array( - 'values' => array( - 'controller' => 'project', - 'action' => 'exportTasks', - 'project_id' => $project['id'], - 'from' => $from, - 'to' => $to, - ), - 'errors' => array(), - 'date_format' => $this->config->get('application_date_format'), - 'date_formats' => $this->dateParser->getAvailableFormats(), - 'project' => $project, - 'title' => t('Tasks Export') - ))); - } - - /** - * Daily project summary export - * - * @access public - */ - public function exportDailyProjectSummary() - { - $project = $this->getProject(); - $from = $this->request->getStringParam('from'); - $to = $this->request->getStringParam('to'); - - if ($from && $to) { - $data = $this->projectDailySummary->getAggregatedMetrics($project['id'], $from, $to); - $this->response->forceDownload('Daily_Summary_'.date('Y_m_d_H_i').'.csv'); - $this->response->csv($data); - } - - $this->response->html($this->projectLayout('project/export_daily_summary', array( - 'values' => array( - 'controller' => 'project', - 'action' => 'exportDailyProjectSummary', - 'project_id' => $project['id'], - 'from' => $from, - 'to' => $to, - ), - 'errors' => array(), - 'date_format' => $this->config->get('application_date_format'), - 'date_formats' => $this->dateParser->getAvailableFormats(), - 'project' => $project, - 'title' => t('Daily project summary export') - ))); - } - /** * Public access management * diff --git a/app/Locale/da_DK/translations.php b/app/Locale/da_DK/translations.php index c16e3d92..8b529d10 100644 --- a/app/Locale/da_DK/translations.php +++ b/app/Locale/da_DK/translations.php @@ -637,4 +637,11 @@ return array( // 'Project manager' => '', // 'Project member' => '', // 'A project manager can change the settings of the project and have more privileges than a standard user.' => '', + // 'Gitlab Issue' => '', + // 'Subtask Id' => '', + // 'Subtasks' => '', + // 'Subtasks Export' => '', + // 'Subtasks exportation for "%s"' => '', + // 'Task Title' => '', + // 'Untitled' => '', ); diff --git a/app/Locale/de_DE/translations.php b/app/Locale/de_DE/translations.php index d0f9ee40..58d99e8d 100644 --- a/app/Locale/de_DE/translations.php +++ b/app/Locale/de_DE/translations.php @@ -637,4 +637,11 @@ return array( // 'Project manager' => '', // 'Project member' => '', // 'A project manager can change the settings of the project and have more privileges than a standard user.' => '', + // 'Gitlab Issue' => '', + // 'Subtask Id' => '', + // 'Subtasks' => '', + // 'Subtasks Export' => '', + // 'Subtasks exportation for "%s"' => '', + // 'Task Title' => '', + // 'Untitled' => '', ); diff --git a/app/Locale/es_ES/translations.php b/app/Locale/es_ES/translations.php index 1dcb0768..ab6518a5 100644 --- a/app/Locale/es_ES/translations.php +++ b/app/Locale/es_ES/translations.php @@ -637,4 +637,11 @@ return array( // 'Project manager' => '', // 'Project member' => '', // 'A project manager can change the settings of the project and have more privileges than a standard user.' => '', + // 'Gitlab Issue' => '', + // 'Subtask Id' => '', + // 'Subtasks' => '', + // 'Subtasks Export' => '', + // 'Subtasks exportation for "%s"' => '', + // 'Task Title' => '', + // 'Untitled' => '', ); diff --git a/app/Locale/fi_FI/translations.php b/app/Locale/fi_FI/translations.php index ff5a365d..0ba5acd2 100644 --- a/app/Locale/fi_FI/translations.php +++ b/app/Locale/fi_FI/translations.php @@ -637,4 +637,11 @@ return array( // 'Project manager' => '', // 'Project member' => '', // 'A project manager can change the settings of the project and have more privileges than a standard user.' => '', + // 'Gitlab Issue' => '', + // 'Subtask Id' => '', + // 'Subtasks' => '', + // 'Subtasks Export' => '', + // 'Subtasks exportation for "%s"' => '', + // 'Task Title' => '', + // 'Untitled' => '', ); diff --git a/app/Locale/fr_FR/translations.php b/app/Locale/fr_FR/translations.php index b830a435..298813da 100644 --- a/app/Locale/fr_FR/translations.php +++ b/app/Locale/fr_FR/translations.php @@ -637,4 +637,11 @@ return array( 'Project manager' => 'Chef de projet', 'Project member' => 'Membre du projet', 'A project manager can change the settings of the project and have more privileges than a standard user.' => 'Un chef de projet peut changer les paramètres du projet et possède plus de privilèges qu\'un utilisateur standard.', + 'Gitlab Issue' => 'Ticket Gitlab', + 'Subtask Id' => 'Identifiant de la sous-tâche', + 'Subtasks' => 'Sous-tâches', + 'Subtasks Export' => 'Exportation des sous-tâches', + 'Subtasks exportation for "%s"' => 'Exportation des sous-tâches pour le projet « %s »', + 'Task Title' => 'Titre de la tâche', + 'Untitled' => 'Sans nom', ); diff --git a/app/Locale/hu_HU/translations.php b/app/Locale/hu_HU/translations.php index b7e5ae25..12123634 100644 --- a/app/Locale/hu_HU/translations.php +++ b/app/Locale/hu_HU/translations.php @@ -637,4 +637,11 @@ return array( // 'Project manager' => '', // 'Project member' => '', // 'A project manager can change the settings of the project and have more privileges than a standard user.' => '', + // 'Gitlab Issue' => '', + // 'Subtask Id' => '', + // 'Subtasks' => '', + // 'Subtasks Export' => '', + // 'Subtasks exportation for "%s"' => '', + // 'Task Title' => '', + // 'Untitled' => '', ); diff --git a/app/Locale/it_IT/translations.php b/app/Locale/it_IT/translations.php index 828c72a7..5d4f35a1 100644 --- a/app/Locale/it_IT/translations.php +++ b/app/Locale/it_IT/translations.php @@ -637,4 +637,11 @@ return array( // 'Project manager' => '', // 'Project member' => '', // 'A project manager can change the settings of the project and have more privileges than a standard user.' => '', + // 'Gitlab Issue' => '', + // 'Subtask Id' => '', + // 'Subtasks' => '', + // 'Subtasks Export' => '', + // 'Subtasks exportation for "%s"' => '', + // 'Task Title' => '', + // 'Untitled' => '', ); diff --git a/app/Locale/ja_JP/translations.php b/app/Locale/ja_JP/translations.php index e424a151..dfa9a365 100644 --- a/app/Locale/ja_JP/translations.php +++ b/app/Locale/ja_JP/translations.php @@ -637,4 +637,11 @@ return array( // 'Project manager' => '', // 'Project member' => '', // 'A project manager can change the settings of the project and have more privileges than a standard user.' => '', + // 'Gitlab Issue' => '', + // 'Subtask Id' => '', + // 'Subtasks' => '', + // 'Subtasks Export' => '', + // 'Subtasks exportation for "%s"' => '', + // 'Task Title' => '', + // 'Untitled' => '', ); diff --git a/app/Locale/pl_PL/translations.php b/app/Locale/pl_PL/translations.php index aa4e7428..058ff567 100644 --- a/app/Locale/pl_PL/translations.php +++ b/app/Locale/pl_PL/translations.php @@ -637,4 +637,11 @@ return array( // 'Project manager' => '', // 'Project member' => '', // 'A project manager can change the settings of the project and have more privileges than a standard user.' => '', + // 'Gitlab Issue' => '', + // 'Subtask Id' => '', + // 'Subtasks' => '', + // 'Subtasks Export' => '', + // 'Subtasks exportation for "%s"' => '', + // 'Task Title' => '', + // 'Untitled' => '', ); diff --git a/app/Locale/pt_BR/translations.php b/app/Locale/pt_BR/translations.php index cb873cd2..f585bce8 100644 --- a/app/Locale/pt_BR/translations.php +++ b/app/Locale/pt_BR/translations.php @@ -637,4 +637,11 @@ return array( // 'Project manager' => '', // 'Project member' => '', // 'A project manager can change the settings of the project and have more privileges than a standard user.' => '', + // 'Gitlab Issue' => '', + // 'Subtask Id' => '', + // 'Subtasks' => '', + // 'Subtasks Export' => '', + // 'Subtasks exportation for "%s"' => '', + // 'Task Title' => '', + // 'Untitled' => '', ); diff --git a/app/Locale/ru_RU/translations.php b/app/Locale/ru_RU/translations.php index e3ad20df..03eda536 100644 --- a/app/Locale/ru_RU/translations.php +++ b/app/Locale/ru_RU/translations.php @@ -637,4 +637,11 @@ return array( // 'Project manager' => '', // 'Project member' => '', // 'A project manager can change the settings of the project and have more privileges than a standard user.' => '', + // 'Gitlab Issue' => '', + // 'Subtask Id' => '', + // 'Subtasks' => '', + // 'Subtasks Export' => '', + // 'Subtasks exportation for "%s"' => '', + // 'Task Title' => '', + // 'Untitled' => '', ); diff --git a/app/Locale/sv_SE/translations.php b/app/Locale/sv_SE/translations.php index 779cce06..12b4b2e2 100644 --- a/app/Locale/sv_SE/translations.php +++ b/app/Locale/sv_SE/translations.php @@ -637,4 +637,11 @@ return array( // 'Project manager' => '', // 'Project member' => '', // 'A project manager can change the settings of the project and have more privileges than a standard user.' => '', + // 'Gitlab Issue' => '', + // 'Subtask Id' => '', + // 'Subtasks' => '', + // 'Subtasks Export' => '', + // 'Subtasks exportation for "%s"' => '', + // 'Task Title' => '', + // 'Untitled' => '', ); diff --git a/app/Locale/th_TH/translations.php b/app/Locale/th_TH/translations.php index c0cd5292..4d2940de 100644 --- a/app/Locale/th_TH/translations.php +++ b/app/Locale/th_TH/translations.php @@ -637,4 +637,11 @@ return array( // 'Project manager' => '', // 'Project member' => '', // 'A project manager can change the settings of the project and have more privileges than a standard user.' => '', + // 'Gitlab Issue' => '', + // 'Subtask Id' => '', + // 'Subtasks' => '', + // 'Subtasks Export' => '', + // 'Subtasks exportation for "%s"' => '', + // 'Task Title' => '', + // 'Untitled' => '', ); diff --git a/app/Locale/zh_CN/translations.php b/app/Locale/zh_CN/translations.php index a7810989..15db3d68 100644 --- a/app/Locale/zh_CN/translations.php +++ b/app/Locale/zh_CN/translations.php @@ -637,4 +637,11 @@ return array( // 'Project manager' => '', // 'Project member' => '', // 'A project manager can change the settings of the project and have more privileges than a standard user.' => '', + // 'Gitlab Issue' => '', + // 'Subtask Id' => '', + // 'Subtasks' => '', + // 'Subtasks Export' => '', + // 'Subtasks exportation for "%s"' => '', + // 'Task Title' => '', + // 'Untitled' => '', ); diff --git a/app/Model/Acl.php b/app/Model/Acl.php index 9c3f5e06..599ff055 100644 --- a/app/Model/Acl.php +++ b/app/Model/Acl.php @@ -50,7 +50,8 @@ class Acl extends Base 'analytic' => '*', 'board' => array('movecolumn', 'edit', 'update', 'add', 'remove'), 'category' => '*', - 'project' => array('edit', 'update', 'exporttasks', 'exportdailyprojectsummary', 'share', 'integration', 'users', 'alloweverybody', 'allow', 'setowner', 'revoke', 'duplicate', 'disable', 'enable'), + 'export' => array('tasks', 'subtasks', 'summary'), + 'project' => array('edit', 'update', 'share', 'integration', 'users', 'alloweverybody', 'allow', 'setowner', 'revoke', 'duplicate', 'disable', 'enable'), 'swimlane' => '*', ); @@ -179,7 +180,7 @@ class Acl extends Base // Check project member permissions if ($this->isMemberAction($controller, $action)) { - return $this->isMemberActionAllowed($project_id); + return $project_id > 0 && $this->projectPermission->isMember($project_id, $this->userSession->getId()); } // Other applications actions are allowed @@ -188,11 +189,10 @@ class Acl extends Base public function isManagerActionAllowed($project_id) { - return $project_id > 0 && $this->projectPermission->isManager($project_id, $this->userSession->getId()); - } + if ($this->userSession->isAdmin()) { + return true; + } - public function isMemberActionAllowed($project_id) - { - return $project_id > 0 && $this->projectPermission->isMember($project_id, $this->userSession->getId()); + return $project_id > 0 && $this->projectPermission->isManager($project_id, $this->userSession->getId()); } } diff --git a/app/Model/SubTask.php b/app/Model/SubTask.php index adc5aa73..1c5d1bf0 100644 --- a/app/Model/SubTask.php +++ b/app/Model/SubTask.php @@ -58,15 +58,11 @@ class SubTask extends Base */ public function getStatusList() { - $status = array( + return array( self::STATUS_TODO => t('Todo'), self::STATUS_INPROGRESS => t('In progress'), self::STATUS_DONE => t('Done'), ); - - asort($status); - - return $status; } /** diff --git a/app/Model/SubtaskExport.php b/app/Model/SubtaskExport.php new file mode 100644 index 00000000..50b028e2 --- /dev/null +++ b/app/Model/SubtaskExport.php @@ -0,0 +1,119 @@ +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 $task_id Task 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->resetDateToMidnight($this->dateParser->getTimestamp($from)); + } + + if (! is_numeric($to)) { + $to = $this->dateParser->resetDateToMidnight(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/ServiceProvider/ClassProvider.php b/app/ServiceProvider/ClassProvider.php index f8d20262..3177276a 100644 --- a/app/ServiceProvider/ClassProvider.php +++ b/app/ServiceProvider/ClassProvider.php @@ -32,6 +32,7 @@ class ClassProvider implements ServiceProviderInterface 'ProjectPermission', 'SubTask', 'SubtaskPaginator', + 'SubtaskExport', 'Swimlane', 'Task', 'TaskCreation', diff --git a/app/Template/export/subtasks.php b/app/Template/export/subtasks.php new file mode 100644 index 00000000..aa999a56 --- /dev/null +++ b/app/Template/export/subtasks.php @@ -0,0 +1,24 @@ + + +
+ + formHidden('controller', $values) ?> + formHidden('action', $values) ?> + formHidden('project_id', $values) ?> + + formLabel(t('Start Date'), 'from') ?> + formText('from', $values, $errors, array('required', 'placeholder="'.$this->inList($date_format, $date_formats).'"'), 'form-date') ?>
+ + formLabel(t('End Date'), 'to') ?> + formText('to', $values, $errors, array('required', 'placeholder="'.$this->inList($date_format, $date_formats).'"'), 'form-date') ?> + +
+ +
+ +
+
\ No newline at end of file diff --git a/app/Template/export/summary.php b/app/Template/export/summary.php new file mode 100644 index 00000000..191d36b6 --- /dev/null +++ b/app/Template/export/summary.php @@ -0,0 +1,26 @@ + + +

+ +
+ + formHidden('controller', $values) ?> + formHidden('action', $values) ?> + formHidden('project_id', $values) ?> + + formLabel(t('Start Date'), 'from') ?> + formText('from', $values, $errors, array('required', 'placeholder="'.$this->inList($date_format, $date_formats).'"'), 'form-date') ?>
+ + formLabel(t('End Date'), 'to') ?> + formText('to', $values, $errors, array('required', 'placeholder="'.$this->inList($date_format, $date_formats).'"'), 'form-date') ?> + +
+ +
+ +
+
\ No newline at end of file diff --git a/app/Template/export/tasks.php b/app/Template/export/tasks.php new file mode 100644 index 00000000..e502085c --- /dev/null +++ b/app/Template/export/tasks.php @@ -0,0 +1,24 @@ + + +
+ + formHidden('controller', $values) ?> + formHidden('action', $values) ?> + formHidden('project_id', $values) ?> + + formLabel(t('Start Date'), 'from') ?> + formText('from', $values, $errors, array('required', 'placeholder="'.$this->inList($date_format, $date_formats).'"'), 'form-date') ?>
+ + formLabel(t('End Date'), 'to') ?> + formText('to', $values, $errors, array('required', 'placeholder="'.$this->inList($date_format, $date_formats).'"'), 'form-date') ?> + +
+ +
+ +
+
\ No newline at end of file diff --git a/app/Template/project/export_daily_summary.php b/app/Template/project/export_daily_summary.php deleted file mode 100644 index 191d36b6..00000000 --- a/app/Template/project/export_daily_summary.php +++ /dev/null @@ -1,26 +0,0 @@ - - -

- -
- - formHidden('controller', $values) ?> - formHidden('action', $values) ?> - formHidden('project_id', $values) ?> - - formLabel(t('Start Date'), 'from') ?> - formText('from', $values, $errors, array('required', 'placeholder="'.$this->inList($date_format, $date_formats).'"'), 'form-date') ?>
- - formLabel(t('End Date'), 'to') ?> - formText('to', $values, $errors, array('required', 'placeholder="'.$this->inList($date_format, $date_formats).'"'), 'form-date') ?> - -
- -
- -
-
\ No newline at end of file diff --git a/app/Template/project/export_tasks.php b/app/Template/project/export_tasks.php deleted file mode 100644 index e502085c..00000000 --- a/app/Template/project/export_tasks.php +++ /dev/null @@ -1,24 +0,0 @@ - - -
- - formHidden('controller', $values) ?> - formHidden('action', $values) ?> - formHidden('project_id', $values) ?> - - formLabel(t('Start Date'), 'from') ?> - formText('from', $values, $errors, array('required', 'placeholder="'.$this->inList($date_format, $date_formats).'"'), 'form-date') ?>
- - formLabel(t('End Date'), 'to') ?> - formText('to', $values, $errors, array('required', 'placeholder="'.$this->inList($date_format, $date_formats).'"'), 'form-date') ?> - -
- -
- -
-
\ No newline at end of file diff --git a/app/Template/project/sidebar.php b/app/Template/project/sidebar.php index f28f6b0d..f4809fde 100644 --- a/app/Template/project/sidebar.php +++ b/app/Template/project/sidebar.php @@ -54,10 +54,13 @@

-- cgit v1.2.3