public function createArtifact() { $planning_id = $this->request->get('planning_id'); $planning = $this->planning_factory->getPlanning($planning_id); $tracker_id = $planning->getPlanningTrackerId(); $GLOBALS['Response']->redirect(TRACKER_BASE_URL . "/?tracker={$tracker_id}&func=new-artifact&planning[{$planning_id}]=-1"); }
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; } } } } }
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; }
/** * @param Tracker $tracker * @return \Tracker */ private function getSwimlineTracker(Tracker $tracker) { //TODO This file should be in agile dashboard and the generic part of the cardwall in plugin/tracker @(include_once dirname(__FILE__) . '/../../../agiledashboard/include/Planning/PlanningFactory.class.php'); if (class_exists('PlanningFactory')) { $planning_factory = new PlanningFactory(new PlanningDao(), $this->tracker_factory); if ($planning = $planning_factory->getPlanningByPlanningTracker($tracker)) { return $planning->getBacklogTracker(); } } return $tracker; }
public function createKanban() { $kanban_name = $this->request->get('kanban-name'); $tracker_id = $this->request->get('tracker-kanban'); $tracker = $this->tracker_factory->getTrackerById($tracker_id); $user = $this->request->getCurrentUser(); $hierarchy = new Tracker_Hierarchy(); if (!$user->isAdmin($this->group_id)) { $GLOBALS['Response']->addFeedback(Feedback::ERROR, $GLOBALS['Language']->getText('global', 'perm_denied')); return; } if ($this->kanban_manager->doesKanbanExistForTracker($tracker)) { $GLOBALS['Response']->addFeedback(Feedback::ERROR, $GLOBALS['Language']->getText('plugin_agiledashboard', 'kanban_tracker_used')); $this->redirectToHome(); return; } try { $hierarchy->getLevel($tracker_id); $is_in_hierarchy = true; } catch (Tracker_Hierarchy_NotInHierarchyException $exeption) { $is_in_hierarchy = false; } if ((count($this->planning_factory->getPlanningsByBacklogTracker($tracker)) > 0 || count($this->planning_factory->getPlanningByPlanningTracker($tracker)) > 0) && !$is_in_hierarchy) { $GLOBALS['Response']->addFeedback(Feedback::ERROR, $GLOBALS['Language']->getText('plugin_agiledashboard', 'tracker_used_in_scrum')); $this->redirectToHome(); return; } if ($this->kanban_manager->createKanban($kanban_name, $tracker_id)) { $GLOBALS['Response']->addFeedback(Feedback::INFO, $GLOBALS['Language']->getText('plugin_agiledashboard', 'kanban_created', array($kanban_name))); } else { $GLOBALS['Response']->addFeedback(Feedback::ERROR, $GLOBALS['Language']->getText('plugin_agiledashboard', 'kanban_creation_error', array($kanban_name))); } $this->redirectToHome(); }
private function hasUserPriorityChangePermission(PFUser $user, Project $project) { $root_planning = $this->planning_factory->getRootPlanning($user, $project->getId()); if ($root_planning) { return $this->planning_permissions_manager->userHasPermissionOnPlanning($root_planning->getId(), $root_planning->getGroupId(), $user, PlanningPermissionsManager::PERM_PRIORITY_CHANGE); } return false; }
private function getPlanning($planning_id) { $planning = $this->planning_factory->getPlanning($planning_id); if ($planning) { return $planning; } throw new CardControllerBuilderRequestPlanningIdException(); }
private function canUserPrioritizeBacklog(PFUser $user, $group_id) { $planning_permissions_manager = new PlanningPermissionsManager(); $root_planning = PlanningFactory::build()->getRootPlanning($user, $group_id); if ($root_planning) { return $planning_permissions_manager->userHasPermissionOnPlanning($root_planning->getId(), $root_planning->getGroupId(), $user, PlanningPermissionsManager::PERM_PRIORITY_CHANGE); } return false; }
/** * Get the top most recent milestone (last created artifact in planning tracker) * * @param User $user * @param Integer $planning_id * * @return Planning_Milestone */ public function getCurrentMilestone(User $user, $planning_id) { $planning = $this->planning_factory->getPlanningWithTrackers($planning_id); $artifacts = $this->artifact_factory->getOpenArtifactsByTrackerIdUserCanView($user, $planning->getPlanningTrackerId()); if (count($artifacts) > 0) { return $this->getMilestoneFromArtifact(array_shift($artifacts)); } return new Planning_NoMilestone($planning->getPlanningTracker()->getProject(), $planning); }
/** * Builds a new cross-tracker search view builder. * * TODO: * - move to controller (this has nothing to do with routing) * * @param Codendi_Request $request * * @return Tracker_CrossSearch_ViewBuilder */ protected function getViewBuilder(Codendi_Request $request) { $form_element_factory = Tracker_FormElementFactory::instance(); $group_id = $request->get('group_id'); $user = $request->getCurrentUser(); $object_god = new TrackerManager(); $planning_trackers = $this->planning_factory->getPlanningTrackers($group_id, $user); $art_link_field_ids = $form_element_factory->getArtifactLinkFieldsOfTrackers($planning_trackers); return new Planning_ViewBuilder($form_element_factory, $object_god->getCrossSearch($art_link_field_ids), $object_god->getCriteriaBuilder($user, $planning_trackers)); }
/** @return Tracker[] */ private function keepsTrackersUntilThereIsNoPlanning(array $list_of_trackers) { $trackers = array(); foreach ($list_of_trackers as $tracker) { if (!$this->planning_factory->getPlanningByPlanningTracker($tracker)) { break; } $trackers[] = $tracker; } return $trackers; }
public function import() { $this->checkUserIsAdmin(); $xml = $this->request->get('xml_content')->agiledashboard; $xml_validator = new XML_RNGValidator(); $rng_path = realpath(AGILEDASHBOARD_BASE_DIR . '/../www/resources/xml_project_agiledashboard.rng'); $xml_validator->validate($xml, $rng_path); $xml_importer = new AgileDashboard_XMLImporter(); $data = $xml_importer->toArray($xml, $this->request->get('mapping')); $validator = new Planning_RequestValidator($this->planning_factory, $this->kanban_factory); foreach ($data['plannings'] as $planning) { $request_params = array('planning' => $planning, 'group_id' => $this->group_id, 'planning_id' => ''); $request = new Codendi_Request($request_params); if ($validator->isValid($request)) { $this->planning_factory->createPlanning($this->group_id, PlanningParameters::fromArray($planning)); } else { throw new Exception('Planning is not valid: ' . print_r($planning, true)); } } }
public function tracker_event_redirect_after_artifact_creation_or_update($params) { $this->updateBacklogs($params); $requested_planning = $this->extractPlanningAndArtifactFromRequest($params['request']); if ($requested_planning) { $planning = PlanningFactory::build()->getPlanning($requested_planning['planning_id']); if ($planning && $this->requestCanLeaveTheTracker($params['request'])) { $this->redirectToPlanning($params, $requested_planning, $planning); } } }
public function __construct(Cardwall_PaneInfo $info, Planning_Milestone $milestone, Cardwall_OnTop_Config $config, PFUser $user, Planning_MilestoneFactory $milestone_factory) { $this->info = $info; $this->milestone = $milestone; $this->config = $config; $this->user = $user; $this->milestone_factory = $milestone_factory; $this->artifact_factory = Tracker_ArtifactFactory::instance(); $this->tracker_form_element_factory = Tracker_FormElementFactory::instance(); $this->user_manager = UserManager::instance(); $this->planning_factory = PlanningFactory::build(); }
/** * Get a list of planning short access defined in a group_id * * @param PFUser $user The user who will see the planning * @param int $group_id * * @return array of Planning_ShortAccess */ public function getPlanningsShortAccess(PFUser $user, $group_id, Planning_MilestoneFactory $milestone_factory, $theme_path) { $plannings = $this->planning_factory->getPlannings($user, $group_id); $short_access = array(); foreach ($plannings as $planning) { if (!$this->thereIsAtLeastOneBacklogTrackerNotDeleted($planning)) { $backlog_tracker_names = array(); foreach ($planning->getBacklogTrackers() as $tracker) { $backlog_tracker_names[] = $tracker->getName(); } throw new Planning_InvalidConfigurationException($GLOBALS['Language']->getText('plugin_agiledashboard', 'planning_invalidconf_deletedtracker', array($planning->getPlanTitle(), implode(',', $backlog_tracker_names)))); } elseif ($planning->getPlanningTracker()->isDeleted()) { throw new Planning_InvalidConfigurationException($GLOBALS['Language']->getText('plugin_agiledashboard', 'planning_invalidconf_deletedtracker', array($planning->getPlanTitle(), $planning->getPlanningTracker()->getName()))); } else { $short_access[] = $this->getShortAccessForPlanning($planning, $user, $milestone_factory, $theme_path, 0); } } if (!empty($short_access)) { end($short_access)->setIsLatest(); } return $short_access; }
public function activatePlugins() { $this->activatePlugin('tracker'); $this->activatePlugin('agiledashboard'); $this->activatePlugin('cardwall'); PluginManager::instance()->invalidateCache(); PluginManager::instance()->loadPlugins(); $this->tracker_artifact_factory = Tracker_ArtifactFactory::instance(); $this->tracker_formelement_factory = Tracker_FormElementFactory::instance(); $this->tracker_factory = TrackerFactory::instance(); $this->hierarchy_checker = new AgileDashboard_HierarchyChecker(PlanningFactory::build(), new AgileDashboard_KanbanFactory($this->tracker_factory, new AgileDashboard_KanbanDao()), $this->tracker_factory); return $this; }
private function filterOutAssignedBacklogItems(AgileDashboard_Milestone_Backlog_IBacklogItemCollection $collection, PFUser $user) { $artifact_ids = $this->getBacklogItemsArtifactIds($collection); if (!$artifact_ids) { return $collection; } $collection->rewind(); $artifact = $collection->current()->getArtifact(); $project_id = $artifact->getTracker()->getProject()->getID(); $plannings = $this->planning_factory->getPlannings($user, $project_id); $planning_milestone_tracker_ids = $this->getPlanningMilestoneTrackerIds($plannings); if (!$planning_milestone_tracker_ids) { return $collection; } $linked_item_artifacts_ids = $this->artifact_factory->getArtifactIdsLinkedToTrackers($artifact_ids, $planning_milestone_tracker_ids); return $this->removeLinkedItemsFromCollection($collection, $linked_item_artifacts_ids); }
private function getBacklogStrategyFactory() { return new AgileDashboard_Milestone_Backlog_BacklogStrategyFactory(new AgileDashboard_BacklogItemDao(), $this->getArtifactFactory(), PlanningFactory::build()); }
/** * Builds a new PlanningFactory instance. * * @return PlanningFactory */ private function getPlanningFactory() { return PlanningFactory::build(); }
private function areThereConfiguredPlannings() { return count($this->planning_factory->getPlanningTrackerIdsByGroupId($this->project->getId())) > 0; }
private function canUserPrioritizeBacklog(Planning_ArtifactMilestone $milestone, PFUser $user) { $artifact_factory = Tracker_ArtifactFactory::instance(); $milestone_factory = new Planning_MilestoneFactory(PlanningFactory::build(), $artifact_factory, Tracker_FormElementFactory::instance(), TrackerFactory::instance(), new AgileDashboard_Milestone_MilestoneStatusCounter($this->dao, new Tracker_ArtifactDao(), $artifact_factory), new PlanningPermissionsManager(), new AgileDashboard_Milestone_MilestoneDao()); return $milestone_factory->userCanChangePrioritiesInMilestone($milestone, $user); }
private function redirectToAgileDashboard(Tracker_Artifact_Redirect $redirect, array $redirect_params) { list($planning_id, $artifact_id) = each($redirect_params); require_once AGILEDASHBOARD_BASE_DIR . '/Planning/PlanningFactory.class.php'; $planning = PlanningFactory::build()->getPlanning($planning_id); if ($planning) { $redirect->base_url = AGILEDASHBOARD_BASE_URL; $redirect->query_parameters = array('group_id' => $planning->getGroupId(), 'planning_id' => $planning->getId(), 'action' => 'show', 'aid' => $artifact_id, 'pane' => 'cardwall'); } }
private function redirectToAgileDashboard(array $redirect_params) { list($planning_id, $artifact_id) = each($redirect_params); require_once AGILEDASHBOARD_BASE_DIR . '/Planning/PlanningFactory.class.php'; $planning = PlanningFactory::build()->getPlanning($planning_id); if ($planning) { $GLOBALS['Response']->redirect(AGILEDASHBOARD_BASE_URL . '/?' . http_build_query(array('group_id' => $planning->getGroupId(), 'planning_id' => $planning->getId(), 'action' => 'show', 'aid' => $artifact_id, 'pane' => 'cardwall'))); } }
private function getScrumTrackerIds(Project $project) { $planning_tracker_ids = $this->planning_factory->getPlanningTrackerIdsByGroupId($project->getID()); $backlog_tracker_ids = $this->planning_factory->getBacklogTrackerIdsByGroupId($project->getID()); return array_unique(array_merge($planning_tracker_ids, $backlog_tracker_ids)); }
/** * Return the 'Planning' tracker (tracker we should be able to use artifacts to perform search. * * This method hard code dependency with agile dashboard and planning stuff. * It should be renamed later on when planning definition is clearly defined. * * @param Integer $group_id * * @return Array of Integer */ private function getPlanningTrackers($group_id, PFUser $user) { $trackers = array(); @(include_once dirname(__FILE__) . '/../../../agiledashboard/include/Planning/PlanningFactory.class.php'); if (class_exists('PlanningFactory')) { $planning_factory = new PlanningFactory(new PlanningDao(), $this->getTrackerFactory(), Tracker_FormElementFactory::instance()); $trackers = $planning_factory->getPlanningTrackers($group_id, $user); } return $trackers; }
private function getPlanning() { $planning_id = $this->request->get('planning_id'); return $this->planning_factory->getPlanning($planning_id); }
/** * Checks the tracker planning id in $planning_parameters is not already used as a planning tracker in one of the * plannings of the project with given $group_id. * * @param int $group_id The project where to search for existing planning trackers * @param PlanningParameters $planning_parameters The parameters being validated * * @return boolean */ private function trackerIsNotAlreadyUsedAsAPlanningTrackerInProject($group_id, PlanningParameters $planning_parameters) { $planning_tracker_id = $planning_parameters->planning_tracker_id; $project_planning_tracker_ids = $this->factory->getPlanningTrackerIdsByGroupId($group_id); return !in_array($planning_tracker_id, $project_planning_tracker_ids); }
private function isTrackerUsedInScrum(Tracker $tracker) { return count($this->planning_factory->getPlanningsByBacklogTracker($tracker)) > 0 || count($this->planning_factory->getPlanningByPlanningTracker($tracker)) > 0; }
public function process(Codendi_Request $request) { switch ($request->get('action')) { case 'toggle_user_autostack_column': $display_preferences_controller = new Cardwall_UserPreferences_UserPreferencesController($request); $display_preferences_controller->toggleAutostack(); break; case 'toggle_user_display_avatar': $display_preferences_controller = new Cardwall_UserPreferences_UserPreferencesController($request); $display_preferences_controller->toggleUserDisplay(); break; case 'get-card': try { $single_card_builder = new Cardwall_SingleCardBuilder($this->getConfigFactory(), new Cardwall_CardFields(UserManager::instance(), Tracker_FormElementFactory::instance()), Tracker_ArtifactFactory::instance(), PlanningFactory::build()); $controller = new Cardwall_CardController($request, $single_card_builder->getSingleCard($request->getCurrentUser(), $request->getValidated('id', 'uint', 0), $request->getValidated('planning_id', 'uint', 0))); $controller->getCard(); } catch (Exception $exception) { $GLOBALS['Response']->addFeedback(Feedback::ERROR, $exception->getMessage()); $GLOBALS['Response']->sendStatusCode(400); } break; default: echo 'Hello !'; } }