Exemplo n.º 1
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.º 2
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);
                         }
                     }
                 }
             }
         }
     }
 }