/** * Apply $rule that was triggered by a change on $artifact * * @param Tracker_Artifact $artifact * @param Tracker_Workflow_Trigger_TriggerRule $rule */ public function process(Tracker_Artifact $artifact, Tracker_Workflow_Trigger_TriggerRule $rule) { $this->logger->start(__METHOD__, $artifact->getXRef(), $rule->getId()); $parent = $artifact->getParentWithoutPermissionChecking(); if ($parent && !$this->parentAlreadyHasTargetValue($parent, $rule)) { $this->logger->debug('Parent ' . $parent->getXRef() . ' does not have target value…'); $processor_strategy = $this->getRuleStrategy($artifact, $rule); if ($processor_strategy->allPrecondtionsAreMet()) { $this->logger->debug('All preconditions are met…'); $this->updateParent($parent, $artifact, $rule); } } $this->logger->end(__METHOD__, $artifact->getId(), $rule->getId()); }
/** * Delete a rule in target tracker * * @param Tracker $tracker * @param Tracker_Workflow_Trigger_TriggerRule $rule * @throws Tracker_Workflow_Trigger_Exception_RuleException */ public function delete(Tracker $tracker, Tracker_Workflow_Trigger_TriggerRule $rule) { if ($rule->getTargetTracker() != $tracker) { throw new Tracker_Workflow_Trigger_Exception_RuleException('Cannot delete rules from another tracker'); } try { $this->dao->enableExceptionsOnError(); $this->dao->startTransaction(); $this->dao->deleteTriggeringFieldsByRuleId($rule->getId()); $this->dao->deleteTargetByRuleId($rule->getId()); $this->dao->commit(); } catch (DataAccessException $exception) { throw new Tracker_Workflow_Trigger_Exception_RuleException('Database error: cannot delete rule'); } }