- global $sent_folder, $username;
- global $sent_subfolders_base, $sent_subfolders_setting;
- global $data_dir, $imapServerAddress, $imapPort;
- global $use_sent_subfolders, $move_to_sent;
-
- sqgetGlobalVar('delimiter', $delimiter, SQ_SESSION);
-
- if ($use_sent_subfolders || $move_to_sent) {
- $year = date('Y');
- $month = date('m');
- $quarter = sent_subfolder_getQuarter($month);
-
- /**
- * Regarding the structure we've got three main possibilities.
- * One sent holder. level 0.
- * Multiple year holders with messages in it. level 1.
- * Multiple year folders with holders in it. level 2.
- */
-
- switch ($sent_subfolders_setting) {
- case SMPREF_SENT_SUBFOLDERS_YEARLY:
- $level = 1;
- $sent_subfolder = $sent_subfolders_base . $delimiter
- . $year;
- break;
- case SMPREF_SENT_SUBFOLDERS_QUARTERLY:
- $level = 2;
- $sent_subfolder = $sent_subfolders_base . $delimiter
- . $year
- . $delimiter . $quarter;
- $year_folder = $sent_subfolders_base . $delimiter
- . $year;
- break;
- case SMPREF_SENT_SUBFOLDERS_MONTHLY:
- $level = 2;
- $sent_subfolder = $sent_subfolders_base . $delimiter
- . $year
- . $delimiter . $month;
- $year_folder = $sent_subfolders_base. $delimiter . $year;
- break;
- case SMPREF_SENT_SUBFOLDERS_DISABLED:
- default:
- $level = 0;
- $sent_subfolder = $sent_folder;
- $year_folder = $sent_folder;
- }
-
- /* If this folder is NOT the current sent folder, update stuff. */
- if ($sent_subfolder != $sent_folder) {
- /* Auto-create folders, if they do not yet exist. */
- if ($sent_subfolder != 'none') {
- /* Create the imap connection. */
- $ic = sqimap_login($username, false, $imapServerAddress, $imapPort, 10);
-
- $boxes = false;
- /**
- * If sent_subfolder can't store messages (noselect) ||
- * year_folder can't store subfolders (noinferiors) in level=2 setup ||
- * subfolder_base can't store subfolders (noinferiors), setup is broken
- */
- if (sqimap_mailbox_is_noselect($ic,$sent_subfolder,$boxes) ||
- ($level==2 && sqimap_mailbox_is_noinferiors($ic,$year_folder,$boxes)) ||
- sqimap_mailbox_is_noinferiors($ic,$sent_subfolders_base,$boxes)) {
- error_box(_("Sent Subfolders plugin is misconfigured."));
- } else {
- if ($level==2) {
- /* Auto-create the year folder, if it does not yet exist. */
- if (!sqimap_mailbox_exists($ic, $year_folder)) {
- sqimap_mailbox_create($ic, $year_folder, 'noselect');
- // TODO: safety check for imap servers that can't create subfolders
-
- } else if (!sqimap_mailbox_is_subscribed($ic, $year_folder)) {
- sqimap_subscribe($ic, $year_folder);
- }
- }
-
- /* Auto-create the subfolder, if it does not yet exist. */
- if (!sqimap_mailbox_exists($ic, $sent_subfolder)) {
- sqimap_mailbox_create($ic, $sent_subfolder, '');
- } else if (!sqimap_mailbox_is_subscribed($ic, $sent_subfolder)) {
- sqimap_subscribe($ic, $sent_subfolder);
- }
- /* Update sent_folder setting. */
- //setPref($data_dir, $username, 'sent_folder', $sent_subfolder);
- //setPref($data_dir, $username, 'move_to_sent', SMPREF_ON);
- $sent_folder = $sent_subfolder;
- $move_to_sent = SMPREF_ON;
- }
- /* Close the imap connection. */
- sqimap_logout($ic);
- }
-
- }
- }
-}
-
-/**
- * Sets quarter subfolder names
- *
- * @param string $month numeric month
- * @return string quarter name (Q + number)
- */
-function sent_subfolder_getQuarter($month) {
- switch ($month) {
- case '01':
- case '02':
- case '03':
- $result = '1';
- break;
- case '04':
- case '05':
- case '06':
- $result = '2';
- break;
- case '07':
- case '08':
- case '09':
- $result = '3';
- break;
- case '10':
- case '11':
- case '12':
- $result = '4';
- break;
- default:
- $result = 'ERR';
- }
-
- /* Return the current quarter. */
- return ('Q' . $result);