public function process(Tracker_IDisplayTrackerLayout $layout, Codendi_Request $request, PFUser $current_user) { $workflow = $this->workflow_factory->getWorkflowByTrackerId($this->tracker->id); $this->processEnabled($workflow, $request->get('is_used')); $k = 0; $field = $this->form_element_factory->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)) { $this->workflow_factory->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' => Workflow::FUNC_ADMIN_TRANSITIONS))); }