X-Git-Url: https://vcs.fsf.org/?p=squirrelmail.git;a=blobdiff_plain;f=plugins%2Flistcommands%2Ffunctions.php;h=66a4f99bf93b83d98c5eb7ff5a4b03cc8a51a7fe;hp=cfdc4341becb2a6dbf76edcd0b7f22ad269c885f;hb=6f62ecc17c3b4e265b1cd63470c392c84018bb62;hpb=4b4abf93a9624311afef0c385023724ee46a2b60 diff --git a/plugins/listcommands/functions.php b/plugins/listcommands/functions.php index cfdc4341..66a4f99b 100644 --- a/plugins/listcommands/functions.php +++ b/plugins/listcommands/functions.php @@ -8,25 +8,73 @@ * this plugin displays a menu which gives the user a choice of mailinglist * commands such as (un)subscribe, help and list archives. * - * @copyright © 1999-2005 The SquirrelMail Project Team + * @copyright © 1999-2007 The SquirrelMail Project Team * @license http://opensource.org/licenses/gpl-license.php GNU Public License * @version $Id$ * @package plugins * @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 */ function plugin_listcommands_menu_do() { - global $passed_id, $passed_ent_id, $color, $mailbox, $message, $startMessage; + 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 * is added later because we generate it using the Post information. */ $fieldsdescr = listcommands_fieldsdescr(); - $output = array(); + $links = array(); foreach ($message->rfc822_header->mlist as $cmd => $actions) { @@ -50,7 +98,7 @@ function plugin_listcommands_menu_do() { } $url .= 'send_to=' . str_replace('?','&', $act); - $output[] = makeComposeLink($url, $fieldsdescr[$cmd]); + $links[$cmd] = makeComposeLink($url, $fieldsdescr[$cmd]); if ($cmd == 'post') { if (!isset($mailbox)) @@ -60,22 +108,72 @@ function plugin_listcommands_menu_do() { (isset($passed_ent_id)?'&passed_ent_id='.$passed_ent_id:''); $url .= '&smaction=reply'; - $output[] = makeComposeLink($url, $fieldsdescr['reply']); + $links['reply'] = makeComposeLink($url, $fieldsdescr['reply']); } } else if ($proto == 'href') { - $output[] = '' - . $fieldsdescr[$cmd] . ''; + $links[$cmd] = create_hyperlink($act, $fieldsdescr[$cmd], '_blank'); } } - if (count($output) > 0) { - echo '' . - html_tag('td', '' . _("Mailing List") . ':  ', - 'right', '', 'valign="middle" width="20%"') . "\n" . - html_tag('td', '' . implode(' | ', $output) . '', - 'left', $color[0], 'valign="middle" width="80%"') . "\n" . - ''; + + // 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) { + $oTemplate->assign('links', $links); + $output = $oTemplate->fetch('plugins/listcommands/read_body_header.tpl'); + return array('read_body_header' => $output); + } + } /** @@ -92,4 +190,3 @@ function listcommands_fieldsdescr() { 'help' => _("Help")); } -?> \ No newline at end of file