public static function fromArray(array $array)
 {
     $parameters = new PlanningParameters();
     $parameters->name = PlanningParameters::get($array, 'name');
     $parameters->backlog_title = PlanningParameters::get($array, 'backlog_title');
     $parameters->plan_title = PlanningParameters::get($array, 'plan_title');
     $parameters->backlog_tracker_id = PlanningParameters::get($array, 'backlog_tracker_id');
     $parameters->planning_tracker_id = PlanningParameters::get($array, 'planning_tracker_id');
     return $parameters;
 }
Esempio n. 2
0
 /**
  * Returns true when the $request contains sufficent data to create a valid
  * Planning.
  * 
  * Existing planning update validation is not implemented yet.
  * 
  * @param Codendi_Request $request
  * 
  * @return bool
  */
 public function isValid(Codendi_Request $request)
 {
     $group_id = $request->get('group_id');
     $planning_id = $request->get('planning_id');
     $planning_parameters = $request->get('planning');
     if (!$planning_parameters) {
         $planning_parameters = array();
     }
     $planning_parameters = PlanningParameters::fromArray($planning_parameters);
     return $this->nameIsPresent($planning_parameters) && $this->backlogTrackerIdIsPresentAndIsAPositiveIntegers($planning_parameters) && $this->planningTrackerIdIsPresentAndIsAPositiveInteger($planning_parameters) && $this->planningTrackerIsNotThePlanningTrackerOfAnotherPlanningInTheSameProject($group_id, $planning_id, $planning_parameters);
 }
 public function update()
 {
     $validator = new Planning_RequestValidator($this->planning_factory);
     if ($validator->isValid($this->request)) {
         $this->planning_factory->updatePlanning($this->request->get('planning_id'), PlanningParameters::fromArray($this->request->get('planning')));
         $this->redirect(array('group_id' => $this->request->get('group_id'), 'action' => 'index'));
     } else {
         $this->addFeedback('error', $GLOBALS['Language']->getText('plugin_agiledashboard', 'planning_all_fields_mandatory'));
         $this->redirect(array('group_id' => $this->group_id, 'planning_id' => $this->request->get('planning_id'), 'action' => 'edit'));
     }
 }
Esempio n. 4
0
 /**
  * Duplicate plannings for some previously duplicated trackers.
  * 
  * @param int    $group_id         The id of the project where plannings should be created.
  * @param array  $tracker_mapping  An array mapping source tracker ids to destination tracker ids.
  */
 public function duplicatePlannings($group_id, $tracker_mapping)
 {
     if (!$tracker_mapping) {
         return;
     }
     $planning_rows = $this->dao->searchByPlanningTrackerIds(array_keys($tracker_mapping));
     foreach ($planning_rows as $row) {
         $row['backlog_tracker_id'] = $tracker_mapping[$row['backlog_tracker_id']];
         $row['planning_tracker_id'] = $tracker_mapping[$row['planning_tracker_id']];
         $this->dao->createPlanning($group_id, PlanningParameters::fromArray($row));
     }
 }
 public static function fromArray(array $array)
 {
     $parameters = new PlanningParameters();
     $backlog_ids = PlanningParameters::get($array, self::BACKLOG_TRACKER_IDS);
     $parameters->name = PlanningParameters::get($array, self::NAME);
     $parameters->backlog_title = PlanningParameters::get($array, self::BACKLOG_TITLE);
     $parameters->plan_title = PlanningParameters::get($array, self::PLANNING_TITLE);
     $parameters->backlog_tracker_ids = $backlog_ids ? $backlog_ids : array();
     $parameters->planning_tracker_id = PlanningParameters::get($array, self::PLANNING_TRACKER_ID);
     $parameters->priority_change_permission = PlanningParameters::get($array, PlanningPermissionsManager::PERM_PRIORITY_CHANGE);
     return $parameters;
 }
 /**
  * Duplicate plannings for some previously duplicated trackers.
  *
  * @param int    $group_id         The id of the project where plannings should be created.
  * @param array  $tracker_mapping  An array mapping source tracker ids to destination tracker ids.
  * @param array  $ugroups_mapping  An array mapping source ugroups and destinations ones.
  */
 public function duplicatePlannings($group_id, $tracker_mapping, array $ugroups_mapping)
 {
     if (!$tracker_mapping) {
         return;
     }
     $planning_rows = $this->dao->searchByPlanningTrackerIds(array_keys($tracker_mapping));
     foreach ($planning_rows as $row) {
         if (isset($tracker_mapping[$row['planning_tracker_id']])) {
             $row['planning_tracker_id'] = $tracker_mapping[$row['planning_tracker_id']];
             $row['backlog_tracker_ids'] = array();
             foreach ($this->dao->searchBacklogTrackersById($row['id']) as $backlog_row) {
                 $row['backlog_tracker_ids'][] = $tracker_mapping[$backlog_row['tracker_id']];
             }
             $inserted_planning_id = $this->dao->createPlanning($group_id, PlanningParameters::fromArray($row));
             $this->duplicatePriorityChangePermission($group_id, $row['id'], $inserted_planning_id, $ugroups_mapping);
         }
     }
 }
 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));
         }
     }
 }
