public function findFirstSubmilestoneTracker(Planning_Milestone $milestone)
 {
     $children = $this->hierarchy_factory->getChildren($milestone->getTrackerId());
     if (!$children) {
         return null;
     }
     $milestone_backlog_trackers = $milestone->getPlanning()->getBacklogTrackers();
     foreach ($milestone_backlog_trackers as $milestone_backlog_tracker) {
         foreach ($children as $tracker) {
             $planning = $this->planning_factory->getPlanningByPlanningTracker($tracker);
             if (!$planning) {
                 continue;
             }
             $planning_backlog_trackers = $planning->getBacklogTrackers();
             foreach ($planning_backlog_trackers as $planning_backlog_tracker) {
                 if ($milestone_backlog_tracker == $planning_backlog_tracker) {
                     return $tracker;
                 }
                 $backlog_tracker_ancestors = $this->hierarchy_factory->getAllParents($planning_backlog_tracker);
                 if (in_array($milestone_backlog_tracker, $backlog_tracker_ancestors)) {
                     return $tracker;
                 }
             }
         }
     }
 }
 public function __construct(\Planning_Milestone $milestone)
 {
     $this->id = JsonCast::toInt($milestone->getArtifactId());
     $this->label = $milestone->getArtifactTitle();
     $this->last_modified = JsonCast::toDate($milestone->getLastModifiedDate());
     $this->uri = self::ROUTE . '/' . $this->id;
 }
 private function getMatchingIdsForMilestone(Planning_Milestone $milestone, Tracker $backlog_tracker)
 {
     $milestone_id_seed = array($milestone->getArtifactId());
     $this->inspected_ids = $milestone_id_seed;
     $this->filterBacklogIds($backlog_tracker->getId(), $milestone_id_seed);
     return $this->backlog_ids;
 }
 private function buildAdditionnalPanesInfo(Planning_Milestone $milestone, array &$panes_info)
 {
     if (!$milestone->getArtifact()) {
         return;
     }
     EventManager::instance()->processEvent(AGILEDASHBOARD_EVENT_ADDITIONAL_PANES_INFO_ON_MILESTONE, array('milestone' => $milestone, 'user' => $this->user, 'pane_info_list' => &$panes_info));
 }
 /**
  * @return bool
  */
 public function canPlan(PFUser $user, Planning_Milestone $milestone)
 {
     $art_link_field = $milestone->getArtifact()->getAnArtifactLinkField($user);
     if ($art_link_field && $art_link_field->userCanUpdate($user)) {
         return true;
     }
     return false;
 }
Example #6
0
 private function loadTopBacklog(PFUser $user, Planning_Milestone $milestone)
 {
     if (!isset($this->backlog_item_ids[(int) $milestone->getArtifactId()])) {
         $this->backlog_item_ids[(int) $milestone->getArtifactId()] = array();
         $strategy_unassigned = $this->strategy_factory->getSelfBacklogStrategy($milestone);
         $backlog_artifacts = $this->backlog_item_collection_factory->getUnassignedOpenCollection($user, $milestone, $strategy_unassigned, false);
         $this->storeTopBacklogArtifacts((int) $milestone->getArtifactId(), $backlog_artifacts);
     }
 }
 public function __construct(AgileDashboard_BacklogItemDao $item_dao, Tracker_ArtifactDao $artifact_dao, Tracker_ArtifactFactory $artifact_factory, Planning_Milestone $milestone, array $descendant_tracker_ids)
 {
     $this->item_dao = $item_dao;
     $this->artifact_dao = $artifact_dao;
     $this->artifact_factory = $artifact_factory;
     $this->milestone = $milestone;
     $this->milestone_id = $milestone->getArtifactId();
     $this->descendant_tracker_ids = $descendant_tracker_ids;
     $this->backlog_tracker_ids = $milestone->getPlanning()->getBacklogTrackersIds();
 }
 private function getFirstChildBacklogTracker(Planning_Milestone $milestone)
 {
     $backlog_tracker_children = $milestone->getPlanning()->getPlanningTracker()->getChildren();
     if ($backlog_tracker_children) {
         $first_child_tracker = current($backlog_tracker_children);
         $first_child_planning = $this->planning_factory->getPlanningByPlanningTracker($first_child_tracker);
         if ($first_child_planning) {
             return $first_child_planning->getBacklogTrackers();
         }
     }
     return null;
 }
 /**
  * @return BreadCrumb_BreadCrumbGenerator
  */
 public function getBreadcrumbs($plugin_path)
 {
     $this->generateBareMilestone();
     if ($this->milestone->getArtifact()) {
         $breadcrumbs_merger = new BreadCrumb_Merger();
         $breadcrumbs_merger->push(new BreadCrumb_VirtualTopMilestone($plugin_path, $this->project));
         foreach (array_reverse($this->milestone->getAncestors()) as $milestone) {
             $breadcrumbs_merger->push(new BreadCrumb_Milestone($plugin_path, $milestone));
         }
         $breadcrumbs_merger->push(new BreadCrumb_Milestone($plugin_path, $this->milestone));
         return $breadcrumbs_merger;
     }
     return new BreadCrumb_NoCrumb();
 }
 private function getAllMilestonesOfCurrentPlanning()
 {
     if (!$this->all_milestones) {
         $this->all_milestones = $this->milestone_factory->getAllMilestones($this->getCurrentUser(), $this->milestone->getPlanning());
     }
     return $this->all_milestones;
 }
