summaryrefslogtreecommitdiff
path: root/app/Formatter/ProjectGanttFormatter.php
diff options
context:
space:
mode:
authorFrederic Guillot <fred@kanboard.net>2015-09-20 22:18:56 -0400
committerFrederic Guillot <fred@kanboard.net>2015-09-20 22:18:56 -0400
commit689687dd4ee186cb9cf5d0230b4648e242c53b10 (patch)
tree3d26bc2079c6eb45790ba604b3a79997be4768ab /app/Formatter/ProjectGanttFormatter.php
parentf579663adcbc0b202d9a068d734e8f9284dc3a37 (diff)
Add formatters
Diffstat (limited to 'app/Formatter/ProjectGanttFormatter.php')
-rw-r--r--app/Formatter/ProjectGanttFormatter.php90
1 files changed, 90 insertions, 0 deletions
diff --git a/app/Formatter/ProjectGanttFormatter.php b/app/Formatter/ProjectGanttFormatter.php
new file mode 100644
index 00000000..652b947d
--- /dev/null
+++ b/app/Formatter/ProjectGanttFormatter.php
@@ -0,0 +1,90 @@
+<?php
+
+namespace Formatter;
+
+use Model\Project;
+
+/**
+ * Gantt chart formatter for projects
+ *
+ * @package formatter
+ * @author Frederic Guillot
+ */
+class ProjectGanttFormatter extends Project implements FormatterInterface
+{
+ /**
+ * List of projects
+ *
+ * @access private
+ * @var array
+ */
+ private $projects = array();
+
+ /**
+ * Filter projects to generate the Gantt chart
+ *
+ * @access public
+ * @param int[] $project_ids
+ * @return ProjectGanttFormatter
+ */
+ public function filter(array $project_ids)
+ {
+ if (empty($project_ids)) {
+ $this->projects = array();
+ }
+ else {
+
+ $this->projects = $this->db
+ ->table(self::TABLE)
+ ->asc('start_date')
+ ->in('id', $project_ids)
+ ->eq('is_active', self::ACTIVE)
+ ->eq('is_private', 0)
+ ->findAll();
+ }
+
+ return $this;
+ }
+
+ /**
+ * Format projects to be displayed in the Gantt chart
+ *
+ * @access public
+ * @return array
+ */
+ public function format()
+ {
+ $colors = $this->color->getDefaultColors();
+ $bars = array();
+
+ foreach ($this->projects as $project) {
+ $start = empty($project['start_date']) ? time() : strtotime($project['start_date']);
+ $end = empty($project['end_date']) ? $start : strtotime($project['end_date']);
+ $color = next($colors) ?: reset($colors);
+
+ $bars[] = array(
+ 'type' => 'project',
+ 'id' => $project['id'],
+ 'title' => $project['name'],
+ 'start' => array(
+ (int) date('Y', $start),
+ (int) date('n', $start),
+ (int) date('j', $start),
+ ),
+ 'end' => array(
+ (int) date('Y', $end),
+ (int) date('n', $end),
+ (int) date('j', $end),
+ ),
+ 'link' => $this->helper->url->href('project', 'show', array('project_id' => $project['id'])),
+ 'board_link' => $this->helper->url->href('board', 'show', array('project_id' => $project['id'])),
+ 'gantt_link' => $this->helper->url->href('gantt', 'project', array('project_id' => $project['id'])),
+ 'color' => $color,
+ 'not_defined' => empty($project['start_date']) || empty($project['end_date']),
+ 'users' => $this->projectPermission->getProjectUsers($project['id']),
+ );
+ }
+
+ return $bars;
+ }
+}