X-Git-Url: https://vcs.fsf.org/?p=squirrelmail.git;a=blobdiff_plain;f=src%2Fleft_main.php;h=3db765bdd8d51565fc55c37d1f9e2733b4404812;hp=74e1b68ff65a8afb34babe4317666f1ceafa518f;hb=c997cbe6f5a46d432d7733acb207dfcdfd00e49e;hpb=0bcd11eb0e4f9df4de129efe9046955c479d832b diff --git a/src/left_main.php b/src/left_main.php index 74e1b68f..3db765bd 100644 --- a/src/left_main.php +++ b/src/left_main.php @@ -3,645 +3,89 @@ /** * left_main.php * - * Copyright (c) 1999-2005 The SquirrelMail Project Team - * Licensed under the GNU GPL. For full terms see the file COPYING. - * * This is the code for the left bar. The left bar shows the folders * available, and has cookie information. * + * @copyright 1999-2021 The SquirrelMail Project Team + * @license http://opensource.org/licenses/gpl-license.php GNU Public License * @version $Id$ * @package squirrelmail */ +/** This is the left_main page */ +define('PAGE_NAME', 'left_main'); + /** - * Path for SquirrelMail required files. - * @ignore + * Include the SquirrelMail initialization file. */ -define('SM_PATH','../'); +require('../include/init.php'); /* SquirrelMail required files. */ -require_once(SM_PATH . 'include/validate.php'); -require_once(SM_PATH . 'functions/imap.php'); -require_once(SM_PATH . 'functions/plugin.php'); -require_once(SM_PATH . 'functions/page_header.php'); -require_once(SM_PATH . 'functions/html.php'); +require_once(SM_PATH . 'functions/imap_general.php'); require_once(SM_PATH . 'functions/date.php'); +require_once(SM_PATH . 'functions/template/folder_list_util.php'); /* These constants are used for folder stuff. */ define('SM_BOX_UNCOLLAPSED', 0); define('SM_BOX_COLLAPSED', 1); -/* --------------------- FUNCTIONS ------------------------- */ - - -/** - * Recursive function to output a tree of folders. - * It is called on a list of boxes and iterates over that tree. - * - * @since 1.3.0 - */ -function ListBoxes ($boxes, $j=0 ) { - global $data_dir, $username, $color, $unseen_notify, $unseen_type, - $move_to_trash, $trash_folder, $collapse_folders, $imapConnection, - $use_icons, $icon_theme, $use_special_folder_color; - - // stop condition - if (empty($boxes)) { - return; - } - - $pre = ''; - $end = ''; - $collapse = false; - $unseen_found = false; - $unseen = 0; - - $mailbox = $boxes->mailboxname_full; - $leader = str_repeat('  ',$j); - $mailboxURL = urlencode($mailbox); - - /* get unseen/total messages information */ - /* Only need to display info when option is set */ - if (isset($unseen_notify) && ($unseen_notify > 1) && - (($boxes->unseen !== false) || ($boxes->total !== false))) { - - if ($boxes->unseen !== false) - $unseen = $boxes->unseen; - - /* - Should only display unseen info if the folder is inbox - or you set the option for all folders - */ - - if ((strtolower($mailbox) == 'inbox') || ($unseen_notify == 3)) { - $unseen_string = $unseen; - - /* If users requests, display message count too */ - if (isset($unseen_type) && ($unseen_type == 2) && ($boxes->total !== false)) { - $unseen_string .= '/' . $boxes->total; - } - - $unseen_string = "($unseen_string)"; - - /* - Finally allow the script to display the values by setting a boolean. - This can only occur if the unseen count is great than 0 (if you have - unseen count only), or you have the message count too. - */ - if (($unseen > 0) || (isset($unseen_type) && ($unseen_type ==2))) { - $unseen_found = true; - } - } - } - - if (isset($boxes->mbxs[0]) && $collapse_folders) { - $collapse = getPref($data_dir, $username, 'collapse_folder_' . $mailbox); - $collapse = ($collapse == '' ? SM_BOX_UNCOLLAPSED : $collapse); - - $link = '$leader '; - } else { - $link .= "unfold=$mailboxURL\">$leader+ "; - } - } else { - if ($use_icons && $icon_theme != 'none') { - $link .= "fold=$mailboxURL\">$leader '; - } else { - $link .= "fold=$mailboxURL\">$leader- "; - } - } - $link .= ''; - $pre .= $link; - } else { - $pre.= $leader . '  '; - } - - /* If there are unseen message, bold the line. */ - if (($move_to_trash) && ($mailbox == $trash_folder)) { - if (! isset($boxes->total)) { - $boxes->total = sqimap_status_messages($imapConnection, $mailbox); - } - $pre .= ""; - if ($unseen > 0) { - $pre .= ''; - $end .= ''; - } - $end .= ''; - if ($boxes->total > 0) { - /* Print unseen information. */ - if ($unseen_found) { - $end .= " $unseen_string"; - } - $end .= "\n\t" . - '  ['._("Purge").']'. - ''; - } - } else { - if (!$boxes->is_noselect) { - $pre .= ""; - if ($unseen > 0) { - $pre .= ''; - $end .= ''; - } - $end .= ''; - } - /* Print unseen information. */ - if ($unseen_found) { - $end .= " $unseen_string"; - } - - } - - $font = ''; - $fontend = ''; - if ($use_special_folder_color && $boxes->is_special) { - $font = ""; - $fontend = ""; - } elseif ( $boxes->is_noselect ) { - $font = ""; - $fontend = ''; - } - - // let plugins fiddle with end of line - $end .= concat_hook_function('left_main_after_each_folder', - array(isset($numMessages) ? $numMessages : '', - $boxes->mailboxname_full, $imapConnection)); - - $end .= ''; - - if (!$boxes->is_root) { - echo "" . $pre .$font. - str_replace( - array(' ','<','>'), - array(' ','<','>'), - $boxes->mailboxname_sub) . - $fontend . $end. '
' . "\n"; - $j++; - } - - if (!$collapse || $boxes->is_root) { - for ($i = 0; $i mbxs); $i++) { - ListBoxes($boxes->mbxs[$i],$j); - } - } -} - -function ListAdvancedBoxes ($boxes, $mbx, $j='ID.0000' ) { - global $data_dir, $username, $color, $unseen_notify, $unseen_type, - $move_to_trash, $trash_folder, $collapse_folders, $use_special_folder_color; - - if (empty($boxes)) { - return; - } - - /* use_folder_images only works if the images exist in ../images */ - $use_folder_images = true; - - $pre = ''; - $end = ''; - $collapse = false; - $unseen_found = false; - $unseen = 0; - - $mailbox = $boxes->mailboxname_full; - $mailboxURL = urlencode($mailbox); - - /* get unseen/total messages information */ - /* Only need to display info when option is set */ - if (isset($unseen_notify) && ($unseen_notify > 1) && - (($boxes->unseen !== false) || ($boxes->total !== false))) { - - if ($boxes->unseen !== false) - $unseen = $boxes->unseen; - - /* - Should only display unseen info if the folder is inbox - or you set the option for all folders - */ - - if ((strtolower($mailbox) == 'inbox') || ($unseen_notify == 3)) { - $unseen_string = $unseen; - - /* If users requests, display message count too */ - if (isset($unseen_type) && ($unseen_type == 2) && ($boxes->total !== false)) { - $unseen_string .= '/' . $boxes->total; - } - - $unseen_string = "($unseen_string)"; - - /* - Finally allow the script to display the values by setting a boolean. - This can only occur if the unseen count is great than 0 (if you have - unseen count only), or you have the message count too. - */ - if (($unseen > 0) || (isset($unseen_type) && ($unseen_type ==2))) { - $unseen_found = true; - } - } - } - - /* If there are unseen message, bold the line. */ - if ($unseen > 0) { $pre .= ''; } - - /* color special boxes */ - if ($use_special_folder_color && $boxes->is_special) { - $pre .= ""; - $end .= ''; - } - - /* If there are unseen message, close bolding. */ - if ($unseen > 0) { $end .= ''; } - - /* Print unseen information. */ - if ($unseen_found) { - $end .= " $unseen_string"; - } - - if (($move_to_trash) && ($mailbox == $trash_folder)) { - $pre = "" . $pre; - $end .= ''; - $end .= "\n\n" . - '  ['._("Purge").']'. - ''; - } else { - if (!$boxes->is_noselect) { /* \Noselect boxes can't be selected */ - $pre = "" . $pre; - $end .= ''; - } - } - - // let plugins fiddle with end of line - global $imapConnection; - $end .= concat_hook_function('left_main_after_each_folder', - array(isset($numMessages) ? $numMessages : '', - $boxes->mailboxname_full, $imapConnection)); - - if (!$boxes->is_root) { - if ($use_folder_images) { - if ($boxes->is_inbox) { - $folder_img = '../images/inbox.png'; - } else if ($boxes->is_sent) { - $folder_img = '../images/senti.png'; - } else if ($boxes->is_trash) { - $folder_img = '../images/delitem.png'; - } else if ($boxes->is_draft) { - $folder_img = '../images/draft.png'; - } else if ($boxes->is_noinferiors) { - $folder_img = '../images/folder_noinf.png'; - } else { - $folder_img = '../images/folder.png'; - } - $folder_img = '  '; - } else { - $folder_img = ''; - } - if (!isset($boxes->mbxs[0])) { - echo ' ' . html_tag( 'div', - $pre . $folder_img . - str_replace( array(' ','<','>'), - array(' ','<','>'), - $boxes->mailboxname_sub) . - $end, - 'left', '', 'class="mbx_sub" id="' .$j. '"' ) . "\n"; - } else { - /* get collapse information */ - if ($collapse_folders) { - $form_entry = $j.'F'; - if (isset($mbx) && isset($mbx[$form_entry])) { - $collapse = $mbx[$form_entry]; - setPref($data_dir, $username, 'collapse_folder_'.$boxes->mailboxname_full , - $collapse ? SM_BOX_COLLAPSED : SM_BOX_UNCOLLAPSED); - } else { - $collapse = getPref($data_dir, $username, 'collapse_folder_' . $mailbox); - $collapse = ($collapse == '' ? SM_BOX_UNCOLLAPSED : $collapse); - } - $img_src = ($collapse ? '../images/plus.png' : '../images/minus.png'); - $collapse_link = '' . - " "; - } else { - $collapse_link=''; - } - echo ' ' . html_tag( 'div', - $collapse_link . $pre . $folder_img . ' '. $boxes->mailboxname_sub . $end , - 'left', '', 'class="mbx_par" id="' .$j. 'P"' ) . "\n"; - echo ' '."\n"; - } - } - - $visible = ($collapse ? ' style="display:none"' : ' style="display:block"'); - if (isset($boxes->mbxs[0]) && !$boxes->is_root) /* mailbox contains childs */ - echo html_tag( 'div', '', 'left', '', 'class="par_area" id='.$j.'.0000 '. $visible ) . "\n"; - - if ($j !='ID.0000') { - $j = $j .'.0000'; - } - for ($i = 0; $i mbxs); $i++) { - $j++; - ListAdvancedBoxes($boxes->mbxs[$i],$mbx,$j); - } - if (isset($boxes->mbxs[0]) && !$boxes->is_root) { - echo ''."\n\n"; - } -} - - - - -/* -------------------- MAIN ------------------------ */ - /* get globals */ -sqgetGlobalVar('username', $username, SQ_SESSION); -sqgetGlobalVar('key', $key, SQ_COOKIE); sqgetGlobalVar('delimiter', $delimiter, SQ_SESSION); -sqgetGlobalVar('onetimepad', $onetimepad, SQ_SESSION); sqgetGlobalVar('fold', $fold, SQ_GET); sqgetGlobalVar('unfold', $unfold, SQ_GET); - /* end globals */ // open a connection on the imap port (143) // why hide the output? -$imapConnection = sqimap_login($username, $key, $imapServerAddress, $imapPort, true); +global $imap_stream_options; // in case not defined in config +$imapConnection = sqimap_login($username, false, $imapServerAddress, $imapPort, true, $imap_stream_options); /** * Using stristr since very old preferences may contain "None" and "none". */ if (!empty($left_refresh) && !stristr($left_refresh, 'none')){ - $xtra = "\n\n" . - "\n". - "\n"; + $xtra = "\n\n"; } else { $xtra = ''; } /** - * $advanced_tree and is a boolean var which is default set to default - * SM behaviour. - * Setting $advanced tree to true causes SM to display a experimental - * mailbox-tree with dhtml behaviour. - * It only works on browsers which supports css and javascript. The used - * javascript is experimental and doesn't support all browsers. - * It has been tested on IE6 an Konquerer 3.0.0-2. - * It is now tested and working on: (please test and update this list) - * Windows: IE 5.5 SP2, IE 6 SP1, Gecko based (Mozilla, Firebird) and Opera7 - * XWindow: ? - * Mac: ? - * In the function ListAdvancedBoxes there is another var $use_folder_images. - * setting this to true is only usefull if the images exists in ../images. - * - * Feel free to experiment with the code and report bugs and enhancements - **/ - -/* set this to true if you want to see a nicer mailboxtree */ -if (empty($advanced_tree)) { - $advanced_tree=false; + * Include extra javascript files needed by template + */ +$js_includes = $oTemplate->get_javascript_includes(TRUE); +foreach ($js_includes as $js_file) { + $xtra .= '' ."\n"; } -if ($advanced_tree) { -$xtra .= << - - - -HEREDOC; +// get mailbox list and cache it +$mailboxes=sqimap_get_mailboxes($imapConnection,false,$show_only_subscribed_folders); -/* style definitions */ +displayHtmlHeader( $org_title, $xtra ); +$oErrorHandler->setDelayedErrors(true); -$xtra .= << - - - -HEREDOC; -} - -displayHtmlHeader( 'SquirrelMail', $xtra ); sqgetGlobalVar('auto_create_done',$auto_create_done,SQ_SESSION); /* If requested and not yet complete, attempt to autocreate folders. */ if ($auto_create_special && !isset($auto_create_done)) { $autocreate = array($sent_folder, $trash_folder, $draft_folder); + $folders_created = false; foreach( $autocreate as $folder ) { - if (($folder != '') && ($folder != 'none')) { - if ( !sqimap_mailbox_exists($imapConnection, $folder)) { + if ($folder != '' && $folder != SMPREF_NONE) { + /** + * If $show_only_subscribed_folders is true, don't use + * $mailboxes array for checking if mailbox exists. + * Mailbox list contains only subscribed folders. + * sqimap_mailbox_create() will fail, if folder exists. + */ + if ($show_only_subscribed_folders) { + $mailbox_cache = false; + } else { + $mailbox_cache = $mailboxes; + } + if ( !sqimap_mailbox_exists($imapConnection, $folder, $mailbox_cache)) { sqimap_mailbox_create($imapConnection, $folder, ''); + $folders_created = true; } else { // check for subscription is useless and expensive, just // surpress the NO response. Unless we're on Mecury, which @@ -650,6 +94,7 @@ if ($auto_create_special && !isset($auto_create_done)) { if ( strtolower($imap_server_type) != 'mercury32' || !sqimap_mailbox_is_subscribed($imapConnection, $folder) ) { sqimap_subscribe($imapConnection, $folder, false); + $folders_created = true; } } } @@ -658,30 +103,12 @@ if ($auto_create_special && !isset($auto_create_done)) { /* Let the world know that autocreation is complete! Hurrah! */ $auto_create_done = TRUE; sqsession_register($auto_create_done, 'auto_create_done'); + // reload mailbox list + if ($folders_created) + $mailboxes=sqimap_get_mailboxes($imapConnection,true,$show_only_subscribed_folders); } -if ($advanced_tree) { - echo "\n\n"; -} else { - echo "\n\n"; -} - -do_hook('left_main_before'); -if ($advanced_tree) { - /* nice future feature, needs layout !! volunteers? */ - $right_pos = $left_size - 20; -/* echo '
'; - echo ''; - echo ''; - echo '
'; - echo '


