Merge remote-tracking branch 'upstream/4.5' into 4.5-master-2015-03-09-21-44-34
[civicrm-core.git] / templates / CRM / Contact / Page / View / Summary.js
index 2680b9aa899071e3833ec01597635a38ece7e120..f38bf305b5a49f3c76da70fdb7c1f7d76f6e1824 100644 (file)
@@ -1,11 +1,25 @@
 // http://civicrm.org/licensing
 (function($, _) {
+  // FIXME: Much of this code is redundant with CRM.loadForm
 
   var ajaxFormParams = {
     dataType:'json',
     beforeSubmit: function(arr, $form, options) {
       $form.block();
     },
+    beforeSerialize: function(form, options) {
+      // Copied from crm.ajax.js
+      if (window.CKEDITOR && window.CKEDITOR.instances) {
+        $.each(CKEDITOR.instances, function() {
+          this.updateElement && this.updateElement();
+        });
+      }
+      if (window.tinyMCE && tinyMCE.editors) {
+        $.each(tinyMCE.editors, function() {
+          this.save();
+        });
+      }
+    },
     success: requestHandler,
     error: errorHandler
   };
@@ -59,7 +73,7 @@
       o.trigger('crmFormSuccess', [response]);
       $('.crm-inline-edit-container').addClass('crm-edit-ready');
       var data = o.data('edit-params');
-      var dependent = o.data('dependent-fields') || [];
+      var dependent = $((o.data('dependent-fields') || []).join(','));
       // Clone the add-new link if replacing it, and queue the clone to be refreshed as a dependent block
       if (o.hasClass('add-new') && response.addressId) {
         data.aid = response.addressId;
@@ -77,7 +91,7 @@
         var locNo = clData.locno++;
         cl.attr('id', cl.attr('id').replace(locNo, clData.locno)).removeClass('form');
         o.closest('.crm-summary-block').after(clone);
-        $.merge(dependent, $('.crm-inline-edit', clone));
+        dependent = dependent.add($('.crm-inline-edit', clone));
       }
       $('a.ui-notify-close', '#crm-notification-container').click();
       // Delete an address
       }
       else {
         // Reload this block plus all dependent blocks
-        var update = $.merge([o], dependent);
-        _.each(update, reloadBlock);
+        reloadBlock(dependent.add(o));
         CRM.status(ts('Saved'));
       }
-      // Update changelog tab and contact footer
-      if (response.changeLog && response.changeLog.count) {
-        CRM.tabHeader.updateCount('#tab_log', response.changeLog.count);
-      }
-      $("#crm-record-log").replaceWith(response.changeLog.markup);
-      // Refresh tab contents - Simple logging
-      if (!CRM.reloadChangeLogTab && $('#changeLog').closest('.ui-tabs-panel').data('civiCrmSnippet')) {
-        $('#changeLog').closest('.ui-tabs-panel').crmSnippet('destroy');
-      }
     }
     else {
       // Handle formRule error
       var errorTag = o.find('.update_oplock_ts');
       if (errorTag.length > 0) {
         $('<span>')
-          .addClass('crm-lock-button')
+          .addClass('crm-lock-button css_right')
           .appendTo(errorTag);
 
         var buttonContainer = o.find('.crm-lock-button');
         e.preventDefault();
       })
       // Delete an address
-      .on('click', '.crm-inline-edit.address .delete-button', function() {
+      .on('click', '.crm-inline-edit.address .delete-button', function(e) {
          var $block = $(this).closest('.crm-inline-edit.address');
-         CRM.confirm(function() {
-            CRM.api('address', 'delete', {id: $block.data('edit-params').aid}, {success:
-              function(data) {
-                CRM.status(ts('Address Deleted'));
+         CRM.confirm({message: ts('Are you sure you want to delete this address?')})
+           .on('crmConfirm:yes', function() {
+            CRM.api3('address', 'delete', {id: $block.data('edit-params').aid}, true)
+              .done(function(data) {
                 $('.crm-inline-edit-container').addClass('crm-edit-ready');
                 $block.remove();
-              }
+                reloadBlock('.crm-inline-edit.address:not(.add-new)');
+              });
             });
-          },
-          {
-          message: ts('Are you sure you want to delete this address?')
-          }
-        );
-        return false;
+        e.preventDefault();
       })
       // add more and set focus to new row
       .on('click', '.add-more-inline', function(e) {
         }
         $('#crm-contact-actions-list').hide();
       })
+      .on('crmFormSuccess crmLoad', function(e, data) {
+        // Update changelog tab and contact footer
+        if (data && data.changeLog) {
+          if (data.changeLog.count) {
+            CRM.tabHeader.updateCount('#tab_log', data.changeLog.count);
+          }
+          if (data.changeLog.markup) {
+            $("#crm-record-log").replaceWith(data.changeLog.markup);
+          }
+        }
+      })
       .on('crmFormSuccess', function(e, data) {
-        // Reload changelog whenever an inline or popup form submits
-        CRM.reloadChangeLogTab && CRM.reloadChangeLogTab();
+        // Refresh changeLog - advanced logging
+        if (CRM.reloadChangeLogTab) {
+          CRM.reloadChangeLogTab();
+        }
+        // Refresh changeLog - simple logging
+        // If we didn't get a changelog count in the response, force refresh the changelog tab to populate it
+        else {
+          CRM.tabHeader.resetTab('#tab_log', !(data && data.changeLog && data.changeLog.count));
+        }
         // Refresh dependent blocks
         if (data && data.reloadBlocks) {
-          _.each(data.reloadBlocks, reloadBlock);
+          reloadBlock(data.reloadBlocks.join(','));
         }
       });
   });