Skip to content
Snippets Groups Projects
Commit 993849c9 authored by jaapjansma's avatar jaapjansma
Browse files

issue with group contact cache resulted in a deadlock whilst checking a...

issue with group contact cache resulted in a deadlock whilst checking a condition. Refactored checking of group membership so that the group contact cache is not used
parent 18c4e7df
No related branches found
No related tags found
No related merge requests found
......@@ -40,7 +40,7 @@ class CRM_CivirulesActions_GroupContact_Remove extends CRM_CivirulesActions_Grou
$group_ids = $action_params['group_ids'];
}
foreach($group_ids as $group_id) {
if (CRM_Contact_BAO_GroupContact::isContactInGroup($contactId, $group_id)) {
if (CRM_CivirulesConditions_Utils_GroupContact::isContactInGroup($contactId, $group_id)) {
$params = array();
$params['group_id'] = $group_id;
......
......@@ -52,7 +52,7 @@ class CRM_CivirulesConditions_Contact_InGroup extends CRM_Civirules_Condition {
protected function contactIsNotMemberOfGroup($contact_id, $group_ids) {
$isValid = true;
foreach($group_ids as $gid) {
if (CRM_Contact_BAO_GroupContact::isContactInGroup($contact_id, $gid)) {
if (CRM_CivirulesConditions_Utils_GroupContact::isContactInGroup($contact_id, $gid)) {
$isValid = false;
break;
}
......@@ -63,7 +63,7 @@ class CRM_CivirulesConditions_Contact_InGroup extends CRM_Civirules_Condition {
protected function contactIsMemberOfOneGroup($contact_id, $group_ids) {
$isValid = false;
foreach($group_ids as $gid) {
if (CRM_Contact_BAO_GroupContact::isContactInGroup($contact_id, $gid)) {
if (CRM_CivirulesConditions_Utils_GroupContact::isContactInGroup($contact_id, $gid)) {
$isValid = true;
break;
}
......@@ -74,7 +74,7 @@ class CRM_CivirulesConditions_Contact_InGroup extends CRM_Civirules_Condition {
protected function contactIsMemberOfAllGroups($contact_id, $group_ids) {
$isValid = 0;
foreach($group_ids as $gid) {
if (CRM_Contact_BAO_GroupContact::isContactInGroup($contact_id, $gid)) {
if (CRM_CivirulesConditions_Utils_GroupContact::isContactInGroup($contact_id, $gid)) {
$isValid++;
}
}
......
<?php
class CRM_CivirulesConditions_Utils_GroupContact {
/**
* Checks wether a contact is a member of a group
*
* This function is a copy of CRM_Contact_BAO_GroupContact::isContactInGroup but with
* a change so that the group contact cache won't be rebuild. Which somehow resulted
* in a deadlock
*
* @param $contact_id
* @param $group_id
* @return bool
*/
public static function isContactInGroup($contact_id, $group_id) {
if (!CRM_Utils_Rule::positiveInteger($contact_id) ||
!CRM_Utils_Rule::positiveInteger($group_id)
) {
return FALSE;
}
$params = array(
array('group', 'IN', array($group_id => 1), 0, 0),
array('contact_id', '=', $contact_id, 0, 0),
);
list($contacts, $_) = CRM_Contact_BAO_Query::apiQuery($params, array('contact_id'), null, null, 0, 1, false, false, true);
if (!empty($contacts)) {
return TRUE;
}
return FALSE;
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment