CRM-15801 - crmMailing - Display the "Unsubscribe tracking group" field
[civicrm-core.git] / js / angular-crmMailing.js
index 68c351dd6887669e56f40891eb65f845d4a57611..09fa277fb924b7bdfde86f61a87294e0de7fed2e 100644 (file)
   // Scope members:
   //  - [input] mailing: object
   //  - [output] recipients: array of recipient records
-  angular.module('crmMailing').controller('EditRecipCtrl', function EditRecipCtrl($scope, dialogService, crmApi, crmMailingMgr) {
+  angular.module('crmMailing').controller('EditRecipCtrl', function EditRecipCtrl($scope, dialogService, crmApi, crmMailingMgr, $q, crmMetadata) {
     var ts = $scope.ts = CRM.ts(null);
     $scope.recipients = null;
     $scope.getRecipientsEstimate = function () {
       var model = {
         recipients: $scope.recipients
       };
-      var options = {
+      var options = CRM.utils.adjustDialogDefaults({
         autoOpen: false,
-        modal: true,
         title: ts('Preview (%1)', {
           1: $scope.getRecipientsEstimate()
         })
-      };
+      });
       dialogService.open('recipDialog', '~/crmMailing/dialog/recipients.html', model, options);
     };
+
+    // Open a dialog for editing the advanced recipient options.
+    $scope.editOptions = function editOptions(mailing) {
+      var options = CRM.utils.adjustDialogDefaults({
+        autoOpen: false,
+        title: ts('Edit Options')
+      });
+      $q.when(crmMetadata.getFields('Mailing')).then(function(fields) {
+        var model = {
+          fields: fields,
+          mailing: mailing
+        };
+        dialogService.open('previewComponentDialog', '~/crmMailing/dialog/recipientOptions.html', model, options);
+      });
+    };
   });
 
   // Controller for the "Preview Recipients" dialog
     $scope.ts = CRM.ts(null);
   });
 
+  // Controller for the "Recipients: Edit Options" dialog
+  // Note: Expects $scope.model to be an object with properties:
+  //   - "mailing" (APIv3 mailing object)
+  //   - "fields" (list of fields)
+  angular.module('crmMailing').controller('EditRecipOptionsDialogCtrl', function EditRecipOptionsDialogCtrl($scope) {
+    $scope.ts = CRM.ts(null);
+  });
+
   // Controller for the "Preview Mailing Component" segment
   // which displays header/footer/auto-responder
   angular.module('crmMailing').controller('PreviewComponentCtrl', function PreviewComponentCtrl($scope, dialogService) {
         }));
         return;
       }
-      var options = {
+      var options = CRM.utils.adjustDialogDefaults({
         autoOpen: false,
-        modal: true,
         title: title // component[0].name
-      };
+      });
       dialogService.open('previewComponentDialog', '~/crmMailing/dialog/previewComponent.html', component[0], options);
     };
   });
           msg_html: mailing.body_html
         }
       };
-      var options = {
+      var options = CRM.utils.adjustDialogDefaults({
         autoOpen: false,
-        modal: true,
         title: ts('Save Template')
-      };
+      });
       return dialogService.open('saveTemplateDialog', '~/crmMailing/dialog/saveTemplate.html', model, options)
         .then(function (item) {
           mailing.msg_template_id = item.id;
       }
     };
   });
+
+  angular.module('crmMailing').controller('EditUnsubGroupCtrl', function EditUnsubGroupCtrl($scope) {
+    // CRM.crmMailing.groupNames is a global constant - since it doesn't change, we can digest & cache.
+    var mandatoryIds = [];
+    _.each(CRM.crmMailing.groupNames, function(grp){
+      if (grp.is_hidden == "1") {
+        mandatoryIds.push(parseInt(grp.id));
+      }
+    });
+
+    $scope.isUnsubGroupRequired = function isUnsubGroupRequired(mailing) {
+      return _.intersection(mandatoryIds, mailing.recipients.groups.include).length > 0;
+    };
+  });
 })(angular, CRM.$, CRM._);