Source for file left_main.php
Documentation is available at left_main.php
* This is the code for the left bar. The left bar shows the folders
* available, and has cookie information.
* @copyright 1999-2020 The SquirrelMail Project Team
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @version $Id: left_main.php 14840 2020-01-07 07:42:38Z pdontthink $
/** This is the left_main page */
define('PAGE_NAME', 'left_main');
* Path for SquirrelMail required files.
/* 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');
/* These constants are used for folder stuff. */
define('SM_BOX_UNCOLLAPSED', 0);
define('SM_BOX_COLLAPSED', 1);
/* --------------------- FUNCTIONS ------------------------- */
global $folder_prefix, $trash_folder, $sent_folder,
$color, $move_to_sent, $move_to_trash,
$unseen_notify, $unseen_type, $collapse_folders,
$draft_folder, $save_as_draft,
$real_box =
$box_array['unformatted'];
$mailbox =
str_replace(' ','',$box_array['formatted']);
/* Strip down the mailbox name. */
if (preg_match('/^( *)([^ ]*)$/', $mailbox, $regs)) {
if (($unseen_notify ==
2 &&
$real_box ==
'INBOX') ||
list
($unseen_string, $unseen) =
$status;
/* Start off with a blank line. */
/* If there are unseen message, bold the line. */
if ($unseen >
0) { $line .=
'<b>'; }
/* Create the link for this folder. */
$line .=
'<a href="right_main.php?PG_SHOWALL=0&sort=0&startMessage=1&mailbox='.
$mailboxURL.
'" target="right" title="' .
($mailbox ==
'INBOX' ?
_("INBOX") :
$mailbox) .
'" style="text-decoration:none">';
$line .=
"<font color=\"$color[11]\">";
if ( $mailbox ==
'INBOX' ) {
$line .=
str_replace(array(' ','<','>'),array(' ','<','>'),$mailbox);
if ($special_color ==
TRUE)
/* If there are unseen message, close bolding. */
if ($unseen >
0) { $line .=
"</b>"; }
/* Print unseen information. */
if ($unseen_string !=
'') {
$line .=
" <small>$unseen_string</small>";
/* If it's the trash folder, show a purge link when needed */
if (($move_to_trash) &&
($real_box ==
$trash_folder)) {
if (! isset
($numMessages)) {
if (($numMessages >
0) or ($box_array['parent'] ==
1)) {
' (<a href="empty_trash.php?smtoken=' .
sm_generate_security_token() .
'" style="text-decoration:none">'.
_("Purge").
'</a>)' .
array(isset
($numMessages) ?
$numMessages :
'',
$real_box, $imapConnection));
/* Return the final product. */
* Recursive function that computes the collapsed status and parent
* (or not parent) status of this box, and the visiblity and collapsed
* status and parent (or not parent) status for all children boxes.
global $boxes, $data_dir, $username, $collapse_folders;
/* Retreive the name for the parent box. */
$parbox_name =
$boxes[$parbox]['unformatted'];
/* 'Initialize' this parent box to childless. */
$boxes[$parbox]['parent'] =
FALSE;
/* Compute the collapse status for this box. */
if( isset
($collapse_folders) &&
$collapse_folders ) {
$collapse =
getPref($data_dir, $username, 'collapse_folder_' .
$parbox_name);
$boxes[$parbox]['collapse'] =
$collapse;
/* Otherwise, get the name of the next box. */
if (isset
($boxes[$nextbox]['unformatted'])) {
$nextbox_name =
$boxes[$nextbox]['unformatted'];
/* Compute any children boxes for this box. */
while (($nextbox <
$boxcount) &&
(is_parent_box($boxes[$nextbox]['unformatted'], $parbox_name))) {
/* Note that this 'parent' box has at least one child. */
$boxes[$parbox]['parent'] =
TRUE;
/* Compute the visiblity of this box. */
$boxes[$nextbox]['visible'] =
($boxes[$parbox]['visible'] &&
/* Compute the visibility of any child boxes. */
/* Set the parent box to the current next box. */
* Create the link for a parent folder that will allow that
* parent folder to either be collapsed or expaned, as is
global $boxes, $imapConnection, $unseen_notify, $color;
$mailbox =
urlencode($boxes[$boxnum]['unformatted']);
/* Create the link for this collapse link. */
$link =
'<a target="left" style="text-decoration:none" ' .
$link .=
"unfold=$mailbox\">+";
$link .=
"fold=$mailbox\">-";
/* Return the finished product. */
* Create unseen and total message count for both this folder and
* @param string $boxName name of the current mailbox
* @param array $boxArray array for the current mailbox
* @param $imapConnection current imap connection in use
* @return array[0] unseen message string (for display)
* @return array[1] unseen message count
global $boxes, $unseen_type, $color, $unseen_cum;
/* Initialize the return value. */
/* Initialize the counts for this folder. */
/* Collect the counts for this box alone. */
$boxUnseenCount =
$status['UNSEEN'];
if ($boxUnseenCount ===
false) {
$boxMessageCount =
$status['MESSAGES'];
/* Initialize the total counts. */
/* Collect the counts for this boxes subfolders. */
$curBoxLength =
strlen($boxName);
$boxCount =
count($boxes);
for ($i =
0; $i <
$boxCount; ++
$i) {
/* Initialize the counts for this subfolder. */
/* Collect the counts for this subfolder. */
if (($boxName !=
$boxes[$i]['unformatted'])
&&
(substr($boxes[$i]['unformatted'], 0, $curBoxLength) ==
$boxName)
&&
!in_array('noselect', $boxes[$i]['flags'])) {
$subUnseenCount =
$status['UNSEEN'];
$subMessageCount =
$status['MESSAGES'];;
/* Add the counts for this subfolder to the total. */
$totalUnseenCount +=
$subUnseenCount;
$totalMessageCount +=
$subMessageCount;
/* Add the counts for all subfolders to that of the box. */
$boxUnseenCount +=
$totalUnseenCount;
$boxMessageCount +=
$totalMessageCount;
/* And create the magic unseen count string. */
/* Really a lot more then just the unseen count. */
if (($unseen_type ==
1) &&
($boxUnseenCount >
0)) {
$result[0] =
"($boxUnseenCount)";
} else if ($unseen_type ==
2) {
$result[0] =
"($boxUnseenCount/$boxMessageCount)";
$result[0] =
"<font color=\"$color[11]\">$result[0]</font>";
/* Set the unseen count to return to the outside world. */
$result[1] =
$boxUnseenCount;
/* Return our happy result. */
* This simple function checks if a box is another box's parent.
/* Extract the name of the parent of the current box. */
$curparts =
explode($delimiter, $curbox_name);
$actual_parname =
implode($delimiter, $curparts);
$actual_parname =
substr($actual_parname,0,strlen($parbox_name));
/* Compare the actual with the given parent name. */
return ($parbox_name ==
$actual_parname);
/* -------------------- MAIN ------------------------ */
// Disable browser caching //
header('Cache-Control: no-cache, no-store, must-revalidate');
header('Expires: Sat, 1 Jan 2000 00:00:00 GMT');
// open a connection to the IMAP server
global $imap_stream_options; // in case not defined in config
$imapConnection =
sqimap_login($username, $key, $imapServerAddress, $imapPort, 10, $imap_stream_options); // the 10 is to hide the output
* Using stristr since older preferences may contain "None" and "none".
if (isset
($left_refresh) &&
($left_refresh !=
'') &&
&&
($check_mail_mechanism ===
'basic' ||
$check_mail_mechanism ===
'advanced')) {
// NB: we could use $script_libs instead of $xtra - they both do the same thing for adding free-form extra script tags
// FIXME: the "advanced" version of the JavaScript check mail feature could be triggered by browser detection (brief testing shows that at least IE 8 doesn't like the advanced version).... but for now, just let admin decide in system settings
$xtra =
"\n<script language=\"JavaScript\" type=\"text/javascript\">\n<!--\nvar base_uri = '" .
$base_uri .
"';\nvar reload_interval = " .
$left_refresh .
";\nvar use_advanced_page_reload = " .
($check_mail_mechanism ===
'advanced' ?
"true;\n" :
"false;\n") .
"// -->\n</script>\n";
$xtra =
"\n<meta http-equiv=\"REFRESH\" content=\"$left_refresh;URL=left_main.php\">\n";
/* If requested and not yet complete, attempt to autocreate folders. */
if ($auto_create_special &&
!$auto_create_done) {
$autocreate =
array($sent_folder, $trash_folder, $draft_folder);
foreach( $autocreate as $folder ) {
if (($folder !=
'') &&
($folder !=
'none')) {
/* Let the world know that autocreation is complete! Hurrah! */
$auto_create_done =
TRUE;
/* retrieve the mailboxlist. We do this at a later stage again but if
the right_frame loads faster then the second call retrieves a cached
version of the mailboxlist without the newly created folders.
The second parameter forces a non cached mailboxlist return.
echo
"\n<body bgcolor=\"$color[3]\" text=\"$color[6]\" link=\"$color[6]\" vlink=\"$color[6]\" alink=\"$color[6]\">\n";
echo
"\n\n" .
html_tag( 'table', '', 'left', '', 'border="0" cellspacing="0" cellpadding="0" width="99%"' ) .
html_tag( 'table', '', '', '', 'border="0" cellspacing="0" cellpadding="0"' ) .
'<font size="4"><b>'.
_("Folders") .
"</b><br /></font>\n\n";
/* First, display the clock. */
$clk =
date('Y-m-d '.
$hr.
' T', time());
echo
'<small><span style="white-space: nowrap;">'
.
":</span><br /><span style=\"white-space: nowrap;\">$clk</span></small><br />";
/* Next, display the refresh button. */
echo
'<small style="white-space: nowrap;">(<a href="../src/left_main.php" target="left">'.
_("Check mail") .
'</a>)</small></td></tr></table><br />';
/* Lastly, display the folder list. */
if ( $collapse_folders ) {
/* If directed, collapse or uncollapse a folder. */
} else if (isset
($unfold)) {
if (!isset
($boxes)) { // auto_create_done
/* Prepare do do out collapsedness and visibility computation. */
$boxcount =
count($boxes);
/* Compute the collapsedness and visibility of each box. */
while ($curbox <
$boxcount) {
$boxes[$curbox]['visible'] =
TRUE;
for ($i =
0; $i <
count($boxes); $i++
) {
if ( $boxes[$i]['visible'] ) {
$mailbox =
$boxes[$i]['formatted'];
// remove folder_prefix using substr so folders aren't indented unnecessarily
/* Create the prefix for the folder name and link. */
if (isset
($collapse_folders) &&
$collapse_folders &&
$boxes[$i]['parent']) {
$line =
"<span style=\"white-space: nowrap;\"><tt>$prefix</tt>";
/* Add the folder name and link. */
if (! isset
($color[15])) {
if (in_array('noselect', $boxes[$i]['flags'])) {
$line .=
"<font color=\"$color[11]\">";
$line .=
"<font color=\"$color[15]\">";
if (preg_match('/^( *)([^ ]*)/', $mailbox, $regs)) {
/* Put the final touches on our folder line. */
$line .=
"</span><br />\n";
/* Output the line for this folder. */
Documentation generated on Mon, 13 Jan 2020 04:24:52 +0100 by phpDocumentor 1.4.3