CRM-15801 - crmMailing - Display the "Unsubscribe tracking group" field
authorTim Otten <totten@civicrm.org>
Fri, 20 Feb 2015 04:28:36 +0000 (20:28 -0800)
committerTim Otten <totten@civicrm.org>
Fri, 20 Feb 2015 04:28:36 +0000 (20:28 -0800)
But only if the recipient list includes a hidden-group /
search-result-group.

CRM/Mailing/Form/Task/AdhocMailing.php
js/angular-crmMailing.js
js/angular-crmMailing/services.js
partials/crmMailing/mailing.html

index 186a501260b12ff6bee86ffe6805bddb2ea32692..371393640d469499ec678c5af7c3cf19c9995754 100644 (file)
@@ -51,6 +51,7 @@ class CRM_Mailing_Form_Task_AdhocMailing extends CRM_Contact_Form_Task {
       'groups' => array(
         'include' => array($groupId),
         'exclude' => array(),
+        'base' => array(),
       ),
       'mailings' => array(
         'include' => array(),
index cb6e6449d013c7c1e3235f3918cd43a98d5deda9..09fa277fb924b7bdfde86f61a87294e0de7fed2e 100644 (file)
       }
     };
   });
+
+  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._);
index 1ee3c893787f73dbcd02a8a4c6621a55381ea4af..c95c57ff3be8d1b937848c6722bf33c66fafeaee 100644 (file)
         return crmApi('MailingGroup', 'get', {mailing_id: mailing.id})
           .then(function (groupResult) {
             mailing.recipients = {};
-            mailing.recipients.groups = {include: [], exclude: []};
+            mailing.recipients.groups = {include: [], exclude: [], base: []};
             mailing.recipients.mailings = {include: [], exclude: []};
             _.each(groupResult.values, function (mailingGroup) {
               var bucket = (/^civicrm_group/.test(mailingGroup.entity_table)) ? 'groups' : 'mailings';
         var defaults = {
           jobs: {}, // {jobId: JobRecord}
           recipients: {
-            groups: {include: [], exclude: []},
-            mailings: {include: [], exclude: []},
+            groups: {include: [], exclude: [], base: []},
+            mailings: {include: [], exclude: []}
           },
           name: "",
           campaign_id: null,
index 2ef321ca2710a356e591a8210ab04616588e5281..3ade3ee9f4ae4750962d090ac4e6b50adf976735 100644 (file)
@@ -51,6 +51,19 @@ It could perhaps be thinned by 30-60% by making more directives.
     <div crm-ui-field="subform.recipients" crm-title="ts('Recipients')">
       <div crm-mailing-block-recipients="{name: 'recipients', id: 'subform.recipients'}" crm-mailing="mailing"></div>
     </div>
+    <span ng-controller="EditUnsubGroupCtrl">
+      <div crm-ui-field="subform.baseGroup" crm-title="ts('Unsubscribe Group')" ng-if="isUnsubGroupRequired(mailing)">
+        <select
+          crm-ui-id="subform.baseGroup"
+          crm-ui-select
+          name="baseGroup"
+          ng-model="mailing.recipients.groups.base[0]"
+          ng-required="true"
+          >
+          <option ng-repeat="grp in crmMailingConst.groupNames | filter:{visibility:'Public pages'}" value="{{grp.id}}">{{grp.title}}</option>
+        </select>
+      </div>
+    </span>
     <div crm-ui-field="subform.subject" crm-title="ts('Subject')">
       <div style="float: right;">
         <input crm-mailing-token on-select="$broadcast('insert:subject', token.name)" tabindex="-1"/>