# HG changeset patch
# User Marc Maurice
# Date 1331467798 -39600
# Node ID 331115b58da4242a12d73b28470e943ee87bedb6
# Parent eb14ea6e4f21afac377954c0b9c9a7ebfd1104dd
Add subscription functionality to php-admin and other minor improvements.
diff -r eb14ea6e4f21 -r 331115b58da4 ChangeLog
--- a/ChangeLog Thu Mar 01 03:42:50 2012 +1100
+++ b/ChangeLog Sun Mar 11 23:09:58 2012 +1100
@@ -1,3 +1,4 @@
+ o Add subscription ability to php-admin
o Add ability to except characters from width reckoning (and be zero-width)
to facilitate wrapping even more languages well
o Add different width-reckoning modes to facilitate wrapping many languages
diff -r eb14ea6e4f21 -r 331115b58da4 contrib/web/php-admin/README
--- a/contrib/web/php-admin/README Thu Mar 01 03:42:50 2012 +1100
+++ b/contrib/web/php-admin/README Sun Mar 11 23:09:58 2012 +1100
@@ -22,8 +22,19 @@
you need to create a group (eg. mlmmj) and add both users to it. The
subscribers.d directory then needs to be writable by that group:
+ # addgroup mlmmj
+ # adduser wwwrun mlmmj
+ # adduser mailuser mlmmj
# chgrp -R mlmmj /var/spool/mlmmj/mlmmj-test/subscribers.d/
# chmod -R g+w /var/spool/mlmmj/mlmmj-test/subscribers.d/
+ # chmod g+s /var/spool/mlmmj/mlmmj-test/subscribers.d/
+
+ setgid flag is needed when the webserver calls mlmmj-sub and creates a file
+ under subscribers.d, to keep the mlmmj group.
+
+ If using the Exim mailserver, you should add initgroups = true in your
+ mlmmj_transport, otherwise it won't be able to write files having write
+ permission to mlmmj group.
5) To enable access control on Apache you have to rename dot.htaccess to
.htaccess and edit the path inside the file to point to a htpasswd file
diff -r eb14ea6e4f21 -r 331115b58da4 contrib/web/php-admin/htdocs/index.php
--- a/contrib/web/php-admin/htdocs/index.php Thu Mar 01 03:42:50 2012 +1100
+++ b/contrib/web/php-admin/htdocs/index.php Sun Mar 11 23:09:58 2012 +1100
@@ -35,15 +35,15 @@
$lists = "";
-$dir = opendir($topdir);
-while ($file = readdir($dir)) {
+# use scandir to have alphabetical order
+foreach (scandir($topdir) as $file) {
if (!ereg("^\.",$file))
{
- $lists .= "".
- htmlentities($file)."
\n";
+ $lists .= "
".htmlentities($file)."
\n";
+ $lists .= "Config - Subscribers\n";
+ $lists .= "
\n";
}
}
-closedir($dir);
$tpl->assign(array("LISTS" => $lists));
diff -r eb14ea6e4f21 -r 331115b58da4 contrib/web/php-admin/htdocs/subscribers.php
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/contrib/web/php-admin/htdocs/subscribers.php Sun Mar 11 23:09:58 2012 +1100
@@ -0,0 +1,114 @@
+
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+require(dirname(dirname(__FILE__))."/conf/config.php");
+require(dirname(__FILE__)."/class.rFastTemplate.php");
+
+$tpl = new rFastTemplate($templatedir);
+
+# get the list parameter and check that list exists
+$list = $_GET["list"];
+
+if(!isset($list))
+die("no list specified");
+
+if (dirname(realpath($topdir."/".$list)) != realpath($topdir))
+die("list outside topdir");
+
+if(!is_dir($topdir."/".$list))
+die("non-existent list");
+
+# this will be displayed on the top of the page
+$message = "";
+
+# subscribe some people if tosubscribe is set
+if (isset($_POST["tosubscribe"])) {
+
+ foreach (preg_split('/\r\n|\n|\r/', $_POST["tosubscribe"]) as $line) {
+ $email = trim($line);
+ if ($email != "") {
+ if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
+ $cmd = "/usr/bin/mlmmj-sub -L ".escapeshellarg("$topdir/$list")." -a ".escapeshellarg($email)." 2>&1";
+ unset($out);
+ exec($cmd, $out, $ret);
+ if ($ret !== 0) {
+ $message.= "* Subscribe error for $email\ncommand: $cmd\nreturn code: $ret\noutput: ".implode("\n", $out)."\n";
+ }
+ } else {
+ $message.= "* Email address not valid: $email\n";
+ }
+ }
+
+ }
+
+# delete some people if delete is set
+} else if (isset($_POST["delete"])) {
+
+ $email = $_POST["email"];
+ if (! filter_var($email, FILTER_VALIDATE_EMAIL)) die("Email address not valid");
+
+ $cmd = "/usr/bin/mlmmj-unsub -L ".escapeshellarg("$topdir/$list")." -a ".escapeshellarg($email)." 2>&1";
+ unset($out);
+ exec($cmd, $out, $ret);
+ if ($ret !== 0) {
+ $message.= "* Unsubscribe error.\ncommand: $cmd\nreturn code: $ret\noutput: ".implode("\n", $out)."\n";
+ }
+}
+
+$subscribers="";
+
+# get subscribers from mlmmj
+$cmd = "/usr/bin/mlmmj-list -L ".escapeshellarg("$topdir/$list")." 2>&1";
+unset($out);
+exec($cmd, $out, $ret);
+if ($ret !== 0) {
+ $message.= "* Error: Could not get subscribers list.\n";
+} else {
+
+ foreach ($out as $email) {
+ $email = trim($email);
+
+ $form = "";
+
+ $subscribers.= "".htmlspecialchars($email)." | $form |
\n";
+ }
+
+ if ($subscribers === "") {
+ $subscribers = "This list is empty. |
\n";
+ }
+}
+
+# set template vars
+$tpl->define(array("main" => "subscribers.html"));
+
+$tpl->assign(array("LIST" => htmlspecialchars($list)));
+$tpl->assign(array("MESSAGE" => "".htmlspecialchars($message)."
"));
+$tpl->assign(array("SUBS" => $subscribers));
+
+$tpl->parse("MAIN","main");
+$tpl->FastPrint("MAIN");
+
+?>
diff -r eb14ea6e4f21 -r 331115b58da4 contrib/web/php-admin/templates/subscribers.html
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/contrib/web/php-admin/templates/subscribers.html Sun Mar 11 23:09:58 2012 +1100
@@ -0,0 +1,38 @@
+
+
+mlmmj - {LIST} subscribers
+
+
+
+{LIST} subscribers
+
+{MESSAGE}
+
+
+
+
+
+
+Index
+
+
+
diff -r eb14ea6e4f21 -r 331115b58da4 src/subscriberfuncs.c
--- a/src/subscriberfuncs.c Thu Mar 01 03:42:50 2012 +1100
+++ b/src/subscriberfuncs.c Sun Mar 11 23:09:58 2012 +1100
@@ -132,6 +132,7 @@
subreadname = concatstr(2, subddirname, dp->d_name);
subread = open(subreadname, O_RDONLY);
if(subread < 0) {
+ log_error(LOG_ARGS, "Could not open %s", subreadname);
myfree(subreadname);
continue;
}