Exemplo n.º 1
0
 /**
  * The singleton method
  * 
  * @return TransitionFactory
  */
 public static function instance()
 {
     if (!isset(self::$_instance)) {
         $c = __CLASS__;
         self::$_instance = new $c();
     }
     return self::$_instance;
 }
Exemplo n.º 2
0
 /**
  * The singleton method
  *
  * @return TransitionFactory
  */
 public static function instance()
 {
     if (!isset(self::$_instance)) {
         $c = __CLASS__;
         self::$_instance = new $c(Workflow_Transition_ConditionFactory::build());
     }
     return self::$_instance;
 }
Exemplo n.º 3
0
 public function process(Tracker_IDisplayTrackerLayout $layout, Codendi_Request $request, PFUser $current_user)
 {
     $transition = $request->get('transition');
     //TODO check that the transition belongs to the current tracker
     // Permissions
     $ugroups = $request->get('ugroups');
     permission_clear_all($this->tracker->group_id, 'PLUGIN_TRACKER_WORKFLOW_TRANSITION', $transition, false);
     if ($this->transition_factory->addPermissions($ugroups, $transition)) {
         $GLOBALS['Response']->addFeedback('info', $GLOBALS['Language']->getText('workflow_admin', 'permissions_updated'));
     } else {
         $GLOBALS['Response']->addFeedback('error', $GLOBALS['Language']->getText('workflow_admin', 'permissions_not_updated'));
     }
     //Conditions
     $condition_manager = new Transition_ConditionManager();
     $condition_manager->process($this->transition_factory->getTransition($transition), $request, $current_user);
     // Post actions
     $tpam = new Transition_PostActionManager();
     $tpam->process($this->transition_factory->getTransition($transition), $request, $current_user);
     $GLOBALS['Response']->redirect(TRACKER_BASE_URL . '/?' . http_build_query(array('tracker' => (int) $this->tracker->id, 'func' => Workflow::FUNC_ADMIN_TRANSITIONS, 'edit_transition' => $request->get('transition'))));
 }
Exemplo n.º 4
0
 /**
  * Duplicate the workflow
  *
  * @param $from_tracker_id the template tracker id
  * @param $to_tracker_id the tracker id
  * @param $from_id the id of the field
  * @param $to_id the id of the duplicated field
  * @param Array $values array of old and new values of the field
  * @param Array $field_mapping the field mapping
  * @param Array $ugroup_mapping the ugroup mapping
  *
  * @return void
  */
 public function duplicate($from_tracker_id, $to_tracker_id, $from_id, $to_id, $values, $field_mapping, $ugroup_mapping, $duplicate_type)
 {
     if ($workflow = $this->getWorkflowByTrackerId($from_tracker_id)) {
         $is_used = $workflow->getIsUsed();
         //Duplicate workflow
         if ($id = $this->getDao()->duplicate($to_tracker_id, $from_id, $to_id, $values, $is_used)) {
             $transitions = $workflow->getTransitions();
             //Duplicate transitions
             $this->transition_factory->duplicate($values, $id, $transitions, $field_mapping, $ugroup_mapping, $duplicate_type);
         }
     }
 }
