mirror of
https://github.com/silverstripe/silverstripe-cms
synced 2024-10-22 08:05:56 +02:00
66c3db1e8e
git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/cms/trunk@50107 467b73ca-7a2a-4603-9d3b-597d59a354a9
138 lines
4.3 KiB
PHP
Executable File
138 lines
4.3 KiB
PHP
Executable File
<?php
|
|
|
|
/**
|
|
* @package cms
|
|
* @subpackage newsletter
|
|
*/
|
|
|
|
/**
|
|
* Represents a type of newsletter, for example the weekly products update.
|
|
* The NewsletterType is associated with a recipient list and a bunch of Newsletter objects, which are each either Sent or Draft.
|
|
* @package cms
|
|
* @subpackage newsletter
|
|
*/
|
|
class NewsletterType extends DataObject {
|
|
|
|
static $db = array(
|
|
"Title" => "Varchar",
|
|
"Template" => "Varchar",
|
|
"FromEmail" => "Varchar",
|
|
"Sent" => "Datetime"
|
|
);
|
|
static $has_one = array(
|
|
"Parent" => "SiteTree",
|
|
"Group" => "Group",
|
|
);
|
|
static $has_many = array(
|
|
"Newsletters" => "Newsletter",
|
|
);
|
|
|
|
function DraftNewsletters() {
|
|
return DataObject::get("Newsletter","ParentID={$this->ID} AND Status ='Draft'");
|
|
}
|
|
|
|
function SentNewsletters() {
|
|
return DataObject::get("Newsletter","ParentID={$this->ID} AND Status ='Send'");
|
|
}
|
|
|
|
function Recipients() {
|
|
return DataObject::get("Member", "Group_Members.GroupID = {$this->GroupID}", "", "JOIN Group_Members on Group_Members.MemberID = Member.ID");
|
|
}
|
|
|
|
function delete() {
|
|
foreach( $this->Newsletters() as $newsletter )
|
|
$newsletter->delete();
|
|
|
|
parent::delete();
|
|
}
|
|
|
|
/**
|
|
* Updates the group so the security section is also in sync with
|
|
* the curent newsletters.
|
|
*/
|
|
function onBeforeWrite(){
|
|
if($this->ID){
|
|
$group = $this->Group();
|
|
if($group->Title != "$this->Title"){
|
|
$group->Title = _t('NewsletterType.MAILINGLIST', 'Mailing List:').' '. $this->Title;
|
|
// Otherwise the code would have mailing list in it too :-(
|
|
$group->Code = SiteTree::generateURLSegment($this->Title);
|
|
$group->write();
|
|
}
|
|
}
|
|
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", _t('NewsletterType.NEWSLETTERTYPE', 'Newsletter Type')),
|
|
new TextField("FromEmail", _t('NewsletterType.SENDFROM', 'Send newsletters from')),
|
|
new TabSet("Root",
|
|
new Tab(_t('NewsletterType.DRAFTS', 'Drafts'),
|
|
$draftList = new NewsletterList("Draft", $this, _t('NewsletterType.DRAFT', 'Draft'))
|
|
),
|
|
new TabSet('Sent',
|
|
new Tab(_t('NewsletterType.SENT', 'Sent'),
|
|
$sendList = new NewsletterList("Send", $this, _t('NewsletterType.SEND', 'Send'))
|
|
),
|
|
new Tab(_t('NewsletterType.UNSUBSCRIBED', 'Unsubscribed'),
|
|
$unsubscribedList = new UnsubscribedList("Unsubscribed", $this)
|
|
),
|
|
new Tab(_t('NewsletterType.BOUNCED', 'Bounced'),
|
|
$bouncedList = new BouncedList("Bounced", $this )
|
|
)
|
|
)
|
|
)
|
|
);
|
|
|
|
if($this->GroupID) {
|
|
$fields->addFieldToTab('Root',
|
|
new TabSet("Recipients",
|
|
new Tab( _t('NewsletterType.RECIPIENTS', 'Recipients'),
|
|
$recipients = new MemberTableField(
|
|
$this,
|
|
"Recipients",
|
|
$group
|
|
)
|
|
),
|
|
new Tab( _t('NewsletterType.IMPORT', 'Import'),
|
|
$importField = new RecipientImportField("ImportFile", _t('NewsletterType.IMPORTFROM', 'Import from file'), $group )
|
|
)
|
|
)
|
|
);
|
|
|
|
$recipients->setController($this);
|
|
$importField->setController($this);
|
|
$importField->setTypeID( $this->ID );
|
|
}
|
|
|
|
$fields->addFieldToTab('Root',
|
|
new Tab(_t('NewsletterType.TEMPLATE', '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;
|
|
}
|
|
}
|
|
?>
|