public function closeTransaction($succesMessage = 'Updated', $checkAllConjucts = true, $databaseCommit = false, $setNewContent = true) { $session = Session::singleton(); Hooks::callHooks('preDatabaseCloseTransaction', get_defined_vars()); Notifications::addLog('========================= CLOSING TRANSACTION =========================', 'DATABASE'); if ($checkAllConjucts) { Notifications::addLog("Check all conjuncts", 'DATABASE'); // Evaluate all invariant conjuncts. Conjuncts are cached. $invariantRulesHold = RuleEngine::checkInvariantRules(); // Evaluate all signal conjuncts. Conjuncts are cached RuleEngine::checkProcessRules(); } else { Notifications::addLog("Check all affected conjuncts", 'DATABASE'); // Evaluate all affected invariant conjuncts. Conjuncts are cached. $invariantRulesHold = RuleEngine::checkInvariantRules(RuleEngine::getAffectedInvConjuncts($this->affectedConcepts, $this->affectedRelations), true); // Evaluate all affected signal conjuncts. Conjuncts are cached RuleEngine::checkConjuncts(RuleEngine::getAffectedSigConjuncts($this->affectedConcepts, $this->affectedRelations), true); // Check only those process rules that are relevant for the activate roles RuleEngine::checkProcessRules($session); } unset($this->affectedConcepts, $this->affectedRelations); $this->affectedConcepts = array(); $this->affectedRelations = array(); if ($setNewContent && isset($session->atom)) { $session->atom->setNewContent($session->interface); } // e.g. not needed in Atom::delete() function if ($invariantRulesHold && $databaseCommit) { $this->commitTransaction(); // commit database transaction Notifications::addSuccess($succesMessage); } elseif (Config::get('ignoreInvariantViolations', 'transactions') && COMMIT_INV_VIOLATIONS) { $this->commitTransaction(); Notifications::addError("Transaction committed with invariant violations"); } elseif ($invariantRulesHold) { $this->rollbackTransaction(); // rollback database transaction Notifications::addInfo($succesMessage); } else { $this->rollbackTransaction(); // rollback database transaction } Hooks::callHooks('postDatabaseCloseTransaction', get_defined_vars()); return $invariantRulesHold; }