- don't use SORT when SEARCH is better (sort field not specified)
| | |
| | | */ |
| | | function _search_index($mailbox, $criteria='ALL', $charset=NULL, $sort_field=NULL) |
| | | { |
| | | if ($this->get_capability('sort')) |
| | | if ($sort_field && $this->get_capability('sort')) |
| | | { |
| | | $sort_field = $sort_field ? $sort_field : $this->sort_field; |
| | | $charset = $charset ? $charset : $this->default_charset; |
| | | $a_messages = iil_C_Sort($this->conn, $mailbox, $sort_field, $criteria, FALSE, $charset); |
| | | } |
| | |
| | | |
| | | function iil_C_Sort(&$conn, $mailbox, $field, $add='', $is_uid=FALSE, |
| | | $encoding = 'US-ASCII') { |
| | | /* Do "SELECT" command */ |
| | | if (!iil_C_Select($conn, $mailbox)) { |
| | | return false; |
| | | } |
| | | |
| | | $field = strtoupper($field); |
| | | if ($field == 'INTERNALDATE') { |
| | | $field = 'ARRIVAL'; |
| | |
| | | if (!$fields[$field]) { |
| | | return false; |
| | | } |
| | | |
| | | /* Do "SELECT" command */ |
| | | if (!iil_C_Select($conn, $mailbox)) { |
| | | return false; |
| | | } |
| | | |
| | | $is_uid = $is_uid ? 'UID ' : ''; |
| | | |
| | |
| | | $add = " $add"; |
| | | } |
| | | |
| | | $fp = $conn->fp; |
| | | $command = 's ' . $is_uid . 'SORT (' . $field . ') '; |
| | | $command .= $encoding . ' ALL ' . $add; |
| | | $command .= $encoding . ' ALL' . $add; |
| | | $line = $data = ''; |
| | | |
| | | if (!iil_PutLineC($fp, $command)) { |
| | | if (!iil_PutLineC($conn->fp, $command)) { |
| | | return false; |
| | | } |
| | | do { |
| | | $line = chop(iil_ReadLine($fp, 1024)); |
| | | $line = chop(iil_ReadLine($conn->fp, 1024)); |
| | | if (iil_StartsWith($line, '* SORT')) { |
| | | $data .= ($data ? ' ' : '') . substr($line, 7); |
| | | } else if (preg_match('/^[0-9 ]+$/', $line)) { |