X-Git-Url: https://vcs.fsf.org/?p=squirrelmail.git;a=blobdiff_plain;f=src%2Fleft_main.php;h=f16e5123f7a88bcdf219f0b700a5b90a2e53a8cf;hp=e90c5949b5cb3e8191a8e50052fae232340ed4b5;hb=2f617223e0e2742d2d9377aadedd3737b3256430;hpb=bffa0623a080913995338d2971ea820c5cbf7a36 diff --git a/src/left_main.php b/src/left_main.php index e90c5949..f16e5123 100644 --- a/src/left_main.php +++ b/src/left_main.php @@ -6,641 +6,63 @@ * This is the code for the left bar. The left bar shows the folders * available, and has cookie information. * - * @copyright © 1999-2006 The SquirrelMail Project Team + * @copyright 1999-2011 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. */ -include_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 ( !is_numeric($boxes->total) ) { - $result = sqimap_status_messages($imapConnection, $mailbox); - $boxes->total = $result['MESSAGES']; - $boxes->unseen = $result['UNSEEN']; - } - - $pre .= ""; - if ($unseen > 0) { - $pre .= ''; - $end .= ''; - } - $end .= ''; - if ($boxes->total > 0) { - /* Print unseen information. */ - if ($unseen_found) { - $end .= " $unseen_string"; - } - $end .= "\n" . - '  ['._("Purge").']'. - ''; - } - } else { - if (!$boxes->is_noselect) { - $pre .= ""; - if ($unseen > 0) { - $pre .= ''; - $end .= ''; - } - $end .= ''; - } - /* Print unseen information. */ - if ($unseen_found) { - $end .= " $unseen_string"; - } - - } - - $span = ''; - $spanend = ''; - if ($use_special_folder_color && $boxes->is_special) { - $span = ""; - $spanend = ""; - } elseif ( $boxes->is_noselect ) { - $span = ""; - $spanend = ''; - } - - - // 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 "" . $span . $pre . - str_replace( - array(' ','<','>'), - array(' ','<','>'), - $boxes->mailboxname_sub) . - $end. $spanend .'
' . "\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); +$imapConnection = sqimap_login($username, false, $imapServerAddress, $imapPort, true); /** * 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; -} - -if ($advanced_tree) { -$xtra .= << - - - -HEREDOC; - -/* style definitions */ - -$xtra .= << - - - -HEREDOC; + * Include extra javascript files needed by template + */ +$js_includes = $oTemplate->get_javascript_includes(TRUE); +foreach ($js_includes as $js_file) { + $xtra .= '' ."\n"; } // get mailbox list and cache it $mailboxes=sqimap_get_mailboxes($imapConnection,false,$show_only_subscribed_folders); -displayHtmlHeader( 'SquirrelMail', $xtra ); +displayHtmlHeader( $org_title, $xtra ); +$oErrorHandler->setDelayedErrors(true); sqgetGlobalVar('auto_create_done',$auto_create_done,SQ_SESSION); /* If requested and not yet complete, attempt to autocreate folders. */ @@ -648,9 +70,19 @@ 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')) { - // use $mailboxes array for checking if mailbox exists - if ( !sqimap_mailbox_exists($imapConnection, $folder, $mailboxes)) { + 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 { @@ -675,33 +107,7 @@ if ($auto_create_special && !isset($auto_create_done)) { $mailboxes=sqimap_get_mailboxes($imapConnection,true,$show_only_subscribed_folders); } -if ($advanced_tree) { - echo "\n\n
\n"; -} else { - echo "\n\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" . html_tag( 'table', '', 'left', '', 'border="0" cellspacing="0" cellpadding="0" width="99%"' ) . - html_tag( 'tr' ) . - html_tag( 'td', '', 'left' ) . - html_tag( 'table', '', '', '', 'border="0" cellspacing="0" cellpadding="0"' ) . - html_tag( 'tr' ) . - html_tag( 'td', '', 'center' ) . - ''. _("Folders") . "
\n\n"; - +$clock = ''; if ($date_format != 6) { /* First, display the clock. */ if ($hour_format == 1) { @@ -736,17 +142,12 @@ if ($date_format != 6) { } $clk = str_replace(' ',' ',$clk); - echo '' +//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)) { @@ -775,32 +176,40 @@ if (empty($unseen_notify)) { $unseen_notify = 0; } } + /** * 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); -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); -} +$oTemplate->assign('clock', $clock); +$oTemplate->assign('mailboxes', $mailbox_structure); -do_hook('left_main_after'); -sqimap_logout($imapConnection); +/* + * 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'); -?> - -
-display('footer.tpl'); -?> \ No newline at end of file