X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=js%2Fcrm.backbone.js;h=746ddaf7be3559ee8aa0d9529885de9a8b85d71a;hb=6994c77d3f14c20bc0454cd83897271d0574c237;hp=952bc96788734432514dbd1a062225c69bf0ec3b;hpb=bc73fdeb4b3a29e7d1af98e9bf209d55c09af57f;p=civicrm-core.git diff --git a/js/crm.backbone.js b/js/crm.backbone.js index 952bc96788..746ddaf7be 100644 --- a/js/crm.backbone.js +++ b/js/crm.backbone.js @@ -70,7 +70,14 @@ switch (method) { case 'create': // pass-through case 'update': - CRM.api(model.crmEntityName, 'create', model.toJSON(), apiOptions); + var params = model.toJSON(); + params.options || (params.options = {}); + params.options.reload = 1; + if (!model._isDuplicate) { + CRM.api(model.crmEntityName, 'create', params, apiOptions); + } else { + CRM.api(model.crmEntityName, 'duplicate', params, apiOptions); + } break; case 'read': case 'delete': @@ -111,6 +118,16 @@ crmEntityName: crmEntityName, toCrmCriteria: function() { return (this.get('id')) ? {id: this.get('id')} : {}; + }, + duplicate: function() { + var newModel = new ModelClass(this.toJSON()); + newModel._isDuplicate = true; + if (newModel.setModified) newModel.setModified(); + newModel.listenTo(newModel, 'sync', function(){ + // may get called on subsequent resaves -- don't care! + delete newModel._isDuplicate; + }); + return newModel; } }); // Overrides - if specified in ModelClass, replace @@ -160,7 +177,7 @@ return result; }, isModified: function() { - return !this._modified; + return this._modified; }, _saved_onchange: function(model, options) { if (options.parse) return;