Example #11
0
 public function parentArtifactId()
 {
     $ancestors = $this->milestone->getAncestors();
     if (count($ancestors) > 0) {
         return $ancestors[0]->getArtifactId();
     }
 }
 public function __construct(Planning_Milestone $milestone, $redirect_to_self, PFUser $user, array $quick_link_collection)
 {
     $this->id = $milestone->getArtifactId();
     $this->planning_id = $milestone->getPlanningId();
     $this->milestone_title = $milestone->getArtifact()->getTitle();
     $this->milestone_start_date = $milestone->getStartDate();
     $this->milestone_end_date = $milestone->getEndDate();
     $this->milestone_status = $milestone->getArtifact()->getStatus();
     $this->edit_submilestone_url = $milestone->getArtifact()->getUri();
     $this->redirect_to_self = $redirect_to_self;
     $this->milestone_capacity = $milestone->getCapacity();
     $this->quick_link_collection = $quick_link_collection;
 }
 public function endDate()
 {
     $end_date = $this->milestone->getEndDate();
     if (!$end_date) {
         return null;
     }
     return $this->formatDate($end_date);
 }
 public function __construct(AgileDashboard_Milestone_Backlog_BacklogItemPresenterCollection $backlog_collection, AgileDashboard_Milestone_Pane_Planning_PlanningSubMilestonePresenterCollection $submilestone_collection, Planning_Milestone $milestone, $parent_item_type, $submilestone_item_type, $add_new_submilestone_url, $can_add_submilestone, $can_plan, $redirect_to_self, array $trackers_without_initial_effort)
 {
     $this->backlog_collection = $backlog_collection;
     $this->submilestone_collection = $submilestone_collection;
     $this->parent_item_type = $parent_item_type;
     $this->submilestone_item_type = $submilestone_item_type;
     $this->add_new_submilestone_url = $add_new_submilestone_url;
     $this->can_add_submilestone = $can_add_submilestone;
     $this->can_plan = $can_plan;
     $this->redirect_to_self = $redirect_to_self;
     $this->milestone_id = $milestone->getArtifactId();
     $this->milestone_planning_id = $milestone->getPlanningId();
     $this->milestone_item_type = $milestone->getArtifactTitle();
     foreach ($trackers_without_initial_effort as $tracker_without_initial_effort) {
         $this->trackers_without_initial_effort_field[] = $tracker_without_initial_effort->getName();
     }
 }
Example #15
0
 /**
  * @return Cardwall_PaneContentPresenter
  */
 private function getPresenterUsingMappedFields(Cardwall_OnTop_Config_ColumnCollection $columns)
 {
     $board_factory = new Cardwall_BoardFactory();
     $planned_artifacts = $this->milestone->getPlannedArtifacts();
     $field_retriever = new Cardwall_OnTop_Config_MappedFieldProvider($this->config, new Cardwall_FieldProviders_SemanticStatusFieldRetriever());
     $board = $board_factory->getBoard($field_retriever, $columns, $planned_artifacts, $this->config, $this->user);
     $backlog_title = $this->milestone->getPlanning()->getBacklogTracker()->getName();
     $redirect_parameter = 'cardwall[agile][' . $this->milestone->getPlanning()->getId() . ']=' . $this->milestone->getArtifactId();
     $configure_url = TRACKER_BASE_URL . '/?tracker=' . $this->milestone->getTrackerId() . '&func=admin-cardwall';
     return new Cardwall_PaneContentPresenter($board, $this->getQrCode(), $redirect_parameter, $backlog_title, $configure_url);
 }
Example #16
0
 private function getSwitchDisplayAvatarsURL()
 {
     if ($this->user->isAnonymous()) {
         return false;
     }
     $group_id = $this->milestone->getGroupId();
     $planning_id = $this->milestone->getPlanningId();
     $tracker_id = $this->milestone->getTrackerId();
     $artifact_id = $this->milestone->getArtifactId();
     $action = 'toggle_user_display_avatar';
     $switch_display_username_url = CARDWALL_BASE_URL . '/?group_id=' . $group_id . '&planning_id=' . $planning_id . '&tracker_id=' . $tracker_id . '&aid=' . $artifact_id . '&action=' . $action;
     return $switch_display_username_url;
 }
 /**
  * @return \AgileDashboard_Milestone_Pane_Planning_PlanningPaneInfo
  */
 private function getTopPlanningV2PaneInfo(Planning_Milestone $milestone)
 {
     $milestone_artifact_id = $this->getMilestoneArtifactId();
     $milestone_tracker = $milestone->getPlanning()->getPlanningTracker();
     if (!$milestone_tracker) {
         return;
     }
     $pane_info = new AgileDashboard_Milestone_Pane_TopPlanning_TopPlanningV2PaneInfo($milestone, $this->theme_path, $milestone_tracker);
     $pane_info->setActive(true);
     $this->active_pane[$milestone_artifact_id] = new AgileDashboard_Milestone_Pane_Planning_PlanningV2Pane($pane_info, new AgileDashboard_Milestone_Pane_Planning_PlanningV2Presenter($this->request->getCurrentUser(), $this->request->getProject(), $milestone_artifact_id, null, $this->getPaginatedBacklogItemsRepresentationsForTopMilestone($milestone, $this->request->getCurrentUser()), $this->getPaginatedTopMilestonesRepresentations($this->request->getProject(), $this->request->getCurrentUser())));
     return $pane_info;
 }
 /**
  * @return string The milestone title (i.e. the artifact's one).
  */
 public function getTitle()
 {
     return $this->milestone->getArtifactTitle();
 }
 /** @return string */
 public function getPlanningRedirectToNew(Planning_Milestone $milestone, $pane_identifier)
 {
     $planning_id = (int) $milestone->getPlanningId();
     return "planning[{$pane_identifier}][{$planning_id}]=-1";
 }
