diff --git a/_config.php b/_config.php index f2abe24..9f3f73d 100644 --- a/_config.php +++ b/_config.php @@ -1,8 +1,11 @@ 'ConfirmNewsletterSignup' +)); + ?> diff --git a/code/BlogHolder.php b/code/BlogHolder.php index 7a481b5..04b6122 100644 --- a/code/BlogHolder.php +++ b/code/BlogHolder.php @@ -217,6 +217,10 @@ class BlogHolder_Controller extends Page_Controller { return $output; } + function NewsletterSignupForm() { + return new NewsletterSignupForm($this, 'NewsletterSignupForm'); + } + /** * Get the rss fee for this blog holder's entries */ diff --git a/code/BlogRole.php b/code/BlogRole.php new file mode 100755 index 0000000..536cf39 --- /dev/null +++ b/code/BlogRole.php @@ -0,0 +1,15 @@ + array( + 'Hash' => 'Varchar(32)' + ), + ); + } + +} + +?> diff --git a/code/ConfirmNewsletterSignup.php b/code/ConfirmNewsletterSignup.php new file mode 100755 index 0000000..6de0157 --- /dev/null +++ b/code/ConfirmNewsletterSignup.php @@ -0,0 +1,68 @@ +Error: No member identification was given.

"; + } else { + // Check if a member exists with the hash given from ID param. + if(!$member = DataObject::get_one('Member', "Hash = '$hash'")) { + $content = "

Error: Member does not exist by given parameters.

"; + } else { + // Check if a group was passed in and exists. + if($groupCode = NewsletterSignupForm::get_group_code()) { + // Check if the member is in this group. + if($group = DataObject::get_one('Group', "Code = '$groupCode'")) { + if($member->inGroup($group->ID)) { + $content = "

$member->Email is already signed up.

"; + } else { + // Member is not in the group, so add the member to the group. + $member->Groups()->add($group); + + // Send an email welcoming the member. + $email = new ConfirmNewsletterSignup_Email($member); + $email->to = $member->Email; + $email->from = Email::getAdminEmail(); + $email->subject = 'Welcome to the mailing list'; + $email->populateTemplate(array( + 'Member' => $member + )); + $email->send(); + + $content = "

$member->Email has been signed up successfully. A welcome email has been sent.

"; + } + } + } + } + } + + // Render these variables into the template. Pass in the message from previous logic. + $this->customise(array( + 'Content' => $content + )); + + // Render with a chosen template. + return $this->renderWith(array( + 'ConfirmNewsletterSignup_member', + 'Page' + )); + } + +} + +class ConfirmNewsletterSignup_Email extends Email_Template { + + protected $ss_template = 'ConfirmNewsletterSignup_Email'; + +} + +?> \ No newline at end of file diff --git a/code/NewsletterSignupForm.php b/code/NewsletterSignupForm.php new file mode 100755 index 0000000..0280459 --- /dev/null +++ b/code/NewsletterSignupForm.php @@ -0,0 +1,99 @@ +inGroup($group->ID)) { + $form->sessionMessage('You are already subscribed.', 'warning'); + Director::redirectBack(); + } + } + } + } else { + // Create a new member, as this is a new subscriber. + $member = new Member(); + } + + // Save the data into the member. + $form->saveInto($member); + + // Hash the email of the subscriber and microtime, write the member. + $member->Hash = md5(microtime() . $member->Email); + $member->write(); + + // Create an array with data to populate in the email. + $populateArray = array(); + $populateArray['Member'] = $member; + // If there is a group, populate a confirm link. + if(self::get_group_code()) { + $populateArray['ConfirmLink'] = Director::absoluteBaseURL() . 'confirm-subscription/member/' . $member->Hash; + } + + // Send off a confirmation email to the subscriber. + $email = new NewsletterSignupForm_Email(); + $email->to = $member->Email; + $email->from = Email::getAdminEmail(); + $email->subject = 'Thank you for subscribing'; + $email->populateTemplate($populateArray); + $email->send(); + + // Display message, and redirect back. + $form->sessionMessage('You have been sent an email to confirm your subscription.', 'good'); + Director::redirectBack(); + } +} + +class NewsletterSignupForm_Email extends Email_Template { + + protected $ss_template = 'NewsletterSignupForm_Email'; + +} + +?> \ No newline at end of file diff --git a/templates/email/ConfirmNewsletterSignup_Email.ss b/templates/email/ConfirmNewsletterSignup_Email.ss new file mode 100755 index 0000000..fcdd44c --- /dev/null +++ b/templates/email/ConfirmNewsletterSignup_Email.ss @@ -0,0 +1,14 @@ + + + + $Subject + + +

$Subject

+ +

Hello $Member.FirstName,

+ +

Welcome to the mailing list.

+ + \ No newline at end of file diff --git a/templates/email/NewsletterSignupForm_Email.ss b/templates/email/NewsletterSignupForm_Email.ss new file mode 100755 index 0000000..3fc45a7 --- /dev/null +++ b/templates/email/NewsletterSignupForm_Email.ss @@ -0,0 +1,19 @@ + + + + $Subject + + +

$Subject

+ +

Hello $Member.FirstName,

+ +

This email confirms you signed up to the site.

+ + <% if ConfirmLink %> +

Please visit this link to confirm you would like to sign up:

+

$ConfirmLink

+ <% end_if %> + + \ No newline at end of file