public function executeTimeline(sfWebRequest $request) { $this->roadmap = RoadmapTable::getInstance()->getRoadmapForUser($this->getUser()->getGuardUser(), $request->getParameter('id')); $this->forward404Unless(is_object($this->roadmap)); $this->un_finished_decisions = array(); $this->timeline_data = array('timeline' => array('headline' => $this->prepare_string_to_json($this->roadmap->getName()), 'type' => 'default', 'text' => $this->prepare_string_to_json($this->roadmap->getDescription()), 'date' => array())); $min_start_date = ''; $max_end_date = ''; $roadmap_decisions = RoadmapDecisionTable::getInstance()->createQuery('rd')->leftJoin('rd.Decision d')->leftJoin('d.Alternative a')->where('rd.roadmap_id = ?', $this->roadmap->getId())->orderBy('d.start_date ASC')->execute(); foreach ($roadmap_decisions as $roadmap_decision) { /** @var $roadmap_decision RoadmapDecision */ if ($roadmap_decision->getDecision()->getStartDate()) { $start_date = new DateTime($roadmap_decision->getDecision()->getStartDate()); $end_date = $roadmap_decision->getDecision()->getEndDate() ? new DateTime($roadmap_decision->getDecision()->getEndDate()) : null; if (empty($min_start_date) || strtotime($min_start_date) > strtotime($roadmap_decision->getDecision()->getStartDate())) { $min_start_date = $roadmap_decision->getDecision()->getStartDate(); } if (empty($max_end_date) || $roadmap_decision->getDecision()->getEndDate() && strtotime($max_end_date) < strtotime($roadmap_decision->getDecision()->getEndDate())) { $max_end_date = $roadmap_decision->getDecision()->getEndDate(); } $releases = array(); foreach ($roadmap_decision->getDecision()->getProjectRelease() as $project_release) { /** @var $project_release ProjectRelease */ $releases[] = $project_release->getName() . ' - <a href="' . $this->getContext()->getRouting()->generate('planner', array('decision_id' => $roadmap_decision->getDecision()->getId())) . '">Edit</a>'; } $tags = array(); foreach ($roadmap_decision->getDecision()->getTagDecision() as $tag_decision) { /** @var $tag_decision TagDecision */ $tags[] = '<span class="tag label label-info">' . $tag_decision->getTag()->getName() . '</span>'; } $alternative_relations_text = ''; $alternative_relations = array(); $related_decisions = array(); foreach ($roadmap_decision->getDecision()->getAlternative() as $alternative) { /** @var $alternative Alternative */ if (count($alternative->getAlternativeRelation())) { $alternative_relations[$alternative->getId()]['alternative'] = $alternative; foreach ($alternative->getAlternativeRelation() as $relation) { /** @var $relation AlternativeRelation */ $related_decisions[$relation->getAlternativeTo()->getDecisionId()] = $relation->getAlternativeTo()->getDecision()->getName(); $alternative_relations[$alternative->getId()]['relations'][$relation->getAlternativeTo()->getDecisionId()]['decision'] = $relation->getAlternativeTo()->getDecision(); $alternative_relations[$alternative->getId()]['relations'][$relation->getAlternativeTo()->getDecisionId()]['linked_alternatives'][] = $relation->getAlternativeTo(); } } } $relation_text = array(); if (count($alternative_relations)) { foreach ($alternative_relations as $alternative_relation) { foreach ($alternative_relation['relations'] as $relation) { $temp_linked_alternatives = array(); foreach ($relation['linked_alternatives'] as $linked_alternative) { $temp_linked_alternatives[] .= '<a href="javascript:void(0)" data-edit-url="' . $this->getContext()->getRouting()->generate('alternative\\edit', array('id' => $linked_alternative->getId())) . '" data-delete-url="' . $this->getContext()->getRouting()->generate('alternative\\delete', array('id' => $linked_alternative->getId())) . '" class="alternative_edit" data-toggle="popover" data-content="' . $this->getComponent("roadmap", "alternativePopupInfo", array('alternative' => $linked_alternative)) . '">' . $linked_alternative->getName() . '</a>'; } $relation_text[] = '<li> - <a href="javascript:void(0)" data-edit-url="' . $this->getContext()->getRouting()->generate('alternative\\edit', array('id' => $alternative_relation['alternative']->getId())) . '" data-delete-url="' . $this->getContext()->getRouting()->generate('alternative\\delete', array('id' => $alternative_relation['alternative']->getId())) . '" class="alternative_edit" data-toggle="popover" data-content="' . $this->getComponent("roadmap", "alternativePopupInfo", array('alternative' => $alternative_relation['alternative'])) . '" >' . $alternative_relation['alternative']->getName() . "</a> has dependency to " . implode(', ', $temp_linked_alternatives) . " in project " . $relation['decision']->getName() . "</li>"; } } $alternative_relations_text = "<b>This project has dependency to project(s) " . implode(', ', $related_decisions) . '</b><ul>' . implode('', $relation_text); } // Delete link to itself if (array_key_exists($roadmap_decision->getDecision()->getId(), $related_decisions)) { unset($related_decisions[$roadmap_decision->getDecision()->getId()]); } $this->timeline_data['timeline']['date'][] = array('startDate' => $start_date->format('Y,m,j'), 'endDate' => $end_date ? $end_date->format('Y,m,j') : '', 'labelText' => $this->prepare_string_to_json($roadmap_decision->getDecision()->getName()), 'headline' => $this->prepare_string_to_json($roadmap_decision->getDecision()->getName()) . ' <span style="font-size: 14px;">- <a href="javascript: void(0);" class="edit-decision" data-edit-url = "' . $this->getContext()->getRouting()->generate('decision\\edit', array('id' => $roadmap_decision->getDecision()->getId())) . '" data-delete-url = "' . $this->getContext()->getRouting()->generate('decision\\delete', array('id' => $roadmap_decision->getDecision()->getId())) . '">Edit</a></span>', 'text' => $this->prepare_string_to_json($roadmap_decision->getDecision()->getObjective() . '<div class="mr-top-15">' . implode(' ', $tags) . '</div>' . '<div class="mr-top-25 timeline-alternative-relations">' . $alternative_relations_text . '</div>'), 'labelColor' => $this->prepare_string_to_json($roadmap_decision->getDecision()->getColor() ? $roadmap_decision->getDecision()->getColor() : '#CCCCCC'), 'status' => $this->prepare_string_to_json($roadmap_decision->getDecision()->getStatus()), 'decisionId' => $roadmap_decision->getDecision()->getId(), 'linkedTo' => array_keys($related_decisions), 'asset' => array('media' => $this->prepare_string_to_json(count($releases) ? '<h2>Releases</h2><ul><li>' . implode('</li><li>', $releases) . '</li></ul>' : ' '))); } else { $this->un_finished_decisions[] = $roadmap_decision->getDecision(); } } /* if (count($this->timeline_data['timeline']['date']) <=6) { $i = 1; foreach ($this->timeline_data['timeline']['date'] as $key => $date) { $this->timeline_data['timeline']['date'][$key]['tag'] = $i++; } }*/ if ($min_start_date && $max_end_date) { $this->timeline_data['timeline']['startDate'] = date('Y,m,j', strtotime($min_start_date) + (strtotime($max_end_date) - strtotime($min_start_date)) / 2); } $this->timeline_data = json_encode($this->timeline_data); }
private function prepareDataForTimelineView() { $timeline_data = array('timeline' => array('headline' => $this->roadmap->getName(), 'type' => 'default', 'text' => $this->roadmap->getDescription(), 'date' => array())); $min_start_date = ''; $max_end_date = ''; $roadmap_decisions = RoadmapDecisionTable::getInstance()->createQuery('rd')->leftJoin('rd.Decision d')->leftJoin('d.Alternative a')->where('rd.roadmap_id = ?', $this->roadmap->getId())->orderBy('d.start_date ASC')->execute(); foreach ($roadmap_decisions as $roadmap_decision) { /** @var $roadmap_decision RoadmapDecision */ if ($roadmap_decision->getDecision()->getStartDate()) { $start_date = new DateTime($roadmap_decision->getDecision()->getStartDate()); $end_date = $roadmap_decision->getDecision()->getEndDate() ? new DateTime($roadmap_decision->getDecision()->getEndDate()) : null; if (empty($min_start_date) || strtotime($min_start_date) > strtotime($roadmap_decision->getDecision()->getStartDate())) { $min_start_date = $roadmap_decision->getDecision()->getStartDate(); } if (empty($max_end_date) || $roadmap_decision->getDecision()->getEndDate() && strtotime($max_end_date) < strtotime($roadmap_decision->getDecision()->getEndDate())) { $max_end_date = $roadmap_decision->getDecision()->getEndDate(); } $releases = array(); foreach ($roadmap_decision->getDecision()->getProjectRelease() as $project_release) { /** @var $project_release ProjectRelease */ $releases[] = $project_release->getName(); } $tags = array(); foreach ($roadmap_decision->getDecision()->getTagDecision() as $tag_decision) { /** @var $tag_decision TagDecision */ $tags[] = '<span class="tag label label-info">' . $tag_decision->getTag()->getName() . '</span>'; } $alternative_relations_text = ''; $alternative_relations = array(); $related_decisions = array(); foreach ($roadmap_decision->getDecision()->getAlternative() as $alternative) { /** @var $alternative Alternative */ if (count($alternative->getAlternativeRelation())) { $alternative_relations[$alternative->getId()]['alternative'] = $alternative; foreach ($alternative->getAlternativeRelation() as $relation) { /** @var $relation AlternativeRelation */ $related_decisions[$relation->getAlternativeTo()->getDecisionId()] = $relation->getAlternativeTo()->getDecision()->getName(); $alternative_relations[$alternative->getId()]['relations'][$relation->getAlternativeTo()->getDecisionId()]['decision'] = $relation->getAlternativeTo()->getDecision(); $alternative_relations[$alternative->getId()]['relations'][$relation->getAlternativeTo()->getDecisionId()]['linked_alternatives'][] = $relation->getAlternativeTo(); } } } $relation_text = array(); if (count($alternative_relations)) { foreach ($alternative_relations as $alternative_relation) { foreach ($alternative_relation['relations'] as $relation) { $temp_linked_alternatives = array(); foreach ($relation['linked_alternatives'] as $linked_alternative) { $temp_linked_alternatives[] .= $linked_alternative->getName(); } $relation_text[] = '<li> - ' . $alternative_relation['alternative']->getName() . " has dependency to " . implode(', ', $temp_linked_alternatives) . " in project " . $relation['decision']->getName() . "</li>"; } } $alternative_relations_text = "<b>This project has dependency to project(s) " . implode(', ', $related_decisions) . '</b><ul>' . implode('', $relation_text); } // Delete link to itself if (array_key_exists($roadmap_decision->getDecision()->getId(), $related_decisions)) { unset($related_decisions[$roadmap_decision->getDecision()->getId()]); } $timeline_data['timeline']['date'][] = array('startDate' => $start_date->format('Y,m,j'), 'endDate' => $end_date ? $end_date->format('Y,m,j') : '', 'labelText' => $roadmap_decision->getDecision()->getName(), 'headline' => $roadmap_decision->getDecision()->getName(), 'text' => $roadmap_decision->getDecision()->getObjective() . '<div class="mr-top-15">' . implode(' ', $tags) . '</div>' . '<div class="mr-top-25 timeline-alternative-relations">' . $alternative_relations_text . '</div>', 'labelColor' => $roadmap_decision->getDecision()->getColor() ? $roadmap_decision->getDecision()->getColor() : '#CCCCCC', 'status' => $roadmap_decision->getDecision()->getStatus(), 'decisionId' => $roadmap_decision->getDecision()->getId(), 'linkedTo' => array_keys($related_decisions), 'asset' => array('media' => count($releases) ? '<h2>Releases</h2><ul><li>' . implode('</li><li>', $releases) . '</li></ul>' : ' ')); } } if ($min_start_date && $max_end_date) { $timeline_data['timeline']['startDate'] = date('Y,m,j', strtotime($min_start_date) + (strtotime($max_end_date) - strtotime($min_start_date)) / 2); } $this->timeline_data = $timeline_data; }