file, "w");
fwrite($fp, "\n");
fwrite($fp, "subj_prefix) . "\"\n");
fwrite($fp, " sender=\"" . xmlenc($this->sender) . "\"\n");
fwrite($fp, " replyto=\"" . xmlenc($this->replyto) . "\"\n");
fwrite($fp, " unsubscribe_url=\"" . xmlenc($this->unsubscribe_url) . "\">\n");
fwrite($fp, " " . xmlenc($this->footer) . " \n");
foreach($this->mailinglist as $email) {
fwrite($fp, " email) . "\"\n");
fwrite($fp, " timestamp=\"" . xmlenc($email->timestamp) . "\">\n");
fwrite($fp, " \n");
}
fwrite($fp, " \n");
fclose($fp);
}
private function read()
{
$dom = new DomDocument;
$dom->preserveWhiteSpace = FALSE;
$dom->load($this->file);
$nl = $dom->documentElement;
$this->subj_prefix = $nl->getAttribute('subj_prefix');
$this->sender = $nl->getAttribute('sender');
$this->replyto = $nl->getAttribute('replyto');
$this->unsubscribe_url = $nl->getAttribute('unsubscribe_url');
$footers = $dom->getElementsByTagName('footer');
if($footers) {
foreach($footers as $f) {
$this->footer = $f->textContent;
}
}
$params = $dom->getElementsByTagName('email');
foreach ($params as $param) {
$email = new Email($param->getAttribute('email'),
$param->getAttribute('timestamp'));
$this->add($email);
}
}
public function subscribe($emailaddr)
{
$str = "";
// TODO: Make more elaborate check if input as an email address.
if($emailaddr == "your@email.here" || $emailaddr == "") return "";
$email = new EMail($emailaddr, time());
if($this->add($email)) {
$this->write();
$str .= "
The email: " .
$emailaddr . " has now been subscribed.
";
} else {
$str .= "The email: " .
$emailaddr . " is already subscribed.
";
}
return $str;
}
public function unsubscribe($emailaddr)
{
$str = "";
if($this->remove($emailaddr)) {
$this->write();
$str .= "The email: " .
$emailaddr . " has now been unsubscribed.
";
} else {
$str .= "The email: " .
$emailaddr . " is not subscribed.
";
}
return $str;
}
/**
* Overrides the postSingle method in the _Mailinglist class.
*/
public function postSingle($email, $subject, $message)
{
$subject = "[".$this->subj_prefix."] " . $subject;
$message .= "\n\n".$this->footer;
$message .= "\n\nTo stop receiving this newsletter, click the following link: ".
$this->unsubscribe_url."&action=unsubscribe&email=". $email->email . "\n";
$email->send($subject, $message, $this->sender, $this->replyto);
}
public function Mailinglist($file)
{
$this->file = $file;
if(file_exists($file)) $this->read();
}
}
class Newsletter {
private $file;
private $mailinglist;
// Admin config
public $admin_title = "Newsletter";
public $admin_submodules = array("Send newsletter" => "send",
"Config" => "config",
"View list" => "view");
public function admin_send($action, $vars)
{
global $UID, $ICONS_DIR;
switch($action) {
case "send":
$this->mailinglist->post($vars["subject"], $vars["content"]);
break;
case "preview":
$testmail = new Email($vars["testaddr"], 0);
echo "\n";
$this->mailinglist->postSingle($testmail, $vars["subject"], $vars["content"]);
echo "A test mail has been sent to ".$vars["testaddr"]."
\n";
echo "Looking ok?
";
$form = new Form("send");
$form->addWidget(new Hidden($vars));
$form->addWidget(new Button("yes"));
$form->render();
$form = new Form("retry");
$form->addWidget(new Hidden($vars));
$form->addWidget(new Button("no"));
$form->render();
break;
case "retry":
$testaddr = $vars["testaddr"];
$subject = $vars["subject"];
$content = $vars["content"];
default:
$form = new Form("preview");
$form->addWidget(new LineEdit("Test address:", "testaddr", $testaddr));
$form->addWidget(new LineEdit("Subject:", "subject", $subject));
$form->addWidget(new TextEdit("Content:", "content", $content));
$form->addWidget(new Button("Send"));
$form->render();
break;
}
}
public function admin_config($action, $vars)
{
switch($action) {
case "update":
$this->mailinglist->subj_prefix = $vars["subj_prefix"];
$this->mailinglist->sender = $vars["sender"];
$this->mailinglist->replyto = $vars["replyto"];
$this->mailinglist->footer = $vars["footer"];
$this->mailinglist->unsubscribe_url = $vars["unsubscribe_url"];
$this->mailinglist->write();
break;
default:
$form = new Form("update");
//http://www.executionroom.com/?page=news
$form->addWidget(new LineEdit("Subject prefix:", "subj_prefix", $this->mailinglist->subj_prefix));
$form->addWidget(new LineEdit("Sender:", "sender", $this->mailinglist->sender));
$form->addWidget(new LineEdit("Reply to:", "replyto", $this->mailinglist->replyto));
$form->addWidget(new TextEdit("Footer:", "footer", $this->mailinglist->footer));
$form->addWidget(new LineEdit("Unsubscribe URL::", "unsubscribe_url", $this->mailinglist->unsubscribe_url));
$form->addWidget(new Button("Update"));
$form->render();
break;
}
}
public function admin_view($action, $vars)
{
switch($action) {
default:
echo "There are " . sizeof($this->mailinglist->mailinglist) . " receivers:
\n";
echo "\n";
foreach($this->mailinglist->mailinglist as $m) {
echo " ".xmlenc($m->email)." (added ".date("M jS, Y - H:i:s", $m->timestamp).") \n";
}
echo " \n";
break;
}
}
public function admin($sub, $action, $vars)
{
switch($sub) {
case "send":
$this->admin_send($action, $vars);
break;
case "config":
$this->admin_config($action, $vars);
break;
case "view":
$this->admin_view($action, $vars);
break;
}
}
public function run($params)
{
global $page;
global $newsletter_action;
global $_POST, $GLOBALS;
$email = $_POST["newsletter_email"]; // get from lineedit.
if($email == "") $email = $GLOBALS["newsletter_email"]; // get from link.
$str = "";
$str .= "\n";
$str .= "
\n";
$str .= "
\n";
if($newsletter_action == "subscribe") {
$str .= $this->mailinglist->subscribe($email);
}
if($newsletter_action == "unsubscribe") {
$str .= $this->mailinglist->unsubscribe($email);
}
return $str;
}
private function read()
{
$this->mailinglist = new Mailinglist($this->file);
}
public function Newsletter($file)
{
$this->file = $file;
if(file_exists($file)) $this->read();
}
}
function newsletter_init()
{
global $DATA_DIR;
return new Newsletter($DATA_DIR . "/newsletter.xml");
}
?>