Esempio n. 8
0
 public function itDuplicatesPlannings()
 {
     $dao = new MockPlanningDao();
     $factory = aPlanningFactory()->withDao($dao)->build();
     $group_id = 123;
     $sprint_tracker_id = 1;
     $story_tracker_id = 2;
     $bug_tracker_id = 3;
     $faq_tracker_id = 4;
     $sprint_tracker_copy_id = 5;
     $story_tracker_copy_id = 6;
     $bug_tracker_copy_id = 7;
     $faq_tracker_copy_id = 8;
     $tracker_mapping = array($sprint_tracker_id => $sprint_tracker_copy_id, $story_tracker_id => $story_tracker_copy_id, $bug_tracker_id => $bug_tracker_copy_id, $faq_tracker_id => $faq_tracker_copy_id);
     $sprint_planning_name = 'Sprint Planning';
     $rows = TestHelper::arrayToDar(array('id' => 1, 'name' => $sprint_planning_name, 'group_id' => 101, 'backlog_title' => 'Backlog', 'plan_title' => 'Plan', 'planning_tracker_id' => $sprint_tracker_id, 'backlog_tracker_id' => $story_tracker_id));
     stub($dao)->searchByPlanningTrackerIds(array_keys($tracker_mapping))->returns($rows);
     $expected_paramters = PlanningParameters::fromArray(array('id' => 1, 'name' => $sprint_planning_name, 'group_id' => 101, 'backlog_title' => 'Backlog', 'plan_title' => 'Plan', 'planning_tracker_id' => $sprint_tracker_copy_id, 'backlog_tracker_id' => $story_tracker_copy_id));
     $dao->expectOnce('createPlanning', array($group_id, $expected_paramters));
     $factory->duplicatePlannings($group_id, $tracker_mapping);
 }
Esempio n. 9
0
 public function itUpdatesThePlanningAndRedirectToTheIndex()
 {
     $this->userIsAdmin();
     $this->planning_factory->expectOnce('updatePlanning', array($this->planning_id, $this->group_id, PlanningParameters::fromArray($this->planning_parameters)));
     $this->expectRedirectTo("/plugins/agiledashboard/?group_id={$this->group_id}&planning_id={$this->planning_id}&action=edit");
     $this->planning_controller->update();
 }
Esempio n. 10
0
 public function itTranslatesUgroupsIdsFromUgroupsMapping()
 {
     $dao = new MockPlanningDao();
     $planning_permissions_manager = stub('PlanningPermissionsManager')->getGroupIdsWhoHasPermissionOnPlanning()->returns(array(4, 103, 104));
     $factory = partial_mock('PlanningFactory', array('getPlanning'), array($dao, mock('TrackerFactory'), mock('Tracker_FormElementFactory'), $planning_permissions_manager));
     $group_id = 123;
     $sprint_tracker_id = 1;
     $story_tracker_id = 2;
     $bug_tracker_id = 3;
     $faq_tracker_id = 4;
     $sprint_tracker_copy_id = 5;
     $story_tracker_copy_id = 6;
     $bug_tracker_copy_id = 7;
     $faq_tracker_copy_id = 8;
     stub($factory)->getPlanning(1)->returns(aPlanning()->withId(1)->withGroupId($group_id)->build());
     $tracker_mapping = array($sprint_tracker_id => $sprint_tracker_copy_id, $story_tracker_id => $story_tracker_copy_id, $bug_tracker_id => $bug_tracker_copy_id, $faq_tracker_id => $faq_tracker_copy_id);
     $sprint_planning_name = 'Sprint Planning';
     $rows = TestHelper::arrayToDar(array('id' => 1, 'name' => $sprint_planning_name, 'group_id' => 101, 'backlog_title' => 'Backlog', 'plan_title' => 'Plan', 'planning_tracker_id' => $sprint_tracker_id));
     stub($dao)->searchByPlanningTrackerIds(array_keys($tracker_mapping))->returns($rows);
     stub($dao)->searchBacklogTrackersById(1)->returnsDar(array('planning_id' => 1, 'tracker_id' => $story_tracker_id));
     stub($dao)->searchById(1)->returnsDar(array('id' => 1, 'name' => $sprint_planning_name, 'group_id' => 101, 'backlog_title' => 'Backlog', 'plan_title' => 'Plan', 'planning_tracker_id' => $sprint_tracker_copy_id, 'backlog_tracker_ids' => array($story_tracker_copy_id)));
     $expected_paramters = PlanningParameters::fromArray(array('id' => 1, 'name' => $sprint_planning_name, 'group_id' => 101, 'backlog_title' => 'Backlog', 'plan_title' => 'Plan', 'planning_tracker_id' => $sprint_tracker_copy_id, 'backlog_tracker_ids' => array($story_tracker_copy_id)));
     $expected_ugroups = array(4, 113, 114);
     expect($planning_permissions_manager)->savePlanningPermissionForUgroups('*', '*', PlanningPermissionsManager::PERM_PRIORITY_CHANGE, $expected_ugroups)->once();
     $ugroups_mapping = array(103 => 113, 104 => 114);
     $factory->duplicatePlannings($group_id, $tracker_mapping, $ugroups_mapping);
 }
Esempio n. 11
0
 public function itUpdatesThePlanningAndRedirectToTheIndex()
 {
     $group_id = 456;
     $planning_id = 123;
     $planning_parameters = array('name' => 'Foo', 'backlog_title' => 'Bar', 'plan_title' => 'Baz', 'backlog_tracker_id' => 43875, 'planning_tracker_id' => 654823);
     $request = aRequest()->with('group_id', $group_id)->with('planning_id', $planning_id)->with('planning', $planning_parameters)->build();
     $planning_factory = mock('PlanningFactory');
     $this->controller = new Planning_Controller($request, $planning_factory);
     // TODO: Inject validator into controller so that we can mock it and test it in isolation.
     stub($planning_factory)->getPlanningTrackerIdsByGroupId($group_id)->returns(array());
     $planning_factory->expectOnce('updatePlanning', array($planning_id, PlanningParameters::fromArray($planning_parameters)));
     $this->expectRedirectTo("/plugins/agiledashboard/?group_id={$group_id}&action=index");
     $this->controller->update();
 }