summaryrefslogtreecommitdiff
path: root/utils/modules/pressrelease.php
diff options
context:
space:
mode:
Diffstat (limited to 'utils/modules/pressrelease.php')
-rw-r--r--utils/modules/pressrelease.php183
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