瀏覽代碼

Add ability for listcommands plugin to show reply and post links for user-configured non-RFC 2369-compliant lists; admin must enable by configuring plugin.

pdontthink 18 年之前
父節點
當前提交
039672d965
共有 4 個文件被更改,包括 126 次插入5 次删除
  1. 3 0
      ChangeLog
  2. 7 1
      plugins/listcommands/README
  3. 105 4
      plugins/listcommands/functions.php
  4. 11 0
      plugins/listcommands/setup.php

+ 3 - 0
ChangeLog

@@ -172,6 +172,9 @@ Version 1.5.2 - CVS
   - Add warning about magic_quotes_* in configtest.
   - Add warning about magic_quotes_* in configtest.
   - Unify accepted versions for imap_server_type and set_defaults (#1629722).
   - Unify accepted versions for imap_server_type and set_defaults (#1629722).
   - Improve attachment temp file creation.
   - 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)
 --------------------------------------
 --------------------------------------

+ 7 - 1
plugins/listcommands/README

@@ -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
 messages containing one or more of these headers to help users taking advantage
 of the features offered.
 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

+ 105 - 4
plugins/listcommands/functions.php

@@ -15,11 +15,59 @@
  * @subpackage listcommands
  * @subpackage listcommands
  */
  */
 
 
+/**
+  * 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
  * internal function that builds mailing list links
  */
  */
 function plugin_listcommands_menu_do() {
 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('?','&', $act);
             $url .= 'send_to=' . str_replace('?','&', $act);
 
 
-            $links[] = makeComposeLink($url, $fieldsdescr[$cmd]);
+            $links[$cmd] = makeComposeLink($url, $fieldsdescr[$cmd]);
 
 
             if ($cmd == 'post') {
             if ($cmd == 'post') {
                 if (!isset($mailbox))
                 if (!isset($mailbox))
@@ -60,13 +108,66 @@ function plugin_listcommands_menu_do() {
                     (isset($passed_ent_id)?'&passed_ent_id='.$passed_ent_id:'');
                     (isset($passed_ent_id)?'&passed_ent_id='.$passed_ent_id:'');
                 $url .= '&smaction=reply';
                 $url .= '&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.'&':'')
+                         . 'send_to=' . str_replace('?','&', $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.'&':'')
+                         . 'send_to=' . str_replace('?','&', $non_rfc_list)
+                         . '&passed_id='.$passed_id
+                         . '&mailbox='.urlencode($mailbox)
+                         . (isset($passed_ent_id)?'&passed_ent_id='.$passed_ent_id:'')
+                         . '&smaction=reply';
+
+                    $links['reply'] = makeComposeLink($url, $fieldsdescr['reply']);
+
+                    break;
+                }
+            }
+
+        }
+
     }
     }
 
 
+
     if (count($links) > 0) {
     if (count($links) > 0) {
         $oTemplate->assign('links', $links);
         $oTemplate->assign('links', $links);
         $output = $oTemplate->fetch('plugins/listcommands/read_body_header.tpl');
         $output = $oTemplate->fetch('plugins/listcommands/read_body_header.tpl');

+ 11 - 0
plugins/listcommands/setup.php

@@ -22,6 +22,8 @@ function squirrelmail_plugin_init_listcommands () {
     global $squirrelmail_plugin_hooks;
     global $squirrelmail_plugin_hooks;
 
 
     $squirrelmail_plugin_hooks['template_construct_read_headers.tpl']['listcommands'] = 'plugin_listcommands_menu';
     $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');
     include_once(SM_PATH . 'plugins/listcommands/functions.php');
     return plugin_listcommands_menu_do();
     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();
+}