From a12bd71d4987d0c012ccf584eb06e223b336520f Mon Sep 17 00:00:00 2001 From: Tim Otten Date: Fri, 6 Feb 2015 12:03:42 -0800 Subject: [PATCH] CRM-15855 - crmMailingAB - Use auto-save and blocked-button behaviors --- js/angular-crmMailingAB.js | 52 +++++++++++++++++++++-------- js/angular-crmMailingAB/services.js | 9 +++++ partials/crmMailingAB/edit.html | 7 ++-- 3 files changed, 51 insertions(+), 17 deletions(-) diff --git a/js/angular-crmMailingAB.js b/js/angular-crmMailingAB.js index 77262db65f..da502bd094 100644 --- a/js/angular-crmMailingAB.js +++ b/js/angular-crmMailingAB.js @@ -13,6 +13,18 @@ } } }); + $routeProvider.when('/abtest/new', { + template: '

' + ts('Initializing...') + '

', + controller: 'CrmMailingABNewCtrl', + resolve: { + abtest: function ($route, CrmMailingAB) { + var abtest = new CrmMailingAB(null); + return abtest.load().then(function(){ + return abtest.save(); + }); + } + } + }); $routeProvider.when('/abtest/:id', { templateUrl: '~/crmMailingAB/edit.html', controller: 'CrmMailingABEditCtrl', @@ -43,9 +55,18 @@ $scope.crmMailingABStatus = crmMailingABStatus; }); - angular.module('crmMailingAB').controller('CrmMailingABEditCtrl', function ($scope, abtest, crmMailingABCriteria, crmMailingMgr, crmMailingPreviewMgr, crmStatus, $q, $location) { + angular.module('crmMailingAB').controller('CrmMailingABNewCtrl', function ($scope, abtest, $location) { + // Transition URL "/abtest/new/foo" => "/abtest/123/foo" + var parts = $location.path().split('/'); // e.g. "/mailing/new" or "/mailing/123/wizard" + parts[2] = abtest.id; + $location.path(parts.join('/')); + $location.replace(); + }); + + angular.module('crmMailingAB').controller('CrmMailingABEditCtrl', function ($scope, abtest, crmMailingABCriteria, crmMailingMgr, crmMailingPreviewMgr, crmStatus, $q, $location, crmBlocker) { $scope.abtest = abtest; var ts = $scope.ts = CRM.ts(null); + var block = $scope.block = crmBlocker(); $scope.crmMailingABCriteria = crmMailingABCriteria; $scope.crmMailingConst = CRM.crmMailing; @@ -102,7 +123,7 @@ // @return Promise $scope.save = function save() { $scope.sync(); - return crmStatus({start: ts('Saving...'), success: ts('Saved')}, abtest.save().then(updateUrl)); + return block(crmStatus({start: ts('Saving...'), success: ts('Saved')}, abtest.save().then(updateUrl))); }; // @return Promise @@ -114,33 +135,36 @@ // @return Promise $scope.sendTest = function sendTest(mailingName, recipient) { $scope.sync(); - return crmStatus({start: ts('Saving...'), success: ''}, abtest.save().then(updateUrl)) + return block(crmStatus({start: ts('Saving...'), success: ''}, abtest.save().then(updateUrl)) .then(function () { crmMailingPreviewMgr.sendTest(abtest.mailings[mailingName], recipient); - }); + })); }; // @return Promise $scope.delete = function () { - return crmStatus({start: ts('Deleting...'), success: ts('Deleted')}, abtest.delete().then(leave)); + return block(crmStatus({start: ts('Deleting...'), success: ts('Deleted')}, abtest.delete().then($scope.leave))); }; // @return Promise $scope.submit = function submit() { $scope.sync(); - return crmStatus({start: ts('Saving...'), success: ''}, abtest.save()) - .then(function () { - return crmStatus({start: ts('Submitting...'), success: ts('Submitted')}, abtest.submitTest()); - // Note: We're going to leave, so we don't care that submit() modifies several server-side records. - // If we stayed on this page, then we'd care about updating and call: abtest.submitTest().then(...abtest.load()...) - }) - .then(leave); + if (block.check() || $scope.crmMailing.$invalid) { + return; + } + return block(crmStatus({start: ts('Saving...'), success: ''}, abtest.save()) + .then(function() { + return crmStatus({start: ts('Submitting...'), success: ts('Submitted')}, abtest.submitTest()); + // Note: We're going to leave, so we don't care that submit() modifies several server-side records. + // If we stayed on this page, then we'd care about updating and call: abtest.submitTest().then(...abtest.load()...) + }) + .then($scope.leave)); }; - function leave() { + $scope.leave = function leave() { $location.path('abtest'); $location.replace(); - } + }; function updateCriteriaName() { var criteria = crmMailingABCriteria.get($scope.abtest.ab.testing_criteria_id); diff --git a/js/angular-crmMailingAB/services.js b/js/angular-crmMailingAB/services.js index e23c905b1f..61e44b4685 100644 --- a/js/angular-crmMailingAB/services.js +++ b/js/angular-crmMailingAB/services.js @@ -50,6 +50,15 @@ } angular.extend(CrmMailingAB.prototype, { + getAutosaveSignature: function() { + return [ + this.ab, + this.mailings, + this.attachments.a.getAutosaveSignature(), + this.attachments.b.getAutosaveSignature(), + this.attachments.c.getAutosaveSignature() + ]; + }, // @return Promise CrmMailingAB load: function load() { var crmMailingAB = this; diff --git a/partials/crmMailingAB/edit.html b/partials/crmMailingAB/edit.html index 7776dea48f..ecc405bac2 100644 --- a/partials/crmMailingAB/edit.html +++ b/partials/crmMailingAB/edit.html @@ -13,7 +13,7 @@ {{ts('This mailing has been submitted.')}} -
+
@@ -167,17 +167,18 @@ }" crm-abtest="abtest">
- +
{{ts('Submit Mailing')}}
- +
-- 2.25.1