sql fixes CRM-13692
authorkurund <kurund@civicrm.org>
Sun, 3 Nov 2013 12:46:48 +0000 (18:16 +0530)
committerkurund <kurund@civicrm.org>
Sun, 3 Nov 2013 12:46:48 +0000 (18:16 +0530)
----------------------------------------
* CRM-13692: Unknown column 'civicrm_activity.source_contact_id' when using Batch Profile Update for Activities
  http://issues.civicrm.org/jira/browse/CRM-13692

CRM/Contact/BAO/Contact/Utils.php
CRM/Core/BAO/UFGroup.php

index 3e82aafeee8f319b019f9add47eae453b88cc745..5f3e9a37f001064ca855f6cd305da149aed737d4 100644 (file)
@@ -731,6 +731,7 @@ LEFT JOIN  civicrm_email ce ON ( ce.contact_id=c.id AND ce.is_primary = 1 )
     }
     elseif ($componentName == 'Activity') {
       $compTable = 'civicrm_activity';
+      $activityContacts = CRM_Core_OptionGroup::values('activity_contacts', FALSE, FALSE, FALSE, NULL, 'name');
     }
     else {
       $compTable = 'civicrm_participant';
@@ -743,8 +744,11 @@ LEFT JOIN  civicrm_email ce ON ( ce.contact_id=c.id AND ce.is_primary = 1 )
       switch ($property) {
         case 'sort_name':
           if ($componentName == 'Activity') {
-            $select[] = "contact_source.$property as $property";
-            $from[$value] = "INNER JOIN civicrm_contact contact ON ( contact.id = $compTable.source_contact_id )";
+            $sourceID = CRM_Utils_Array::key('Activity Source', $activityContacts);
+            $select[] = "contact.$property as $property";
+            $from[$value] = "
+INNER JOIN civicrm_activity_contact acs ON (acs.activity_id = {$compTable}.id AND acs.record_type_id = {$sourceID})
+INNER JOIN civicrm_contact contact ON ( contact.id = acs.contact_id )";
           }
           else {
             $select[] = "$property as $property";
@@ -753,12 +757,11 @@ LEFT JOIN  civicrm_email ce ON ( ce.contact_id=c.id AND ce.is_primary = 1 )
           break;
 
         case 'target_sort_name':
+          $targetID = CRM_Utils_Array::key('Activity Targets', $activityContacts);
           $select[] = "contact_target.sort_name as $property";
           $from[$value] = "
-INNER JOIN civicrm_contact contact_source ON ( contact_source.id = $compTable.source_contact_id )
-LEFT JOIN civicrm_activity_contact ON (civicrm_activity_contact.activity_id = $compTable.id)
-LEFT JOIN civicrm_contact as contact_target ON ( contact_target.id = civicrm_activity_contact.contact_id )
-";
+INNER JOIN civicrm_activity_contact act ON (act.activity_id = {$compTable}.id AND act.record_type_id = {$targetID})
+INNER JOIN civicrm_contact contact_target ON ( contact_target.id = act.contact_id )";
           break;
 
         case 'email':
index 29bbb34dafbba955fd18af9d6f30a43c60b28492..2f997be1d3299e0aee7f707185ff2505b253679a 100644 (file)
@@ -3062,7 +3062,7 @@ AND    ( entity_id IS NULL OR entity_id <= 0 )
    *
    * @return void.
    */
-  function setComponentDefaults(&$fields, $componentId, $component, &$defaults, $isStandalone = FALSE) {
+  public static function setComponentDefaults(&$fields, $componentId, $component, &$defaults, $isStandalone = FALSE) {
     if (!$componentId ||
       !in_array($component, array('Contribute', 'Membership', 'Event', 'Activity'))
     ) {