summaryrefslogtreecommitdiff
path: root/www/crm/wp-content/plugins/civicrm/civicrm/ang/crmMailing/BlockPreview.js
diff options
context:
space:
mode:
Diffstat (limited to 'www/crm/wp-content/plugins/civicrm/civicrm/ang/crmMailing/BlockPreview.js')
-rw-r--r--www/crm/wp-content/plugins/civicrm/civicrm/ang/crmMailing/BlockPreview.js65
1 files changed, 65 insertions, 0 deletions
diff --git a/www/crm/wp-content/plugins/civicrm/civicrm/ang/crmMailing/BlockPreview.js b/www/crm/wp-content/plugins/civicrm/civicrm/ang/crmMailing/BlockPreview.js
new file mode 100644
index 00000000..5e582dc0
--- /dev/null
+++ b/www/crm/wp-content/plugins/civicrm/civicrm/ang/crmMailing/BlockPreview.js
@@ -0,0 +1,65 @@
+(function(angular, $, _) {
+ // example: <div crm-mailing-block-preview crm-mailing="myMailing" on-preview="openPreview(myMailing, preview.mode)" on-send="sendEmail(myMailing,preview.recipient)">
+ // note: the directive defines a variable called "preview" with any inputs supplied by the user (e.g. the target recipient for an example mailing)
+
+ angular.module('crmMailing').directive('crmMailingBlockPreview', function(crmUiHelp) {
+ return {
+ templateUrl: '~/crmMailing/BlockPreview.html',
+ link: function(scope, elm, attr) {
+ scope.$watch(attr.crmMailing, function(newValue) {
+ scope.mailing = newValue;
+ });
+ scope.crmMailingConst = CRM.crmMailing;
+ scope.ts = CRM.ts(null);
+ scope.hs = crmUiHelp({file: 'CRM/Mailing/MailingUI'});
+ scope.testContact = {email: CRM.crmMailing.defaultTestEmail};
+ scope.testGroup = {gid: null};
+
+ scope.doPreview = function(mode) {
+ scope.$eval(attr.onPreview, {
+ preview: {mode: mode}
+ });
+ };
+ scope.doSend = function doSend(recipient) {
+ recipient = JSON.parse(JSON.stringify(recipient).replace(/\,\s/g, ','));
+ scope.$eval(attr.onSend, {
+ preview: {recipient: recipient}
+ });
+ };
+
+ scope.previewTestGroup = function(e) {
+ var $dialog = $(this);
+ $dialog.html('<div class="crm-loading-element"></div>').parent().find('button[data-op=yes]').prop('disabled', true);
+ CRM.api3({
+ contact: ['contact', 'get', {group: scope.testGroup.gid, options: {limit: 0}, return: 'display_name,email'}],
+ group: ['group', 'getsingle', {id: scope.testGroup.gid, return: 'title'}]
+ }).done(function(data) {
+ $dialog.dialog('option', 'title', ts('Send to %1', {1: data.group.title}));
+ var count = 0,
+ // Fixme: should this be in a template?
+ markup = '<ol>';
+ _.each(data.contact.values, function(row) {
+ // Fixme: contact api doesn't seem capable of filtering out contacts with no email, so we're doing it client-side
+ if (row.email) {
+ count++;
+ markup += '<li>' + row.display_name + ' - ' + row.email + '</li>';
+ }
+ });
+ markup += '</ol>';
+ markup = '<h4>' + ts('A test message will be sent to %1 people:', {1: count}) + '</h4>' + markup;
+ if (!count) {
+ markup = '<div class="messages status"><i class="crm-i fa-exclamation-triangle"></i> ' +
+ (data.contact.count ? ts('None of the contacts in this group have an email address.') : ts('Group is empty.')) +
+ '</div>';
+ }
+ $dialog
+ .html(markup)
+ .trigger('crmLoad')
+ .parent().find('button[data-op=yes]').prop('disabled', !count);
+ });
+ };
+ }
+ };
+ });
+
+})(angular, CRM.$, CRM._);