diff options
Diffstat (limited to 'utils/modules/pressrelease.php')
-rw-r--r-- | utils/modules/pressrelease.php | 183 |
1 files changed, 183 insertions, 0 deletions
diff --git a/utils/modules/pressrelease.php b/utils/modules/pressrelease.php new file mode 100644 index 0000000..de792d2 --- /dev/null +++ b/utils/modules/pressrelease.php @@ -0,0 +1,183 @@ +<?php /* -*- mode: php; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ + +global $UTIL_DIR; + +include_once($UTIL_DIR . "/mail.php"); + +class PEmail extends Email { + public $url; + public $title; +}; + +class PMailinglist extends _Mailinglist { + private $file; + + public function write() + { + $fp = fopen($this->file, "w"); + fwrite($fp, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); + + fwrite($fp, "<pressrelease subj_prefix=\"" . $this->subj_prefix . "\"\n"); + fwrite($fp, " sender=\"" . $this->sender . "\"\n"); + fwrite($fp, " replyto=\"" . $this->replyto . "\">\n"); + fwrite($fp, " <footer>" . $this->footer . "</footer>\n"); + foreach($this->mailinglist as $email) { + fwrite($fp, " <email email=\"" . + htmlspecialchars($email->email, ENT_QUOTES, "UTF-8") . "\"\n"); + fwrite($fp, " url=\"" . $email->url . "\">\n"); + fwrite($fp, " name=\"" . $email->name . "\">\n"); + fwrite($fp, " </email>\n"); + } + fwrite($fp, "</pressrelease>\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'); + $footers = $dom->getElementsByTagName('footer'); + if($footers) { + foreach($footers as $f) { + $this->footer = $f->textContent; + } + } + + $params = $dom->getElementsByTagName('email'); + + $cnt = 1; + foreach ($params as $param) { + $email = new PEmail($param->getAttribute('email'), $cnt++); + $email->url = $param->getAttribute('url'); + $email->name = $param->getAttribute('name'); + $this->add($email); + } + } + + public function PMailinglist($file) + { + $this->file = $file; + if(file_exists($this->file)) $this->read(); + } +} + +class PressRelease { + + private $file; + private $mailinglist; + + // Admin config + public $admin_title = "Press release"; + public $admin_submodules = array("Send pressrelease" => "send", + "Config" => "config"); + + 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 PEmail($vars["testaddr"], 0); + echo "<div class=\"preview\">\n"; + $this->mailinglist->postSingle($testmail, $vars["subject"], $vars["content"]); + echo "A test mail has been sent to ".$vars["testaddr"]."</div>\n"; + echo "<p>Looking ok?</p>"; + $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->write(); + break; + + default: + $form = new Form("update"); + $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 Button("Update")); + $form->render(); + 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; + } + } + + public function run($params) + { + return ""; + } + + private function read() + { + $this->mailinglist = new PMailinglist($this->file); + } + + public function PressRelease($file) + { + $this->file = $file; + if(file_exists($file)) $this->read(); + } +} + + +function pressrelease_init() +{ + global $DATA_DIR; + return new PressRelease($DATA_DIR . "/pressrelease.xml"); +} + +?>
\ No newline at end of file |