summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordeva <deva>2010-02-13 15:28:38 +0000
committerdeva <deva>2010-02-13 15:28:38 +0000
commit6d14d895fb7e17b4adfd6111bd6591776dba6188 (patch)
treeeb884b8f46d46539455a7f0bbccec3b6d37dbd01
parente1f9098f57b7996cfa5c22bef8e8ebc887f9a6bc (diff)
Viewer parts of a newsletter module (the functionality to actually send mails are still to be made.)
-rw-r--r--utils/modules/newsletter.php232
1 files changed, 232 insertions, 0 deletions
diff --git a/utils/modules/newsletter.php b/utils/modules/newsletter.php
new file mode 100644
index 0000000..528b0a5
--- /dev/null
+++ b/utils/modules/newsletter.php
@@ -0,0 +1,232 @@
+<?php
+
+/**
+ * CONFIG
+ */
+$subject_prefix = "DIE Newsletter";
+$sender = "DIE <info@executionroom.com>";
+$replyto = $sender;
+$footer = "
+
+Stay Brutal!
+// DIE
+http://www.executionroom.com
+info@executionroom.com
+";
+
+class Email {
+ public $timestamp;
+ public $email;
+
+ public function Email($email, $timestamp)
+ {
+ $this->email = $email;
+ $this->timestamp = $timestamp;
+ }
+
+ function send($subject, $message) {
+ global $subject_prefix;
+ global $sender;
+ global $replyto;
+ global $footer;
+
+ $message .= $footer;
+ $message .= "\nTo stop receiving this newsletter, click the following link: http://www.executionroom.com/?page=news&action=unsubscribe&email=". $this->email . "\n";
+ $headers = "From: " . $sender . "\r\n";
+ $headers .= "Reply-To: " . $replyto . "\r\n";
+ $headers .= "Content-Type: text/plain; charset=iso-8859-1\r\n";
+ $headers .= "X-Mailer: PHP/" . phpversion();
+ $subject = "[".$subject_prefix."] " . $subject;
+
+ $ret = mail($this->email, $subject, $message, $headers);
+ if(!$ret) echo "Fail(".$this->email.")";
+
+ //usleep(100000);
+ }
+}
+
+class Mailinglist {
+ private $file;
+ private $mailinglist = array();
+
+ 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");
+ fwrite($fp, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
+
+ fwrite($fp, "<mailinglist>\n");
+ foreach($this->mailinglist as $email) {
+ fwrite($fp, " <email email=\"" .
+ htmlspecialchars($email->email, ENT_QUOTES, "UTF-8") . "\"\n");
+ fwrite($fp, " timestamp=\"" . $email->timestamp . "\">\n");
+ fwrite($fp, " </email>\n");
+ }
+ fwrite($fp, "</mailinglist>\n");
+
+ fclose($fp);
+ }
+
+ private function read()
+ {
+ $dom = new DomDocument;
+ $dom->preserveWhiteSpace = FALSE;
+ $dom->load($this->file);
+ $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 = "";
+ if($emailaddr == "your@email.here") return "";
+ $email = new EMail($emailaddr, time());
+ if($this->add($email)) {
+ $this->write();
+ $str .= "<div class=\"newsletter_message\">The email: " . $emailaddr . " has now been subscribed.</div>";
+ } else {
+ $str .= "<div class=\"newsletter_message\">The email: " . $emailaddr . " is already subscribed.</div>";
+ }
+ return $str;
+ }
+
+ public function unsubscribe($emailaddr)
+ {
+ $str = "";
+ if($this->remove($emailaddr)) {
+ $this->write();
+ $str .= "<div class=\"newsletter_message\">The email: " . $emailaddr . " has now been unsubscribed.</div>";
+ } else {
+ $str .= "<div class=\"newsletter_message\">The email: " . $emailaddr . " is not subscribed.</div>";
+ }
+ return $str;
+ }
+
+ public function post($subject, $message)
+ {
+ $sz = sizeof($this->mailinglist);
+
+ echo "<div style=\"text-align: center; padding-top: 120px; padding-bottom: 100px; position: absolute; top: 25%; left: 0px; width: 99.4%; height: 150px; border: solid #0000ff 3px; background: #fff; color: #000;\">Sending ". $sz ." mails <br/>\n&lt;";
+ ob_flush();
+ flush();
+
+ $num = 0;
+ $lvl = 0;
+ $steps = floor($sz / 10) + 1;
+
+ foreach($this->mailinglist as $email) {
+ $email->send($subject, $message);
+ $pct = $num / $sz * 100;
+ if($pct >= $lvl) {
+ printf("<font style=\"font-size: 9px;\">%.0f%%</font>", $lvl);
+ $lvl += 100/$steps;
+ } else {
+ echo ".";
+ }
+ ob_flush();
+ flush();
+ $num++;
+ }
+ echo "<font style=\"font-size: 9px;\">[100%]</font>&gt;\n<br/>done<br/>\n";
+ echo "<a style=\"font-size: 20px; font-weight: bold;\" href=\"?page=admin&amp;module=newsletter\">[CLOSE]</a>";
+ echo "</div>\n";
+ ob_flush();
+ flush();
+ }
+
+ 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" => "create");
+
+ public function admin($sub, $action, $vars)
+ {
+ switch($sub) {
+ case "create":
+ // $this->admin_add($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 .= "<div class=\"newsletter\">\n";
+ $str .= " <form class=\"newsletter_form\" " .
+ "action=\"?page=".$page."&amp;newsletter_action=subscribe\" " .
+ "method=\"post\">\n";
+ $str .= " <div>\n";
+ $str .= " <input name=\"newsletter_email\" value=\"your@email.here\"/>\n";
+ $str .= " <button type=\"submit\">Subscribe</button>\n";
+ $str .= " </div>\n";
+ $str .= " </form>\n";
+ $str .= "</div>\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");
+}
+
+?> \ No newline at end of file