Beispiel #1
0
/**
 * Fills mailbox object
 *
 * Some code fragments are present in 1.3.0 - 1.4.4.
 * @param array $mbx_ary
 * @param $mbxs
 * @param stream $imap_stream imap connection resource
 * @return object see mailboxes class
 * @since 1.5.0
 */
function sqimap_fill_mailbox_tree($mbx_ary, $mbxs = false, $imap_stream)
{
    global $data_dir, $username, $list_special_folders_first, $folder_prefix, $trash_folder, $sent_folder, $draft_folder, $move_to_trash, $move_to_sent, $save_as_draft, $delimiter, $imap_server_type;
    // $special_folders = array ('INBOX', $sent_folder, $draft_folder, $trash_folder);
    /* create virtual root node */
    $mailboxes = new mailboxes();
    $mailboxes->is_root = true;
    $trail_del = false;
    $start = 0;
    if (isset($folder_prefix) && $folder_prefix != '') {
        $start = substr_count($folder_prefix, $delimiter);
        if (strrpos($folder_prefix, $delimiter) == strlen($folder_prefix) - 1) {
            $mailboxes->mailboxname_full = substr($folder_prefix, 0, strlen($folder_prefix) - 1);
        } else {
            $mailboxes->mailboxname_full = $folder_prefix;
            $start++;
        }
        $mailboxes->mailboxname_sub = $mailboxes->mailboxname_full;
    } else {
        $start = 0;
    }
    $cnt = count($mbx_ary);
    for ($i = 0; $i < $cnt; $i++) {
        if ($mbx_ary[$i]['mbx'] != '') {
            $mbx = new mailboxes();
            $mailbox = $mbx_ary[$i]['mbx'];
            /*
             * Set the is_special flag if it concerned a special mailbox.
             * Used for displaying the special folders on top in the mailbox
             * tree displaying code.
             */
            $mbx->is_special |= $mbx->is_inbox = strtoupper($mailbox) == 'INBOX';
            $mbx->is_special |= $mbx->is_trash = isTrashMailbox($mailbox);
            $mbx->is_special |= $mbx->is_sent = isSentMailbox($mailbox);
            $mbx->is_special |= $mbx->is_draft = isDraftMailbox($mailbox);
            if (!$mbx->is_special) {
                $mbx->is_special = boolean_hook_function('special_mailbox', $mailbox, 1);
            }
            if (isset($mbx_ary[$i]['unseen'])) {
                $mbx->unseen = $mbx_ary[$i]['unseen'];
            }
            if (isset($mbx_ary[$i]['nummessages'])) {
                $mbx->total = $mbx_ary[$i]['nummessages'];
            }
            $mbx->is_noselect = $mbx_ary[$i]['noselect'];
            $mbx->is_noinferiors = $mbx_ary[$i]['noinferiors'];
            $r_del_pos = strrpos($mbx_ary[$i]['mbx'], $delimiter);
            if ($r_del_pos) {
                $mbx->mailboxname_sub = substr($mbx_ary[$i]['mbx'], $r_del_pos + 1);
            } else {
                /* mailbox is root folder */
                $mbx->mailboxname_sub = $mbx_ary[$i]['mbx'];
            }
            $mbx->mailboxname_full = $mbx_ary[$i]['mbx'];
            $mailboxes->addMbx($mbx, $delimiter, $start, $list_special_folders_first);
        }
    }
    sqimap_utf7_decode_mbx_tree($mailboxes);
    sqimap_get_status_mbx_tree($imap_stream, $mailboxes);
    return $mailboxes;
}
function sqimap_fill_mailbox_tree($mbx_ary, $mbxs = false, $imap_stream)
{
    global $data_dir, $username, $list_special_folders_first, $folder_prefix, $trash_folder, $sent_folder, $draft_folder, $move_to_trash, $move_to_sent, $save_as_draft, $delimiter, $imap_server_type;
    $special_folders = array('INBOX', $sent_folder, $draft_folder, $trash_folder);
    /* create virtual root node */
    $mailboxes = new mailboxes();
    $mailboxes->is_root = true;
    $trail_del = false;
    $start = 0;
    if (isset($folder_prefix) && $folder_prefix != '') {
        $start = substr_count($folder_prefix, $delimiter);
        if (strrpos($folder_prefix, $delimiter) == strlen($folder_prefix) - 1) {
            $trail_del = true;
            $mailboxes->mailboxname_full = substr($folder_prefix, 0, strlen($folder_prefix) - 1);
        } else {
            $mailboxes->mailboxname_full = $folder_prefix;
            $start++;
        }
        $mailboxes->mailboxname_sub = $mailboxes->mailboxname_full;
    } else {
        $start = 0;
    }
    $cnt = count($mbx_ary);
    for ($i = 0; $i < $cnt; $i++) {
        if ($mbx_ary[$i]['mbx'] != '') {
            $mbx = new mailboxes();
            $mailbox = $mbx_ary[$i]['mbx'];
            /*
                sent subfolders messes up using existing code as subfolders
                were marked, but the parents were ordered somewhere else in
                the list, despite having "special folders at top" option set.
                Need a better method than this.
            */
            /*
                        if ($mailbox == 'INBOX') {
                            $mbx->is_special = true;
                        } elseif (stristr($trash_folder , $mailbox)) {
                            $mbx->is_special = true;
                        } elseif (stristr($sent_folder , $mailbox)) {
                            $mbx->is_special = true;
                        } elseif (stristr($draft_folder , $mailbox)) {
                            $mbx->is_special = true;
                        }
            
                        switch ($mailbox) {
                            case 'INBOX':
                                $mbx->is_inbox = true;
                                $mbx->is_special = true;
                                $mbx_ary[$i]['noselect'] = false;
                                break;
                            case $trash_folder:
                                $mbx->is_trash = true;
                                $mbx->is_special = true;
                                break;
                            case $sent_folder:
                                $mbx->is_sent = true;
                                $mbx->is_special = true;
                                break;
                            case $draft_folder:
                                $mbx->is_draft = true;
                                $mbx->is_special = true;
                                break;
                        }
            */
            $mbx->is_special |= $mbx->is_inbox = strtoupper($mailbox) == 'INBOX';
            $mbx->is_special |= $mbx->is_trash = isTrashMailbox($mailbox);
            $mbx->is_special |= $mbx->is_sent = isSentMailbox($mailbox);
            $mbx->is_special |= $mbx->is_draft = isDraftMailbox($mailbox);
            if (!$mbx->is_special) {
                $mbx->is_special = boolean_hook_function('special_mailbox', $mailbox, 1);
            }
            if (isset($mbx_ary[$i]['unseen'])) {
                $mbx->unseen = $mbx_ary[$i]['unseen'];
            }
            if (isset($mbx_ary[$i]['nummessages'])) {
                $mbx->total = $mbx_ary[$i]['nummessages'];
            }
            $mbx->is_noselect = $mbx_ary[$i]['noselect'];
            $mbx->is_noinferiors = $mbx_ary[$i]['noinferiors'];
            $r_del_pos = strrpos($mbx_ary[$i]['mbx'], $delimiter);
            if ($r_del_pos) {
                $mbx->mailboxname_sub = substr($mbx_ary[$i]['mbx'], $r_del_pos + 1);
            } else {
                /* mailbox is root folder */
                $mbx->mailboxname_sub = $mbx_ary[$i]['mbx'];
            }
            $mbx->mailboxname_full = $mbx_ary[$i]['mbx'];
            $mailboxes->addMbx($mbx, $delimiter, $start, $list_special_folders_first);
        }
    }
    sqimap_utf7_decode_mbx_tree($mailboxes);
    sqimap_get_status_mbx_tree($imap_stream, $mailboxes);
    return $mailboxes;
}