dev/core#134 Search Builder broken filter for Source Contact ID
[civicrm-core.git] / CRM / Activity / BAO / Query.php
index 724a30642a649e3ec93152d0628759fdb83c63da..ddfb01aedd1d7c9bbaac3ff17d9f208e6e55a790 100644 (file)
@@ -136,7 +136,13 @@ class CRM_Activity_BAO_Query {
     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;
+      $query->_tables['civicrm_activity'] = $query->_tables['source_contact'] = $query->_whereTables['source_contact'] = 1;
+    }
+
+    if (!empty($query->_returnProperties['source_contact_id'])) {
+      $query->_select['source_contact_id'] = 'source_contact.id as source_contact_id';
+      $query->_element['source_contact_id'] = 1;
+      $query->_tables['civicrm_activity'] = $query->_tables['source_contact'] = $query->_whereTables['source_contact'] = 1;
     }
 
     if (!empty($query->_returnProperties['activity_result'])) {
@@ -348,6 +354,14 @@ class CRM_Activity_BAO_Query {
           $query->_qill[$grouping][] = ts('Activities which are not Followup Activities');
         }
         break;
+
+      case 'source_contact':
+      case 'source_contact_id':
+        $columnName = strstr($name, '_id') ? 'id' : 'sort_name';
+        $query->_where[$grouping][] = CRM_Contact_BAO_Query::buildClause("source_contact.{$columnName}", $op, $value, CRM_Utils_Type::typeToString($fields[$name]['type']));
+        list($op, $value) = CRM_Contact_BAO_Query::buildQillForFieldValue('CRM_Contact_DAO_Contact', $columnName, $value, $op);
+        $query->_qill[$grouping][] = ts('%1 %2 %3', array(1 => $fields[$name]['title'], 2 => $op, 3 => $value));
+        break;
     }
   }
 
@@ -402,9 +416,8 @@ class CRM_Activity_BAO_Query {
         $activityContacts = CRM_Activity_BAO_ActivityContact::buildOptions('record_type_id', 'validate');
         $sourceID = CRM_Utils_Array::key('Activity Source', $activityContacts);
         $from = "
-        LEFT JOIN civicrm_activity_contact ac
-                      ON ( ac.activity_id = civicrm_activity_contact.activity_id AND ac.record_type_id = {$sourceID})
-        INNER JOIN civicrm_contact source_contact ON (ac.contact_id = source_contact.id)";
+        INNER JOIN civicrm_contact source_contact ON
+          (civicrm_activity_contact.contact_id = source_contact.id) AND civicrm_activity_contact.record_type_id = {$sourceID}";
         break;
 
       case 'parent_id':