From decb0c39724ecb94c29e870f15ac76573b189506 Mon Sep 17 00:00:00 2001 From: tokul Date: Sun, 4 Sep 2005 17:39:20 +0000 Subject: [PATCH] hide other special folders reduce number of imap calls used to list subscribed folders git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@10056 7612ce4b-ef26-0410-bec9-ea0150e637f0 --- ChangeLog | 2 + src/folders.php | 111 ++++++++++++++++++++---------------------------- 2 files changed, 48 insertions(+), 65 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2280bab8..d336ece8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -438,6 +438,8 @@ Version 1.5.1 -- CVS - Readded options_identity_process and options_identity_renumber hooks broken by CAN-2005-2095 fixes. - Removed duplicate generic_header hook call in src/right_main.php (#1269189). + - Removed other special folders from rename/delete/unsubscribe folder forms. + Suggested by Florian Daumling. Version 1.5.0 - 2 February 2004 ------------------------------- diff --git a/src/folders.php b/src/folders.php index a040f5e7..5dec790a 100644 --- a/src/folders.php +++ b/src/folders.php @@ -99,6 +99,10 @@ if ( sqgetGlobalVar('smaction', $action, SQ_POST) ) { folders_unsubscribe($imapConnection, $folder_names); $td_str = _("Unsubscribed successfully."); break; + default: + // TODO: add hook for plugin action processing. + $td_str = ''; + break; } // if there are any messages, output them. @@ -134,11 +138,22 @@ echo html_tag( 'table', '', 'center', '', 'width="70%" cellpadding="4" cellspaci $show_selected = array(); $skip_folders = array(); $server_type = strtolower($imap_server_type); + +// Special handling for courier if ( $server_type == 'courier' ) { - array_push($skip_folders, 'inbox.trash'); - if ( $default_folder_prefix == 'INBOX.' ) { - array_push($skip_folders, 'INBOX'); - } + /** + * If we use courier, we should hide system trash folder + * FIXME: (tokul) Who says that courier does not allow storing folders in + * INBOX.Trash or inbox.trash? Can't reproduce it 3.0.8. This entry is + * useless, because in_array() check is case sensitive and INBOX is in + * upper case. + */ + array_push($skip_folders, 'inbox.trash'); + + if ( $default_folder_prefix == 'INBOX.' ) { + // We don't need INBOX, since it is top folder + array_push($skip_folders, 'INBOX'); + } } if ( $default_sub_of_inbox == false ) { @@ -169,50 +184,25 @@ echo html_tag( 'tr', ) ."\n"; /** count special folders **/ - -// FIX ME, why not check if the folders are defined IMHO move_to_sent, move_to_trash has nothing todo with it -$count_special_folders = 0; -$num_max = 1; -if (strtolower($imap_server_type) == "courier" || $move_to_trash) { - $num_max++; -} -if ($move_to_sent) { - $num_max++; -} -if ($save_as_draft) { - $num_max++; -} - -// What if move_to_sent = false and $sent_folder is set? Should it still be skipped? - -for ($p = 0, $cnt = count($boxes); $p < $cnt && $count_special_folders < $num_max; $p++) { - switch ($boxes[$p]['unformatted']) { - case (strtoupper($boxes[$p]['unformatted']) == 'INBOX'): - ++$count_special_folders; - $skip_folders[] = $boxes[$p]['unformatted']; - break; - // FIX ME inbox.trash should be set in conf.pl - case 'inbox.trash': - if (strtolower($imap_server_type) == 'courier') { - ++$count_special_folders; - } - break; - case $trash_folder: - ++$count_special_folders; - $skip_folders[] = $trash_folder; - break; - case $sent_folder: - ++$count_special_folders; - $skip_folders[] = $sent_folder; - break; - case $draft_folder: - ++$count_special_folders; - $skip_folders[] = $draft_folder; - break; - default: break; - } +foreach ($boxes as $index => $aBoxData) { + if (isSpecialMailbox($aBoxData['unformatted']) && + ! in_array($aBoxData['unformatted'],$skip_folders)) { + $skip_folders[] = $aBoxData['unformatted']; + } } +/** + * Retrieve list of folders when special folders are excluded. Special folders + * should be unavailable in rename/delete/unsubscribe. Theoretically user can + * modify form and perform these operations with special folders, but if user + * manages to delete/rename/unsubscribe special folder by hacking form... + * + * If script or program depends on special folder, they should not assume that + * folder is available. + * + * $filtered_folders contains empty string or html formated option list. + */ +$filtered_folders = sqimap_mailbox_option_list($imapConnection, 0, $skip_folders, $boxes, NULL, true); /** RENAMING FOLDERS **/ echo html_tag( 'tr', @@ -222,7 +212,7 @@ echo html_tag( 'tr', html_tag( 'td', '', 'center', $color[0] ); /* show only if we have folders to rename */ -if ($count_special_folders < count($boxes)) { +if (! empty($filtered_folders)) { echo addForm('folders.php') . addHidden('smaction', 'rename') . "\n". '\n" . '

\n" + . "

\n" . '\n" -- 2.25.1