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':
$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