bulk comment fix
[civicrm-core.git] / CRM / Activity / BAO / Query.php
index 38278d6b979f532d66fbf6e5b68a22ccc103b368..39dca577a9e6e83846cc54493f2ddfd1e10304fb 100644 (file)
@@ -2,9 +2,9 @@
 
 /*
  +--------------------------------------------------------------------+
- | CiviCRM version 4.4                                                |
+ | CiviCRM version 4.5                                                |
  +--------------------------------------------------------------------+
- | Copyright CiviCRM LLC (c) 2004-2013                                |
+ | Copyright CiviCRM LLC (c) 2004-2014                                |
  +--------------------------------------------------------------------+
  | This file is a part of CiviCRM.                                    |
  |                                                                    |
@@ -29,7 +29,7 @@
 /**
  *
  * @package CRM
- * @copyright CiviCRM LLC (c) 2004-2013
+ * @copyright CiviCRM LLC (c) 2004-2014
  * $Id$
  *
  */
@@ -38,17 +38,19 @@ class CRM_Activity_BAO_Query {
   /**
    * build select for Case
    *
+   * @param $query
+   *
    * @return void
    * @access public
    */
   static function select(&$query) {
-    if (CRM_Utils_Array::value('activity_id', $query->_returnProperties)) {
+    if (!empty($query->_returnProperties['activity_id'])) {
       $query->_select['activity_id'] = "civicrm_activity.id as activity_id";
       $query->_element['activity_id'] = 1;
       $query->_tables['civicrm_activity'] = $query->_whereTables['civicrm_activity'] = 1;
     }
 
-    if (CRM_Utils_Array::value('activity_type_id', $query->_returnProperties)) {
+    if (!empty($query->_returnProperties['activity_type_id'])) {
       $query->_select['activity_type_id'] = "activity_type.id as activity_type_id";
       $query->_element['activity_type_id'] = 1;
       $query->_tables['civicrm_activity'] = 1;
@@ -57,8 +59,9 @@ class CRM_Activity_BAO_Query {
       $query->_whereTables['activity_type'] = 1;
     }
 
-    if (CRM_Utils_Array::value('activity_type', $query->_returnProperties)) {
-      $query->_select['activity_type'] = "activity_type.label as activity_type";
+    if (!empty($query->_returnProperties['activity_type'])) {
+      $query->_select['activity_type'] = "activity_type.label as activity_type,
+        civicrm_activity.activity_type_id as activity_type_id";
       $query->_element['activity_type'] = 1;
       $query->_tables['civicrm_activity'] = 1;
       $query->_tables['activity_type'] = 1;
@@ -66,19 +69,19 @@ class CRM_Activity_BAO_Query {
       $query->_whereTables['activity_type'] = 1;
     }
 
-    if (CRM_Utils_Array::value('activity_subject', $query->_returnProperties)) {
+    if (!empty($query->_returnProperties['activity_subject'])) {
       $query->_select['activity_subject'] = "civicrm_activity.subject as activity_subject";
       $query->_element['activity_subject'] = 1;
       $query->_tables['civicrm_activity'] = $query->_whereTables['civicrm_activity'] = 1;
     }
 
-    if (CRM_Utils_Array::value('activity_date_time', $query->_returnProperties)) {
+    if (!empty($query->_returnProperties['activity_date_time'])) {
       $query->_select['activity_date_time'] = "civicrm_activity.activity_date_time as activity_date_time";
       $query->_element['activity_date_time'] = 1;
       $query->_tables['civicrm_activity'] = $query->_whereTables['civicrm_activity'] = 1;
     }
 
-    if (CRM_Utils_Array::value('activity_status_id', $query->_returnProperties)) {
+    if (!empty($query->_returnProperties['activity_status_id'])) {
       $query->_select['activity_status_id'] = "activity_status.value as activity_status_id";
       $query->_element['activity_status_id'] = 1;
       $query->_tables['civicrm_activity'] = 1;
@@ -87,7 +90,7 @@ class CRM_Activity_BAO_Query {
       $query->_whereTables['activity_status'] = 1;
     }
 
-    if (CRM_Utils_Array::value('activity_status', $query->_returnProperties)) {
+    if (!empty($query->_returnProperties['activity_status'])) {
       $query->_select['activity_status'] = "activity_status.label as activity_status";
       $query->_element['activity_status'] = 1;
       $query->_tables['civicrm_activity'] = 1;
@@ -96,55 +99,55 @@ class CRM_Activity_BAO_Query {
       $query->_whereTables['activity_status'] = 1;
     }
 
-    if (CRM_Utils_Array::value('activity_duration', $query->_returnProperties)) {
+    if (!empty($query->_returnProperties['activity_duration'])) {
       $query->_select['activity_duration'] = "civicrm_activity.duration as activity_duration";
       $query->_element['activity_duration'] = 1;
       $query->_tables['civicrm_activity'] = $query->_whereTables['civicrm_activity'] = 1;
     }
 
-    if (CRM_Utils_Array::value('activity_location', $query->_returnProperties)) {
+    if (!empty($query->_returnProperties['activity_location'])) {
       $query->_select['activity_location'] = "civicrm_activity.location as activity_location";
       $query->_element['activity_location'] = 1;
       $query->_tables['civicrm_activity'] = $query->_whereTables['civicrm_activity'] = 1;
     }
 
-    if (CRM_Utils_Array::value('activity_details', $query->_returnProperties)) {
+    if (!empty($query->_returnProperties['activity_details'])) {
       $query->_select['activity_details'] = "civicrm_activity.details as activity_details";
       $query->_element['activity_details'] = 1;
       $query->_tables['civicrm_activity'] = $query->_whereTables['civicrm_activity'] = 1;
     }
 
-    if (CRM_Utils_Array::value('source_record_id', $query->_returnProperties)) {
+    if (!empty($query->_returnProperties['source_record_id'])) {
       $query->_select['source_record_id'] = "civicrm_activity.source_record_id as source_record_id";
       $query->_element['source_record_id'] = 1;
       $query->_tables['civicrm_activity'] = $query->_whereTables['civicrm_activity'] = 1;
     }
 
-    if (CRM_Utils_Array::value('activity_is_test', $query->_returnProperties)) {
+    if (!empty($query->_returnProperties['activity_is_test'])) {
       $query->_select['activity_is_test'] = "civicrm_activity.is_test as activity_is_test";
       $query->_element['activity_is_test'] = 1;
       $query->_tables['civicrm_activity'] = $query->_whereTables['civicrm_activity'] = 1;
     }
 
-    if (CRM_Utils_Array::value('activity_campaign_id', $query->_returnProperties)) {
+    if (!empty($query->_returnProperties['activity_campaign_id'])) {
       $query->_select['activity_campaign_id'] = 'civicrm_activity.campaign_id as activity_campaign_id';
       $query->_element['activity_campaign_id'] = 1;
       $query->_tables['civicrm_activity'] = $query->_whereTables['civicrm_activity'] = 1;
     }
 
-    if (CRM_Utils_Array::value('activity_engagement_level', $query->_returnProperties)) {
+    if (!empty($query->_returnProperties['activity_engagement_level'])) {
       $query->_select['activity_engagement_level'] = 'civicrm_activity.engagement_level as activity_engagement_level';
       $query->_element['activity_engagement_level'] = 1;
       $query->_tables['civicrm_activity'] = $query->_whereTables['civicrm_activity'] = 1;
     }
 
-    if (CRM_Utils_Array::value('source_contact', $query->_returnProperties)) {
+    if (!empty($query->_returnProperties['source_contact'])) {
       $query->_select['source_contact'] = 'source_contact.sort_name as source_contact';
       $query->_element['source_contact'] = 1;
       $query->_tables['source_contact'] = $query->_whereTables['source_contact'] = 1;
     }
 
-    if (CRM_Utils_Array::value('activity_result', $query->_returnProperties)) {
+    if (!empty($query->_returnProperties['activity_result'])) {
       $query->_select['activity_result'] = 'civicrm_activity.result as activity_result';
       $query->_element['result'] = 1;
       $query->_tables['civicrm_activity'] = $query->_whereTables['civicrm_activity'] = 1;
@@ -155,6 +158,8 @@ class CRM_Activity_BAO_Query {
    * Given a list of conditions in query generate the required
    * where clause
    *
+   * @param $query
+   *
    * @return void
    * @access public
    */
@@ -174,6 +179,8 @@ class CRM_Activity_BAO_Query {
   /**
    * where clause for a single field
    *
+   * @param $values
+   * @param $query
    * @return void
    * @access public
    */
@@ -188,32 +195,18 @@ class CRM_Activity_BAO_Query {
 
     switch ($name) {
       case 'activity_type_id':
+      case 'activity_type':
         $types = CRM_Core_PseudoConstant::activityType(TRUE, TRUE, FALSE, 'label', TRUE);
-
         //get the component activity types.
         $compActTypes = CRM_Core_PseudoConstant::activityType(TRUE, TRUE, FALSE, 'label', TRUE, TRUE);
+        $activityTypeIds = self::buildWhereAndQill($query, $value, $types, $op, $grouping, array('Activity Type', 'civicrm_activity.activity_type_id'));
 
-        $clause = array();
-        if (is_array($value)) {
-          foreach ($value as $id => $dontCare) {
-            if (array_key_exists($id, $types) && $dontCare) {
-              $clause[] = "'" . CRM_Utils_Type::escape($types[$id], 'String') . "'";
-              if (array_key_exists($id, $compActTypes)) {
-                CRM_Contact_BAO_Query::$_considerCompActivities = TRUE;
-              }
-            }
-          }
-          $activityTypes = implode(',', array_keys($value));
-        }
-        else {
-          $clause[] = "'" . CRM_Utils_Type::escape($value, 'String') . "'";
-          $activityTypes = $value;
-          if (array_key_exists($value, $compActTypes)) {
+        foreach ($activityTypeIds as $activityTypeId) {
+          if (array_key_exists($activityTypeId, $compActTypes)) {
             CRM_Contact_BAO_Query::$_considerCompActivities = TRUE;
+            break;
           }
         }
-        $query->_where[$grouping][] = ' civicrm_activity.activity_type_id IN (' . $activityTypes . ')';
-        $query->_qill[$grouping][] = ts('Activity Type') . ' ' . implode(' ' . ts('or') . ' ', $clause);
         break;
 
       case 'activity_survey_id':
@@ -261,19 +254,8 @@ class CRM_Activity_BAO_Query {
 
       case 'activity_status':
         $status = CRM_Core_PseudoConstant::activityStatus();
-        $clause = array();
-        if (is_array($value)) {
-          foreach ($value as $k => $v) {
-            if ($k) {
-              $clause[] = "'" . CRM_Utils_Type::escape($status[$k], 'String') . "'";
-            }
-          }
-        }
-        else {
-          $clause[] = "'" . CRM_Utils_Type::escape($value, 'String') . "'";
-        }
-        $query->_where[$grouping][] = ' civicrm_activity.status_id IN (' . implode(',', array_keys($value)) . ')';
-        $query->_qill[$grouping][] = ts('Activity Status') . ' - ' . implode(' ' . ts('or') . ' ', $clause);
+
+        $activityTypeIds = self::buildWhereAndQill($query, $value, $status, $op, $grouping, array('Activity Status', 'civicrm_activity.status_id'));
         break;
 
       case 'activity_subject':
@@ -445,6 +427,7 @@ class CRM_Activity_BAO_Query {
    *
    * @access public
    *
+   * @param $form CRM_Core_Form
    * @return void
    * @static
    */
@@ -469,13 +452,13 @@ class CRM_Activity_BAO_Query {
       2 => ts('Assigned to'),
       1 => ts('Added by'),
     );
-    $form->addRadio('activity_role', NULL, $activityRoles);
+    $form->addRadio('activity_role', NULL, $activityRoles, array('allowClear' => TRUE));
     $form->setDefaults(array('activity_role' => 3));
     $activityStatus = CRM_Core_PseudoConstant::activityStatus();
     foreach ($activityStatus as $activityStatusID => $activityStatusName) {
       $activity_status[] = $form->createElement('checkbox', $activityStatusID, NULL, $activityStatusName);
     }
-    $form->addGroup($activity_status, 'activity_status', ts('Activity Status'));
+    $form->addGroup($activity_status, 'activity_status', ts('Activity Status'), TRUE);
     $form->setDefaults(array('activity_status[1]' => 1, 'activity_status[2]' => 1));
     $form->addElement('text', 'activity_subject', ts('Subject'), CRM_Core_DAO::getAttribute('CRM_Contact_DAO_Contact', 'sort_name'));
     $form->addYesNo('activity_test', ts('Activity is a Test?'));
@@ -489,12 +472,12 @@ class CRM_Activity_BAO_Query {
     }
 
     $parentNames = CRM_Core_BAO_Tag::getTagSet('civicrm_activity');
-    CRM_Core_Form_Tag::buildQuickForm($form, $parentNames, 'civicrm_activity', NULL, TRUE, FALSE, TRUE);
+    CRM_Core_Form_Tag::buildQuickForm($form, $parentNames, 'civicrm_activity', NULL, TRUE, TRUE);
 
     $surveys = CRM_Campaign_BAO_Survey::getSurveys(TRUE, FALSE, FALSE, TRUE);
     if ($surveys) $form->add('select', 'activity_survey_id', ts('Survey / Petition'),
-      array(
-        '' => ts('- none -')) + $surveys, FALSE
+      array('' => ts('- none -')) + $surveys, FALSE,
+      array('class' => 'crm-select2')
     );
 
     $extends = array('Activity');
@@ -519,10 +502,7 @@ class CRM_Activity_BAO_Query {
       CRM_Campaign_BAO_Campaign::accessCampaign()
     ) {
       $buildEngagementLevel = TRUE;
-      $form->add('select', 'activity_engagement_level',
-        ts('Engagement Index'),
-        array('' => ts('- any -')) + CRM_Campaign_PseudoConstant::engagementLevel()
-      );
+      $form->addSelect('activity_engagement_level', array('entity' => 'activity', 'option_url' => NULL));
 
       // Add survey result field.
       $optionGroups  = CRM_Campaign_BAO_Survey::getResultSets( 'name' );
@@ -545,11 +525,11 @@ class CRM_Activity_BAO_Query {
         asort($resultOptions);
         $form->add('select', 'activity_result', ts("Survey Result"),
           $resultOptions, FALSE,
-          array('id' => 'activity_result', 'multiple' => 'multiple', 'title' => ts('- select -'))
+          array('id' => 'activity_result', 'multiple' => 'multiple', 'class' => 'crm-select2')
         );
       }
     }
-     
+
     $form->assign('buildEngagementLevel', $buildEngagementLevel);
     $form->assign('buildSurveyResult', $buildSurveyResult);
     $form->setDefaults(array('activity_test' => 0));
@@ -565,6 +545,7 @@ class CRM_Activity_BAO_Query {
         'sort_name' => 1,
         'display_name' => 1,
         'activity_type' => 1,
+        'activity_type_id' => 1,
         'activity_subject' => 1,
         'activity_date_time' => 1,
         'activity_duration' => 1,
@@ -592,5 +573,39 @@ class CRM_Activity_BAO_Query {
 
     return $properties;
   }
+
+  static function buildWhereAndQill(&$query, $value, $pseudoconstantType, $op, $grouping, $params) {
+    $matches = $val = $clause = array();
+
+    if (is_array($value)) {
+      foreach ($value as $k => $v) {
+        if ($k) {
+          $val[] = $k;
+        }
+      }
+
+      if (count($val) > 0) {
+        // Overwrite $op so it works with an IN where statement.
+        $op = 'IN';
+      }
+      else {
+        // If we somehow have an empty array, just return
+        return;
+      }
+      $value = $matches[0] = $val;
+    }
+    else {
+      preg_match_all('/\d+/', $value, $matches);
+    }
+    foreach ($matches[0] as $qill) {
+      $clause[] = CRM_Utils_Array::value($qill, $pseudoconstantType);
+    }
+
+    $query->_qill[$grouping][] = ts($params[0] . ' %1 ', array(1 => $op)) . implode(' ' . ts('or') . ' ', $clause);
+    $query->_where[$grouping][] = CRM_Contact_BAO_Query::buildClause($params[1],
+      $op, $value, "Integer"
+    );
+    return $matches[0];
+  }
 }