|
1
|
|
|
<?php |
|
2
|
|
|
|
|
3
|
|
|
/** |
|
4
|
|
|
* Page for Signing Up to Campaign Monitor List |
|
5
|
|
|
* |
|
6
|
|
|
* Each page relates to one CM list. |
|
7
|
|
|
* |
|
8
|
|
|
* @author nicolaas [at] sunnysideup.co.nz |
|
9
|
|
|
*/ |
|
10
|
|
|
class CampaignMonitorSignupPage extends Page |
|
|
|
|
|
|
11
|
|
|
{ |
|
12
|
|
|
|
|
13
|
|
|
/** |
|
14
|
|
|
* standard SS variable |
|
15
|
|
|
* @Var String |
|
16
|
|
|
*/ |
|
17
|
|
|
private static $singular_name = "Newsletter sign-up page"; |
|
|
|
|
|
|
18
|
|
|
public function i18n_singular_name() |
|
19
|
|
|
{ |
|
20
|
|
|
return _t("AccountPage.NEWSLETTER_PAGE", "Newsletter sign-up page"); |
|
21
|
|
|
} |
|
22
|
|
|
|
|
23
|
|
|
/** |
|
24
|
|
|
* standard SS variable |
|
25
|
|
|
* @Var String |
|
26
|
|
|
*/ |
|
27
|
|
|
private static $plural_name = "Newsletter sign-up pages"; |
|
|
|
|
|
|
28
|
|
|
public function i18n_plural_name() |
|
29
|
|
|
{ |
|
30
|
|
|
return _t("AccountPage.NEWSLETTER_PAGE", "Newsletter sign-up pages"); |
|
31
|
|
|
} |
|
32
|
|
|
|
|
33
|
|
|
/** |
|
34
|
|
|
* |
|
35
|
|
|
* @inherited |
|
36
|
|
|
*/ |
|
37
|
|
|
private static $icon = "campaignmonitor/images/treeicons/CampaignMonitorSignupPage"; |
|
|
|
|
|
|
38
|
|
|
|
|
39
|
|
|
/** |
|
40
|
|
|
* |
|
41
|
|
|
* @inherited |
|
42
|
|
|
*/ |
|
43
|
|
|
private static $db = array( |
|
|
|
|
|
|
44
|
|
|
'ListID' => 'Varchar(32)', |
|
45
|
|
|
|
|
46
|
|
|
'ConfirmTitle' => 'Varchar(255)', |
|
47
|
|
|
'ConfirmMenuTitle' => 'Varchar(255)', |
|
48
|
|
|
'ConfirmMessage' => 'HTMLText', |
|
49
|
|
|
|
|
50
|
|
|
'ThankYouTitle' => 'Varchar(255)', |
|
51
|
|
|
'ThankYouMenuTitle' => 'Varchar(255)', |
|
52
|
|
|
'ThankYouMessage' => 'HTMLText', |
|
53
|
|
|
|
|
54
|
|
|
'SadToSeeYouGoTitle' => 'Varchar(255)', |
|
55
|
|
|
'SadToSeeYouGoMenuTitle' => 'Varchar(255)', |
|
56
|
|
|
'SadToSeeYouGoMessage' => 'HTMLText', |
|
57
|
|
|
|
|
58
|
|
|
'SignUpHeader' => 'Varchar(100)', |
|
59
|
|
|
'SignUpIntro' => 'HTMLText', |
|
60
|
|
|
'SignUpButtonLabel' => 'Varchar(20)', |
|
61
|
|
|
|
|
62
|
|
|
'ShowOldNewsletters' => 'Boolean', |
|
63
|
|
|
'ShowAllNewsletterForSigningUp' => 'Boolean', |
|
64
|
|
|
|
|
65
|
|
|
); |
|
66
|
|
|
|
|
67
|
|
|
/** |
|
68
|
|
|
* |
|
69
|
|
|
* @inherited |
|
70
|
|
|
*/ |
|
71
|
|
|
private static $has_one = array( |
|
|
|
|
|
|
72
|
|
|
"Group" => "Group" |
|
73
|
|
|
); |
|
74
|
|
|
|
|
75
|
|
|
/** |
|
76
|
|
|
* |
|
77
|
|
|
* @inherited |
|
78
|
|
|
*/ |
|
79
|
|
|
private static $has_many = array( |
|
|
|
|
|
|
80
|
|
|
"CampaignMonitorSegments" => "CampaignMonitorSegment", |
|
81
|
|
|
"CampaignMonitorCustomFields" => "CampaignMonitorCustomField" |
|
82
|
|
|
); |
|
83
|
|
|
|
|
84
|
|
|
/** |
|
85
|
|
|
* |
|
86
|
|
|
* @inherited |
|
87
|
|
|
*/ |
|
88
|
|
|
private static $belongs_many_many = array( |
|
|
|
|
|
|
89
|
|
|
"CampaignMonitorCampaigns" => "CampaignMonitorCampaign" |
|
90
|
|
|
); |
|
91
|
|
|
|
|
92
|
|
|
/** |
|
93
|
|
|
* |
|
94
|
|
|
* @inherited |
|
95
|
|
|
*/ |
|
96
|
|
|
private static $description = "Page to suscribe and review newsletter list(s)"; |
|
|
|
|
|
|
97
|
|
|
|
|
98
|
|
|
/** |
|
99
|
|
|
* |
|
100
|
|
|
* @var CampaignMonitorAPIConnector | Null |
|
101
|
|
|
*/ |
|
102
|
|
|
protected static $_api = null; |
|
103
|
|
|
|
|
104
|
|
|
|
|
105
|
|
|
/** |
|
106
|
|
|
* Campaign monitor pages that are ready to receive "sign-ups" |
|
107
|
|
|
* @return ArrayList |
|
108
|
|
|
*/ |
|
109
|
|
|
public static function get_ready_ones() |
|
110
|
|
|
{ |
|
111
|
|
|
$listPages = CampaignMonitorSignupPage::get(); |
|
112
|
|
|
$array = array(0 => 0); |
|
113
|
|
|
foreach ($listPages as $listPage) { |
|
114
|
|
|
if ($listPage->ReadyToReceiveSubscribtions()) { |
|
115
|
|
|
$array[$listPage->ID] = $listPage->ID; |
|
116
|
|
|
} |
|
117
|
|
|
} |
|
118
|
|
|
return CampaignMonitorSignupPage::get()->filter(array("ID" => $array)); |
|
119
|
|
|
} |
|
120
|
|
|
|
|
121
|
|
|
/** |
|
122
|
|
|
* |
|
123
|
|
|
* @inherited |
|
124
|
|
|
*/ |
|
125
|
|
|
public function getCMSFields() |
|
|
|
|
|
|
126
|
|
|
{ |
|
127
|
|
|
$fields = parent::getCMSFields(); |
|
128
|
|
|
if ($this->GroupID) { |
|
129
|
|
|
$groupLink = '<h2><a href="/admin/security/EditForm/field/Groups/item/'.$this->GroupID.'/edit">open related security group</a></h2>'; |
|
130
|
|
|
} else { |
|
131
|
|
|
$groupLink = '<p>No Group has been selected yet.</p>'; |
|
132
|
|
|
} |
|
133
|
|
|
$testControllerLink = Injector::inst()->get("CampaignMonitorAPIConnector_TestController")->Link(); |
|
134
|
|
|
$campaignExample = CampaignMonitorCampaign::get()->Last(); |
|
135
|
|
|
$campaignExampleLink = $this->Link(); |
|
136
|
|
|
if ($campaignExample) { |
|
137
|
|
|
$campaignExampleLink = $this->Link("viewcampaign/".$campaignExample->CampaignID); |
|
138
|
|
|
} |
|
139
|
|
|
if ($this->ID) { |
|
140
|
|
|
$config = GridFieldConfig_RelationEditor::create(); |
|
141
|
|
|
$campaignField = new GridField('CampaignList', 'Campaigns', $this->CampaignMonitorCampaigns(), $config); |
|
142
|
|
|
} else { |
|
143
|
|
|
$campaignField = new HiddenField("CampaignList"); |
|
144
|
|
|
} |
|
145
|
|
|
$gridFieldTemplatesAvailable = new GridField('TemplatesAvailable', 'Templates Available', CampaignMonitorCampaignStyle::get(), GridFieldConfig_RecordEditor::create()); |
|
146
|
|
|
$gridFieldTemplatesAvailable->setDescription("Ask your developer on how to add more templates"); |
|
147
|
|
|
$fields->addFieldToTab( |
|
148
|
|
|
'Root.AlternativeContent', |
|
149
|
|
|
new TabSet( |
|
150
|
|
|
"AlternativeContentSubHeader", |
|
151
|
|
|
new Tab( |
|
152
|
|
|
'Confirm', |
|
153
|
|
|
new TextField('ConfirmTitle', 'Title'), |
|
154
|
|
|
new TextField('ConfirmMenuTitle', 'Menu Title'), |
|
155
|
|
|
new HtmlEditorField('ConfirmMessage', 'Message (e.g. thank you for confirming)') |
|
156
|
|
|
), |
|
157
|
|
|
new Tab( |
|
158
|
|
|
'ThankYou', |
|
159
|
|
|
new TextField('ThankYouTitle', 'Title'), |
|
160
|
|
|
new TextField('ThankYouMenuTitle', 'Menu Title'), |
|
161
|
|
|
new HtmlEditorField('ThankYouMessage', 'Thank you message after submitting form') |
|
162
|
|
|
), |
|
163
|
|
|
new Tab( |
|
164
|
|
|
'SadToSeeYouGo', |
|
165
|
|
|
new TextField('SadToSeeYouGoTitle', 'Title'), |
|
166
|
|
|
new TextField('SadToSeeYouGoMenuTitle', 'Menu Title'), |
|
167
|
|
|
new HtmlEditorField('SadToSeeYouGoMessage', 'Sad to see you go message after submitting form') |
|
168
|
|
|
) |
|
169
|
|
|
) |
|
170
|
|
|
); |
|
171
|
|
|
$fields->addFieldToTab( |
|
172
|
|
|
'Root.Newsletters', |
|
173
|
|
|
new TabSet( |
|
174
|
|
|
'Options', |
|
175
|
|
|
new Tab( |
|
176
|
|
|
'MainSettings', |
|
177
|
|
|
new LiteralField('CreateNewCampaign', '<p>To create a new mail out go to <a href="'. Config::inst()->get("CampaignMonitorAPIConnector", "campaign_monitor_url") .'">Campaign Monitor</a> site.</p>'), |
|
178
|
|
|
new LiteralField('ListIDExplanation', '<p>Each sign-up page needs to be associated with a campaign monitor subscription list.</p>'), |
|
179
|
|
|
new DropdownField('ListID', 'Related List from Campaign Monitor (*)', array(0 => "-- please select --") + $this->makeDropdownListFromLists()), |
|
180
|
|
|
new CheckboxField('ShowAllNewsletterForSigningUp', 'Allow users to sign up to all lists') |
|
181
|
|
|
), |
|
182
|
|
|
new Tab( |
|
183
|
|
|
'StartForm', |
|
184
|
|
|
new LiteralField('StartFormExplanation', 'A start form is a form where people are just required to enter their email address and nothing else. After completion they go through to another page (the actual CampaignMonitorSignUpPage) to complete all the details.'), |
|
185
|
|
|
new TextField('SignUpHeader', 'Sign up header (e.g. sign up now)'), |
|
186
|
|
|
new HtmlEditorField('SignUpIntro', 'Sign up form intro (e.g. sign up for our monthly newsletter ...'), |
|
187
|
|
|
new TextField('SignUpButtonLabel', 'Sign up button label for start form (e.g. register now)') |
|
188
|
|
|
), |
|
189
|
|
|
new Tab( |
|
190
|
|
|
'Newsletters', |
|
191
|
|
|
new CheckboxField('ShowOldNewsletters', 'Show old newsletters? Set to "NO" to remove all old newsletters links to this page. Set to "YES" to retrieve all old newsletters.'), |
|
192
|
|
|
new LiteralField('CampaignExplanation', '<h3>Unfortunately, newsletter lists are not automatically linked to individual newsletters, you can link them here...</h3>'), |
|
193
|
|
|
new CheckboxSetField('CampaignMonitorCampaigns', 'Newsletters shown', CampaignMonitorCampaign::get()->filter("HasBeenSent", 1)->limit(10000)->map()->toArray()), |
|
|
|
|
|
|
194
|
|
|
$campaignField, |
|
195
|
|
|
$gridFieldTemplatesAvailable |
|
196
|
|
|
), |
|
197
|
|
|
new Tab( |
|
198
|
|
|
'Advanced', |
|
199
|
|
|
new LiteralField('MyControllerTest', '<h3><a href="'.$testControllerLink.'">Test Connections</a></h3>'), |
|
200
|
|
|
new LiteralField('MyStats', '<h3><a href="'.$this->Link("stats").'">Stats and Debug information</a></h3>'), |
|
201
|
|
|
new LiteralField('MyCampaignReset', '<h3><a href="'.$this->Link("resetoldcampaigns").'">Delete All Campaigns from Website</a></h3>'), |
|
202
|
|
|
new LiteralField('MyCampaignInfo', '<h3>You can also view individual campaigns - here is <a href="'.$campaignExampleLink.'">an example</a></h3>'), |
|
203
|
|
|
$gridField = new GridField('Segments', 'Segments', $this->CampaignMonitorSegments(), GridFieldConfig_RecordViewer::create()), |
|
204
|
|
|
$gridField = new GridField('CustomFields', 'Custom Fields', $this->CampaignMonitorCustomFields(), GridFieldConfig_RecordViewer::create()), |
|
205
|
|
|
new LiteralField('GroupLink', $groupLink) |
|
206
|
|
|
) |
|
207
|
|
|
) |
|
208
|
|
|
); |
|
209
|
|
|
if (!Config::inst()->get("CampaignMonitorWrapper", "campaign_monitor_url")) { |
|
|
|
|
|
|
210
|
|
|
//$fields->removeFieldFromTab("Root.Newsletters.Options", "CreateNewCampaign"); |
|
|
|
|
|
|
211
|
|
|
} |
|
212
|
|
|
return $fields; |
|
213
|
|
|
} |
|
214
|
|
|
|
|
215
|
|
|
/** |
|
216
|
|
|
* |
|
217
|
|
|
* @return CampaignMonitorAPIConnector |
|
218
|
|
|
*/ |
|
219
|
|
|
public function getAPI() |
|
220
|
|
|
{ |
|
221
|
|
|
if (!self::$_api) { |
|
222
|
|
|
self::$_api = CampaignMonitorAPIConnector::create(); |
|
223
|
|
|
self::$_api->init(); |
|
224
|
|
|
} |
|
225
|
|
|
return self::$_api; |
|
226
|
|
|
} |
|
227
|
|
|
|
|
228
|
|
|
/** |
|
229
|
|
|
* |
|
230
|
|
|
* @var Null | Array |
|
231
|
|
|
*/ |
|
232
|
|
|
private static $drop_down_list = array(); |
|
233
|
|
|
|
|
234
|
|
|
/** |
|
235
|
|
|
* returns available list for client |
|
236
|
|
|
* @return array |
|
237
|
|
|
*/ |
|
238
|
|
|
protected function makeDropdownListFromLists() |
|
239
|
|
|
{ |
|
240
|
|
|
if (!isset(self::$drop_down_list[$this->ID])) { |
|
241
|
|
|
$array = array(); |
|
242
|
|
|
$api = $this->getAPI(); |
|
243
|
|
|
$lists = $api->getLists(); |
|
244
|
|
|
if (is_array($lists) && count($lists)) { |
|
245
|
|
|
foreach ($lists as $list) { |
|
246
|
|
|
$array[$list->ListID] = $list->Name; |
|
247
|
|
|
} |
|
248
|
|
|
} |
|
249
|
|
|
//remove subscription list IDs from other pages |
|
250
|
|
|
$subscribePages = CampaignMonitorSignupPage::get() |
|
251
|
|
|
->exclude("ID", $this->ID); |
|
252
|
|
|
foreach ($subscribePages as $page) { |
|
253
|
|
|
if (isset($array[$page->ListID])) { |
|
254
|
|
|
unset($array[$page->ListID]); |
|
255
|
|
|
} |
|
256
|
|
|
} |
|
257
|
|
|
self::$drop_down_list[$this->ID] = $array; |
|
258
|
|
|
} |
|
259
|
|
|
return self::$drop_down_list[$this->ID]; |
|
260
|
|
|
} |
|
261
|
|
|
|
|
262
|
|
|
/** |
|
263
|
|
|
* you can add this function to other pages to have a form |
|
264
|
|
|
* that starts the basic after which the client needs to complete the rest. |
|
265
|
|
|
* |
|
266
|
|
|
* Or does a basic sign up if ajax submitted. |
|
267
|
|
|
* |
|
268
|
|
|
* @param Controller $controller |
|
269
|
|
|
* @param String $formName |
|
270
|
|
|
* |
|
271
|
|
|
* @return Form |
|
272
|
|
|
*/ |
|
273
|
|
|
public function CampaignMonitorStartForm(Controller $controller, $formName = "CampaignMonitorStarterForm") |
|
274
|
|
|
{ |
|
275
|
|
|
if ($email = Session::get("CampaignMonitorStartForm_AjaxResult_".$this->ID)) { |
|
276
|
|
|
return $this->renderWith("CampaignMonitorStartForm_AjaxResult", array("Email" => $email)); |
|
277
|
|
|
} else { |
|
278
|
|
|
Requirements::javascript(THIRDPARTY_DIR . '/jquery/jquery.js'); |
|
279
|
|
|
//Requirements::javascript(THIRDPARTY_DIR . '/jquery-form/jquery.form.js'); |
|
|
|
|
|
|
280
|
|
|
Requirements::javascript(SS_CAMPAIGNMONITOR_DIR . '/javascript/CampaignMonitorStartForm.js'); |
|
281
|
|
|
if (!$this->ReadyToReceiveSubscribtions()) { |
|
282
|
|
|
//user_error("You first need to setup a Campaign Monitor Page for this function to work.", E_USER_NOTICE); |
|
|
|
|
|
|
283
|
|
|
return false; |
|
284
|
|
|
} |
|
285
|
|
|
$fields = new FieldList(new EmailField("CampaignMonitorEmail", _t("CAMPAIGNMONITORSIGNUPPAGE.EMAIL", "Email"))); |
|
286
|
|
|
$actions = new FieldList(new FormAction("campaignmonitorstarterformstartaction", $this->SignUpButtonLabel)); |
|
287
|
|
|
$form = new Form( |
|
288
|
|
|
$controller, |
|
289
|
|
|
$formName, |
|
290
|
|
|
$fields, |
|
291
|
|
|
$actions |
|
292
|
|
|
); |
|
293
|
|
|
$form->setFormAction($this->Link("preloademail")); |
|
294
|
|
|
return $form; |
|
295
|
|
|
} |
|
296
|
|
|
} |
|
297
|
|
|
|
|
298
|
|
|
/** |
|
299
|
|
|
* adds a subcriber to the list without worrying about making it a user ... |
|
300
|
|
|
* |
|
301
|
|
|
* @param String $email |
|
302
|
|
|
* |
|
303
|
|
|
* @returns |
|
304
|
|
|
*/ |
|
305
|
|
|
public function addSubscriber($email) |
|
306
|
|
|
{ |
|
307
|
|
|
if ($this->ReadyToReceiveSubscribtions()) { |
|
308
|
|
|
$listID = $this->ListID; |
|
309
|
|
|
$email = Convert::raw2sql($email); |
|
310
|
|
|
$member = Member::get()->filter(array("Email" => $email))->first(); |
|
311
|
|
|
if ($member && $member->exists()) { |
|
|
|
|
|
|
312
|
|
|
//do nothing |
|
313
|
|
|
} else { |
|
314
|
|
|
$member = new Member(); |
|
315
|
|
|
$member->Email = $email; |
|
316
|
|
|
$member->SetPassword = true; |
|
|
|
|
|
|
317
|
|
|
$member->Password = Member::create_new_password(); |
|
|
|
|
|
|
318
|
|
|
$member->write(); |
|
319
|
|
|
} |
|
320
|
|
|
if ($group = $this->Group()) { |
|
321
|
|
|
$group->Members()->add($member); |
|
322
|
|
|
} |
|
323
|
|
|
$api = $this->getAPI(); |
|
324
|
|
|
$result = $api->addSubscriber($listID, $member); |
|
|
|
|
|
|
325
|
|
|
if ($result == $email) { |
|
326
|
|
|
return null; |
|
327
|
|
|
} |
|
328
|
|
|
return "ERROR: could not subscribe"; |
|
329
|
|
|
} |
|
330
|
|
|
return "ERROR: not ready"; |
|
331
|
|
|
} |
|
332
|
|
|
|
|
333
|
|
|
/** |
|
334
|
|
|
* name of the list connected to. |
|
335
|
|
|
* @return String |
|
336
|
|
|
*/ |
|
337
|
|
|
public function getListTitle() |
|
338
|
|
|
{ |
|
339
|
|
|
if ($this->ListID) { |
|
340
|
|
|
$a = $this->makeDropdownListFromLists(); |
|
341
|
|
|
if (isset($a[$this->ListID])) { |
|
342
|
|
|
return $a[$this->ListID]; |
|
343
|
|
|
} |
|
344
|
|
|
} |
|
345
|
|
|
return ""; |
|
346
|
|
|
} |
|
347
|
|
|
|
|
348
|
|
|
/** |
|
349
|
|
|
* tells us if the page is ready to receive subscriptions |
|
350
|
|
|
* @return Boolean |
|
351
|
|
|
*/ |
|
352
|
|
|
public function ReadyToReceiveSubscribtions() |
|
353
|
|
|
{ |
|
354
|
|
|
return $this->ListID && $this->GroupID; |
|
355
|
|
|
} |
|
356
|
|
|
|
|
357
|
|
|
/** |
|
358
|
|
|
* check list and group IDs |
|
359
|
|
|
* |
|
360
|
|
|
*/ |
|
361
|
|
|
public function onBeforeWrite() |
|
362
|
|
|
{ |
|
363
|
|
|
parent::onBeforeWrite(); |
|
364
|
|
|
//check list |
|
365
|
|
|
if (!$this->getListTitle()) { |
|
366
|
|
|
$this->ListID = 0; |
|
367
|
|
|
} |
|
368
|
|
|
$gp = null; |
|
369
|
|
|
//check group |
|
370
|
|
|
if ($this->GroupID) { |
|
371
|
|
|
$gp = $this->Group(); |
|
372
|
|
|
if (!$gp || !$gp->exists()) { |
|
373
|
|
|
$this->GroupID = 0; |
|
374
|
|
|
} |
|
375
|
|
|
} |
|
376
|
|
|
|
|
377
|
|
|
//add group |
|
378
|
|
|
if ($this->ListID) { |
|
379
|
|
|
if (!$this->GroupID) { |
|
380
|
|
|
$gp = new Group(); |
|
381
|
|
|
$this->GroupID = $gp->ID; |
|
382
|
|
|
$gp->write(); |
|
383
|
|
|
} |
|
384
|
|
|
$title = _t("CampaignMonitor.NEWSLETTER", "NEWSLETTER"); |
|
385
|
|
|
if ($myListName = $this->getListTitle()) { |
|
386
|
|
|
$title .= ": ".$myListName; |
|
387
|
|
|
} |
|
388
|
|
|
$gp->Title = (string)$title; |
|
389
|
|
|
$gp->write(); |
|
390
|
|
|
} |
|
391
|
|
|
if ($gp) { |
|
392
|
|
|
$this->GroupID = $gp->ID; |
|
393
|
|
|
} |
|
394
|
|
|
} |
|
395
|
|
|
|
|
396
|
|
|
/** |
|
397
|
|
|
* add old campaings or remove them |
|
398
|
|
|
* depending on the setting |
|
399
|
|
|
* |
|
400
|
|
|
* add / remove segments ... |
|
401
|
|
|
* |
|
402
|
|
|
*/ |
|
403
|
|
|
public function onAfterWrite() |
|
404
|
|
|
{ |
|
405
|
|
|
parent::onAfterWrite(); |
|
406
|
|
|
if ($this->ShowOldNewsletters) { |
|
407
|
|
|
$this->AddOldCampaigns(); |
|
408
|
|
|
} else { |
|
409
|
|
|
$this->CampaignMonitorCampaigns()->filter(array("HasBeenSent" => 1))->removeAll(); |
|
410
|
|
|
} |
|
411
|
|
|
//add segments |
|
412
|
|
|
$segmentsAdded = array(); |
|
413
|
|
|
$segments = $this->api->getSegments($this->ListID); |
|
414
|
|
|
if ($segments && is_array($segments) && count($segments)) { |
|
415
|
|
|
foreach ($segments as $segment) { |
|
416
|
|
|
$segmentsAdded[$segment->SegmentID] = $segment->SegmentID; |
|
417
|
|
|
$filterArray = array("SegmentID" => $segment->SegmentID, "ListID" => $this->ListID, "CampaignMonitorSignupPageID" => $this->ID); |
|
418
|
|
|
$obj = CampaignMonitorSegment::get()->filter($filterArray)->first(); |
|
419
|
|
|
if (!$obj) { |
|
420
|
|
|
$obj = CampaignMonitorSegment::create($filterArray); |
|
421
|
|
|
} |
|
422
|
|
|
$obj->Title = $segment->Title; |
|
423
|
|
|
$obj->write(); |
|
|
|
|
|
|
424
|
|
|
} |
|
425
|
|
|
} |
|
426
|
|
|
$unwantedSegments = CampaignMonitorSegment::get()->filter(array("ListID" => $this->ListID, "CampaignMonitorSignupPageID" => $this->ID)) |
|
427
|
|
|
->exclude(array("SegmentID" => $segmentsAdded)); |
|
428
|
|
|
foreach ($unwantedSegments as $unwantedSegment) { |
|
429
|
|
|
$unwantedSegment->delete(); |
|
430
|
|
|
} |
|
431
|
|
|
//add custom fields |
|
432
|
|
|
$customCustomFieldsAdded = array(); |
|
433
|
|
|
$customCustomFields = $this->api->getListCustomFields($this->ListID); |
|
434
|
|
|
if ($customCustomFields && is_array($customCustomFields) && count($customCustomFields)) { |
|
435
|
|
|
foreach ($customCustomFields as $customCustomField) { |
|
436
|
|
|
$obj = CampaignMonitorCustomField::create_from_campaign_monitor_object($customCustomField, $this->ListID); |
|
437
|
|
|
$customCustomFieldsAdded[$obj->Code] = $obj->Code; |
|
|
|
|
|
|
438
|
|
|
} |
|
439
|
|
|
} |
|
440
|
|
|
$unwantedCustomFields = CampaignMonitorCustomField::get()->filter(array("ListID" => $this->ListID, "CampaignMonitorSignupPageID" => $this->ID)) |
|
441
|
|
|
->exclude(array("Code" => $customCustomFieldsAdded)); |
|
442
|
|
|
foreach ($unwantedCustomFields as $unwantedCustomField) { |
|
443
|
|
|
$unwantedCustomField->delete(); |
|
444
|
|
|
} |
|
445
|
|
|
} |
|
446
|
|
|
|
|
447
|
|
|
public function AddOldCampaigns() |
|
448
|
|
|
{ |
|
449
|
|
|
$task = CampaignMonitorAddOldCampaigns::create(); |
|
450
|
|
|
$task->setVerbose(false); |
|
451
|
|
|
$task->run(null); |
|
452
|
|
|
} |
|
453
|
|
|
|
|
454
|
|
|
public function requireDefaultRecords() |
|
455
|
|
|
{ |
|
456
|
|
|
parent::requireDefaultRecords(); |
|
457
|
|
|
$update = array(); |
|
458
|
|
|
$page = CampaignMonitorSignupPage::get()->First(); |
|
459
|
|
|
|
|
460
|
|
|
if ($page) { |
|
461
|
|
|
if (!$page->SignUpHeader) { |
|
462
|
|
|
$page->SignUpHeader = 'Sign Up Now'; |
|
463
|
|
|
$update[]= "created default entry for SignUpHeader"; |
|
464
|
|
|
} |
|
465
|
|
|
if (strlen($page->SignUpIntro) < strlen("<p> </p>")) { |
|
466
|
|
|
$page->SignUpIntro = '<p>Enter your email to sign up for our newsletter</p>'; |
|
467
|
|
|
$update[]= "created default entry for SignUpIntro"; |
|
468
|
|
|
} |
|
469
|
|
|
if (!$page->SignUpButtonLabel) { |
|
470
|
|
|
$page->SignUpButtonLabel = 'Register Now'; |
|
471
|
|
|
$update[]= "created default entry for SignUpButtonLabel"; |
|
472
|
|
|
} |
|
473
|
|
|
if (count($update)) { |
|
474
|
|
|
$page->writeToStage('Stage'); |
|
475
|
|
|
$page->publish('Stage', 'Live'); |
|
476
|
|
|
DB::alteration_message($page->ClassName." created/updated: ".implode(" --- ", $update), 'created'); |
|
477
|
|
|
} |
|
478
|
|
|
} |
|
479
|
|
|
} |
|
480
|
|
|
} |
|
481
|
|
|
|
|
482
|
|
|
class CampaignMonitorSignupPage_Controller extends Page_Controller |
|
|
|
|
|
|
483
|
|
|
{ |
|
484
|
|
|
|
|
485
|
|
|
/** |
|
486
|
|
|
* retains email for processing |
|
487
|
|
|
* @var boolean |
|
488
|
|
|
*/ |
|
489
|
|
|
protected $isThankYou = false; |
|
490
|
|
|
|
|
491
|
|
|
/** |
|
492
|
|
|
* retains email for processing |
|
493
|
|
|
* @var boolean |
|
494
|
|
|
*/ |
|
495
|
|
|
protected $isUnsubscribe = false; |
|
496
|
|
|
|
|
497
|
|
|
/** |
|
498
|
|
|
* retains email for processing |
|
499
|
|
|
* @var boolean |
|
500
|
|
|
*/ |
|
501
|
|
|
protected $isConfirm = false; |
|
502
|
|
|
|
|
503
|
|
|
/** |
|
504
|
|
|
* retains email for processing |
|
505
|
|
|
* @var String |
|
506
|
|
|
*/ |
|
507
|
|
|
protected $email = ''; |
|
508
|
|
|
|
|
509
|
|
|
/** |
|
510
|
|
|
* holder for selected campaign |
|
511
|
|
|
* |
|
512
|
|
|
* @var Null | CampaignMonitorCampaign |
|
513
|
|
|
*/ |
|
514
|
|
|
protected $campaign = ''; |
|
515
|
|
|
|
|
516
|
|
|
private static $allowed_actions = array( |
|
|
|
|
|
|
517
|
|
|
"SignupForm" => true, |
|
518
|
|
|
"subscribe" => true, |
|
519
|
|
|
"unsubscribe" => true, |
|
520
|
|
|
"thankyou" => true, |
|
521
|
|
|
"confirm" => true, |
|
522
|
|
|
"sadtoseeyougo" => true, |
|
523
|
|
|
"preloademail" => true, |
|
524
|
|
|
"viewcampaign" => true, |
|
525
|
|
|
"viewcampaigntextonly" => true, |
|
526
|
|
|
"previewcampaign" => true, |
|
527
|
|
|
"previewcampaigntextonly" => true, |
|
528
|
|
|
"stats" => true, |
|
529
|
|
|
"resetoldcampaigns" => true, |
|
530
|
|
|
"resetsignup" => true |
|
531
|
|
|
); |
|
532
|
|
|
|
|
533
|
|
|
public function init() |
|
534
|
|
|
{ |
|
535
|
|
|
parent::init(); |
|
536
|
|
|
Requirements::themedCSS("CampaignMonitorSignupPage", "campaignmonitor"); |
|
537
|
|
|
} |
|
538
|
|
|
|
|
539
|
|
|
/** |
|
540
|
|
|
* creates a subscription form... |
|
541
|
|
|
* @return Form |
|
542
|
|
|
*/ |
|
543
|
|
|
public function SignupForm() |
|
544
|
|
|
{ |
|
545
|
|
|
if ($this->ReadyToReceiveSubscribtions()) { |
|
546
|
|
|
// Create fields |
|
547
|
|
|
$member = Member::currentUser(); |
|
548
|
|
|
$emailField = null; |
|
549
|
|
|
$emailRequired = true; |
|
550
|
|
|
if (!$member) { |
|
551
|
|
|
$member = new Member(); |
|
552
|
|
|
} else { |
|
553
|
|
|
$this->email = $member->Email; |
|
554
|
|
|
if ($this->email) { |
|
555
|
|
|
$emailRequired = false; |
|
556
|
|
|
$emailField = new ReadonlyField('CampaignMonitorEmail', _t("CAMPAIGNMONITORSIGNUPPAGE.EMAIL", 'Email'), $this->email); |
|
557
|
|
|
} |
|
558
|
|
|
} |
|
559
|
|
|
if (!$emailField) { |
|
560
|
|
|
$emailField = new EmailField('CampaignMonitorEmail', _t("CAMPAIGNMONITORSIGNUPPAGE.EMAIL", 'Email'), $this->email); |
|
561
|
|
|
} |
|
562
|
|
|
if ($this->ShowAllNewsletterForSigningUp) { |
|
563
|
|
|
$signupField = $member->getCampaignMonitorSignupField(null, "SubscribeManyChoices"); |
|
564
|
|
|
} else { |
|
565
|
|
|
$signupField = $member->getCampaignMonitorSignupField($this->ListID, "SubscribeChoice"); |
|
566
|
|
|
} |
|
567
|
|
|
$fields = new FieldList( |
|
568
|
|
|
$emailField, |
|
569
|
|
|
$signupField |
|
570
|
|
|
); |
|
571
|
|
|
// Create action |
|
572
|
|
|
$actions = new FieldList( |
|
573
|
|
|
new FormAction('subscribe', _t("CAMPAIGNMONITORSIGNUPPAGE.UPDATE_SUBSCRIPTIONS", "Update Subscriptions")) |
|
574
|
|
|
); |
|
575
|
|
|
// Create Validators |
|
576
|
|
|
if ($emailRequired) { |
|
577
|
|
|
$validator = new RequiredFields('CampaignMonitorEmail'); |
|
578
|
|
|
} else { |
|
579
|
|
|
$validator = new RequiredFields(); |
|
580
|
|
|
} |
|
581
|
|
|
$form = new Form($this, 'SignupForm', $fields, $actions, $validator); |
|
582
|
|
|
if ($member->exists()) { |
|
583
|
|
|
$form->loadDataFrom($member); |
|
584
|
|
|
} else { |
|
585
|
|
|
$form->Fields()->fieldByName("CampaignMonitorEmail")->setValue($this->email); |
|
586
|
|
|
} |
|
587
|
|
|
return $form; |
|
588
|
|
|
} else { |
|
589
|
|
|
return _t("CampaignMonitorSignupPage.NOTREADY", "You can not suscribe to this newsletter at present."); |
|
590
|
|
|
} |
|
591
|
|
|
} |
|
592
|
|
|
|
|
593
|
|
|
/** |
|
594
|
|
|
* action subscription form |
|
595
|
|
|
* @param Array $array |
|
|
|
|
|
|
596
|
|
|
* @param Form $form |
|
597
|
|
|
* |
|
598
|
|
|
* return redirect |
|
599
|
|
|
*/ |
|
600
|
|
|
public function subscribe($data, $form) |
|
|
|
|
|
|
601
|
|
|
{ |
|
602
|
|
|
if ($this->ReadyToReceiveSubscribtions()) { |
|
603
|
|
|
//true until proven otherwise. |
|
604
|
|
|
$newlyCreatedMember = false; |
|
605
|
|
|
$api = $this->getAPI(); |
|
|
|
|
|
|
606
|
|
|
$member = Member::currentUser(); |
|
607
|
|
|
|
|
608
|
|
|
//subscribe or unsubscribe? |
|
609
|
|
|
if (isset($data["SubscribeManyChoices"])) { |
|
610
|
|
|
$isSubscribe = true; |
|
611
|
|
|
} else { |
|
612
|
|
|
$isSubscribe = isset($data["SubscribeChoice"]) && $data["SubscribeChoice"] == "Subscribe"; |
|
613
|
|
|
} |
|
614
|
|
|
|
|
615
|
|
|
//no member logged in: if the member already exists then you can't sign up. |
|
616
|
|
|
if (!$member) { |
|
617
|
|
|
$memberAlreadyLoggedIn = false; |
|
|
|
|
|
|
618
|
|
|
$filter = array("Email" => Convert::raw2sql($data["CampaignMonitorEmail"])); |
|
619
|
|
|
$existingMember = Member::get()->filter($filter)->First(); |
|
620
|
|
|
//if($isSubscribe && $existingMember){ |
|
|
|
|
|
|
621
|
|
|
//$form->addErrorMessage('Email', _t("CAMPAIGNMONITORSIGNUPPAGE.EMAIL_EXISTS", "This email is already in use. Please log in for this email or try another email address."), 'warning'); |
|
|
|
|
|
|
622
|
|
|
//$this->redirectBack(); |
|
|
|
|
|
|
623
|
|
|
//return; |
|
624
|
|
|
//} |
|
625
|
|
|
$member = $existingMember; |
|
626
|
|
|
if (!$member) { |
|
627
|
|
|
$newlyCreatedMember = true; |
|
628
|
|
|
$member = Member::create($filter); |
|
629
|
|
|
} |
|
630
|
|
|
} |
|
631
|
|
|
|
|
632
|
|
|
//logged in: if the member already as someone else then you can't sign up. |
|
633
|
|
|
else { |
|
634
|
|
|
$memberAlreadyLoggedIn = true; |
|
|
|
|
|
|
635
|
|
|
//$existingMember = Member::get() |
|
|
|
|
|
|
636
|
|
|
// ->filter(array("Email" => Convert::raw2sql($data["CampaignMonitorEmail"]))) |
|
|
|
|
|
|
637
|
|
|
// ->exclude(array("ID" => $member->ID)) |
|
|
|
|
|
|
638
|
|
|
// ->First(); |
|
|
|
|
|
|
639
|
|
|
//if($isSubscribe && $existingMember) { |
|
|
|
|
|
|
640
|
|
|
//$form->addErrorMessage('CampaignMonitorEmail', _t("CAMPAIGNMONITORSIGNUPPAGE.EMAIL_EXISTS", "This email is already in use by someone else. Please log in for this email or try another email address."), 'warning'); |
|
|
|
|
|
|
641
|
|
|
//$this->redirectBack(); |
|
|
|
|
|
|
642
|
|
|
//return; |
|
643
|
|
|
//} |
|
644
|
|
|
} |
|
645
|
|
|
|
|
646
|
|
|
//are any choices being made |
|
647
|
|
|
if (!isset($data["SubscribeChoice"]) && !isset($data["SubscribeManyChoices"])) { |
|
648
|
|
|
$form->addErrorMessage('SubscribeChoice', _t("CAMPAIGNMONITORSIGNUPPAGE.NO_NAME", "Please choose your subscription."), 'warning'); |
|
649
|
|
|
$this->redirectBack(); |
|
650
|
|
|
return; |
|
651
|
|
|
} |
|
652
|
|
|
|
|
653
|
|
|
//if this is a new member then we save the member |
|
654
|
|
|
if ($isSubscribe) { |
|
655
|
|
|
if ($newlyCreatedMember) { |
|
656
|
|
|
$form->saveInto($member); |
|
657
|
|
|
$member->Email = Convert::raw2sql($data["CampaignMonitorEmail"]); |
|
658
|
|
|
$member->SetPassword = true; |
|
659
|
|
|
$member->Password = Member::create_new_password(); |
|
|
|
|
|
|
660
|
|
|
$member->write(); |
|
|
|
|
|
|
661
|
|
|
$member->logIn($keepMeLoggedIn = false); |
|
662
|
|
|
} |
|
663
|
|
|
} |
|
664
|
|
|
$outcome = $member->processCampaignMonitorSignupField($this->dataRecord, $data, $form); |
|
665
|
|
|
if ($outcome == "subscribe") { |
|
666
|
|
|
return $this->redirect($this->link("thankyou")); |
|
667
|
|
|
} else { |
|
668
|
|
|
return $this->redirect($this->link("sadtoseeyougo")); |
|
669
|
|
|
} |
|
670
|
|
|
} else { |
|
671
|
|
|
user_error("No list to subscribe to", E_USER_WARNING); |
|
672
|
|
|
} |
|
673
|
|
|
} |
|
674
|
|
|
|
|
675
|
|
|
/** |
|
676
|
|
|
* immediately unsubscribe if you are logged in. |
|
677
|
|
|
* @param HTTPRequest |
|
678
|
|
|
*/ |
|
679
|
|
View Code Duplication |
public function unsubscribe($request) |
|
|
|
|
|
|
680
|
|
|
{ |
|
681
|
|
|
$member = Member::currentUser(); |
|
682
|
|
|
if ($member) { |
|
683
|
|
|
$member->removeCampaignMonitorList($this->ListID); |
|
684
|
|
|
$this->Content = $member->Email." has been removed from this list: ".$this->getListTitle(); |
|
685
|
|
|
} else { |
|
686
|
|
|
Security::permissionFailure($this, _t("CAMPAIGNMONITORSIGNUPPAGE.LOGINFIRST", "Please login first.")); |
|
687
|
|
|
} |
|
688
|
|
|
return array(); |
|
689
|
|
|
} |
|
690
|
|
|
|
|
691
|
|
|
/** |
|
692
|
|
|
* action |
|
693
|
|
|
* @param HTTPRequest |
|
694
|
|
|
*/ |
|
695
|
|
|
public function confirm($request) |
|
696
|
|
|
{ |
|
697
|
|
|
$this->Title = $this->ConfirmTitle; |
|
698
|
|
|
$this->MenuTitle = $this->ConfirmMenuTitle; |
|
699
|
|
|
$this->Content = $this->ConfirmMessage; |
|
700
|
|
|
$this->isConfirm = true; |
|
701
|
|
|
return array(); |
|
702
|
|
|
} |
|
703
|
|
|
|
|
704
|
|
|
/** |
|
705
|
|
|
* action |
|
706
|
|
|
* @param HTTPRequest |
|
707
|
|
|
*/ |
|
708
|
|
|
public function thankyou($request) |
|
709
|
|
|
{ |
|
710
|
|
|
$this->Title = $this->ThankYouTitle; |
|
711
|
|
|
$this->MenuTitle = $this->ThankYouMenuTitle; |
|
712
|
|
|
$this->Content = $this->ThankYouMessage; |
|
713
|
|
|
$this->isThankYou = true; |
|
714
|
|
|
return array(); |
|
715
|
|
|
} |
|
716
|
|
|
|
|
717
|
|
|
/** |
|
718
|
|
|
* action |
|
719
|
|
|
* @param HTTPRequest |
|
720
|
|
|
*/ |
|
721
|
|
|
public function sadtoseeyougo($request) |
|
722
|
|
|
{ |
|
723
|
|
|
$this->Title = $this->SadToSeeYouGoTitle; |
|
724
|
|
|
$this->MenuTitle = $this->SadToSeeYouGoMenuTitle; |
|
725
|
|
|
$this->Content = $this->SadToSeeYouGoMessage; |
|
726
|
|
|
$this->isUnsubscribe = true; |
|
727
|
|
|
return array(); |
|
728
|
|
|
} |
|
729
|
|
|
|
|
730
|
|
|
/** |
|
731
|
|
|
* action |
|
732
|
|
|
* @param HTTPRequest |
|
733
|
|
|
*/ |
|
734
|
|
|
public function preloademail(SS_HTTPRequest $request) |
|
|
|
|
|
|
735
|
|
|
{ |
|
736
|
|
|
$data = $request->requestVars(); |
|
737
|
|
|
if (isset($data["CampaignMonitorEmail"])) { |
|
738
|
|
|
$email = Convert::raw2sql($data["CampaignMonitorEmail"]); |
|
739
|
|
|
if ($email) { |
|
740
|
|
|
$this->email = $email; |
|
|
|
|
|
|
741
|
|
|
if (Director::is_ajax()) { |
|
742
|
|
|
if (!$this->addSubscriber($email)) { |
|
743
|
|
|
Session::set("CampaignMonitorStartForm_AjaxResult_".$this->ID, $data["CampaignMonitorEmail"]); |
|
744
|
|
|
return $this->renderWith("CampaignMonitorStartForm_AjaxResult"); |
|
745
|
|
|
} else { |
|
746
|
|
|
return "ERROR"; |
|
747
|
|
|
} |
|
748
|
|
|
} |
|
749
|
|
|
} |
|
750
|
|
|
} else { |
|
751
|
|
|
if ($m = Member::currentUser()) { |
|
752
|
|
|
$this->email = $m->Email; |
|
753
|
|
|
} |
|
754
|
|
|
} |
|
755
|
|
|
return array(); |
|
756
|
|
|
} |
|
757
|
|
|
|
|
758
|
|
|
/** |
|
759
|
|
|
* |
|
760
|
|
|
* action to show one campaign... |
|
761
|
|
|
*/ |
|
762
|
|
View Code Duplication |
public function viewcampaign($request) |
|
|
|
|
|
|
763
|
|
|
{ |
|
764
|
|
|
$id = intval($request->param("ID")); |
|
765
|
|
|
$this->campaign = CampaignMonitorCampaign::get()->byID($id); |
|
|
|
|
|
|
766
|
|
|
if (!$this->campaign) { |
|
767
|
|
|
return $this->httpError(404, _t("CAMPAIGNMONITORSIGNUPPAGE.CAMPAIGN_NOT_FOUND", "Message not found.")); |
|
768
|
|
|
} |
|
769
|
|
|
return array(); |
|
770
|
|
|
} |
|
771
|
|
|
|
|
772
|
|
|
/** |
|
773
|
|
|
* |
|
774
|
|
|
* action to show one campaign TEXT ONLY... |
|
775
|
|
|
*/ |
|
776
|
|
View Code Duplication |
public function viewcampaigntextonly($request) |
|
|
|
|
|
|
777
|
|
|
{ |
|
778
|
|
|
$id = intval($request->param("ID")); |
|
779
|
|
|
$this->campaign = CampaignMonitorCampaign::get()->byID($id); |
|
|
|
|
|
|
780
|
|
|
if (!$this->campaign) { |
|
781
|
|
|
return $this->httpError(404, _t("CAMPAIGNMONITORSIGNUPPAGE.CAMPAIGN_NOT_FOUND", "Message not found.")); |
|
782
|
|
|
} |
|
783
|
|
|
return array(); |
|
784
|
|
|
} |
|
785
|
|
|
|
|
786
|
|
|
/** |
|
787
|
|
|
* |
|
788
|
|
|
* action to preview one campaign... |
|
789
|
|
|
*/ |
|
790
|
|
|
public function previewcampaign($request) |
|
|
|
|
|
|
791
|
|
|
{ |
|
792
|
|
|
$id = intval($request->param("ID")); |
|
793
|
|
|
$this->campaign = CampaignMonitorCampaign::get()->byID($id); |
|
|
|
|
|
|
794
|
|
|
if ($this->campaign) { |
|
795
|
|
|
if (isset($_GET["hash"]) && strlen($_GET["hash"]) == 7 && $_GET["hash"] == $this->campaign->Hash) { |
|
796
|
|
|
return HTTP::absoluteURLs($this->campaign->getNewsletterContent()); |
|
797
|
|
|
} |
|
798
|
|
|
} |
|
799
|
|
|
return $this->httpError(404, _t("CAMPAIGNMONITORSIGNUPPAGE.CAMPAIGN_NOT_FOUND", "No preview available.")); |
|
800
|
|
|
} |
|
801
|
|
|
|
|
802
|
|
|
/** |
|
803
|
|
|
* |
|
804
|
|
|
* action to preview one campaign TEXT ONLY... |
|
805
|
|
|
*/ |
|
806
|
|
|
public function previewcampaigntextonly($request) |
|
|
|
|
|
|
807
|
|
|
{ |
|
808
|
|
|
$id = intval($request->param("ID")); |
|
809
|
|
|
$this->campaign = CampaignMonitorCampaign::get()->byID($id); |
|
|
|
|
|
|
810
|
|
|
if ($this->campaign) { |
|
811
|
|
|
return HTTP::absoluteURLs(strip_tags($this->campaign->getNewsletterContent())); |
|
812
|
|
|
} |
|
813
|
|
|
return $this->httpError(404, _t("CAMPAIGNMONITORSIGNUPPAGE.CAMPAIGN_NOT_FOUND", "No preview available.")); |
|
814
|
|
|
} |
|
815
|
|
|
|
|
816
|
|
|
|
|
817
|
|
|
/** |
|
818
|
|
|
* |
|
819
|
|
|
* @return String |
|
820
|
|
|
*/ |
|
821
|
|
|
public function Email() |
|
822
|
|
|
{ |
|
823
|
|
|
return $this->email; |
|
824
|
|
|
} |
|
825
|
|
|
|
|
826
|
|
|
/** |
|
827
|
|
|
* |
|
828
|
|
|
* @return Boolean |
|
829
|
|
|
*/ |
|
830
|
|
|
public function IsThankYou() |
|
831
|
|
|
{ |
|
832
|
|
|
return $this->isThankYou; |
|
833
|
|
|
} |
|
834
|
|
|
|
|
835
|
|
|
/** |
|
836
|
|
|
* |
|
837
|
|
|
* @return Boolean |
|
838
|
|
|
*/ |
|
839
|
|
|
public function IsConfirm() |
|
840
|
|
|
{ |
|
841
|
|
|
return $this->isConfirm; |
|
842
|
|
|
} |
|
843
|
|
|
|
|
844
|
|
|
/** |
|
845
|
|
|
* |
|
846
|
|
|
* @return Boolean |
|
847
|
|
|
*/ |
|
848
|
|
|
public function IsUnsubscribe() |
|
849
|
|
|
{ |
|
850
|
|
|
return $this->isUnsubscribe; |
|
851
|
|
|
} |
|
852
|
|
|
|
|
853
|
|
|
/** |
|
854
|
|
|
* |
|
855
|
|
|
* @return Boolean |
|
856
|
|
|
*/ |
|
857
|
|
|
public function HasCampaign() |
|
858
|
|
|
{ |
|
859
|
|
|
return $this->campaign ? true : false; |
|
860
|
|
|
} |
|
861
|
|
|
|
|
862
|
|
|
/** |
|
863
|
|
|
* |
|
864
|
|
|
* @return Null | CampaignMonitorCampaign |
|
865
|
|
|
*/ |
|
866
|
|
|
public function Campaign() |
|
867
|
|
|
{ |
|
868
|
|
|
return $this->campaign; |
|
869
|
|
|
} |
|
870
|
|
|
|
|
871
|
|
|
|
|
872
|
|
|
/** |
|
873
|
|
|
* same as $this->CampaignMonitorCampaigns() |
|
874
|
|
|
* but sorted correctly. |
|
875
|
|
|
* |
|
876
|
|
|
* @return DataSet of CampaignMonitorCampaigns |
|
|
|
|
|
|
877
|
|
|
*/ |
|
878
|
|
|
public function PreviousCampaignMonitorCampaigns() |
|
879
|
|
|
{ |
|
880
|
|
|
if ($this->ShowOldNewsletters) { |
|
881
|
|
|
$campaigns = $this->CampaignMonitorCampaigns(); |
|
882
|
|
|
return CampaignMonitorCampaign::get() |
|
883
|
|
|
->filter( |
|
884
|
|
|
array( |
|
885
|
|
|
"ID" => $campaigns->map("ID", "ID")->toArray(), |
|
886
|
|
|
"Hide" => 0, |
|
887
|
|
|
"HasBeenSent" => 1 |
|
888
|
|
|
) |
|
889
|
|
|
); |
|
890
|
|
|
} |
|
891
|
|
|
} |
|
892
|
|
|
|
|
893
|
|
|
/** |
|
894
|
|
|
* action for admins only to see a whole bunch of |
|
895
|
|
|
* stats |
|
896
|
|
|
*/ |
|
897
|
|
|
public function stats() |
|
898
|
|
|
{ |
|
899
|
|
|
if (Permission::check("Admin")) { |
|
900
|
|
|
//run tests here |
|
901
|
|
|
$api = $this->getAPI(); |
|
902
|
|
|
$html = "<div id=\"CampaignMonitorStats\">"; |
|
903
|
|
|
$html .= "<h1>Debug Response</h1>"; |
|
904
|
|
|
$html .= "<h2>Main Client Stuff</h2>"; |
|
905
|
|
|
$html .= "<h3>Link to confirm page</h3>".Director::absoluteUrl($this->Link("confirm")).""; |
|
906
|
|
|
$html .= "<h3>Link to thank-you-page</h3>".Director::absoluteUrl($this->Link("thankyou")).""; |
|
907
|
|
|
$html .= "<h3>Link to sad-to-see-you-go page</h3>".Director::absoluteUrl($this->Link("sadtoseeyougo")).""; |
|
908
|
|
|
$html .= "<h3><a href=\"#\">All Campaigns</a></a></h3><pre>".print_r($api->getCampaigns(), 1)."</pre>"; |
|
909
|
|
|
$html .= "<h3><a href=\"#\">All Lists</a></h3><pre>".print_r($api->getLists(), 1)."</pre>"; |
|
910
|
|
|
if ($this->ListID) { |
|
911
|
|
|
$html .= "<h2>List</h2"; |
|
912
|
|
|
$html .= "<h3><a href=\"#\" id=\"MyListStatsAreHere\">List Stats</a></h3><pre>".print_r($api->getListStats($this->ListID), 1)."</pre>"; |
|
913
|
|
|
$html .= "<h3><a href=\"#\">List Details</a></h3><pre>".print_r($api->getList($this->ListID), 1)."</pre>"; |
|
914
|
|
|
$html .= "<h3><a href=\"#\">Active Subscribers (latest ones)</a></h3><pre>".print_r($api->getActiveSubscribers($this->ListID), 1)."</pre>"; |
|
915
|
|
|
$html .= "<h3><a href=\"#\">Unconfirmed Subscribers (latest ones)</a></h3><pre>".print_r($api->getUnconfirmedSubscribers($this->ListID), 1)."</pre>"; |
|
916
|
|
|
$html .= "<h3><a href=\"#\">Bounced Subscribers (latest ones)</a></h3><pre>".print_r($api->getBouncedSubscribers($this->ListID), 1)."</pre>"; |
|
917
|
|
|
$html .= "<h3><a href=\"#\">Unsubscribed Subscribers (latest ones)</a></h3><pre>".print_r($api->getUnsubscribedSubscribers($this->ListID), 1)."</pre>"; |
|
918
|
|
|
} else { |
|
919
|
|
|
$html .= "<h2 style=\"color: red;\">ERROR: No Lists selected</h2"; |
|
920
|
|
|
} |
|
921
|
|
|
Requirements::customScript($this->JSHackForPreSections(), "CampaignMonitorStats"); |
|
922
|
|
|
$html .= "</div>"; |
|
923
|
|
|
$this->Content = $html; |
|
924
|
|
|
} else { |
|
925
|
|
|
Security::permissionFailure($this, _t("CAMPAIGNMONITORSIGNUPPAGE.TESTFAILURE", "This function is only available for administrators"), 1); |
|
|
|
|
|
|
926
|
|
|
} |
|
927
|
|
|
return array(); |
|
928
|
|
|
} |
|
929
|
|
|
|
|
930
|
|
|
/** |
|
931
|
|
|
* returns a bunch of stats about a campaign |
|
932
|
|
|
* IF the user is an admin AND a campaign is selected |
|
933
|
|
|
* @return String (html) | false |
|
|
|
|
|
|
934
|
|
|
*/ |
|
935
|
|
|
public function CampaignStats() |
|
936
|
|
|
{ |
|
937
|
|
|
if (Permission::check("CMS_ACCESS_CMSMain")) { |
|
938
|
|
|
if ($this->campaign) { |
|
939
|
|
|
//run tests here |
|
940
|
|
|
$api = $this->getAPI(); |
|
941
|
|
|
$html = "<div id=\"CampaignMonitorStats\">"; |
|
942
|
|
|
$html .= "<h2>Campaign Stats</h2>"; |
|
943
|
|
|
$html .= "<h3><a href=\"#\">Campaign: ".$this->campaign->Subject."</a></h3>"; |
|
944
|
|
|
$html .= "<h3><a href=\"#\">Summary</a></h3><pre>".print_r($api->getSummary($this->campaign->CampaignID), 1)."</pre>"; |
|
945
|
|
|
$html .= "<h3><a href=\"#\">Email Client Usage</a></h3><pre>".print_r($api->getEmailClientUsage($this->campaign->CampaignID), 1)."</pre>"; |
|
946
|
|
|
$html .= "<h3><a href=\"#\">Unsubscribes</a></h3><pre>".print_r($api->getUnsubscribes($this->campaign->CampaignID), 1)."</pre>"; |
|
947
|
|
|
Requirements::customScript($this->JSHackForPreSections(), "CampaignMonitorStats"); |
|
948
|
|
|
$html .= "</div>"; |
|
949
|
|
|
$this->Content = $html; |
|
950
|
|
|
} |
|
951
|
|
|
} else { |
|
952
|
|
|
return false; |
|
953
|
|
|
} |
|
954
|
|
|
} |
|
955
|
|
|
|
|
956
|
|
|
/** |
|
957
|
|
|
* action |
|
958
|
|
|
* @param HTTPRequest |
|
959
|
|
|
*/ |
|
960
|
|
|
public function resetsignup($request) |
|
961
|
|
|
{ |
|
962
|
|
|
Session::clear("CampaignMonitorStartForm_AjaxResult_".$this->ID); |
|
963
|
|
|
return array(); |
|
964
|
|
|
} |
|
965
|
|
|
|
|
966
|
|
|
/** |
|
967
|
|
|
* removes all campaigns |
|
968
|
|
|
* so that they can be re-imported. |
|
969
|
|
|
*/ |
|
970
|
|
|
public function resetoldcampaigns() |
|
971
|
|
|
{ |
|
972
|
|
|
if (!Permission::check("CMS_ACCESS_CMSMain")) { |
|
973
|
|
|
Security::permissionFailure($this, _t('Security.PERMFAILURE', ' This page is secured and you need CMS rights to access it. Enter your credentials below and we will send you right along.')); |
|
974
|
|
|
} else { |
|
975
|
|
|
DB::query("DELETE FROM \"CampaignMonitorCampaign\";"); |
|
976
|
|
|
DB::query("DELETE FROM \"CampaignMonitorCampaign_Pages\";"); |
|
977
|
|
|
die("old campaigns have been deleted"); |
|
|
|
|
|
|
978
|
|
|
} |
|
979
|
|
|
} |
|
980
|
|
|
|
|
981
|
|
|
|
|
982
|
|
|
/** |
|
983
|
|
|
* @return String |
|
984
|
|
|
*/ |
|
985
|
|
|
private function JSHackForPreSections() |
|
986
|
|
|
{ |
|
987
|
|
|
$js = <<<javascript |
|
988
|
|
|
jQuery(document).ready( |
|
989
|
|
|
function(){ |
|
990
|
|
|
jQuery('pre').hide(); |
|
991
|
|
|
jQuery('#CampaignMonitorStats').on( |
|
992
|
|
|
'click', |
|
993
|
|
|
'a', |
|
994
|
|
|
function(event){ |
|
995
|
|
|
event.preventDefault(); |
|
996
|
|
|
jQuery(this).parent().next('pre').slideToggle(); |
|
997
|
|
|
} |
|
998
|
|
|
); |
|
999
|
|
|
jQuery("#MyListStatsAreHere").click(); |
|
1000
|
|
|
} |
|
1001
|
|
|
); |
|
1002
|
|
|
|
|
1003
|
|
|
javascript; |
|
1004
|
|
|
return $js; |
|
1005
|
|
|
} |
|
1006
|
|
|
} |
|
1007
|
|
|
|
You can fix this by adding a namespace to your class:
When choosing a vendor namespace, try to pick something that is not too generic to avoid conflicts with other libraries.