CRM-17154 fix search actions to support refreshing fields in confirm (like save a...
[civicrm-core.git] / js / crm.searchForm.js
index 40638742625a56773760db616ddd9396041c14fe..2e2a6cd49238ad287464657c23ebe9a231c4f4f3 100644 (file)
         }
       })
       // When selecting a task
-      .on('change', 'select#task', function() {
+      .on('change', 'select#task', function(e) {
         var $form = $(this).closest('form'),
         $go = $('input.crm-search-go-button', $form);
         var $selectedOption = $(this).find(':selected');
-        if ($selectedOption.data('confirm_message')) {
+        if (!$selectedOption.val()) {
+          // do not blank refresh the empty option.
+          return;
+        }
+        if ($selectedOption.data('is_confirm')) {
           var confirmed = false;
+          var refresh_fields = $selectedOption.data('confirm_refresh_fields');
+          var $message = '<tr>' + (($selectedOption.data('confirm_message') !== undefined) ? $selectedOption.data('confirm_message') : '') + '</tr>';
+          if (refresh_fields === undefined) {
+            refresh_fields = {};
+          }
+          $.each(refresh_fields, function (refreshIndex, refreshValue) {
+            var $refresh_field = $(refreshValue.selector);
+            var prependText = (refreshValue.prepend !== undefined) ? refreshValue.prepend : '';
+            var existingInput = $refresh_field.find('input').val();
+            $message = $message + '<tr>' + $refresh_field.html().replace(existingInput, prependText + existingInput) + '</tr>';
+          });
+
           CRM.confirm({
             title: $selectedOption.data('confirm_title') ? $selectedOption.data('confirm_title') : ts('Confirm action'),
-            message: '<table class="form-layout"><tr>' + $(title).html() + '</tr><tr>' + $selectedOption.data('confirm_message') + '</tr></table>',
+            message: '<table class="form-layout">' + $message + '</table>'
           })
           .on('crmConfirm:yes', function() {
             confirmed = true;
+            $.each(refresh_fields, function (refreshIndex, refreshValue) {
+              $('#' + refreshIndex).val($('.crm-confirm #' + refreshIndex).val());
+            });
             $go.click();
           })
           .on('crmConfirm:no', function() {