Merge pull request #17806 from demeritcowboy/mail-report-csv-bom
[civicrm-core.git] / CRM / Activity / BAO / Query.php
index e965b43d48eb82765105800071f9ea7bf6cf3d62..20dd823853c06cb64948ad0acfe03f51c391d9be 100644 (file)
@@ -28,22 +28,13 @@ class CRM_Activity_BAO_Query {
       $query->_tables['civicrm_activity'] = $query->_whereTables['civicrm_activity'] = 1;
     }
 
-    if (!empty($query->_returnProperties['activity_type_id'])) {
-      $query->_select['activity_type_id'] = 'activity_type.value as activity_type_id';
+    if (!empty($query->_returnProperties['activity_type_id'])
+      || !empty($query->_returnProperties['activity_type'])
+    ) {
+      $query->_select['activity_type_id'] = 'civicrm_activity.activity_type_id';
       $query->_element['activity_type_id'] = 1;
       $query->_tables['civicrm_activity'] = 1;
-      $query->_tables['activity_type'] = 1;
-      $query->_whereTables['civicrm_activity'] = 1;
-      $query->_whereTables['activity_type'] = 1;
-    }
-
-    if (!empty($query->_returnProperties['activity_type'])) {
-      $query->_select['activity_type'] = 'activity_type.label as activity_type';
-      $query->_element['activity_type'] = 1;
-      $query->_tables['civicrm_activity'] = 1;
-      $query->_tables['activity_type'] = 1;
       $query->_whereTables['civicrm_activity'] = 1;
-      $query->_whereTables['activity_type'] = 1;
     }
 
     if (!empty($query->_returnProperties['activity_subject'])) {
@@ -180,19 +171,16 @@ class CRM_Activity_BAO_Query {
 
     $fields = CRM_Activity_BAO_Activity::exportableFields();
     $fieldSpec = $query->getFieldSpec($name);
+
     $query->_tables['civicrm_activity'] = $query->_whereTables['civicrm_activity'] = 1;
     if ($query->_mode & CRM_Contact_BAO_Query::MODE_ACTIVITY) {
       $query->_skipDeleteClause = TRUE;
     }
-    // @todo we want to do this in a more metadata driven way, and also in contribute.
-    // But for the rc...
-    $namesToConvert = [
-      'activity_status' => 'activity_status_id',
-    ];
-    $name = $namesToConvert[$name] ?? $name;
 
     switch ($name) {
+      case 'activity_type':
       case 'activity_type_id':
+      case 'activity_status':
       case 'activity_status_id':
       case 'activity_engagement_level':
       case 'activity_id':
@@ -201,42 +189,14 @@ class CRM_Activity_BAO_Query {
         // We no longer expect "subject" as a specific criteria (as of CRM-19447),
         // but we still use activity_subject in Activity.Get API
       case 'activity_subject':
-
-        $qillName = $name;
-        if (in_array($name, ['activity_engagement_level', 'activity_id'])) {
-          $name = $qillName = str_replace('activity_', '', $name);
-        }
-        if (in_array($name, [
-          'activity_subject',
-          'activity_priority_id',
-        ])) {
-          $name = str_replace('activity_', '', $name);
-          $qillName = str_replace('_id', '', $qillName);
-        }
-        if ($name == 'activity_campaign_id') {
-          $name = 'campaign_id';
-        }
-
-        $dataType = !empty($fields[$qillName]['type']) ? CRM_Utils_Type::typeToString($fields[$qillName]['type']) : 'String';
-
-        $where = $fieldSpec['where'];
-        if (!$where) {
-          $where = 'civicrm_activity.' . $name;
-        }
-        $query->_where[$grouping][] = CRM_Contact_BAO_Query::buildClause($where, $op, $value, $dataType);
-        list($op, $value) = CRM_Contact_BAO_Query::buildQillForFieldValue('CRM_Activity_DAO_Activity', $name, $value, $op);
-        $query->_qill[$grouping][] = ts('%1 %2 %3', [
-          1 => $fields[$qillName]['title'],
-          2 => $op,
-          3 => $value,
-        ]);
+        $query->_where[$grouping][] = CRM_Contact_BAO_Query::buildClause($fieldSpec['where'], $op, $value, CRM_Utils_Type::typeToString($fieldSpec['type']));
+        $query->_qill[$grouping][]  = $query->getQillForField($fieldSpec['is_pseudofield_for'] ?? $fieldSpec['name'], $value, $op, $fieldSpec);
         break;
 
       case 'activity_text':
         self::whereClauseSingleActivityText($values, $query);
         break;
 
-      case 'activity_type':
       case 'activity_priority':
         $query->_where[$grouping][] = CRM_Contact_BAO_Query::buildClause("$name.label", $op, $value, 'String');
         list($op, $value) = CRM_Contact_BAO_Query::buildQillForFieldValue('CRM_Activity_DAO_Activity', $name, $value, $op);
@@ -312,7 +272,7 @@ class CRM_Activity_BAO_Query {
             $val = explode(',', $val);
             foreach ($val as $tId) {
               if (is_numeric($tId)) {
-                $value[$tId] = 1;
+                $value[] = $tId;
               }
             }
           }