/** * The singleton method * * @return WorkflowFactory */ public static function instance() { if (!isset(self::$_instance)) { $formelement_factory = Tracker_FormElementFactory::instance(); $logger = new WorkflowBackendLogger(new BackendLogger()); $trigger_rules_manager = new Tracker_Workflow_Trigger_RulesManager(new Tracker_Workflow_Trigger_RulesDao(), $formelement_factory, new Tracker_Workflow_Trigger_RulesProcessor(UserManager::instance()->getUserById(Tracker_Workflow_WorkflowUser::ID), $logger), $logger); $c = __CLASS__; self::$_instance = new $c(TransitionFactory::instance(), TrackerFactory::instance(), $formelement_factory, $trigger_rules_manager, $logger); } return self::$_instance; }
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); }
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); }
private function getTransition($transition_id) { $transition_factory = TransitionFactory::instance(); return $transition_factory->getTransition($transition_id); }
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); } } } } } } }
/** * Wrapper for TransitionFactory * * @return TransitionFactory */ protected function getTransitionFactory() { return TransitionFactory::instance(); }
/** * @return Transition[] */ public function getTransitions() { if ($this->transitions === null) { $this->transitions = TransitionFactory::instance()->getTransitions($this); } return $this->transitions; }