/**
* Build an array of ACLs for a specific ACLed user
+ *
* @param int $id - contact_id of the ACLed user
*
* @return mixed
+ * @throws \CRM_Core_Exception
*/
public static function &build($id) {
if (!self::$_cache) {
return self::$_cache[$id];
}
- self::$_cache[$id] = CRM_ACL_BAO_ACL::getAllByContact($id);
+ self::$_cache[$id] = CRM_ACL_BAO_ACL::getAllByContact((int) $id);
self::store($id, self::$_cache[$id]);
return self::$_cache[$id];
}
*
* @return array
*/
- public static function retrieve($id) {
+ protected static function retrieve($id) {
$query = "
SELECT acl_id
FROM civicrm_acl_cache
* @param array $cache - key civicrm_acl.id - values is the details of the ACL.
*
*/
- public static function store($id, &$cache) {
+ protected static function store($id, &$cache) {
foreach ($cache as $aclID => $data) {
$dao = new CRM_ACL_BAO_Cache();
if ($id) {
],
];
CRM_Core_DAO::singleValueQuery($query, $params);
+ self::flushACLContactCache();
+ }
+
+ /**
+ * Remove Entries from `civicrm_acl_contact_cache` for a specific ACLed user
+ * @param int $userID - contact_id of the ACLed user
+ *
+ */
+ public static function deleteContactCacheEntry($userID) {
+ CRM_Core_DAO::executeQuery("DELETE FROM civicrm_acl_contact_cache WHERE user_id = %1", [1 => [$userID, 'Positive']]);
+ }
+ /**
+ * Flush the contents of the acl contact cache.
+ */
+ protected static function flushACLContactCache(): void {
+ unset(Civi::$statics['CRM_ACL_API']);
// 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");
+ CRM_Core_DAO::singleValueQuery('TRUNCATE TABLE civicrm_acl_contact_cache');
});
}
else {
}
}
- /**
- * Remove Entries from `civicrm_acl_contact_cache` for a specific ACLed user
- * @param int $userID - contact_id of the ACLed user
- *
- */
- public static function deleteContactCacheEntry($userID) {
- CRM_Core_DAO::executeQuery("DELETE FROM civicrm_acl_contact_cache WHERE user_id = %1", [1 => [$userID, 'Positive']]);
- }
-
}