mirror of
https://github.com/silverstripe/silverstripe-reports
synced 2024-10-22 09:05:53 +00:00
Refactored newsletter system to put recipient selection and form-fieldset generation into the NewsletterType class, to allow for subclassing NewsletterType to create special system newsletters. [see oriwave2 for an example]
Removed a number of notice-level errors. Allowed for BOUNCE_EMAIL to not exist and bounce-handling to be disabled. git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/cms/trunk@40963 467b73ca-7a2a-4603-9d3b-597d59a354a9
This commit is contained in:
parent
281009b00f
commit
6c4a2e24aa
@ -17,9 +17,7 @@ class NewsletterEmailProcess extends BatchProcess {
|
|||||||
$this->nlType = $nlType;
|
$this->nlType = $nlType;
|
||||||
$this->messageID = $messageID;
|
$this->messageID = $messageID;
|
||||||
|
|
||||||
$groupID = $nlType->GroupID;
|
parent::__construct( $nlType->Recipients() );
|
||||||
|
|
||||||
parent::__construct( DataObject::get( 'Member', "`GroupID`='$groupID'", null, "INNER JOIN `Group_Members` ON `MemberID`=`Member`.`ID`" ) );
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,5 +51,76 @@ class NewsletterType extends DataObject {
|
|||||||
}
|
}
|
||||||
parent::onBeforeWrite();
|
parent::onBeforeWrite();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the fieldset to display in the administration section
|
||||||
|
*/
|
||||||
|
function getCMSFields() {
|
||||||
|
$group = null;
|
||||||
|
if($this->GroupID) {
|
||||||
|
$group = DataObject::get_one("Group", "ID = $this->GroupID");
|
||||||
|
}
|
||||||
|
|
||||||
|
$fields = new FieldSet(
|
||||||
|
new TextField("Title", "Newsletter Type"),
|
||||||
|
new TextField("FromEmail", "Send newsletters from"),
|
||||||
|
new TabSet("Root",
|
||||||
|
new Tab("Drafts",
|
||||||
|
$draftList = new NewsletterList("Draft", $this, "Draft")
|
||||||
|
),
|
||||||
|
new TabSet("Sent",
|
||||||
|
new Tab("Sent",
|
||||||
|
$sendList = new NewsletterList("Send", $this, "Send")
|
||||||
|
),
|
||||||
|
new Tab("Unsubscribed",
|
||||||
|
$unsubscribedList = new UnsubscribedList("Unsubscribed", $this)
|
||||||
|
),
|
||||||
|
new Tab("Bounced",
|
||||||
|
$bouncedList = new BouncedList("Bounced", $this )
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
if($this->GroupID) {
|
||||||
|
$fields->addFieldToTab('Root',
|
||||||
|
new TabSet("Recipients",
|
||||||
|
new Tab( "Recipients",
|
||||||
|
$recipients = new MemberTableField(
|
||||||
|
$this,
|
||||||
|
"Recipients",
|
||||||
|
$group
|
||||||
|
)
|
||||||
|
),
|
||||||
|
new Tab( "Import",
|
||||||
|
$importField = new RecipientImportField("ImportFile","Import from file", $group )
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
$recipients->setController($this);
|
||||||
|
$importField->setController($this);
|
||||||
|
$importField->setTypeID( $this->ID );
|
||||||
|
}
|
||||||
|
|
||||||
|
$fields->addFieldToTab('Root',
|
||||||
|
new Tab("Template",
|
||||||
|
$templates = new TemplateList("Template","Template", $this->Template, NewsletterAdmin::template_path())
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
$draftList->setController($this);
|
||||||
|
$sendList->setController($this);
|
||||||
|
|
||||||
|
$templates->setController($this);
|
||||||
|
$unsubscribedList->setController($this);
|
||||||
|
$bouncedList->setController($this);
|
||||||
|
|
||||||
|
$fields->push($idField = new HiddenField("ID"));
|
||||||
|
$fields->push( new HiddenField( "executeForm", "", "TypeEditForm" ) );
|
||||||
|
$idField->setValue($this->ID);
|
||||||
|
|
||||||
|
return $fields;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
@ -128,7 +128,7 @@ class NewsletterAdmin extends LeftAndMain {
|
|||||||
* Get the EditForm
|
* Get the EditForm
|
||||||
*/
|
*/
|
||||||
public function EditForm() {
|
public function EditForm() {
|
||||||
if((isset($_REQUEST['ID']) && $_REQUEST['Type'] == 'Newsletter') || isset($_REQUEST['action_savenewsletter'])) {
|
if((isset($_REQUEST['ID']) && isset($_REQUEST['Type']) && $_REQUEST['Type'] == 'Newsletter') || isset($_REQUEST['action_savenewsletter'])) {
|
||||||
return $this->NewsletterEditForm();
|
return $this->NewsletterEditForm();
|
||||||
} else {
|
} else {
|
||||||
return $this->TypeEditForm();
|
return $this->TypeEditForm();
|
||||||
@ -164,60 +164,9 @@ class NewsletterAdmin extends LeftAndMain {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(isset($mailType) && is_object($mailType) && $mailType->GroupID) {
|
if(isset($mailType) && $mailType) {
|
||||||
$group = DataObject::get_one("Group", "ID = $mailType->GroupID");
|
$fields = $mailType->getCMSFields();
|
||||||
}
|
|
||||||
//The function could be called from CMS with $mailType isset but with empty string.
|
|
||||||
if(isset($mailType)&&$mailType) {
|
|
||||||
$fields = new FieldSet(
|
|
||||||
new TextField("Title", "Newsletter Type"),
|
|
||||||
new TextField("FromEmail", "Send newsletters from"),
|
|
||||||
new TabSet("Root",
|
|
||||||
new Tab("Drafts",
|
|
||||||
$draftList = new NewsletterList("Draft", $mailType, "Draft")
|
|
||||||
),
|
|
||||||
new TabSet("Sent",
|
|
||||||
new Tab("Sent",
|
|
||||||
$sendList = new NewsletterList("Send", $mailType, "Send")
|
|
||||||
),
|
|
||||||
new Tab("Unsubscribed",
|
|
||||||
$unsubscribedList = new UnsubscribedList("Unsubscribed", $mailType)
|
|
||||||
),
|
|
||||||
new Tab("Bounced",
|
|
||||||
$bouncedList = new BouncedList("Bounced", $mailType )
|
|
||||||
)
|
|
||||||
),
|
|
||||||
new TabSet("Recipients",
|
|
||||||
new Tab( "Recipients",
|
|
||||||
$recipients = new MemberTableField(
|
|
||||||
$this,
|
|
||||||
"Recipients",
|
|
||||||
$group
|
|
||||||
)
|
|
||||||
),
|
|
||||||
new Tab( "Import",
|
|
||||||
$importField = new RecipientImportField("ImportFile","Import from file", $group )
|
|
||||||
)
|
|
||||||
),
|
|
||||||
new Tab("Template",
|
|
||||||
$templates = new TemplateList("Template","Template", $mailType->Template, self::template_path())
|
|
||||||
)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
$draftList->setController($this);
|
|
||||||
$sendList->setController($this);
|
|
||||||
$recipients->setController($this);
|
|
||||||
$templates->setController($this);
|
|
||||||
$importField->setController($this);
|
|
||||||
$unsubscribedList->setController($this);
|
|
||||||
$bouncedList->setController($this);
|
|
||||||
|
|
||||||
$importField->setTypeID( $id );
|
|
||||||
|
|
||||||
$fields->push($idField = new HiddenField("ID"));
|
|
||||||
$fields->push( new HiddenField( "executeForm", "", "TypeEditForm" ) );
|
|
||||||
$idField->setValue($id);
|
|
||||||
// $actions = new FieldSet(new FormAction('adddraft', 'Add Draft'));
|
// $actions = new FieldSet(new FormAction('adddraft', 'Add Draft'));
|
||||||
|
|
||||||
$actions = new FieldSet(new FormAction('save','Save'));
|
$actions = new FieldSet(new FormAction('save','Save'));
|
||||||
@ -234,57 +183,6 @@ class NewsletterAdmin extends LeftAndMain {
|
|||||||
return $form;
|
return $form;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
public function showmailinglist($params) {
|
|
||||||
return $this->showWithEditForm( $params, $this->getMailinglistEditForm( $params['ID'] ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getMailinglistEditForm($id) {
|
|
||||||
if(!is_numeric($id)) {
|
|
||||||
$id = $_SESSION['currentPage'];
|
|
||||||
}
|
|
||||||
if( is_a( $id, 'NewsletterType' ) ) {
|
|
||||||
$mailType = $id;
|
|
||||||
$id = $mailType->ID;
|
|
||||||
} else {
|
|
||||||
if($id && is_numeric($id)) {
|
|
||||||
$mailType = DataObject::get_by_id( 'NewsletterType', $id );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if($mailType->GroupID) {
|
|
||||||
$group = DataObject::get_one("Group", "ID = $mailType->GroupID");
|
|
||||||
}
|
|
||||||
|
|
||||||
if($mailType) {
|
|
||||||
$fields = new FieldSet(
|
|
||||||
new TabSet("Recipients",
|
|
||||||
new Tab( "Recipients",
|
|
||||||
$recipients = new MemberTableField(
|
|
||||||
$this,
|
|
||||||
"Recipients",
|
|
||||||
$group
|
|
||||||
)
|
|
||||||
),
|
|
||||||
new Tab( "Import",
|
|
||||||
$importField = new RecipientImportField("ImportFile","Import from file", $group )
|
|
||||||
)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
$recipients->setController($this);
|
|
||||||
$importField->setController($this);
|
|
||||||
$importField->setTypeID( $id );
|
|
||||||
|
|
||||||
$fields->push($idField = new HiddenField("ID"));
|
|
||||||
$fields->push( new HiddenField( "executeForm", "", "TypeEditForm" ) );
|
|
||||||
$idField->setValue($id);
|
|
||||||
|
|
||||||
$form = new Form($this, "EditForm", $fields, new FieldSet());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reloads the list of recipients via ajax
|
* Reloads the list of recipients via ajax
|
||||||
*/
|
*/
|
||||||
@ -369,7 +267,7 @@ class NewsletterAdmin extends LeftAndMain {
|
|||||||
else
|
else
|
||||||
$e->From = $from = Email::getAdminEmail();
|
$e->From = $from = Email::getAdminEmail();
|
||||||
|
|
||||||
$e->To = $_REQUEST['TestEmail'];
|
if(isset($_REQUEST['TestEmail'])) $e->To = $_REQUEST['TestEmail'];
|
||||||
$e->setTemplate( $nlType->Template );
|
$e->setTemplate( $nlType->Template );
|
||||||
|
|
||||||
$messageID = base64_encode( $newsletter->ID . '_' . date( 'd-m-Y H:i:s' ) );
|
$messageID = base64_encode( $newsletter->ID . '_' . date( 'd-m-Y H:i:s' ) );
|
||||||
@ -401,54 +299,16 @@ class NewsletterAdmin extends LeftAndMain {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static function sendToList( $subject, $body, $from, $newsletter, $nlType, $messageID = null ) {
|
static function sendToList( $subject, $body, $from, $newsletter, $nlType, $messageID = null ) {
|
||||||
|
|
||||||
$emailProcess = new NewsletterEmailProcess( $subject, $body, $from, $newsletter, $nlType, $messageID );
|
$emailProcess = new NewsletterEmailProcess( $subject, $body, $from, $newsletter, $nlType, $messageID );
|
||||||
return $emailProcess->start();
|
return $emailProcess->start();
|
||||||
|
|
||||||
/*$groupID = $nlType->GroupID;
|
|
||||||
|
|
||||||
$members = DataObject::get( 'Member', "`GroupID`='$groupID'", null, "INNER JOIN `Group_Members` ON `MemberID`=`Member`.`ID`" );
|
|
||||||
|
|
||||||
// user_error( $members, E_USER_ERROR );
|
|
||||||
|
|
||||||
if( !$members )
|
|
||||||
return "statusMessage('Unable to retrieve members from mailing list', 'bad' )";
|
|
||||||
|
|
||||||
foreach( $members as $member ) {
|
|
||||||
// check to see if the user has unsubscribed from the mailing list
|
|
||||||
$unsubscribeRecord = DataObject::get_one('Member_UnsubscribeRecord', "`MemberID`= {$member->ID} AND `NewsletterTypeID`={$nlType->ID}");
|
|
||||||
|
|
||||||
if( !$unsubscribeRecord ) {
|
|
||||||
$e = new Newsletter_Email($nlType);
|
|
||||||
$e->Body = $body;
|
|
||||||
$e->Subject =$subject;
|
|
||||||
$e->From = $from;
|
|
||||||
$e->setTemplate( $nlType->Template );
|
|
||||||
|
|
||||||
$e->populateTemplate( array( 'Member' => $member, 'FirstName' => $member->FirstName ) );
|
|
||||||
$this->sendToAddress( $e, $member->Email, $messageID );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if( $newsletter->Sent )
|
|
||||||
$resent = true;
|
|
||||||
|
|
||||||
$newsletter->Sent = 'now';
|
|
||||||
$newsletter->Status = 'Send';
|
|
||||||
$newsletter->write();
|
|
||||||
|
|
||||||
if( $resent )
|
|
||||||
return "resent_ok( '{$nlType->ID}', '{$newsletter->ID}' )";
|
|
||||||
else
|
|
||||||
return "draft_sent_ok( '{$nlType->ID}', '{$newsletter->ID}' )";*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function save($urlParams, $form) {
|
public function save($urlParams, $form) {
|
||||||
if( $_REQUEST['Type'] && $_REQUEST['Type'] == 'Newsletter' )
|
if( isset($_REQUEST['Type']) && $_REQUEST['Type'] == 'Newsletter' )
|
||||||
return $this->savenewsletter( $urlParams, $form );
|
return $this->savenewsletter( $urlParams, $form );
|
||||||
|
|
||||||
$id = $_REQUEST['ID'];
|
$id = $_REQUEST['ID'];
|
||||||
$record = DataObject::get_one('NewsletterType', "`$className`.ID = $id");
|
$record = DataObject::get_one('NewsletterType', "`NewsletterType`.ID = $id");
|
||||||
|
|
||||||
// Is the template attached to the type, or the newsletter itself?
|
// Is the template attached to the type, or the newsletter itself?
|
||||||
|
|
||||||
@ -464,9 +324,8 @@ class NewsletterAdmin extends LeftAndMain {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function savenewsletter($urlParams, $form) {
|
public function savenewsletter($urlParams, $form) {
|
||||||
|
|
||||||
$id = $_REQUEST['ID'];
|
$id = $_REQUEST['ID'];
|
||||||
$record = DataObject::get_one('Newsletter', "`$className`.ID = $id");
|
$record = DataObject::get_one('Newsletter', "`Newsletter`.ID = $id");
|
||||||
|
|
||||||
// Is the template attached to the type, or the newsletter itself?
|
// Is the template attached to the type, or the newsletter itself?
|
||||||
$type = $record->getNewsletterType();
|
$type = $record->getNewsletterType();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user