CRM - 17471 Fix Issue where updated status labels aren't displayed in search
[civicrm-core.git] / CRM / Member / BAO / Query.php
index 8c35a1fd6c12143aa2ef2e7467c4427ffd44d1b3..0fff4dc3cb54423534ed61f8d30e3c4843894173 100644 (file)
@@ -29,8 +29,6 @@
  *
  * @package CRM
  * @copyright CiviCRM LLC (c) 2004-2015
- * $Id$
- *
  */
 class CRM_Member_BAO_Query {
 
@@ -46,8 +44,6 @@ class CRM_Member_BAO_Query {
    * If membership are involved, add the specific membership fields
    *
    * @param $query
-   *
-   * @return void
    */
   public static function select(&$query) {
     // if membership mode add membership id
@@ -88,7 +84,7 @@ class CRM_Member_BAO_Query {
         $query->_whereTables['civicrm_membership_status'] = 1;
       }
 
-      if (!empty($query->_returnProperties['status_id'])) {
+      if (!empty($query->_returnProperties['membership_status_id'])) {
         $query->_select['status_id'] = "civicrm_membership_status.id as status_id";
         $query->_element['status_id'] = 1;
         $query->_tables['civicrm_membership_status'] = 1;
@@ -201,8 +197,15 @@ class CRM_Member_BAO_Query {
         $query->_tables['civicrm_membership'] = $query->_whereTables['civicrm_membership'] = 1;
         return;
 
-      case 'membership_status':
+      // CRM-17011 These 2 variants appear in some smart groups saved at some time prior to 4.6.6.
       case 'member_status_id':
+      case 'member_membership_type_id':
+        if (is_array($value)) {
+          $op = 'IN';
+          $value = array_keys($value);
+        }
+      case 'membership_status':
+      case 'membership_status_id':
       case 'membership_type':
       case 'membership_type_id':
       case 'member_id':
@@ -216,7 +219,7 @@ class CRM_Member_BAO_Query {
         }
         else {
           $name = 'membership_type_id';
-          $qillName = 'Memebership Type(s)';
+          $qillName = 'Membership Type(s)';
         }
         $query->_where[$grouping][] = CRM_Contact_BAO_Query::buildClause("civicrm_membership.$name",
           $op,
@@ -289,6 +292,9 @@ class CRM_Member_BAO_Query {
         return;
 
       case 'member_campaign_id':
+        if (CRM_Utils_Array::value($op, $value)) {
+          $value = $value[$op];
+        }
         $campParams = array(
           'op' => $op,
           'campaign' => $value,
@@ -390,12 +396,13 @@ class CRM_Member_BAO_Query {
    * @param CRM_Core_Form $form
    */
   public static function buildSearchForm(&$form) {
-    $form->addSelect('status_id',
-      array('entity' => 'membership', 'multiple' => 'multiple', 'label' => ts('Memebership Status(s)'), 'option_url' => NULL, 'placeholder' => ts('- any -'))
+    $membershipStatus = CRM_Member_PseudoConstant::membershipStatus(NULL, NULL, 'label', FALSE, FALSE);
+    $form->add('select', 'membership_status_id', ts('Membership Status(s)'), $membershipStatus, FALSE,
+      array('id' => 'membership_status_id', 'multiple' => 'multiple', 'class' => 'crm-select2')
     );
 
     $form->addSelect('membership_type_id',
-      array('entity' => 'membership', 'multiple' => 'multiple', 'label' => ts('Memebership Type(s)'), 'option_url' => NULL, 'placeholder' => ts('- any -'))
+      array('entity' => 'membership', 'multiple' => 'multiple', 'label' => ts('Membership Type(s)'), 'option_url' => NULL, 'placeholder' => ts('- any -'))
     );
 
     $form->addElement('text', 'member_source', ts('Source'));