1 (function (angular
, $, _
) {
2 var partialUrl = function (relPath
) {
3 return CRM
.resourceUrls
['civicrm'] + '/partials/crmMailing2/' + relPath
;
6 var crmMailing2
= angular
.module('crmMailing2');
8 crmMailing2
.factory('crmMailingMgr', function($q
, crmApi
) {
9 var pickDefaultMailComponent
= function pickDefaultMailComponent(type
) {
10 var mcs
= _
.where(CRM
.crmMailing
.headerfooterList
, {
14 return (mcs
.length
>= 1) ? mcs
[0].id
: null;
18 // @param scalar idExpr a number or the literal string 'new'
19 // @return Promise|Object Mailing (per APIv3)
20 getOrCreate
: function getOrCreate(idExpr
) {
21 return (idExpr
== 'new') ? this.create() : this.get(idExpr
);
23 // @return Promise Mailing (per APIv3)
24 get: function get(id
) {
25 return crmApi('Mailing', 'getsingle', {id
: id
}).then(function(mailing
){
26 return crmApi('MailingGroup', 'get', {mailing_id
: id
}).then(function(groupResult
){
27 mailing
.groups
= {include
: [], exclude
: []};
28 mailing
.mailings
= {include
: [], exclude
: []};
29 _
.each(groupResult
.values
, function(mailingGroup
) {
30 var bucket
= (mailingGroup
.entity_table
== 'civicrm_group') ? 'groups' : 'mailings';
31 mailing
[bucket
][mailingGroup
.group_type
].push(mailingGroup
.entity_id
);
37 // @return Object Mailing (per APIv3)
38 create
: function create() {
40 name
: "revert this", // fixme
42 from: _
.where(CRM
.crmMailing
.fromAddress
, {is_default
: "1"})[0].label
,
44 subject
: "For {contact.display_name}", // fixme
46 groups
: {include
: [2], exclude
: [4]}, // fixme
47 mailings
: {include
: [], exclude
: []},
48 body_html
: "<b>Hello</b> {contact.display_name}", // fixme
49 body_text
: "Hello {contact.display_name}", // fixme
50 footer_id
: null, // pickDefaultMailComponent('Footer'),
51 header_id
: null, // pickDefaultMailComponent('Header'),
52 visibility
: "Public Pages",
59 optout_id
: pickDefaultMailComponent('OptOut'),
60 reply_id
: pickDefaultMailComponent('Reply'),
61 resubscribe_id
: pickDefaultMailComponent('Resubscribe'),
62 unsubscribe_id
: pickDefaultMailComponent('Unsubscribe')
66 // @param mailing Object (per APIv3)
67 // @return Promise an object with "subject", "body_text", "body_html"
68 preview
: function preview(mailing
) {
69 var params
= _
.extend({}, mailing
, {
70 options
: {force_rollback
: 1},
71 'api.Mailing.preview': {
75 return crmApi('Mailing', 'create', params
).then(function(result
){
76 return result
.values
[result
.id
]['api.Mailing.preview'].values
;
80 // @param mailing Object (per APIv3)
81 // @param int previewLimit
82 // @return Promise for a list of recipients (mailing_id, contact_id, api.contact.getvalue, api.email.getvalue)
83 previewRecipients
: function previewRecipients(mailing
, previewLimit
) {
84 // To get list of recipients, we tentatively save the mailing and
85 // get the resulting recipients -- then rollback any changes.
86 var params
= _
.extend({}, mailing
, {
87 options
: {force_rollback
: 1},
88 'api.MailingRecipients.get': {
89 mailing_id
: '$value.id',
90 options
: { limit
: previewLimit
},
91 'api.contact.getvalue': {'return': 'display_name'},
92 'api.email.getvalue': {'return': 'email'}
95 return crmApi('Mailing', 'create', params
).then(function(recipResult
){
96 return recipResult
.values
[recipResult
.id
]['api.MailingRecipients.get'].values
;
102 })(angular
, CRM
.$, CRM
._
);