*
* @package CRM
* @copyright CiviCRM LLC (c) 2004-2015
- * $Id$
- *
*/
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
$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;
$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;
$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";
return;
case 'member_campaign_id':
+ if (CRM_Utils_Array::value($op, $value)) {
+ $value = $value[$op];
+ }
$campParams = array(
'op' => $op,
'campaign' => $value,
* @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);
- }
-
- foreach (CRM_Member_PseudoConstant::membershipStatus(NULL, NULL, 'label') as $sId => $sName) {
- $form->_membershipStatus = &$form->addElement('checkbox', "member_status_id[$sId]", NULL, $sName);
- }
+ $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('Membership Type(s)'), 'option_url' => NULL, 'placeholder' => ts('- any -'))
+ );
$form->addElement('text', 'member_source', ts('Source'));