Exemplo n.º 5
0
 public function process(TrackerManager $engine, Codendi_Request $request, PFUser $current_user)
 {
     $workflow_factory = WorkflowFactory::instance();
     if ($request->get('func') == Workflow::FUNC_ADMIN_RULES) {
         $token = new CSRFSynchronizerToken(TRACKER_BASE_URL . '/?' . http_build_query(array('tracker' => (int) $this->tracker->id, 'func' => Workflow::FUNC_ADMIN_RULES)));
         $rule_date_factory = new Tracker_Rule_Date_Factory(new Tracker_Rule_Date_Dao(), Tracker_FormElementFactory::instance());
         $action = new Tracker_Workflow_Action_Rules_EditRules($this->tracker, $rule_date_factory, $token);
     } elseif ($request->get('func') == Workflow::FUNC_ADMIN_CROSS_TRACKER_TRIGGERS) {
         $token = new CSRFSynchronizerToken(TRACKER_BASE_URL . '/?' . http_build_query(array('tracker' => (int) $this->tracker->id, 'func' => Workflow::FUNC_ADMIN_CROSS_TRACKER_TRIGGERS)));
         $renderer = TemplateRendererFactory::build()->getRenderer(TRACKER_BASE_DIR . '/../templates');
         $action = new Tracker_Workflow_Action_Triggers_EditTriggers($this->tracker, $token, $renderer, $workflow_factory->getTriggerRulesManager());
     } else {
         if ($request->get('func') == Workflow::FUNC_ADMIN_GET_TRIGGERS_RULES_BUILDER_DATA) {
             $action = new Tracker_Workflow_Action_Triggers_GetTriggersRulesBuilderData($this->tracker, Tracker_FormElementFactory::instance());
         } else {
             if ($request->get('func') == Workflow::FUNC_ADMIN_ADD_TRIGGER) {
                 $action = new Tracker_Workflow_Action_Triggers_AddTrigger($this->tracker, Tracker_FormElementFactory::instance(), $workflow_factory->getTriggerRulesManager());
             } else {
                 if ($request->get('func') == Workflow::FUNC_ADMIN_DELETE_TRIGGER) {
                     $action = new Tracker_Workflow_Action_Triggers_DeleteTrigger($this->tracker, $workflow_factory->getTriggerRulesManager());
                 } else {
                     if ($request->get('create')) {
                         $action = new Tracker_Workflow_Action_Transitions_Create($this->tracker, $workflow_factory);
                     } else {
                         if ($request->get('edit_transition')) {
                             $action = new Tracker_Workflow_Action_Transitions_EditTransition($this->tracker, TransitionFactory::instance(), new Transition_PostActionFactory());
                         } else {
                             if ($request->get('delete')) {
                                 $action = new Tracker_Workflow_Action_Transitions_Delete($this->tracker, $workflow_factory);
                             } else {
                                 if ($request->get('transitions')) {
                                     $action = new Tracker_Workflow_Action_Transitions_CreateMatrix($this->tracker, $workflow_factory, Tracker_FormElementFactory::instance());
                                 } else {
                                     if ($request->get('workflow_details')) {
                                         $action = new Tracker_Workflow_Action_Transitions_Details($this->tracker, TransitionFactory::instance());
                                     } else {
                                         $action = new Tracker_Workflow_Action_Transitions_DefineWorkflow($this->tracker, WorkflowFactory::instance(), Tracker_FormElementFactory::instance());
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
     $action->process($engine, $request, $current_user);
 }
Exemplo n.º 6
0
 function permission_user_allowed_to_change($params)
 {
     if (!$params['allowed']) {
         $allowed = array(Tracker::PERMISSION_ADMIN, Tracker::PERMISSION_FULL, Tracker::PERMISSION_SUBMITTER, Tracker::PERMISSION_SUBMITTER_ONLY, Tracker::PERMISSION_ASSIGNEE, 'PLUGIN_TRACKER_FIELD_SUBMIT', 'PLUGIN_TRACKER_FIELD_READ', 'PLUGIN_TRACKER_FIELD_UPDATE', 'PLUGIN_TRACKER_ARTIFACT_ACCESS', 'PLUGIN_TRACKER_WORKFLOW_TRANSITION');
         if (in_array($params['permission_type'], $allowed)) {
             $group_id = $params['group_id'];
             $object_id = $params['object_id'];
             $type = $this->getObjectTypeFromPermissions($params);
             if (!isset($this->_cached_permission_user_allowed_to_change[$type][$object_id])) {
                 switch ($type) {
                     case 'tracker':
                         if ($tracker = TrackerFactory::instance()->getTrackerById($object_id)) {
                             $this->_cached_permission_user_allowed_to_change[$type][$object_id] = $tracker->userIsAdmin();
                         }
                         break;
                     case 'field':
                         if ($field = Tracker_FormElementFactory::instance()->getFormElementById($object_id)) {
                             $this->_cached_permission_user_allowed_to_change[$type][$object_id] = $field->getTracker()->userIsAdmin();
                         }
                         break;
                     case 'artifact':
                         if ($a = Tracker_ArtifactFactory::instance()->getArtifactById($object_id)) {
                             //TODO: manage permissions related to field "permission on artifact"
                             $this->_cached_permission_user_allowed_to_change[$type][$object_id] = $a->getTracker()->userIsAdmin();
                         }
                     case 'workflow transition':
                         if ($transition = TransitionFactory::instance()->getTransition($object_id)) {
                             $this->_cached_permission_user_allowed_to_change[$type][$object_id] = $transition->getWorkflow()->getTracker()->userIsAdmin();
                         }
                         break;
                 }
             }
             if (isset($this->_cached_permission_user_allowed_to_change[$type][$object_id])) {
                 $params['allowed'] = $this->_cached_permission_user_allowed_to_change[$type][$object_id];
             }
         }
     }
 }
 protected function getTransitionId($from, $to)
 {
     return TransitionFactory::instance()->getTransitionId($from, $to);
 }
Exemplo n.º 8
0
 private function getTransition($transition_id)
 {
     $transition_factory = TransitionFactory::instance();
     return $transition_factory->getTransition($transition_id);
 }
Exemplo n.º 9
0
 public function process(TrackerManager $engine, Codendi_Request $request, User $current_user)
 {
     if ($request->get('create')) {
         if ($request->existAndNonEmpty('field_id')) {
             if (WorkflowFactory::instance()->create((int) $this->tracker->id, $request->get('field_id'))) {
                 $GLOBALS['Response']->addFeedback('info', $GLOBALS['Language']->getText('workflow_admin', 'created'));
                 $GLOBALS['Response']->redirect(TRACKER_BASE_URL . '/?' . http_build_query(array('tracker' => (int) $this->tracker->id, 'func' => 'admin-workflow')));
             }
         }
     } else {
         if ($request->get('edit_transition')) {
             $workflow = WorkflowFactory::instance()->getWorkflowByTrackerId($this->tracker->id);
             $transition = TransitionFactory::instance()->getTransition($request->get('edit_transition'));
             $this->displayTransitionDetails($engine, $request, $current_user, $transition);
         } else {
             if ($request->get('delete')) {
                 if (WorkflowFactory::instance()->deleteWorkflow($request->get('delete'))) {
                     $GLOBALS['Response']->addFeedback('info', $GLOBALS['Language']->getText('workflow_admin', 'deleted'));
                     $GLOBALS['Response']->redirect(TRACKER_BASE_URL . '/?' . http_build_query(array('tracker' => (int) $this->tracker->id, 'func' => 'admin-workflow')));
                 }
             } else {
                 if ($request->get('create_matrix')) {
                     $k = 0;
                     $workflow = WorkflowFactory::instance()->getWorkflowByTrackerId($this->tracker->id);
                     $field = Tracker_FormElementFactory::instance()->getFormElementById($workflow->field_id);
                     $field_values = $field->getBind()->getAllValues();
                     $currMatrix = array();
                     $field_value_from = null;
                     //Add an initial state transition
                     foreach ($field_values as $field_value_id_to => $field_value_to) {
                         //$field_value_from=;
                         $transition = '_' . $field_value_id_to;
                         if ($request->existAndNonEmpty($transition)) {
                             $currMatrix[] = array('', $field_value_id_to);
                             $k += $this->addTransition($workflow, $transition, $field_value_from, $field_value_to);
                         }
                     }
                     //Add a transition
                     foreach ($field_values as $field_value_id_from => $field_value_from) {
                         foreach ($field_values as $field_value_id_to => $field_value_to) {
                             $transition = $field_value_id_from . '_' . $field_value_id_to;
                             if ($request->existAndNonEmpty($transition)) {
                                 $currMatrix[] = array($field_value_id_from, $field_value_id_to);
                                 $k += $this->addTransition($workflow, $transition, $field_value_from, $field_value_to);
                             }
                         }
                     }
                     //Delete a transition
                     $transitions_in_db = $workflow->getTransitions();
                     $nb_transitions_in_db = count($transitions_in_db);
                     for ($i = 0; $i < $nb_transitions_in_db; $i++) {
                         $field_value_from = $transitions_in_db[$i]->getFieldValueFrom();
                         $field_value_to = $transitions_in_db[$i]->getFieldValueTo();
                         //Treatment of the initial state
                         if ($field_value_from == null) {
                             $value_to_search = array('', $field_value_to->getId());
                             //$field_value_from->getId()='';
                         } else {
                             $value_to_search = array($field_value_from->getId(), $field_value_to->getId());
                         }
                         if (!in_array($value_to_search, $currMatrix)) {
                             WorkflowFactory::instance()->deleteTransition($workflow->workflow_id, $field_value_from, $field_value_to);
                             $k++;
                         }
                     }
                     if ($k > 0) {
                         $GLOBALS['Response']->addFeedback('info', $GLOBALS['Language']->getText('workflow_admin', 'updated'));
                         $GLOBALS['Response']->redirect(TRACKER_BASE_URL . '/?' . http_build_query(array('tracker' => (int) $this->tracker->id, 'func' => 'admin-workflow')));
                     } else {
                         $GLOBALS['Response']->addFeedback('info', $GLOBALS['Language']->getText('workflow_admin', 'not_updated'));
                         $GLOBALS['Response']->redirect(TRACKER_BASE_URL . '/?' . http_build_query(array('tracker' => (int) $this->tracker->id, 'func' => 'admin-workflow')));
                     }
                 } else {
                     if ($request->get('enable_workflow')) {
                         $workflow = WorkflowFactory::instance()->getWorkflowByTrackerId($this->tracker->id);
                         $is_used = $request->get('is_used');
                         //TODO : use $request
                         if ($is_used == 'on') {
                             $is_used = 1;
                             $feedback = $GLOBALS['Language']->getText('workflow_admin', 'workflow_enabled');
                         } else {
                             $is_used = 0;
                             $feedback = $GLOBALS['Language']->getText('workflow_admin', 'workflow_disabled');
                         }
                         if (WorkflowFactory::instance()->updateActivation((int) $workflow->workflow_id, $is_used)) {
                             $GLOBALS['Response']->addFeedback('info', $feedback);
                             $GLOBALS['Response']->redirect(TRACKER_BASE_URL . '/?' . http_build_query(array('tracker' => (int) $this->tracker->id, 'func' => 'admin-workflow')));
                         }
                     } else {
                         if ($request->get('workflow_details')) {
                             $transition = $request->get('transition');
                             //TODO check that the transition belongs to the current tracker
                             // Permissions
                             $ugroups = $request->get('ugroups');
                             permission_clear_all($this->tracker->group_id, 'PLUGIN_TRACKER_WORKFLOW_TRANSITION', $transition, false);
                             if (TransitionFactory::instance()->addPermissions($ugroups, $transition)) {
                                 $GLOBALS['Response']->addFeedback('info', $GLOBALS['Language']->getText('workflow_admin', 'permissions_updated'));
                             } else {
                                 $GLOBALS['Response']->addFeedback('error', $GLOBALS['Language']->getText('workflow_admin', 'permissions_not_updated'));
                             }
                             // Post actions
                             $tpam = new Transition_PostActionManager();
                             $tpam->process(TransitionFactory::instance()->getTransition($transition), $request, $current_user);
                             $GLOBALS['Response']->redirect(TRACKER_BASE_URL . '/?' . http_build_query(array('tracker' => (int) $this->tracker->id, 'func' => 'admin-workflow', 'edit_transition' => $request->get('transition'))));
                         } else {
                             $this->displayAdminDefineWorkflow($engine, $request, $current_user);
                         }
                     }
                 }
             }
         }
     }
 }
Exemplo n.º 10
0
 public function process(Tracker_IDisplayTrackerLayout $layout, Codendi_Request $request, PFUser $current_user)
 {
     $transition = $this->transition_factory->getTransition($request->get('edit_transition'));
     $this->displayTransitionDetails($layout, $request, $current_user, $transition);
 }
Exemplo n.º 11
0
 /**
  * Wrapper for TransitionFactory
  *
  * @return TransitionFactory
  */
 protected function getTransitionFactory()
 {
     return TransitionFactory::instance();
 }
Exemplo n.º 12
0
 /**
  * @return Transition[]
  */
 public function getTransitions()
 {
     if ($this->transitions === null) {
         $this->transitions = TransitionFactory::instance()->getTransitions($this);
     }
     return $this->transitions;
 }