Merge pull request #19706 from civicrm/5.35
[civicrm-core.git] / ang / crmMailing / EmailBodyCtrl.js
1 (function(angular, $, _) {
2
3 var lastEmailTokenAlert = null;
4 angular.module('crmMailing').controller('EmailBodyCtrl', function EmailBodyCtrl($scope, crmMailingMgr, crmUiAlert, $timeout) {
5 var ts = CRM.ts(null);
6
7 // ex: if (!hasAllTokens(myMailing, 'body_text)) alert('Oh noes!');
8 $scope.hasAllTokens = function hasAllTokens(mailing, field) {
9 return _.isEmpty(crmMailingMgr.findMissingTokens(mailing, field));
10 };
11
12 // ex: checkTokens(myMailing, 'body_text', 'insert:body_text')
13 // ex: checkTokens(myMailing, '*')
14 $scope.checkTokens = function checkTokens(mailing, field, insertEvent) {
15 if (lastEmailTokenAlert) {
16 lastEmailTokenAlert.close();
17 }
18 var missing, insertable;
19 if (field == '*') {
20 insertable = false;
21 missing = angular.extend({},
22 crmMailingMgr.findMissingTokens(mailing, 'body_html'),
23 crmMailingMgr.findMissingTokens(mailing, 'body_text')
24 );
25 }
26 else {
27 insertable = !_.isEmpty(insertEvent);
28 missing = crmMailingMgr.findMissingTokens(mailing, field);
29 }
30 if (!_.isEmpty(missing)) {
31 lastEmailTokenAlert = crmUiAlert({
32 type: 'error',
33 title: ts('Required tokens'),
34 templateUrl: '~/crmMailing/EmailBodyCtrl/tokenAlert.html',
35 scope: angular.extend($scope.$new(), {
36 insertable: insertable,
37 insertToken: function(token) {
38 $timeout(function() {
39 $scope.$broadcast(insertEvent, '{' + token + '}');
40 $timeout(function() {
41 checkTokens(mailing, field, insertEvent);
42 });
43 });
44 },
45 missing: missing
46 })
47 });
48 }
49 };
50 });
51
52 })(angular, CRM.$, CRM._);