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')))); }
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); } } } } } } }