From 78a0f0a00650c9a5e3c4d4cadcacc409919067ea Mon Sep 17 00:00:00 2001 From: deva Date: Fri, 26 Feb 2010 16:12:36 +0000 Subject: Add pressrelease module. Make lots of codesharing with the newsletter module. --- utils/mail.php | 68 +++++++++++++++ utils/modules.php | 1 + utils/modules/newsletter.php | 66 +-------------- utils/modules/pressrelease.php | 183 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 256 insertions(+), 62 deletions(-) create mode 100644 utils/modules/pressrelease.php diff --git a/utils/mail.php b/utils/mail.php index 866bad4..e681d21 100644 --- a/utils/mail.php +++ b/utils/mail.php @@ -22,4 +22,72 @@ class Email { } } +class _Mailinglist { + public $mailinglist = array(); + public $subj_prefix; + public $sender; + public $replyto; + public $footer; + + public function add($email) { + $key = $email->email; + if(array_key_exists($key, $this->mailinglist)) return false; + $this->mailinglist[$key] = $email; + return true; + } + + public function remove($email) { + if(array_key_exists($email, $this->mailinglist)) { + unset($this->mailinglist[$email]); + return true; + } + return false; + } + + public function postSingle($email, $subject, $message) + { + $subject = "[".$this->subj_prefix."] " . $subject; + $message .= "\n\n".$this->footer; + $email->send($subject, $message, $this->sender, $this->replyto); + } + + public function post($subject, $message) + { + $sz = sizeof($this->mailinglist); + + echo "
Sending ". $sz ." mails
\n<"; + ob_flush(); + flush(); + + $num = 0; + $lvl = 0; + $steps = floor($sz / 10) + 1; + + foreach($this->mailinglist as $email) { + + $this->postSingle($email, $ubject, $message); + + $pct = $num / $sz * 100; + if($pct >= $lvl) { + printf("%.0f%%", $lvl); + $lvl += 100/$steps; + } else { + echo "."; + } + ob_flush(); + flush(); + $num++; + } + echo "[100%]>\n
done
\n"; + echo "[CLOSE]"; + echo "
\n"; + ob_flush(); + flush(); + } + + public function _Mailinglist() + { + } +} + ?> \ No newline at end of file diff --git a/utils/modules.php b/utils/modules.php index c8955b8..36b9dd3 100644 --- a/utils/modules.php +++ b/utils/modules.php @@ -33,6 +33,7 @@ function loadAllModules() loadModule("pages"); loadModule("downloads"); loadModule("newsletter"); + loadModule("pressrelease"); } function getModuleParams($code) diff --git a/utils/modules/newsletter.php b/utils/modules/newsletter.php index ef172e0..5ca19bf 100644 --- a/utils/modules/newsletter.php +++ b/utils/modules/newsletter.php @@ -4,30 +4,10 @@ global $UTIL_DIR; include_once($UTIL_DIR . "/mail.php"); -class Mailinglist { +class Mailinglist extends _Mailinglist { private $file; - private $mailinglist = array(); - public $subj_prefix; - public $sender; - public $replyto; - public $footer; public $unsubscribe_url; - public function add($email) { - $key = $email->email; - if(array_key_exists($key, $this->mailinglist)) return false; - $this->mailinglist[$key] = $email; - return true; - } - - public function remove($email) { - if(array_key_exists($email, $this->mailinglist)) { - unset($this->mailinglist[$email]); - return true; - } - return false; - } - public function write() { $fp = fopen($this->file, "w"); @@ -103,6 +83,9 @@ class Mailinglist { return $str; } + /** + * Overrides the postSingle method in the _Mailinglist class. + */ public function postSingle($email, $subject, $message) { $subject = "[".$this->subj_prefix."] " . $subject; @@ -114,47 +97,6 @@ class Mailinglist { $email->send($subject, $message, $this->sender, $this->replyto); } - public function post($subject, $message) - { - $subject = "[".$this->subject_prefix."] " . $subject; - - $message .= "\n\n".$this->footer; - $message .= "\n\nTo stop receiving this newsletter, click the following link: ". - $this->unsubscribe_url."&action=unsubscribe&email=". $this->email . "\n"; - - - $sz = sizeof($this->mailinglist); - - echo "
Sending ". $sz ." mails
\n<"; - ob_flush(); - flush(); - - $num = 0; - $lvl = 0; - $steps = floor($sz / 10) + 1; - - foreach($this->mailinglist as $email) { - - $this->postSingle($email, $ubject, $message); - - $pct = $num / $sz * 100; - if($pct >= $lvl) { - printf("%.0f%%", $lvl); - $lvl += 100/$steps; - } else { - echo "."; - } - ob_flush(); - flush(); - $num++; - } - echo "[100%]>\n
done
\n"; - echo "[CLOSE]"; - echo "
\n"; - ob_flush(); - flush(); - } - public function Mailinglist($file) { $this->file = $file; 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 @@ +file, "w"); + fwrite($fp, "\n"); + + fwrite($fp, "subj_prefix . "\"\n"); + fwrite($fp, " sender=\"" . $this->sender . "\"\n"); + fwrite($fp, " replyto=\"" . $this->replyto . "\">\n"); + fwrite($fp, "
" . $this->footer . "
\n"); + foreach($this->mailinglist as $email) { + fwrite($fp, " email, ENT_QUOTES, "UTF-8") . "\"\n"); + fwrite($fp, " url=\"" . $email->url . "\">\n"); + fwrite($fp, " name=\"" . $email->name . "\">\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'); + $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 "
\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->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 -- cgit v1.2.3