Thomas Bruederli wrote:
I cannot reproduce this behavior. However, I added the following to program/steps/mail/func.inc to make sure that the correct mailbox is stored within the session:
if (empty($_SESSION['mbox'])) $_SESSION['mbox'] = $IMAP->get_mailbox_name();
Regards, Thomas
I couldn't get this patch to work, and in fact I don't believe from looking at it that it would address the issue. The only place anywhere in the code that $_SESSION['mbox'] is set is in func.inc:
// set imap properties and session vars if (strlen($_GET['_mbox'])) { $IMAP->set_mailbox($_GET['_mbox']); $_SESSION['mbox'] = $_GET['_mbox']; }
If I put your snippet before this it would just be overwritten, and if I put it after it would overwrite it with an incorrect value.
The really weird thing about this bug is that when I log $_GET['_mbox'], I'm never able to observe _GET as the wrong value (the last value in the folders array). I logged dozens of lines of code to try to pinpoint where else $_SESSION['mbox'] was being assigned and I just couldn't find it.
To summarize the issues, the bug can be observed by following these steps:
not change in the folder list 4) Navigate to another folder by clicking on it on the left column 5) Navigate back to the Inbox - Observe that the Unread status has not been saved 6) repeat step 3. Observe that the Unread number now *does* change and that the status is correctly saved.
The problem is that the program is attempting to flag a message in a mailbox that doesn't exist because it's looking in the wrong mailbox. It's looking in the mailbox that's stored in the SESSION['mbox'] and the SESSION['mbox'] is inexplicably set to the last value in the array $rcmail_config['default_imap_folders'] defined in main.inc.php.
SESSION['mbox'] is only ever explicitly set in func.inc where it is assigned to a $_GET value.
I know this is hard to follow, but if anyone who can reproduce the error has any time to look at it or a decent way to work around it, I'd really appreciate it!
-Charles