diff options
Diffstat (limited to 'www/crm/wp-content/plugins/civicrm/civicrm/ang/crmMailing/EditMailingCtrl.js')
-rw-r--r-- | www/crm/wp-content/plugins/civicrm/civicrm/ang/crmMailing/EditMailingCtrl.js | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/www/crm/wp-content/plugins/civicrm/civicrm/ang/crmMailing/EditMailingCtrl.js b/www/crm/wp-content/plugins/civicrm/civicrm/ang/crmMailing/EditMailingCtrl.js new file mode 100644 index 00000000..91f6db3f --- /dev/null +++ b/www/crm/wp-content/plugins/civicrm/civicrm/ang/crmMailing/EditMailingCtrl.js @@ -0,0 +1,133 @@ +(function(angular, $, _) { + + angular.module('crmMailing').controller('EditMailingCtrl', function EditMailingCtrl($scope, selectedMail, $location, crmMailingMgr, crmStatus, attachments, crmMailingPreviewMgr, crmBlocker, CrmAutosaveCtrl, $timeout, crmUiHelp) { + var APPROVAL_STATUSES = {'Approved': 1, 'Rejected': 2, 'None': 3}; + + $scope.mailing = selectedMail; + $scope.attachments = attachments; + $scope.crmMailingConst = CRM.crmMailing; + $scope.checkPerm = CRM.checkPerm; + + var ts = $scope.ts = CRM.ts(null); + $scope.hs = crmUiHelp({file: 'CRM/Mailing/MailingUI'}); + var block = $scope.block = crmBlocker(); + var myAutosave = null; + + var templateTypes = _.where(CRM.crmMailing.templateTypes, {name: selectedMail.template_type}); + if (!templateTypes[0]) throw 'Unrecognized template type: ' + selectedMail.template_type; + $scope.mailingEditorUrl = templateTypes[0].editorUrl; + + $scope.isSubmitted = function isSubmitted() { + return _.size($scope.mailing.jobs) > 0; + }; + + // usage: approve('Approved') + $scope.approve = function approve(status, options) { + $scope.mailing.approval_status_id = APPROVAL_STATUSES[status]; + return myAutosave.suspend($scope.submit(options)); + }; + + // @return Promise + $scope.previewMailing = function previewMailing(mailing, mode) { + return crmMailingPreviewMgr.preview(mailing, mode); + }; + + // @return Promise + $scope.sendTest = function sendTest(mailing, attachments, recipient) { + var savePromise = crmMailingMgr.save(mailing) + .then(function() { + return attachments.save(); + }); + return block(crmStatus({start: ts('Saving...'), success: ''}, savePromise) + .then(function() { + crmMailingPreviewMgr.sendTest(mailing, recipient); + })); + }; + + // @return Promise + $scope.submit = function submit(options) { + options = options || {}; + if (block.check()) { + return; + } + + var promise = crmMailingMgr.save($scope.mailing) + .then(function() { + // pre-condition: the mailing exists *before* saving attachments to it + return $scope.attachments.save(); + }) + .then(function() { + return crmMailingMgr.submit($scope.mailing); + }) + .then(function() { + if (!options.stay) { + $scope.leave('scheduled'); + } + }) + ; + return block(crmStatus({start: ts('Submitting...'), success: ts('Submitted')}, promise)); + }; + + // @return Promise + $scope.save = function save() { + return block(crmStatus(null, + crmMailingMgr + .save($scope.mailing) + .then(function() { + // pre-condition: the mailing exists *before* saving attachments to it + return $scope.attachments.save(); + }) + )); + }; + + // @return Promise + $scope.delete = function cancel() { + return block(crmStatus({start: ts('Deleting...'), success: ts('Deleted')}, + crmMailingMgr.delete($scope.mailing) + .then(function() { + $scope.leave('unscheduled'); + }) + )); + }; + + // @param string listingScreen 'archive', 'scheduled', 'unscheduled' + $scope.leave = function leave(listingScreen) { + switch (listingScreen) { + case 'archive': + window.location = CRM.url('civicrm/mailing/browse/archived', { + reset: 1 + }); + break; + case 'scheduled': + window.location = CRM.url('civicrm/mailing/browse/scheduled', { + reset: 1, + scheduled: 'true' + }); + break; + case 'unscheduled': + /* falls through */ + default: + window.location = CRM.url('civicrm/mailing/browse/unscheduled', { + reset: 1, + scheduled: 'false' + }); + } + }; + + myAutosave = new CrmAutosaveCtrl({ + save: $scope.save, + saveIf: function() { + return true; + }, + model: function() { + return [$scope.mailing, $scope.attachments.getAutosaveSignature()]; + }, + form: function() { + return $scope.crmMailing; + } + }); + $timeout(myAutosave.start); + $scope.$on('$destroy', myAutosave.stop); + }); + +})(angular, CRM.$, CRM._); |