forked from integry/livecart
/
NewsletterController.php
88 lines (70 loc) · 2.27 KB
/
NewsletterController.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
<?php
ClassLoader::import('application.controller.FrontendController');
ClassLoader::import('application.model.newsletter.*');
class NewsletterController extends FrontendController
{
public function unsubscribe()
{
$email = $this->request->get('email');
// delete from subscriber table
$f = new ARDeleteFilter(new EqualsCond(new ARFieldHandle('NewsletterSubscriber', 'email'), $email));
ActiveRecordModel::deleteRecordSet('NewsletterSubscriber', $f);
// add user to subscriber table
if ($user = User::getInstanceByEmail($email))
{
$s = NewsletterSubscriber::getNewInstanceByUser($user);
$s->isEnabled->set(false);
$s->save();
}
return new ActionResponse();
}
public function subscribe()
{
$email = $this->request->get('email');
if (!$this->user->isAnonymous() || User::getInstanceByEmail($email))
{
return new ActionRedirectResponse('newsletter', 'alreadySubscribed');
}
$validator = $this->getSubscribeValidator();
if (!$validator->isValid())
{
return new ActionRedirectResponse('index', 'index');
}
$instance = NewsletterSubscriber::getInstanceByEmail($email);
if (!$instance)
{
$instance = NewsletterSubscriber::getNewInstanceByEmail($email);
}
$instance->save();
$mail = new Email($this->application);
$mail->setTo($email);
$mail->setTemplate('newsletter/confirm');
$mail->set('subscriber', $instance->toArray());
$mail->set('email', $email);
$mail->send();
return new ActionResponse('subscriber', $instance->toArray());
}
public function alreadySubscribed()
{
return new ActionResponse();
}
public function confirm()
{
$instance = NewsletterSubscriber::getInstanceByEmail($this->request->get('email'));
if ($instance && ($instance->confirmationCode->get() == $this->request->get('code')))
{
$instance->isEnabled->set(true);
$instance->save();
}
return new ActionResponse('subscriber', $instance->toArray());
}
public function getSubscribeValidator()
{
$this->loadLanguageFile('Newsletter');
$validator = $this->getValidator("newsletterSubscribe", $this->getRequest());
$validator->addCheck('email', new IsNotEmptyCheck($this->translate('_err_email_empty')));
$validator->addCheck('email', new IsValidEmailCheck($this->translate('_err_invalid_email')));
return $validator;
}
}
?>