array($id, 'Integer')); if ($id == 0) { $query .= " OR contact_id IS NULL"; } $dao = CRM_Core_DAO::executeQuery($query, $params); $cache = array(); while ($dao->fetch()) { $cache[$dao->acl_id] = 1; } return $cache; } static function store($id, &$cache) { foreach ($cache as $aclID => $data) { $dao = new CRM_ACL_DAO_Cache(); if ($id) { $dao->contact_id = $id; } $dao->acl_id = $aclID; $cache[$aclID] = 1; $dao->save(); } } static function deleteEntry($id) { if (self::$_cache && array_key_exists($id, self::$_cache) ) { unset(self::$_cache[$id]); } $query = " DELETE FROM civicrm_acl_cache WHERE contact_id = %1 "; $params = array(1 => array($id, 'Integer')); $dao = CRM_Core_DAO::executeQuery($query, $params); } static function updateEntry($id) { // rebuilds civicrm_acl_cache self::deleteEntry($id); self::build($id); // rebuilds civicrm_acl_contact_cache CRM_Contact_BAO_Contact_Permission::cache($id, CRM_Core_Permission::VIEW, TRUE); } // deletes all the cache entries 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 = " DELETE FROM civicrm_acl_cache WHERE modified_date IS NULL OR (TIMESTAMPDIFF(MINUTE, modified_date, $now) >= $smartGroupCacheTimeout) "; 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"); } } }