X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FMember%2FBAO%2FQuery.php;h=0fff4dc3cb54423534ed61f8d30e3c4843894173;hb=9d4d481e3d8bbf5f5655f257bc11f74eb1ae5808;hp=1d14d1ca45a5e2275cade86d5a3b4ab0d81c2d22;hpb=49414d6faa37375cef1ea0a156054ddd9cc6ae8d;p=civicrm-core.git diff --git a/CRM/Member/BAO/Query.php b/CRM/Member/BAO/Query.php index 1d14d1ca45..0fff4dc3cb 100644 --- a/CRM/Member/BAO/Query.php +++ b/CRM/Member/BAO/Query.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.6 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2014 | + | Copyright CiviCRM LLC (c) 2004-2015 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -23,14 +23,12 @@ | GNU Affero General Public License or the licensing of CiviCRM, | | see the CiviCRM license FAQ at http://civicrm.org/licensing | +--------------------------------------------------------------------+ -*/ + */ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2014 - * $Id$ - * + * @copyright CiviCRM LLC (c) 2004-2015 */ 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,36 +197,37 @@ 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': - if (!is_array($value)) { - $status = $value; - if (!empty($value)) { - $value = array_flip(explode(",", str_replace(array('(', ')'), '', $value))); - } - else { - $value = array(); - } + case 'member_membership_type_id': + if (is_array($value)) { + $op = 'IN'; + $value = array_keys($value); } - else { - $status = implode(',', array_keys($value)); - if (count($value) > 0) { - $op = 'IN'; - $status = "({$status})"; - } + case 'membership_status': + case 'membership_status_id': + case 'membership_type': + case 'membership_type_id': + case 'member_id': + if (strpos($name, 'status') !== FALSE) { + $name = 'status_id'; + $qillName = 'Membership Status(s)'; } - - $names = array(); - $statusTypes = CRM_Member_PseudoConstant::membershipStatus(NULL, NULL, 'label'); - foreach ($value as $id => $dontCare) { - $names[] = $statusTypes[$id]; + elseif ($name == 'member_id') { + $name = 'id'; + $qillName = 'Membership ID'; } - $query->_qill[$grouping][] = ts('Membership Status %1', array(1 => $op)) . ' ' . implode(' ' . ts('or') . ' ', $names); - $query->_where[$grouping][] = CRM_Contact_BAO_Query::buildClause("civicrm_membership.status_id", + else { + $name = 'membership_type_id'; + $qillName = 'Membership Type(s)'; + } + $query->_where[$grouping][] = CRM_Contact_BAO_Query::buildClause("civicrm_membership.$name", $op, - $status, + $value, "Integer" ); + list($op, $value) = CRM_Contact_BAO_Query::buildQillForFieldValue('CRM_Member_DAO_Membership', $name, $value, $op); + $query->_qill[$grouping][] = ts('%1 %2 %3', array(1 => $qillName, 2 => $op, 3 => $value)); $query->_tables['civicrm_membership'] = $query->_whereTables['civicrm_membership'] = 1; return; @@ -282,46 +279,6 @@ class CRM_Member_BAO_Query { $query->_tables['civicrm_membership'] = $query->_whereTables['civicrm_membership'] = 1; return; - case 'membership_type': - case 'member_membership_type_id': - 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) > 0) { - $op = 'IN'; - $mType = "({$mType})"; - } - } - - $names = array(); - $membershipTypes = CRM_Member_PseudoConstant::membershipType(); - foreach ($value as $id => $dontCare) { - if (!empty($membershipTypes[$id])) { - $names[] = $membershipTypes[$id]; - } - } - $query->_qill[$grouping][] = ts('Membership Type %1', array(1 => $op)) . ' ' . implode(' ' . ts('or') . ' ', $names); - $query->_where[$grouping][] = CRM_Contact_BAO_Query::buildClause("civicrm_membership.membership_type_id", - $op, - $mType, - "Integer" - ); - $query->_tables['civicrm_membership'] = $query->_whereTables['civicrm_membership'] = 1; - return; - - case 'member_id': - $query->_where[$grouping][] = " civicrm_membership.id $op $value"; - $query->_tables['civicrm_membership'] = $query->_whereTables['civicrm_membership'] = 1; - return; - case 'member_is_primary': if ($value) { $query->_where[$grouping][] = " civicrm_membership.owner_membership_id IS NULL"; @@ -335,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, @@ -392,7 +352,7 @@ class CRM_Member_BAO_Query { * * @return array|null */ - static function defaultReturnProperties( + public static function defaultReturnProperties( $mode, $includeCustomFields = TRUE ) { @@ -436,13 +396,14 @@ class CRM_Member_BAO_Query { * @param CRM_Core_Form $form */ public static function buildSearchForm(&$form) { - foreach (CRM_Member_PseudoConstant::membershipType() as $id => $Name) { - $form->_membershipType = &$form->addElement('checkbox', "member_membership_type_id[$id]", NULL, $Name); - } + $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') + ); - foreach (CRM_Member_PseudoConstant::membershipStatus(NULL, NULL, 'label') as $sId => $sName) { - $form->_membershipStatus = &$form->addElement('checkbox', "member_status_id[$sId]", NULL, $sName); - } + $form->addSelect('membership_type_id', + array('entity' => 'membership', 'multiple' => 'multiple', 'label' => ts('Membership Type(s)'), 'option_url' => NULL, 'placeholder' => ts('- any -')) + ); $form->addElement('text', 'member_source', ts('Source')); @@ -497,4 +458,5 @@ class CRM_Member_BAO_Query { $tables = array_merge(array('civicrm_membership' => 1), $tables); } } + }