Add ability for listcommands plugin to show reply and post links for user-configured...
authorpdontthink <pdontthink@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Sat, 13 Jan 2007 07:34:17 +0000 (07:34 +0000)
committerpdontthink <pdontthink@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Sat, 13 Jan 2007 07:34:17 +0000 (07:34 +0000)
git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@12115 7612ce4b-ef26-0410-bec9-ea0150e637f0

ChangeLog
plugins/listcommands/README
plugins/listcommands/functions.php
plugins/listcommands/setup.php

index c605b57..ddfa752 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -172,6 +172,9 @@ Version 1.5.2 - CVS
   - Add warning about magic_quotes_* in configtest.
   - Unify accepted versions for imap_server_type and set_defaults (#1629722).
   - Improve attachment temp file creation.
   - Add warning about magic_quotes_* in configtest.
   - Unify accepted versions for imap_server_type and set_defaults (#1629722).
   - Improve attachment temp file creation.
+  - Add ability for listcommands plugin to show post and reply links for 
+    user-configured non-RFC 2369-compliant lists; admin must enable by 
+    configuring plugin.
 
 Version 1.5.1 (branched on 2006-02-12)
 --------------------------------------
 
 Version 1.5.1 (branched on 2006-02-12)
 --------------------------------------
index c407be7..88851d9 100644 (file)
@@ -22,11 +22,17 @@ 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.
 
 messages containing one or more of these headers to help users taking advantage
 of the features offered.
 
+For mailing list subscriptions to non-RFC-compliant lists, the administrator
+may allow users to manage a list of mailing list addresses for which they want
+to show a "reply to list" link when replying to messages on such lists.
+
 
 Installation
 ============
 
 
 Installation
 ============
 
-Go to the main directory, run configure and add the plugin.
+Go to the main directory, run configure and add the plugin.  In order to enable
+optional features such as user management of subscriptions to non-RFC-compliant
+lists, copy config_sample.php to config.php and edit that file as desired.
 
 
 Acknowledgements
 
 
 Acknowledgements
index d617cee..c51c615 100644 (file)
  */
 
 /**
  */
 
 /**
+  * Get current list of subscribed non-RFC-compliant mailing lists for logged-in user
+  *
+  * @return array The list of mailing list addresses, keyed by integer index
+  */
+function get_non_rfc_lists() {
+    global $username, $data_dir;
+    $lists = getPref($data_dir, $username, 'non_rfc_lists', array());
+    $new_lists = array();
+    if (!empty($lists)) {
+        $lists = explode(':', $lists);
+        foreach ($lists as $list) {
+            list($index, $list_addr) = explode('_', $list);
+            if ((!empty($index) || $index === '0') && !empty($list_addr))
+                $new_lists[$index] = $list_addr;
+        }
+    }
+    $lists = $new_lists;
+    sort($lists);
+    return $lists;
+}
+
+/**
+  * Show mailing list management option section on options page
+  */
+function plugin_listcommands_optpage_register_block_do()
+{
+
+    global $optpage_blocks, $listcommands_allow_non_rfc_list_management;
+
+    // only allow management of non-RFC lists if admin deems necessary
+    //
+    @include_once(SM_PATH . 'plugins/listcommands/config.php');
+    if (!$listcommands_allow_non_rfc_list_management)
+        return;
+
+    $optpage_blocks[] = array(
+        'name' => _("Mailing Lists"),
+        'url'  => '../plugins/listcommands/options.php',
+        'desc' => _("Manage the (non-RFC-compliant) mailing lists that you are subscribed to for the purpose of providing one-click list replies when responding to list messages."),
+        'js'   => false
+    );
+
+}
+
+/**
  * internal function that builds mailing list links
  */
 function plugin_listcommands_menu_do() {
  * internal function that builds mailing list links
  */
 function plugin_listcommands_menu_do() {
-    global $passed_id, $passed_ent_id, $color, $mailbox, $message, $startMessage, $oTemplate;
+    global $passed_id, $passed_ent_id, $color, $mailbox, $message, 
+           $startMessage, $oTemplate, $listcommands_allow_non_rfc_list_management;
+
+    @include_once(SM_PATH . 'plugins/listcommands/config.php');
 
     /**
      * Array of commands we can deal with from the header. The Reply option
 
     /**
      * Array of commands we can deal with from the header. The Reply option
@@ -50,7 +98,7 @@ function plugin_listcommands_menu_do() {
             }
             $url .= 'send_to=' . str_replace('?','&amp;', $act);
 
             }
             $url .= 'send_to=' . str_replace('?','&amp;', $act);
 
-            $links[] = makeComposeLink($url, $fieldsdescr[$cmd]);
+            $links[$cmd] = makeComposeLink($url, $fieldsdescr[$cmd]);
 
             if ($cmd == 'post') {
                 if (!isset($mailbox))
 
             if ($cmd == 'post') {
                 if (!isset($mailbox))
@@ -60,13 +108,66 @@ function plugin_listcommands_menu_do() {
                     (isset($passed_ent_id)?'&amp;passed_ent_id='.$passed_ent_id:'');
                 $url .= '&amp;smaction=reply';
 
                     (isset($passed_ent_id)?'&amp;passed_ent_id='.$passed_ent_id:'');
                 $url .= '&amp;smaction=reply';
 
-                $links[] = makeComposeLink($url, $fieldsdescr['reply']);
+                $links['reply'] = makeComposeLink($url, $fieldsdescr['reply']);
             }
         } else if ($proto == 'href') {
             }
         } else if ($proto == 'href') {
-            $links[] = create_hyperlink($act, $fieldsdescr[$cmd], '_blank');
+            $links[$cmd] = create_hyperlink($act, $fieldsdescr[$cmd], '_blank');
+        }
+    }
+
+
+    // allow non-rfc reply link if admin allows and message is from 
+    // non-rfc list the user has configured
+    //
+    if ($listcommands_allow_non_rfc_list_management) {
+
+        $non_rfc_lists = get_non_rfc_lists();
+
+        $recipients = formatRecipientString($message->rfc822_header->to, "to") . ' '
+                    . formatRecipientString($message->rfc822_header->cc, "cc") . ' '
+                    . formatRecipientString($message->rfc822_header->bcc, "bcc");
+
+        if (!in_array('post', array_keys($links))) {
+
+            foreach ($non_rfc_lists as $non_rfc_list) {
+                if (preg_match('/(^|,|\s)' . preg_quote($non_rfc_list) . '($|,|\s)/', $recipients)) {
+                    $url = 'src/compose.php?'
+                         . (isset($startMessage)?'startMessage='.$startMessage.'&amp;':'')
+                         . 'send_to=' . str_replace('?','&amp;', $non_rfc_list);
+
+                    $links['post'] = makeComposeLink($url, $fieldsdescr['post']);
+
+                    break;
+                }
+            }
+
         }
         }
+
+        if (!in_array('reply', array_keys($links))) {
+
+            foreach ($non_rfc_lists as $non_rfc_list) {
+                if (preg_match('/(^|,|\s)' . preg_quote($non_rfc_list) . '($|,|\s)/', $recipients)) {
+                    if (!isset($mailbox))
+                        $mailbox = 'INBOX';
+                    $url = 'src/compose.php?'
+                         . (isset($startMessage)?'startMessage='.$startMessage.'&amp;':'')
+                         . 'send_to=' . str_replace('?','&amp;', $non_rfc_list)
+                         . '&amp;passed_id='.$passed_id
+                         . '&amp;mailbox='.urlencode($mailbox)
+                         . (isset($passed_ent_id)?'&amp;passed_ent_id='.$passed_ent_id:'')
+                         . '&amp;smaction=reply';
+
+                    $links['reply'] = makeComposeLink($url, $fieldsdescr['reply']);
+
+                    break;
+                }
+            }
+
+        }
+
     }
 
     }
 
+
     if (count($links) > 0) {
         $oTemplate->assign('links', $links);
         $output = $oTemplate->fetch('plugins/listcommands/read_body_header.tpl');
     if (count($links) > 0) {
         $oTemplate->assign('links', $links);
         $output = $oTemplate->fetch('plugins/listcommands/read_body_header.tpl');
index 18dc40c..50b3add 100644 (file)
@@ -22,6 +22,8 @@ function squirrelmail_plugin_init_listcommands () {
     global $squirrelmail_plugin_hooks;
 
     $squirrelmail_plugin_hooks['template_construct_read_headers.tpl']['listcommands'] = 'plugin_listcommands_menu';
     global $squirrelmail_plugin_hooks;
 
     $squirrelmail_plugin_hooks['template_construct_read_headers.tpl']['listcommands'] = 'plugin_listcommands_menu';
+    $squirrelmail_plugin_hooks['optpage_register_block']['listcommands'] = 'plugin_listcommands_optpage_register_block';
+
 }
 
 /**
 }
 
 /**
@@ -31,3 +33,12 @@ function plugin_listcommands_menu() {
     include_once(SM_PATH . 'plugins/listcommands/functions.php');
     return plugin_listcommands_menu_do();
 }
     include_once(SM_PATH . 'plugins/listcommands/functions.php');
     return plugin_listcommands_menu_do();
 }
+
+
+/**
+  * Show mailing list management option section on options page
+  */
+function plugin_listcommands_optpage_register_block() {
+    include_once(SM_PATH . 'plugins/listcommands/functions.php');
+    plugin_listcommands_optpage_register_block_do();
+}