Merge pull request #12743 from civicrm/5.5
authorEileen McNaughton <eileen@mcnaughty.com>
Wed, 29 Aug 2018 00:49:59 +0000 (12:49 +1200)
committerGitHub <noreply@github.com>
Wed, 29 Aug 2018 00:49:59 +0000 (12:49 +1200)
5.5 to master

CRM/Activity/BAO/Query.php
CRM/Custom/Form/Field.php

index ddfb01aedd1d7c9bbaac3ff17d9f208e6e55a790..a450337ee2d42c5890303bd6c72b5fe9a7ea162b 100644 (file)
@@ -413,11 +413,16 @@ class CRM_Activity_BAO_Query {
         break;
 
       case 'source_contact':
-        $activityContacts = CRM_Activity_BAO_ActivityContact::buildOptions('record_type_id', 'validate');
-        $sourceID = CRM_Utils_Array::key('Activity Source', $activityContacts);
+        $sourceID = CRM_Core_PseudoConstant::getKey(
+          'CRM_Activity_BAO_ActivityContact',
+          'record_type_id',
+          'Activity Source'
+        );
         $from = "
-        INNER JOIN civicrm_contact source_contact ON
-          (civicrm_activity_contact.contact_id = source_contact.id) AND civicrm_activity_contact.record_type_id = {$sourceID}";
+          LEFT JOIN civicrm_activity_contact source_activity
+            ON (source_activity.activity_id = civicrm_activity_contact.activity_id
+              AND source_activity.record_type_id = {$sourceID})
+          LEFT JOIN civicrm_contact source_contact ON (source_activity.contact_id = source_contact.id)";
         break;
 
       case 'parent_id':
index 0a83a5b37ea99e7a2ffaf9af3a2742b999c046da..4391c22ee3e344dc5301ca86998d3c17708d6fa0 100644 (file)
@@ -315,26 +315,22 @@ class CRM_Custom_Form_Field extends CRM_Core_Form {
       $this->add('checkbox', 'in_selector', ts('Display in Table?'));
     }
 
-    if ($this->_action == CRM_Core_Action::UPDATE) {
-      $this->freeze('data_type');
-    }
+    $optionGroupParams = [
+      'is_reserved' => 0,
+      'is_active' => 1,
+      'options' => ['limit' => 0, 'sort' => "title ASC"],
+      'return' => ['title'],
+    ];
 
     if ($this->_action == CRM_Core_Action::UPDATE) {
-      $optionGroupParams = [
-        'id' => $this->_values['option_group_id'],
-        'return' => ['title'],
-      ];
-    }
-    else {
-      $optionGroupParams = [
-        'is_reserved' => 0,
-        'is_active' => 1,
-        'options' => ['limit' => 0, 'sort' => "title ASC"],
-        'return' => ['title'],
-      ];
+      $this->freeze('data_type');
+      // Before dev/core#155 we didn't set the is_reserved flag properly, which should be handled by the upgrade script...
+      //  but it is still possible that existing installs may have optiongroups linked to custom fields that are marked reserved.
+      $optionGroupParams['id'] = $this->_values['option_group_id'];
+      $optionGroupParams['options']['or'] = [["is_reserved", "id"]];
     }
 
-    // Get all custom (is_reserved=0) option groups
+    // Retrieve optiongroups for selection list
     $optionGroupMetadata = civicrm_api3('OptionGroup', 'get', $optionGroupParams);
 
     // OptionGroup selection