CRM-13966 - Fix entityRef/getlist to work with non-id keys
authorColeman Watts <coleman@civicrm.org>
Sat, 22 Feb 2014 15:54:44 +0000 (10:54 -0500)
committerColeman Watts <coleman@civicrm.org>
Tue, 25 Feb 2014 14:27:42 +0000 (09:27 -0500)
CRM/Core/Form/Renderer.php
api/v3/Generic/Getlist.php
js/Common.js

index dadd82e2e528eaef34cb0415ddc2dc69302538c3..0c3c4dbef1f8ce339fed3142c3dec4f70f7f5814 100644 (file)
@@ -212,12 +212,14 @@ class CRM_Core_Form_Renderer extends HTML_QuickForm_Renderer_ArraySmarty {
     if ($val) {
       $entity = $field->getAttribute('data-api-entity');
       $select = json_decode($field->getAttribute('data-select-params'), TRUE);
+      $api = json_decode($field->getAttribute('data-api-params'), TRUE);
+      $params = CRM_Utils_Array::value('params', $api, array());
       // Support serialized values
       if (strpos($val, CRM_Core_DAO::VALUE_SEPARATOR) !== FALSE) {
         $val = str_replace(CRM_Core_DAO::VALUE_SEPARATOR, ',', trim($val, CRM_Core_DAO::VALUE_SEPARATOR));
         $field->setValue($val);
       }
-      $result = civicrm_api3($entity, 'getlist', array('params' => array('id' => $val)));
+      $result = civicrm_api3($entity, 'getlist', array('id' => $val, 'params' => $params));
       if ($field->isFrozen()) {
         $field->removeAttribute('class');
       }
index 12bad54b9f5499e7f0a530ee26b1dac4b19a73a4..4ab281940f16e234d2a80445e655e5fc5ef90fb4 100644 (file)
@@ -73,7 +73,7 @@ function _civicrm_api3_generic_getList_defaults($entity, &$request) {
     'page_num' => 1,
     'input' => '',
     'image_field' => NULL,
-    'id_field' => 'id',
+    'id_field' => $entity == 'option_value' ? 'value' : 'id',
     'params' => array(),
   );
   // Find main field from meta
index 29198a3985a33110109efd693eac95d3cc1e4cd4..37577b1bcdab7e85e00f9418f79baa407b26edb7 100644 (file)
@@ -241,8 +241,6 @@ CRM.validate = CRM.validate || {
 (function ($, undefined) {
   "use strict";
 
-  // Set select2 defaults
-  $.fn.select2.defaults.minimumResultsForSearch = 10;
   // https://github.com/ivaynberg/select2/pull/2090
   $.fn.select2.defaults.width = 'resolve';
 
@@ -317,21 +315,21 @@ CRM.validate = CRM.validate || {
       })
       .find('input.select-row:checked').parents('tr').addClass('crm-row-selected');
     $('.crm-select2', e.target).each(function() {
-      var $el = $(this);
+      var $el = $(this), options = {};
       // quickform doesn't support optgroups so here's a hack :(
       $('option[value^=crm_optgroup]', this).each(function() {
         $(this).nextUntil('option[value^=crm_optgroup]').wrapAll('<optgroup label="' + $(this).text() + '" />');
         $(this).remove();
       });
-      // Get a copy of the data rather than a reference
-      var options = $.extend({}, $el.data('select-params') || {});
-      // Set placeholder from markup if not specified
+      // Defaults for single-selects
       if ($el.is('select:not([multiple])')) {
-        options.allowClear = options.allowClear !== undefined ? options.allowClear : !($el.hasClass('required'));
-        if (options.placeHolder === undefined && $('option:first', this).val() === '') {
+        options.minimumResultsForSearch = 10;
+        options.allowClear = !($el.hasClass('required'));
+        if ($('option:first', this).val() === '') {
           options.placeholderOption = 'first';
         }
       }
+      $.extend(options, $el.data('select-params') || {});
       // Autocomplete using the getlist api
       if ($el.data('api-entity') && $el.hasClass('crm-form-entityref')) {
         $el.addClass('crm-ajax-select');