';*/ -} - -echo "\n\n" . - '
'. _("Folders") . "
\n\n"; - +$clock = ''; if ($date_format != 6) { /* First, display the clock. */ if ($hour_format == 1) { @@ -716,16 +143,12 @@ if ($date_format != 6) { } $clk = str_replace(' ',' ',$clk); - echo '' - . str_replace(' ', ' ', _("Last Refresh")) +//FIXME don't build HTML here - do it in template + $clock = '' + . str_replace(' ', ' ', _("Last Refresh")) . ":
$clk

\n"; } -/* Next, display the refresh button. */ -echo '

\n\n"; - -/* Lastly, display the folder list. */ if ( $collapse_folders ) { /* If directed, collapse or uncollapse a folder. */ if (isset($fold)) { @@ -755,23 +178,39 @@ if (empty($unseen_notify)) { } } -$boxes = sqimap_mailbox_tree($imapConnection); -if (isset($advanced_tree) && $advanced_tree) { - echo '
'."\n"; - echo '

'; - echo '
'."\n\n"; - sqgetGlobalVar('mbx', $mbx, SQ_POST); - if (!isset($mbx)) $mbx=NULL; - ListAdvancedBoxes($boxes, $mbx); - echo '
'; - echo '
'."\n"; -} else { - ListBoxes($boxes); -} +/** + * pass $mailboxes now instead of $imapconnection - sqimap_get_mailboxes() has been separated from + * sqimap_mailbox_tree() so that the cached mailbox list can be used elsewhere in left_main and beyond + */ +$boxes = sqimap_mailbox_tree($imapConnection,$mailboxes,$show_only_subscribed_folders); +$mailbox_structure = getBoxStructure($boxes); -do_hook('left_main_after'); -sqimap_logout($imapConnection); +$oTemplate->assign('clock', $clock); +$oTemplate->assign('mailboxes', $mailbox_structure); + +/* + * Build an array to pass user prefs to the template in order to avoid using + * globals, which are dirty, filthy things in templates. :) + */ +$settings = array(); +#$settings['imapConnection'] = $imapConnection; +$settings['templateID'] = $sTemplateID; +$settings['unreadNotificationEnabled'] = $unseen_notify!=1; +$settings['unreadNotificationAllFolders'] = $unseen_notify == 3; +$settings['unreadNotificationDisplayTotal'] = $unseen_type == 2; +$settings['unreadNotificationCummulative'] = $unseen_cum==1; +$settings['useSpecialFolderColor'] = $use_special_folder_color; +$settings['messageRecyclingEnabled'] = $move_to_trash; +$settings['collapsableFoldersEnabled'] = $collapse_folders==1; +$oTemplate->assign('settings', $settings); + +//access keys +// +$oTemplate->assign('accesskey_folders_refresh', $accesskey_folders_refresh); +$oTemplate->assign('accesskey_folders_purge_trash', $accesskey_folders_purge_trash); +$oTemplate->assign('accesskey_folders_inbox', $accesskey_folders_inbox); + +$oTemplate->display('left_main.tpl'); -?> - +sqimap_logout($imapConnection); +$oTemplate->display('footer.tpl');