Example #20
0
 /**
  * Get all milestones that share the same parent than given milestone.
  *
  * @param User $user
  * @param Planning_Milestone $milestone
  *
  * @return Array of Planning_Milestone
  */
 public function getSiblingMilestones(User $user, Planning_Milestone $milestone)
 {
     $sibling_milestones = array();
     $milestone_artifact = $milestone->getArtifact();
     if ($milestone_artifact) {
         foreach ($milestone_artifact->getSiblings($user) as $sibling) {
             if ($sibling->getId() == $milestone_artifact->getId()) {
                 $sibling_milestones[] = $milestone;
             } else {
                 $sibling_milestones[] = $this->getMilestoneFromArtifact($sibling);
             }
         }
     }
     return $sibling_milestones;
 }
 public function getSubmitNewUrlLinkedToMilestone(Planning_Milestone $milestone)
 {
     return $milestone->getArtifact()->getSubmitNewArtifactLinkedToMeUri($this->submilestone_tracker);
 }
Example #22
0
 protected function getUriParametersForMilestone(Planning_Milestone $milestone)
 {
     return array('group_id' => $milestone->getGroupId(), 'planning_id' => $milestone->getPlanningId(), 'action' => $this->action, 'aid' => $milestone->getArtifactId(), 'pane' => $this->getIdentifier());
 }
 public function artifact_id()
 {
     return $this->milestone->getArtifactId();
 }
 public function milestoneCanBeSubmilestone(Planning_Milestone $potential_submilestone)
 {
     if ($potential_submilestone->getArtifact()->getTracker()->getParent()) {
         return $potential_submilestone->getArtifact()->getTracker()->getParent()->getId() == $this->getArtifact()->getTracker()->getId();
     }
     return false;
 }
 public function milestone_days_remaining()
 {
     return max($this->milestone->getDaysUntilEnd(), 0);
 }
Example #26
0
 public function withinTheSameProjectAs(Planning_Milestone $other_milestone)
 {
     $this->project = $other_milestone->getProject();
     return $this;
 }
 /**
  * @return \AgileDashboard_Milestone_Pane_Planning_PlanningPaneInfo
  */
 private function getTopPlanningV2PaneInfo(Planning_Milestone $milestone)
 {
     $milestone_artifact_id = $this->getMilestoneArtifactId();
     $milestone_tracker = $milestone->getPlanning()->getPlanningTracker();
     if (!$milestone_tracker) {
         return;
     }
     $pane_info = new AgileDashboard_Milestone_Pane_TopPlanning_TopPlanningV2PaneInfo($milestone, $this->theme_path, $milestone_tracker);
     if ($this->request->get('pane') == AgileDashboard_Milestone_Pane_TopPlanning_TopPlanningV2PaneInfo::IDENTIFIER) {
         $pane_info->setActive(true);
         $this->active_pane[$milestone_artifact_id] = new AgileDashboard_Milestone_Pane_Planning_PlanningV2Pane($pane_info, new AgileDashboard_Milestone_Pane_Planning_PlanningV2Presenter($this->request->getCurrentUser(), $this->request->getProject(), $milestone_artifact_id));
     }
     return $pane_info;
 }
 private function getAllMilestonesOfCurrentPlanning(Planning_Milestone $milestone)
 {
     return $this->milestone_factory->getAllBareMilestones($this->request->getCurrentUser(), $milestone->getPlanning());
 }
Example #29
0
 public function itHasATitle()
 {
     $this->milestone = new Planning_ArtifactMilestone($this->project, $this->planning, $this->artifact);
     $this->assertEqual($this->milestone->getArtifactTitle(), 'Foo');
 }
 /**
  * Returns a status array. E.g.
  *  array(
  *      Tracker_Artifact::STATUS_OPEN   => no_of_opne,
  *      Tracker_Artifact::STATUS_CLOSED => no_of_closed,
  *  )
  *
  * @return array
  */
 public function getMilestoneStatusCount(PFUser $user, Planning_Milestone $milestone)
 {
     return $this->status_counter->getStatus($user, $milestone->getArtifactId());
 }