/** * Following a change to an activity or case, fire the case-change event. * * @param \Civi\Core\Event\PostEvent $event * @throws \CRM_Core_Exception */ public static function fireCaseChange(\Civi\Core\Event\PostEvent $event) { $caseId = NULL; switch ($event->entity) { case 'Activity': if (!empty($event->object->case_id)) { $caseId = $event->object->case_id; } break; case 'Case': // by the time we get the post-delete event, the record is gone, so // there's nothing to analyze if ($event->action != 'delete') { $caseId = $event->id; } break; default: throw new \CRM_Core_Exception("CRM_Case_Listener does not support entity {$event->entity}"); } if ($caseId) { if (!isset(self::$isActive[$caseId])) { $tx = new \CRM_Core_Transaction(); \CRM_Core_Transaction::addCallback(\CRM_Core_Transaction::PHASE_POST_COMMIT, array(__CLASS__, 'fireCaseChangeForRealz'), array($caseId), "Civi_CCase_Events::fire::{$caseId}"); } } }
public function testCallback_rollback() { $tx = new CRM_Core_Transaction(); CRM_Core_Transaction::addCallback(CRM_Core_Transaction::PHASE_PRE_COMMIT, array($this, '_preCommit'), array('ewq', 'ytr')); CRM_Core_Transaction::addCallback(CRM_Core_Transaction::PHASE_POST_COMMIT, array($this, '_postCommit'), array('oiu', '][p')); CRM_Core_Transaction::addCallback(CRM_Core_Transaction::PHASE_PRE_ROLLBACK, array($this, '_preRollback'), array('dsa', 'hgf')); CRM_Core_Transaction::addCallback(CRM_Core_Transaction::PHASE_POST_ROLLBACK, array($this, '_postRollback'), array('lkj', ';')); CRM_Core_DAO::executeQuery('UPDATE civicrm_contact SET id = 100 WHERE id = 100'); $tx->rollback(); $this->assertEquals(array(), $this->callbackLog); $tx = NULL; $this->assertEquals(array('_preRollback', 'dsa', 'hgf'), $this->callbackLog[0]); $this->assertEquals(array('_postRollback', 'lkj', ';'), $this->callbackLog[1]); }
/** * Deletes all the cache entries. */ public static function resetCache() { // reset any static caching self::$_cache = NULL; $query = "\nDELETE\nFROM civicrm_acl_cache\nWHERE modified_date IS NULL\n OR (modified_date <= %1)\n"; $params = array(1 => array(CRM_Contact_BAO_GroupContactCache::getCacheInvalidDateTime(), 'String')); CRM_Core_DAO::singleValueQuery($query, $params); // CRM_Core_DAO::singleValueQuery("TRUNCATE TABLE civicrm_acl_contact_cache"); // No, force-commits transaction // CRM_Core_DAO::singleValueQuery("DELETE FROM civicrm_acl_contact_cache"); // Transaction-safe if (CRM_Core_Transaction::isActive()) { CRM_Core_Transaction::addCallback(CRM_Core_Transaction::PHASE_POST_COMMIT, function () { CRM_Core_DAO::singleValueQuery("TRUNCATE TABLE civicrm_acl_contact_cache"); }); } else { CRM_Core_DAO::singleValueQuery("TRUNCATE TABLE civicrm_acl_contact_cache"); } }
/** * Deletes all the cache entries. */ public static function resetCache() { // reset any static caching self::$_cache = NULL; // reset any db caching $config = CRM_Core_Config::singleton(); $smartGroupCacheTimeout = CRM_Contact_BAO_GroupContactCache::smartGroupCacheTimeout(); //make sure to give original timezone settings again. $now = CRM_Utils_Date::getUTCTime(); $query = "\nDELETE\nFROM civicrm_acl_cache\nWHERE modified_date IS NULL\n OR (TIMESTAMPDIFF(MINUTE, modified_date, {$now}) >= {$smartGroupCacheTimeout})\n"; CRM_Core_DAO::singleValueQuery($query); // CRM_Core_DAO::singleValueQuery("TRUNCATE TABLE civicrm_acl_contact_cache"); // No, force-commits transaction // CRM_Core_DAO::singleValueQuery("DELETE FROM civicrm_acl_contact_cache"); // Transaction-safe if (CRM_Core_Transaction::isActive()) { CRM_Core_Transaction::addCallback(CRM_Core_Transaction::PHASE_POST_COMMIT, function () { CRM_Core_DAO::singleValueQuery("TRUNCATE TABLE civicrm_acl_contact_cache"); }); } else { CRM_Core_DAO::singleValueQuery("TRUNCATE TABLE civicrm_acl_contact_cache"); } }
/** * Perform an asynchronous reconciliation when the transaction ends. */ public static function scheduleReconcilation() { CRM_Core_Transaction::addCallback(CRM_Core_Transaction::PHASE_POST_COMMIT, function () { CRM_Core_ManagedEntities::singleton(TRUE)->reconcile(); }, array(), 'ManagedEntities::reconcile'); }