From 2c6edcf0df3246ca29bafcc20137e0407d6a5c86 Mon Sep 17 00:00:00 2001 From: Sean Harvey Date: Sat, 15 Dec 2007 22:47:20 +0000 Subject: [PATCH] Newsletter changes for blogholders --- code/BlogHolder.php | 16 ++++++++++- code/BlogRole.php | 3 ++- code/ConfirmNewsletterSignup.php | 4 +-- code/NewsletterSignupForm.php | 46 +++++++++++++++++--------------- 4 files changed, 43 insertions(+), 26 deletions(-) diff --git a/code/BlogHolder.php b/code/BlogHolder.php index 04b6122..c428f6c 100644 --- a/code/BlogHolder.php +++ b/code/BlogHolder.php @@ -16,7 +16,8 @@ class BlogHolder extends Page { ); static $has_one = array( - "SideBar" => "WidgetArea" + "SideBar" => "WidgetArea", + 'Newsletter' => 'NewsletterType' ); static $allowed_children = array( @@ -27,10 +28,23 @@ class BlogHolder extends Page { $fields = parent::getCMSFields(); $fields->removeFieldFromTab("Root.Content.Main","Content"); $fields->addFieldToTab("Root.Content.Widgets", new WidgetAreaEditor("SideBar")); + + // Add a dropdown to display all newsletter types. + if($groups = $this->getNewsletters()) { + $groupsMap = $groups->toDropdownMap('ID', 'Title'); + $fields->addFieldToTab('Root.Content.Main', new DropdownField('NewsletterID', 'Subscription newsletter type', $groupsMap, '', '', '(Select one)')); + } return $fields; } + /** + * Get all newsletter type instances. + */ + function getNewsletters() { + return DataObject::get('NewsletterType'); + } + /** * The DataObject of blog entries */ diff --git a/code/BlogRole.php b/code/BlogRole.php index 536cf39..8e7cc4d 100755 --- a/code/BlogRole.php +++ b/code/BlogRole.php @@ -5,7 +5,8 @@ class BlogRole extends DataObjectDecorator { function extraDBFields() { return array( 'db' => array( - 'Hash' => 'Varchar(32)' + 'Hash' => 'Varchar(32)', + 'GroupCode' => 'Varchar(255)' ), ); } diff --git a/code/ConfirmNewsletterSignup.php b/code/ConfirmNewsletterSignup.php index 6de0157..e80d977 100755 --- a/code/ConfirmNewsletterSignup.php +++ b/code/ConfirmNewsletterSignup.php @@ -19,7 +19,7 @@ class ConfirmNewsletterSignup extends Controller { $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()) { + if($groupCode = $member->GroupCode) { // Check if the member is in this group. if($group = DataObject::get_one('Group', "Code = '$groupCode'")) { if($member->inGroup($group->ID)) { @@ -29,7 +29,7 @@ class ConfirmNewsletterSignup extends Controller { $member->Groups()->add($group); // Send an email welcoming the member. - $email = new ConfirmNewsletterSignup_Email($member); + $email = new ConfirmNewsletterSignup_Email(); $email->to = $member->Email; $email->from = Email::getAdminEmail(); $email->subject = 'Welcome to the mailing list'; diff --git a/code/NewsletterSignupForm.php b/code/NewsletterSignupForm.php index 0280459..b6492c1 100755 --- a/code/NewsletterSignupForm.php +++ b/code/NewsletterSignupForm.php @@ -3,25 +3,20 @@ class NewsletterSignupForm extends Form { /** - * Code of a group. + * Gets a NewsletterType which is associated with the BlogHolder, the + * controller of this sign up form. It then uses the relationship getter + * to find the Group of a NewsletterType. */ - protected static $groupCode; - - /** - * Set a group for sign up. Must be a code value of an instance of Group. - * Members who sign up will be added to this group. - */ - public static function set_group_code($code) { - self::$groupCode = $code; + function get_group_code() { + if($controller = $this->controller) { + if($controller->ClassName == 'BlogHolder') { + if($controller->Newsletter()) { + return $controller->Newsletter()->Group()->Code; + } + } + } } - /** - * Get the group used for sign ups. - */ - public static function get_group_code() { - return self::$groupCode; - } - function __construct($controller, $name) { $fields = new FieldSet( @@ -31,10 +26,9 @@ class NewsletterSignupForm extends Form { ); $validator = new RequiredFields(array( - 'FirstName', - 'Email' - ) - ); + 'FirstName', + 'Email' + )); $actions = new FieldSet( new FormAction('subscribe', 'Subscribe') @@ -48,7 +42,7 @@ class NewsletterSignupForm extends Form { // Check if there is a current member of given email in data. Check if in group. if($member = DataObject::get_one('Member', "`Member`.`Email` = '$SQL_email'")) { - if($groupCode = self::get_group_code()) { + if($groupCode = $this->get_group_code()) { if($group = DataObject::get_one('Group', "Code = '$groupCode'")) { if($member->inGroup($group->ID)) { $form->sessionMessage('You are already subscribed.', 'warning'); @@ -66,13 +60,21 @@ class NewsletterSignupForm extends Form { // Hash the email of the subscriber and microtime, write the member. $member->Hash = md5(microtime() . $member->Email); + + // If there is a group code found, add it to a field on the member for + // later use (when a member confirms to be added). + if($groupCode = $this->get_group_code()) { + $member->GroupCode = $groupCode; + } + + // Write the member to the database. $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()) { + if($this->get_group_code()) { $populateArray['ConfirmLink'] = Director::absoluteBaseURL() . 'confirm-subscription/member/' . $member->Hash; }