From eb34ba4dd665e5e5c8487c0ccf0b522bacf92d55 Mon Sep 17 00:00:00 2001 From: Jitendra Purohit Date: Fri, 14 Jul 2017 14:53:44 +0530 Subject: [PATCH 1/2] CRM-20874 - Fix older smart groups to load manage group page --- CRM/Member/BAO/Query.php | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/CRM/Member/BAO/Query.php b/CRM/Member/BAO/Query.php index 79d9b7b39571..92f294a8215e 100644 --- a/CRM/Member/BAO/Query.php +++ b/CRM/Member/BAO/Query.php @@ -219,6 +219,14 @@ public static function whereClauseSingle(&$values, &$query) { case 'membership_status_id': case 'membership_type': case 'membership_type_id': + if (strpos($name, 'status') !== FALSE) { + $name = 'status_id'; + $qillName = ts('Membership Status'); + } + else { + $name = 'membership_type_id'; + $qillName = ts('Membership Type'); + } // CRM-17075 we are specifically handling the possibility we are dealing with the entity reference field // for membership_type_id here (although status would be handled if converted). The unhandled pathway at the moment // is from groupContactCache::load and this is a small fix to get the entity reference field to work. @@ -228,15 +236,13 @@ public static function whereClauseSingle(&$values, &$query) { if (is_string($value) && strpos($value, ',') && $op == '=') { $value = array('IN' => explode(',', $value)); } + elseif (is_string($value) && !strpos($value, ',')) { + $value = CRM_Core_PseudoConstant::getKey('CRM_Member_DAO_Membership', $name, $value); + } case 'membership_id': case 'member_id': // CRM-18523 Updated to membership_id but kept member_id case for backwards compatibility case 'member_campaign_id': - - if (strpos($name, 'status') !== FALSE) { - $name = 'status_id'; - $qillName = ts('Membership Status'); - } - elseif ($name == 'membership_id' || $name == 'member_id') { + if ($name == 'membership_id' || $name == 'member_id') { $name = 'id'; $qillName = ts('Membership ID'); } @@ -244,10 +250,6 @@ public static function whereClauseSingle(&$values, &$query) { $name = 'campaign_id'; $qillName = ts('Campaign'); } - else { - $name = 'membership_type_id'; - $qillName = ts('Membership Type'); - } $query->_where[$grouping][] = CRM_Contact_BAO_Query::buildClause("civicrm_membership.$name", $op, $value, From a8f44fba97605a327ae8f80cde2d1f2de50f6dc2 Mon Sep 17 00:00:00 2001 From: Jitendra Purohit Date: Wed, 13 Sep 2017 12:39:11 +0530 Subject: [PATCH 2/2] Ensure membership_type_id is non-numeric string --- CRM/Member/BAO/Query.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CRM/Member/BAO/Query.php b/CRM/Member/BAO/Query.php index 92f294a8215e..11d1dce07677 100644 --- a/CRM/Member/BAO/Query.php +++ b/CRM/Member/BAO/Query.php @@ -236,7 +236,7 @@ public static function whereClauseSingle(&$values, &$query) { if (is_string($value) && strpos($value, ',') && $op == '=') { $value = array('IN' => explode(',', $value)); } - elseif (is_string($value) && !strpos($value, ',')) { + elseif (is_string($value) && !is_numeric($value) && !strpos($value, ',')) { $value = CRM_Core_PseudoConstant::getKey('CRM_Member_DAO_Membership', $name, $value); } case 'membership_id':