*
* This implements all functions that manipulate mailboxes
*
- * @copyright 1999-2011 The SquirrelMail Project Team
+ * @copyright 1999-2021 The SquirrelMail Project Team
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @version $Id$
* @package squirrelmail
* Before 1.3.0 used more arguments and returned data depended on those arguments.
* @param stream $imap_stream imap connection resource
* @param string $mailbox mailbox name
+ * @param boolean $handle_errors When TRUE, IMAP errors
+ * are handled herein, causing
+ * an error to be displayed on
+ * screen and execution to stop
+ * and when FALSE, error status
+ * is returned to the caller
+ * (OPTIONAL; default is TRUE)
* @return array results of select command (on success - permanentflags, flags and rights)
+ * (on failure (and when $handle_errors is false), empty array)
* @since 1.0 or older
*/
-function sqimap_mailbox_select ($imap_stream, $mailbox) {
+function sqimap_mailbox_select ($imap_stream, $mailbox, $handle_errors=true) {
if (empty($mailbox)) {
return;
}
*/
if (strstr($mailbox, '../') || substr($mailbox, 0, 1) == '/') {
global $oTemplate;
- error_box(sprintf(_("Invalid mailbox name: %s"),htmlspecialchars($mailbox)));
+ error_box(sprintf(_("Invalid mailbox name: %s"),sm_encode_html_special_chars($mailbox)));
sqimap_logout($imap_stream);
$oTemplate->display('footer.tpl');
die();
}
$read = sqimap_run_command($imap_stream, 'SELECT ' . sqimap_encode_mailbox_name($mailbox),
- true, $response, $message);
+ $handle_errors, $response, $message);
$result = array();
for ($i = 0, $cnt = count($read); $i < $cnt; $i++) {
if (preg_match('/^\*\s+OK\s\[(\w+)\s(\w+)\]/',$read[$i], $regs)) {
}
}
}
- if (!isset($result['PERMANENTFLAGS'])) {
+ if (!empty($result) && !isset($result['PERMANENTFLAGS'])) {
$result['PERMANENTFLAGS'] = $result['FLAGS'];
}
if (preg_match('/^\[(.+)\]/',$message, $regs)) {
global $folder_prefix, $delimiter;
/* Process each folder line */
- for ($g = 0, $cnt = count($line); $g < $cnt; ++$g) {
+ ksort($line); // get physical ordering same as alphabetical sort we did before now (might be a better place for this)
+ foreach ($line as $g => $l)
+ // was this but array not guaranteed to be contiguous: for ($g = 0, $cnt = count($line); $g < $cnt; ++$g)
+ {
/* Store the raw IMAP reply */
if (isset($line[$g])) {
$boxesall[$g]['raw'] = $line[$g];
// i18n: Name of Drafts folder
$box2 = $pad . _("Drafts");
} else {
- $box2 = str_replace('&nbsp;&nbsp;', '. ', htmlspecialchars($boxes_part['formatted']));
+ $box2 = str_replace('&nbsp;&nbsp;', '. ', sm_encode_html_special_chars($boxes_part['formatted']));
}
break;
case SMPREF_MAILBOX_SELECT_INDENTED:
$pad = str_pad('',12 * (count(explode($delimiter,$boxes_part['unformatted-dm']))-1),' ');
$box2 = $pad . _("Drafts");
} else {
- $box2 = str_replace('&nbsp;&nbsp;', ' ', htmlspecialchars($boxes_part['formatted']));
+ $box2 = str_replace('&nbsp;&nbsp;', ' ', sm_encode_html_special_chars($boxes_part['formatted']));
}
break;
default: /* default, long names, style = 0 */
- $box2 = str_replace(' ', ' ', htmlspecialchars(imap_utf7_decode_local($boxes_part['unformatted-disp'])));
+ $box2 = str_replace(' ', ' ', sm_encode_html_special_chars(imap_utf7_decode_local($boxes_part['unformatted-disp'])));
break;
}
}
- $a[htmlspecialchars($box)] = $box2;
+ $a[sm_encode_html_special_chars($box)] = $box2;
}
}
$str = '';
foreach ($boxes as $value=>$option) {
- $lowerbox = strtolower(htmlspecialchars($value));
+ $lowerbox = strtolower(sm_encode_html_special_chars($value));
$sel = false;
if ($show_selected != 0) {
- reset($show_selected);
- while (!$sel && (list($x, $val) = each($show_selected))) {
- if (strtolower($value) == strtolower(htmlspecialchars($val))) {
+ foreach ($show_selected as $val) {
+ if (strtolower($value) == strtolower(sm_encode_html_special_chars($val))) {
$sel = true;
+ break;
}
}
}
$cnt = count($boxesall);
$used = array_pad($used,$cnt,false);
$has_inbox = false;
- for($k = 0; $k < $cnt; ++$k) {
+ foreach ($boxesall as $k => $b)
+ // was this but array not guaranteed to be contiguous: for($k = 0; $k < $cnt; ++$k)
+ {
if (strtoupper($boxesall[$k]['unformatted']) == 'INBOX') {
$boxesnew[] = $boxesall[$k];
$used[$k] = true;
/* List special folders and their subfolders, if requested. */
if ($list_special_folders_first) {
- for($k = 0; $k < $cnt; ++$k) {
+ foreach ($boxesall as $k => $b)
+ // was this but array not guaranteed to be contiguous: for($k = 0; $k < $cnt; ++$k)
+ {
if (!$used[$k] && isSpecialMailbox($boxesall[$k]['unformatted'])) {
$boxesnew[] = $boxesall[$k];
$used[$k] = true;
}
/* Find INBOX's children */
- for($k = 0; $k < $cnt; ++$k) {
+ foreach ($boxesall as $k => $b)
+ // was this but array not guaranteed to be contiguous: for($k = 0; $k < $cnt; ++$k)
+ {
$isboxbelow=isBoxBelow(strtoupper($boxesall[$k]['unformatted']),'INBOX');
if (strtoupper($boxesall[$k]['unformatted']) == 'INBOX') {
$is_inbox=1;
}
/* Rest of the folders */
- for($k = 0; $k < $cnt; $k++) {
+ foreach ($boxesall as $k => $b)
+ // was this but array not guaranteed to be contiguous: for($k = 0; $k < $cnt; ++$k)
+ {
if (!$used[$k]) {
$boxesnew[] = $boxesall[$k];
}