134 lines
4.2 KiB
JavaScript
134 lines
4.2 KiB
JavaScript
(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._);
|