CRM-13929 - Parameterize radio clear widget
[civicrm-core.git] / CRM / Member / BAO / Query.php
index 2fd42a68fbda9339360e6d4fd1d36f71fd27c155..3f029f1648d5a7b1d1b0a266787b011bcbbef2ca 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /*
  +--------------------------------------------------------------------+
- | CiviCRM version 4.3                                                |
+ | CiviCRM version 4.4                                                |
  +--------------------------------------------------------------------+
  | Copyright CiviCRM LLC (c) 2004-2013                                |
  +--------------------------------------------------------------------+
@@ -57,7 +57,7 @@ class CRM_Member_BAO_Query {
       $query->_whereTables['civicrm_membership'] = 1;
 
       //add membership type
-      if (CRM_Utils_Array::value('membership_type', $query->_returnProperties)) {
+      if (!empty($query->_returnProperties['membership_type'])) {
         $query->_select['membership_type'] = "civicrm_membership_type.name as membership_type";
         $query->_element['membership_type'] = 1;
         $query->_tables['civicrm_membership_type'] = 1;
@@ -65,26 +65,26 @@ class CRM_Member_BAO_Query {
       }
 
       //add join date
-      if (CRM_Utils_Array::value('join_date', $query->_returnProperties)) {
+      if (!empty($query->_returnProperties['join_date'])) {
         $query->_select['join_date'] = "civicrm_membership.join_date as join_date";
         $query->_element['join_date'] = 1;
       }
 
       //add source
-      if (CRM_Utils_Array::value('membership_source', $query->_returnProperties)) {
+      if (!empty($query->_returnProperties['membership_source'])) {
         $query->_select['membership_source'] = "civicrm_membership.source as membership_source";
         $query->_element['membership_source'] = 1;
       }
 
       //add status
-      if (CRM_Utils_Array::value('membership_status', $query->_returnProperties)) {
+      if (!empty($query->_returnProperties['membership_status'])) {
         $query->_select['membership_status'] = "civicrm_membership_status.label as membership_status";
         $query->_element['membership_status'] = 1;
         $query->_tables['civicrm_membership_status'] = 1;
         $query->_whereTables['civicrm_membership_status'] = 1;
       }
 
-      if (CRM_Utils_Array::value('status_id', $query->_returnProperties)) {
+      if (!empty($query->_returnProperties['status_id'])) {
         $query->_select['status_id'] = "civicrm_membership_status.id as status_id";
         $query->_element['status_id'] = 1;
         $query->_tables['civicrm_membership_status'] = 1;
@@ -92,34 +92,34 @@ class CRM_Member_BAO_Query {
       }
 
       //add start date / end date
-      if (CRM_Utils_Array::value('membership_start_date', $query->_returnProperties)) {
+      if (!empty($query->_returnProperties['membership_start_date'])) {
         $query->_select['membership_start_date'] = "civicrm_membership.start_date as membership_start_date";
         $query->_element['membership_start_date'] = 1;
       }
 
-      if (CRM_Utils_Array::value('membership_end_date', $query->_returnProperties)) {
+      if (!empty($query->_returnProperties['membership_end_date'])) {
         $query->_select['membership_end_date'] = "civicrm_membership.end_date as  membership_end_date";
         $query->_element['membership_end_date'] = 1;
       }
 
       //add owner_membership_id
-      if (CRM_Utils_Array::value('owner_membership_id', $query->_returnProperties)) {
+      if (!empty($query->_returnProperties['owner_membership_id'])) {
         $query->_select['owner_membership_id'] = "civicrm_membership.owner_membership_id as owner_membership_id";
         $query->_element['owner_membership_id'] = 1;
       }
       //add max_related
-      if (CRM_Utils_Array::value('max_related', $query->_returnProperties)) {
+      if (!empty($query->_returnProperties['max_related'])) {
         $query->_select['max_related'] = "civicrm_membership.max_related as max_related";
         $query->_element['max_related'] = 1;
       }
       //add recur id w/o taking contribution table in join.
-      if (CRM_Utils_Array::value('membership_recur_id', $query->_returnProperties)) {
+      if (!empty($query->_returnProperties['membership_recur_id'])) {
         $query->_select['membership_recur_id'] = "civicrm_membership.contribution_recur_id as membership_recur_id";
         $query->_element['membership_recur_id'] = 1;
       }
 
       //add campaign id.
-      if (CRM_Utils_Array::value('member_campaign_id', $query->_returnProperties)) {
+      if (!empty($query->_returnProperties['member_campaign_id'])) {
         $query->_select['member_campaign_id'] = 'civicrm_membership.campaign_id as member_campaign_id';
         $query->_element['member_campaign_id'] = 1;
       }
@@ -127,30 +127,19 @@ class CRM_Member_BAO_Query {
   }
 
   static function where(&$query) {
-    $grouping = $testCondition = NULL;
+    $grouping = NULL;
     foreach (array_keys($query->_params) as $id) {
-      if (!CRM_Utils_Array::value(0, $query->_params[$id])) {
+      if (empty($query->_params[$id][0])) {
         continue;
       }
-      if (substr($query->_params[$id][0], 0, 7) == 'member_') {
+      if (substr($query->_params[$id][0], 0, 7) == 'member_' || substr($query->_params[$id][0], 0, 11) == 'membership_') {
         if ($query->_mode == CRM_Contact_BAO_QUERY::MODE_CONTACTS) {
           $query->_useDistinct = TRUE;
         }
-        if ($query->_params[$id][0] == 'member_test') {
-          $testCondition = $id;
-          continue;
-        }
         $grouping = $query->_params[$id][3];
         self::whereClauseSingle($query->_params[$id], $query);
       }
     }
-    // Only add test condition if other fields are selected
-    if ($grouping !== NULL && $testCondition &&
-      // we dont want to include all tests for sql OR CRM-7827
-      $query->getOperator() != 'OR'
-    ) {
-      self::whereClauseSingle($query->_params[$testCondition], $query);
-    }
   }
 
   static function whereClauseSingle(&$values, &$query) {
@@ -201,12 +190,23 @@ class CRM_Member_BAO_Query {
         $query->_tables['civicrm_membership'] = $query->_whereTables['civicrm_membership'] = 1;
         return;
 
+      case 'membership_status':
       case 'member_status_id':
-        $status = implode(',', array_keys($value));
-
-        if (count($value) > 1) {
-          $op = 'IN';
-          $status = "({$status})";
+        if (!is_array($value)) {
+          $status = $value;
+          if (!empty($value)) {
+            $value = array_flip(explode(",", str_replace(array( '(', ')' ), '', $value)));
+          }
+          else {
+            $value = array();
+          }
+        }
+        else {
+          $status = implode(',', array_keys($value));
+          if (count($value) > 1) {
+            $op = 'IN';
+            $status = "({$status})";
+          }
         }
 
         $names = array();
@@ -224,9 +224,12 @@ class CRM_Member_BAO_Query {
         return;
 
       case 'member_test':
-        $query->_where[$grouping][] = CRM_Contact_BAO_Query::buildClause("civicrm_membership.is_test", $op, $value, "Boolean");
-        if ($value) {
-          $query->_qill[$grouping][] = ts('Membership is a Test');
+        // We dont want to include all tests for sql OR CRM-7827
+        if (!$value || $query->getOperator() != 'OR') {
+          $query->_where[$grouping][] = CRM_Contact_BAO_Query::buildClause("civicrm_membership.is_test", $op, $value, "Boolean");
+          if ($value) {
+            $query->_qill[$grouping][] = ts('Membership is a Test');
+          }
         }
         return;
 
@@ -269,11 +272,23 @@ class CRM_Member_BAO_Query {
         $query->_tables['civicrm_membership'] = $query->_whereTables['civicrm_membership'] = 1;
         return;
 
+      case 'membership_type':
       case 'member_membership_type_id':
-        $mType = implode(',', array_keys($value));
-        if (count($value) > 1) {
-          $op = 'IN';
-          $mType = "({$mType})";
+        if (!is_array($value)) {
+          $mType = $value;
+          if (!empty($value)) {
+            $value = array_flip(explode(",", str_replace(array( '(', ')' ), '', $value)));
+          }
+          else {
+            $value = array();
+          }
+        }
+        else {
+          $mType = implode(',', array_keys($value));
+          if (count($value) > 1) {
+            $op = 'IN';
+            $mType = "({$mType})";
+          }
         }
 
         $names = array();
@@ -409,10 +424,10 @@ class CRM_Member_BAO_Query {
 
     CRM_Core_Form_Date::buildDateRange($form, 'member_end_date', 1, '_low', '_high', ts('From'), FALSE);
 
-    $form->addYesNo('member_is_primary', ts('Primary Member?'));
-    $form->addYesNo('member_pay_later', ts('Pay Later?'));
-    $form->addYesNo('member_auto_renew', ts('Auto-Renew?'));
-    $form->addYesNo('member_test', ts('Membership is a Test?'));
+    $form->addYesNo('member_is_primary', ts('Primary Member?'), TRUE);
+    $form->addYesNo('member_pay_later', ts('Pay Later?'), TRUE);
+    $form->addYesNo('member_auto_renew', ts('Auto-Renew?'), TRUE);
+    $form->addYesNo('member_test', ts('Membership is a Test?'), TRUE);
 
     // add all the custom  searchable fields
     $extends = array('Membership');
@@ -440,14 +455,9 @@ class CRM_Member_BAO_Query {
 
   static function searchAction(&$row, $id) {}
 
-  static function addShowHide(&$showHide) {
-    $showHide->addHide('memberForm');
-    $showHide->addShow('memberForm_show');
-  }
-
   static function tableNames(&$tables) {
     //add membership table
-    if (CRM_Utils_Array::value('civicrm_membership_log', $tables) || CRM_Utils_Array::value('civicrm_membership_status', $tables) || CRM_Utils_Array::value('civicrm_membership_type', $tables)) {
+    if (!empty($tables['civicrm_membership_log']) || !empty($tables['civicrm_membership_status']) || CRM_Utils_Array::value('civicrm_membership_type', $tables)) {
       $tables = array_merge(array('civicrm_membership' => 1), $tables);
     }
   }