public sortList ( &$mbox, IMP_Ftree_Element $base = false ) | ||
$base | IMP_Ftree_Element | The base element. |
public function sortList(&$mbox, $base = false)
{
if (count($mbox) < 2) {
return;
}
if (!$base || !$base->base_elt && !$base->remote_auth) {
$list_ob = new Horde_Imap_Client_Mailbox_List($mbox);
$mbox = $list_ob->sort();
return;
}
$prefix = $base->base_elt ? '' : strval($this->getAccount($base)) . "";
$basesort = $othersort = array();
/* INBOX always appears first. */
$sorted = array($prefix . 'INBOX');
foreach ($mbox as $key => $val) {
$ob = $this[$val];
if ($ob->nonimap) {
$othersort[$key] = $ob->mbox_ob->label;
} elseif ($val !== $prefix . 'INBOX') {
$basesort[$key] = $ob->mbox_ob->label;
}
}
natcasesort($basesort);
natcasesort($othersort);
foreach (array_merge(array_keys($basesort), array_keys($othersort)) as $key) {
$sorted[] = $mbox[$key];
}
$mbox = $sorted;
}
/** * Returns the list of mailboxes to poll. * * @param boolean $sort Sort the directory list? * * @return array The list of mailboxes to poll (IMP_Mailbox objects). */ public function getPollList($sort = false) { global $injector; $iterator = new IMP_Ftree_IteratorFilter($injector->getInstance('IMP_Ftree')); $iterator->add(array($iterator::CONTAINERS, $iterator::NONIMAP)); if ($this->_data !== true) { $iterator->add($iterator::POLLED); } $plist = array_map('strval', iterator_to_array($iterator, false)); if ($sort) { $this->_ftree->sortList($plist, $this->_ftree[IMP_Ftree::BASE_ELT]); } return IMP_Mailbox::get($plist); }