List Commands plugin by "Thijs Kinkhorst" <thijs@kinkhorst.com>
authorphilippe_mingo <philippe_mingo@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Tue, 22 Jan 2002 08:28:29 +0000 (08:28 +0000)
committerphilippe_mingo <philippe_mingo@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Tue, 22 Jan 2002 08:28:29 +0000 (08:28 +0000)
git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@2197 7612ce4b-ef26-0410-bec9-ea0150e637f0

plugins/listcommands/README [new file with mode: 0644]
plugins/listcommands/mailout.php [new file with mode: 0644]
plugins/listcommands/setup.php [new file with mode: 0644]

diff --git a/plugins/listcommands/README b/plugins/listcommands/README
new file mode 100644 (file)
index 0000000..a5a597c
--- /dev/null
@@ -0,0 +1,52 @@
+List Commands plugin -- v1.2
+
+This plugin gives the user a menu of mailinglist options such as
+(un)subscribe, help and archives when viewing messages from compliant
+mailinglists.
+
+
+Description
+===========
+
+The plugin is an implementation of RFC 2369, "The Use of URLs as Meta-Syntax
+for Core Mail List Commands and their Transport through Message Header Fields",
+to be found at ftp://nis.nsf.net/internet/documents/rfc/rfc2369.txt.
+
+Compliant mailinglistservers add extra headers with each message they send out
+with information about how to (un)subscribe, get help or contact the list
+owner. This can either be a web location or an emailaddress. In the latter
+case, one needs to send an email to that address in order to complete an action
+like subscribing.
+
+The information in these headers is used to generate an extra menuline on
+messages containing one or more of these headers to help users taking advantage
+of the features offered.
+
+
+Installation
+============
+
+As with other plugins, just uncompress the archive in the plugins
+directory, go back to the main directory, run configure and add the plugin.
+
+Questions/comments/flames/etc can be sent to
+    Thijs Kinkhorst <thijs@kinkhorst.com>
+
+
+Changes
+=======
+1.0
+ * Initial version
+1.1
+ * Added 'Reply to list' option
+ * Support for identities when sending mail
+ * Miscelaneous minor improvements
+1.2
+ * Fixed too greedy regexp; changed to PCRE.
+ * Fixed IMAP session id handling.
+
+Acknowledgements
+================
+I'd like to thank Peter Walker, Wouter Teepe and Jason Edwards for their
+useful contributions to this plugin.
diff --git a/plugins/listcommands/mailout.php b/plugins/listcommands/mailout.php
new file mode 100644 (file)
index 0000000..97e71c1
--- /dev/null
@@ -0,0 +1,86 @@
+<?php
+/*
+ * mailout.php part of listcommands plugin
+ * last modified: 2002/01/12 by Thijs Kinkhorst
+ *
+ */
+chdir('..');
+include_once ('../src/validate.php');
+include_once ('../functions/page_header.php');
+include_once ('../src/load_prefs.php');
+
+displayPageHeader($color, $mailbox);
+
+?>
+<P>
+<TABLE align="center" width="75%" BGCOLOR="<?php echo $color[0]; ?>">
+<TR><TH BGCOLOR="<?php echo $color[9] . '">' . _("Mailinglist") . ' ' . _($action); ?></TH></TR>
+<TR><TD>
+<?php
+
+switch ( $action ) {
+case 'Help':
+    $out_string .= _("This will send a message to %s requesting help for this list. You will receive an emailed response at the address below.");
+    break;
+case 'Subscribe':
+    $out_string .= _("This will send a message to %s requesting that you will be subscribed to this list. You will be subscribed with the address below.");
+    break;
+case 'Unsubscribe':
+    $out_string = _("This will send a message to %s requesting that you will be subscribed to this list. It will try to unsubscribe the adress below.");
+}
+
+printf( $out_string, htmlspecialchars($send_to) );
+
+echo '<form method="POST" action="../../src/compose.php">';
+
+/*
+ * Identity support (RFC 2369 sect. B.1.)
+ *
+ * I had to copy this from compose.php because there doesn't
+ * seem to exist a function to get the identities.
+ */
+
+$defaultmail = htmlspecialchars(getPref($data_dir, $username, 'full_name'));
+$em = getPref($data_dir, $username, 'email_address');
+if ($em != '') {
+    $defaultmail .= htmlspecialchars(' <' . $em . '>') . "\n";
+}
+echo '<P><CENTER>' . _("From:");
+
+$idents = getPref($data_dir, $username, 'identities'); 
+if ($idents != '' && $idents > 1)
+{
+    echo ' <select name=identity>' . "\n" .
+         '<option value=default>' . $defaultmail;
+    for ($i = 1; $i < $idents; $i ++) {
+        echo '<option value="' . $i . '"';
+        if (isset($identity) && $identity == $i) {
+            echo ' SELECTED';
+        }
+        echo '>' . htmlspecialchars(getPref($data_dir, $username,
+                                                'full_name' . $i));
+        $em = getPref($data_dir, $username, 'email_address' . $i);
+        if ($em != '') {
+            echo htmlspecialchars(' <' . $em . '>') . "\n";
+        }
+    } 
+    echo '</select>' . "\n" ;
+
+}
+else
+{
+    echo $defaultmail;
+} 
+?>
+<BR>
+<input type=hidden name="send_to" value="<?php echo htmlspecialchars($send_to); ?>">
+<input type=hidden name="subject" value="<?php echo htmlspecialchars($subject); ?>">
+<input type=hidden name="body" value="<?php echo htmlspecialchars($body); ?>">
+<input type=hidden name="mailbox" value="<?php echo htmlspecialchars($mailbox); ?>">
+<input type=submit name="send" value="<?php echo _("Send Mail"); ?>"><BR><BR></CENTER>
+</form>
+</TD></TR></TABLE>
+</P>
+</BODY>
+</HTML>
\ No newline at end of file
diff --git a/plugins/listcommands/setup.php b/plugins/listcommands/setup.php
new file mode 100644 (file)
index 0000000..3107729
--- /dev/null
@@ -0,0 +1,105 @@
+<?php
+/*
+ * Listcommands plugin v1.2
+ *
+ * Implementation of RFC 2369 for SquirrelMail.
+ * When viewing a message from a mailinglist complying with this RFC,
+ * this plugin displays a menu which gives the user a choice of mailinglist
+ * commands such as (un)subscribe, help and list archives.
+ *
+ * last modified: 2002/01/20 by Thijs Kinkhorst
+ * please send bug reports to <thijs@kinkhorst.com>
+ *
+ */
+function squirrelmail_plugin_init_listcommands ()
+{
+    global $squirrelmail_plugin_hooks;
+
+    $squirrelmail_plugin_hooks['read_body_header']['listcommands'] = 'plugin_listcommands_menu';
+}
+
+
+function plugin_listcommands_menu () {
+
+    global $imapConnection, $passed_id, $color, $mailbox, $subject;
+
+    /* Array of commands we can deal with from the header. The Reply option is
+     * added later because we generate it using the Post information.
+     */
+    $fieldsdescr = array( 'Help' => _("Help"), 
+                          'Unsubscribe' => _("Unsubscribe"),
+                          'Subscribe' => _("Subscribe"), 
+                          'Post' => _("Post to the list"),
+                          'Archive' => _("List Archives"), 
+                          'Owner' => _("Contact Listowner") );
+    $fields = array_keys ($fieldsdescr);
+    $fieldsdescr['Reply'] = 'Reply to the list';
+                    
+    $cmds = array();
+    $output = array();
+
+    $lfields = 'List-' . implode (' List-', $fields);
+
+    $sid = sqimap_session_id();
+    fputs ($imapConnection, "$sid FETCH $passed_id BODY.PEEK[HEADER.FIELDS ($lfields)]\r\n");
+    $read = sqimap_read_data ($imapConnection, $sid, true, $response, $emessage);
+
+    for ($i = 1; $i < count($read); $i++)
+    {
+        foreach ($fields as $field)
+        {
+            if ( preg_match("/^List-$field: *<(.+?)>/i", $read[$i], $match) )
+            {
+                $cmds[$field] = $match[1];
+            }
+        }
+    }
+
+    foreach ($cmds as $cmd => $url)
+    {
+        if ( eregi('mailto:(.+)', $url, $regs) )
+        {
+            $purl = parse_url($url);
+            
+            if ( $cmd == 'Post' || $cmd == 'Owner' )
+            {
+                $url = 'compose.php?';
+            }
+            else
+            {
+                $url = '../plugins/listcommands/mailout.php?action=' . $cmd . '&';
+            }
+
+            $url .= 'mailbox=' . urlencode($mailbox) . '&send_to=' . $purl['path'];
+            
+            if ( isset($purl['query']) )
+            {
+                $url .= '&' . $purl['query'];
+            }
+
+            $output[] = '<A HREF="' . $url . '">' . $fieldsdescr[$cmd] . '</A>';
+
+            if ( $cmd == 'Post' )
+            {
+                $url .= '&reply_subj=' . urlencode($subject) . '&reply_id=' . $passed_id;
+                $output[] = '<A HREF="' . $url . '">' . $fieldsdescr['Reply'] . '</A>';
+            }
+        }
+        elseif ( eregi('^(http|ftp)', $url) )
+        {
+            $output[] = '<A HREF="' . $url . '" TARGET="_blank">' . $fieldsdescr[$cmd] . '</A>';
+        }
+
+        
+    }
+
+       
+    if (count($output) > 0) {
+        echo "<tr><td BGCOLOR=\"$color[0]\" WIDTH=\"100%\" colspan=\"3\">".
+             '<SMALL>' . _("Mailinglist options:") . ' ' . implode ('&nbsp;|&nbsp;', $output) .
+             '</SMALL>'.
+             '</td></tr>';
+    }
+    
+}    
+?>
\ No newline at end of file