summaryrefslogtreecommitdiff
path: root/program/include/rcube_imap.inc
diff options
context:
space:
mode:
Diffstat (limited to 'program/include/rcube_imap.inc')
-rw-r--r--program/include/rcube_imap.inc377
1 files changed, 262 insertions, 115 deletions
diff --git a/program/include/rcube_imap.inc b/program/include/rcube_imap.inc
index 9ca6cf569..0cfda1573 100644
--- a/program/include/rcube_imap.inc
+++ b/program/include/rcube_imap.inc
@@ -21,7 +21,7 @@
*/
-/**
+/*
* Obtain classes from the Iloha IMAP library
*/
require_once('lib/imap.inc');
@@ -33,13 +33,13 @@ require_once('lib/mime.inc');
*
* This is a wrapper that implements the Iloha IMAP Library (IIL)
*
- * @package RoundCube Webmail
+ * @package Mail
* @author Thomas Bruederli <roundcube@gmail.com>
* @version 1.36
* @link http://ilohamail.org
*/
class rcube_imap
- {
+{
var $db;
var $conn;
var $root_ns = '';
@@ -70,7 +70,7 @@ class rcube_imap
/**
* Object constructor
*
- * @param object Database connection
+ * @param object DB Database connection
*/
function __construct($db_conn)
{
@@ -294,6 +294,7 @@ class rcube_imap
/**
* Return the saved search set as hash array
+ * @return array Search set
*/
function get_search_set()
{
@@ -382,8 +383,8 @@ class rcube_imap
* Private method for mailbox listing
*
* @return array List of mailboxes/folders
+ * @see rcube_imap::list_mailboxes()
* @access private
- * @see rcube_imap::list_mailboxes
*/
function _list_mailboxes($root='', $filter='*')
{
@@ -413,8 +414,8 @@ class rcube_imap
* @param string Mailbox/folder name
* @param string Mode for count [ALL|UNSEEN|RECENT]
* @param boolean Force reading from server and update cache
- * @return number Number of messages
- * @access public
+ * @return int Number of messages
+ * @access public
*/
function messagecount($mbox_name='', $mode='ALL', $force=FALSE)
{
@@ -427,7 +428,7 @@ class rcube_imap
* Private method for getting nr of messages
*
* @access private
- * @see rcube_imap::messagecount
+ * @see rcube_imap::messagecount()
*/
function _messagecount($mailbox='', $mode='ALL', $force=FALSE)
{
@@ -496,7 +497,7 @@ class rcube_imap
* convert mailbox name with root dir first
*
* @param string Mailbox/folder name
- * @param number Current page to list
+ * @param int Current page to list
* @param string Header field to sort by
* @param string Sort order [ASC|DESC]
* @return array Indexed array with message header objects
@@ -616,7 +617,7 @@ class rcube_imap
*
* @param string Mailbox/folder name
* @param array List of message ids to list
- * @param number Current page to list
+ * @param int Current page to list
* @param string Header field to sort by
* @param string Sort order [ASC|DESC]
* @return array Indexed array with message header objects
@@ -633,7 +634,7 @@ class rcube_imap
* Private method for listing a set of message headers
*
* @access private
- * @see rcube_imap::list_header_set
+ * @see rcube_imap::list_header_set()
*/
function _list_header_set($mailbox, $msgs, $page=NULL, $sort_field=NULL, $sort_order=NULL)
{
@@ -671,7 +672,7 @@ class rcube_imap
/**
* Helper function to get first and last index of the requested set
*
- * @param number message count
+ * @param int message count
* @param mixed page number to show, or string 'all'
* @return array array with two values: first index, last index
* @access private
@@ -713,7 +714,7 @@ class rcube_imap
* @param string Message index to fetch
* @param array Reference to message headers array
* @param array Array with cache index
- * @return number Number of deleted messages
+ * @return int Number of deleted messages
* @access private
*/
function _fetch_headers($mailbox, $msgs, &$a_msg_headers, $cache_key)
@@ -815,6 +816,9 @@ class rcube_imap
}
+ /**
+ * @access private
+ */
function sync_header_index($mailbox)
{
$cache_key = $mailbox.'.msg';
@@ -927,6 +931,8 @@ class rcube_imap
/**
* Refresh saved search set
+ *
+ * @return array Current search set
*/
function refresh_search()
{
@@ -973,8 +979,8 @@ class rcube_imap
* Fetch body structure from the IMAP server and build
* an object structure similar to the one generated by PEAR::Mail_mimeDecode
*
- * @param Int Message UID to fetch
- * @return object Standard object tree or False on failure
+ * @param int Message UID to fetch
+ * @return object stdClass Message part tree or False on failure
*/
function &get_structure($uid)
{
@@ -1136,7 +1142,7 @@ class rcube_imap
/**
* Return a flat array with references to all parts, indexed by part numbers
*
- * @param object Message body structure
+ * @param object rcube_message_part Message body structure
* @return Array with part number -> object pairs
*/
function get_mime_numbers(&$structure)
@@ -1150,7 +1156,7 @@ class rcube_imap
/**
* Helper method for recursive calls
*
- * @access
+ * @access private
*/
function _get_part_numbers(&$part, &$a_parts)
{
@@ -1168,9 +1174,9 @@ class rcube_imap
*
* @param int Message UID
* @param string Part number
- * @param object Part object created by get_structure()
+ * @param object rcube_message_part Part object created by get_structure()
* @param mixed True to print part, ressource to write part contents in
- * @return Message/part body if not printed
+ * @return string Message/part body if not printed
*/
function &get_message_part($uid, $part=1, $o_part=NULL, $print=NULL)
{
@@ -1223,8 +1229,8 @@ class rcube_imap
* Fetch message body of a specific message from the server
*
* @param int Message UID
- * @return Message/part body
- * @see ::get_message_part()
+ * @return string Message/part body
+ * @see rcube_imap::get_message_part()
*/
function &get_body($uid, $part=1)
{
@@ -1236,15 +1242,15 @@ class rcube_imap
* Returns the whole message source as string
*
* @param int Message UID
- * @return Message source string
+ * @return string Message source string
*/
function &get_raw_body($uid)
{
if (!($msg_id = $this->_uid2id($uid)))
return FALSE;
- $body = iil_C_FetchPartHeader($this->conn, $this->mailbox, $msg_id, NULL);
- $body .= iil_C_HandlePartBody($this->conn, $this->mailbox, $msg_id, NULL, 1);
+ $body = iil_C_FetchPartHeader($this->conn, $this->mailbox, $msg_id, NULL);
+ $body .= iil_C_HandlePartBody($this->conn, $this->mailbox, $msg_id, NULL, 1);
return $body;
}
@@ -1260,9 +1266,9 @@ class rcube_imap
if (!($msg_id = $this->_uid2id($uid)))
return FALSE;
- print iil_C_FetchPartHeader($this->conn, $this->mailbox, $msg_id, NULL);
- flush();
- iil_C_HandlePartBody($this->conn, $this->mailbox, $msg_id, NULL, 2);
+ print iil_C_FetchPartHeader($this->conn, $this->mailbox, $msg_id, NULL);
+ flush();
+ iil_C_HandlePartBody($this->conn, $this->mailbox, $msg_id, NULL, 2);
}
@@ -1271,7 +1277,7 @@ class rcube_imap
*
* @param mixed Message UIDs as array or as comma-separated string
* @param string Flag to set: SEEN, UNDELETED, DELETED, RECENT, ANSWERED, DRAFT
- * @return True on success, False on failure
+ * @return boolean True on success, False on failure
*/
function set_flag($uids, $flag)
{
@@ -1324,7 +1330,13 @@ class rcube_imap
}
- // append a mail message (source) to a specific mailbox
+ /**
+ * Append a mail message (source) to a specific mailbox
+ *
+ * @param string Target mailbox
+ * @param string Message source
+ * @return boolean True on success, False on error
+ */
function save_message($mbox_name, &$message)
{
$mbox_name = stripslashes($mbox_name);
@@ -1344,7 +1356,14 @@ class rcube_imap
}
- // move a message from one mailbox to another
+ /**
+ * Move a message from one mailbox to another
+ *
+ * @param string List of UIDs to move, separated by comma
+ * @param string Target mailbox
+ * @param string Source mailbox
+ * @return boolean True on success, False on error
+ */
function move_message($uids, $to_mbox, $from_mbox='')
{
$to_mbox = stripslashes($to_mbox);
@@ -1408,7 +1427,13 @@ class rcube_imap
}
- // mark messages as deleted and expunge mailbox
+ /**
+ * Mark messages as deleted and expunge mailbox
+ *
+ * @param string List of UIDs to move, separated by comma
+ * @param string Source mailbox
+ * @return boolean True on success, False on error
+ */
function delete_message($uids, $mbox_name='')
{
$mbox_name = stripslashes($mbox_name);
@@ -1460,7 +1485,12 @@ class rcube_imap
}
- // clear all messages in a specific mailbox
+ /**
+ * Clear all messages in a specific mailbox
+ *
+ * @param string Mailbox name
+ * @return int Above 0 on success
+ */
function clear_mailbox($mbox_name=NULL)
{
$mbox_name = stripslashes($mbox_name);
@@ -1487,7 +1517,13 @@ class rcube_imap
}
- // send IMAP expunge command and clear cache
+ /**
+ * Send IMAP expunge command and clear cache
+ *
+ * @param string Mailbox name
+ * @param boolean False if cache should not be cleared
+ * @return boolean True on success
+ */
function expunge($mbox_name='', $clear_cache=TRUE)
{
$mbox_name = stripslashes($mbox_name);
@@ -1496,7 +1532,12 @@ class rcube_imap
}
- // send IMAP expunge command and clear cache
+ /**
+ * Send IMAP expunge command and clear cache
+ *
+ * @see rcube_imap::expunge()
+ * @access private
+ */
function _expunge($mailbox, $clear_cache=TRUE)
{
$result = iil_C_Expunge($this->conn, $mailbox);
@@ -1520,7 +1561,7 @@ class rcube_imap
* Get a list of all folders available on the IMAP server
*
* @param string IMAP root dir
- * @return array Inbdexed array with folder names
+ * @return array Indexed array with folder names
*/
function list_unsubscribed($root='')
{
@@ -1547,8 +1588,10 @@ class rcube_imap
/**
- * Get quota
+ * Get mailbox quota information
* added by Nuny
+ *
+ * @return mixed Quota info or False if not supported
*/
function get_quota()
{
@@ -1560,9 +1603,12 @@ class rcube_imap
/**
- * subscribe to a specific mailbox(es)
+ * Subscribe to a specific mailbox(es)
+ *
+ * @param string Mailbox name(s)
+ * @return boolean True on success
*/
- function subscribe($mbox_name, $mode='subscribe')
+ function subscribe($mbox_name)
{
if (is_array($mbox_name))
$a_mboxes = $mbox_name;
@@ -1575,7 +1621,10 @@ class rcube_imap
/**
- * unsubscribe mailboxes
+ * Unsubscribe mailboxes
+ *
+ * @param string Mailbox name(s)
+ * @return boolean True on success
*/
function unsubscribe($mbox_name)
{
@@ -1625,7 +1674,7 @@ class rcube_imap
*
* @param string Mailbox to rename (as utf-7 string)
* @param string New mailbox name (as utf-7 string)
- * @param string Name of the renames mailbox, false on error
+ * @return string Name of the renames mailbox, False on error
*/
function rename_mailbox($mbox_name, $new_name)
{
@@ -1668,7 +1717,10 @@ class rcube_imap
/**
- * remove mailboxes from server
+ * Remove mailboxes from server
+ *
+ * @param string Mailbox name
+ * @return boolean True on success
*/
function delete_mailbox($mbox_name)
{
@@ -1736,7 +1788,9 @@ class rcube_imap
* internal caching methods
* --------------------------------*/
-
+ /**
+ * @access private
+ */
function set_caching($set)
{
if ($set && is_object($this->db))
@@ -1745,7 +1799,9 @@ class rcube_imap
$this->caching_enabled = FALSE;
}
-
+ /**
+ * @access private
+ */
function get_cache($key)
{
// read cache
@@ -1758,7 +1814,9 @@ class rcube_imap
return $this->cache[$key];
}
-
+ /**
+ * @access private
+ */
function update_cache($key, $data)
{
$this->cache[$key] = $data;
@@ -1766,7 +1824,9 @@ class rcube_imap
$this->cache_changes[$key] = TRUE;
}
-
+ /**
+ * @access private
+ */
function write_cache()
{
if ($this->caching_enabled && $this->cache_changed)
@@ -1779,7 +1839,9 @@ class rcube_imap
}
}
-
+ /**
+ * @access private
+ */
function clear_cache($key=NULL)
{
if ($key===NULL)
@@ -1799,8 +1861,9 @@ class rcube_imap
}
}
-
-
+ /**
+ * @access private
+ */
function _read_cache_record($key)
{
$cache_data = FALSE;
@@ -1823,10 +1886,12 @@ class rcube_imap
}
}
- return $cache_data;
+ return $cache_data;
}
-
+ /**
+ * @access private
+ */
function _write_cache_record($key, $data)
{
if (!$this->db)
@@ -1875,7 +1940,9 @@ class rcube_imap
}
}
-
+ /**
+ * @access private
+ */
function _clear_cache_record($key)
{
$this->db->query(
@@ -1893,8 +1960,13 @@ class rcube_imap
* --------------------------------*/
- // checks if the cache is up-to-date
- // return: -3 = off, -2 = incomplete, -1 = dirty
+ /**
+ * Checks if the cache is up-to-date
+ *
+ * @param string Mailbox name
+ * @param string Internal cache key
+ * @return int -3 = off, -2 = incomplete, -1 = dirty
+ */
function check_cache_status($mailbox, $cache_key)
{
if (!$this->caching_enabled)
@@ -1926,8 +1998,9 @@ class rcube_imap
return -2;
}
-
-
+ /**
+ * @access private
+ */
function get_message_cache($key, $from, $to, $sort_field, $sort_order)
{
$cache_key = "$key:$from:$to:$sort_field:$sort_order";
@@ -1961,7 +2034,9 @@ class rcube_imap
return $this->cache[$cache_key];
}
-
+ /**
+ * @access private
+ */
function &get_cached_message($key, $uid, $struct=false)
{
if (!$this->caching_enabled)
@@ -1993,7 +2068,9 @@ class rcube_imap
return $this->cache[$internal_key][$uid];
}
-
+ /**
+ * @access private
+ */
function get_message_cache_index($key, $force=FALSE, $sort_col='idx', $sort_order='ASC')
{
static $sa_message_index = array();
@@ -2021,7 +2098,9 @@ class rcube_imap
return $sa_message_index[$key];
}
-
+ /**
+ * @access private
+ */
function add_message_cache($key, $index, $headers, $struct=null)
{
if (!$this->caching_enabled || empty($key) || !is_object($headers) || empty($headers->uid))
@@ -2073,7 +2152,9 @@ class rcube_imap
}
}
-
+ /**
+ * @access private
+ */
function remove_message_cache($key, $index)
{
$this->db->query(
@@ -2086,7 +2167,9 @@ class rcube_imap
$index);
}
-
+ /**
+ * @access private
+ */
function clear_message_cache($key, $start_index=1)
{
$this->db->query(
@@ -2106,7 +2189,14 @@ class rcube_imap
* encoding/decoding methods
* --------------------------------*/
-
+ /**
+ * Split an address list into a structured array list
+ *
+ * @param string Input string
+ * @param int List only this number of addresses
+ * @param boolean Decode address strings
+ * @return array Indexed list of addresses
+ */
function decode_address_list($input, $max=null, $decode=true)
{
$a = $this->_parse_address_list($input, $decode);
@@ -2142,6 +2232,13 @@ class rcube_imap
}
+ /**
+ * Decode a message header value
+ *
+ * @param string Header value
+ * @param boolean Remove quotes if necessary
+ * @return string Decoded string
+ */
function decode_header($input, $remove_quotes=FALSE)
{
$str = $this->decode_mime_string((string)$input);
@@ -2155,7 +2252,10 @@ class rcube_imap
/**
* Decode a mime-encoded string to internal charset
*
- * @access static
+ * @param string Header value
+ * @param string Fallback charset if none specified
+ * @return string Decoded string
+ * @static
*/
function decode_mime_string($input, $fallback=null)
{
@@ -2187,7 +2287,7 @@ class rcube_imap
/**
* Decode a part of a mime-encoded string
*
- * @access static
+ * @access private
*/
function _decode_mime_string_part($str)
{
@@ -2215,6 +2315,14 @@ class rcube_imap
}
+ /**
+ * Decode a mime part
+ *
+ * @param string Input string
+ * @param string Part encoding
+ * @return string Decoded string
+ * @access private
+ */
function mime_decode($input, $encoding='7bit')
{
switch (strtolower($encoding))
@@ -2237,25 +2345,13 @@ class rcube_imap
}
- function mime_encode($input, $encoding='7bit')
- {
- switch ($encoding)
- {
- case 'quoted-printable':
- return quoted_printable_encode($input);
- break;
-
- case 'base64':
- return base64_encode($input);
- break;
-
- default:
- return $input;
- }
- }
-
-
- // convert body chars according to the ctype_parameters
+ /**
+ * Convert body charset to UTF-8 according to the ctype_parameters
+ *
+ * @param string Part body to decode
+ * @param string Charset to convert from
+ * @return string Content converted to internal charset
+ */
function charset_decode($body, $ctype_param)
{
if (is_array($ctype_param) && !empty($ctype_param['charset']))
@@ -2266,6 +2362,33 @@ class rcube_imap
}
+ /**
+ * Translate UID to message ID
+ *
+ * @param int Message UID
+ * @param string Mailbox name
+ * @return int Message ID
+ */
+ function get_id($uid, $mbox_name=NULL)
+ {
+ $mailbox = $mbox_name ? $this->_mod_mailbox($mbox_name) : $this->mailbox;
+ return $this->_uid2id($uid, $mailbox);
+ }
+
+
+ /**
+ * Translate message number to UID
+ *
+ * @param int Message ID
+ * @param string Mailbox name
+ * @return int Message UID
+ */
+ function get_uid($id,$mbox_name=NULL)
+ {
+ $mailbox = $mbox_name ? $this->_mod_mailbox($mbox_name) : $this->mailbox;
+ return $this->_id2uid($id, $mailbox);
+ }
+
/* --------------------------------
@@ -2273,6 +2396,9 @@ class rcube_imap
* --------------------------------*/
+ /**
+ * @access private
+ */
function _mod_mailbox($mbox_name, $mode='in')
{
if ((!empty($this->root_ns) && $this->root_ns == $mbox_name) || $mbox_name == 'INBOX')
@@ -2287,7 +2413,10 @@ class rcube_imap
}
- // sort mailboxes first by default folders and then in alphabethical order
+ /**
+ * Sort mailboxes first by default folders and then in alphabethical order
+ * @access private
+ */
function _sort_mailbox_list($a_folders)
{
$a_out = $a_defaults = array();
@@ -2296,10 +2425,10 @@ class rcube_imap
foreach($a_folders as $i => $folder)
{
if ($folder{0}=='.')
- continue;
+ continue;
if (($p = array_search(strtolower($folder), $this->default_folders_lc))!==FALSE)
- $a_defaults[$p] = $folder;
+ $a_defaults[$p] = $folder;
else
$a_out[] = $folder;
}
@@ -2310,18 +2439,9 @@ class rcube_imap
return array_merge($a_defaults, $a_out);
}
- function get_id($uid, $mbox_name=NULL)
- {
- $mailbox = $mbox_name ? $this->_mod_mailbox($mbox_name) : $this->mailbox;
- return $this->_uid2id($uid, $mailbox);
- }
-
- function get_uid($id,$mbox_name=NULL)
- {
- $mailbox = $mbox_name ? $this->_mod_mailbox($mbox_name) : $this->mailbox;
- return $this->_id2uid($id, $mailbox);
- }
-
+ /**
+ * @access private
+ */
function _uid2id($uid, $mbox_name=NULL)
{
if (!$mbox_name)
@@ -2333,6 +2453,9 @@ class rcube_imap
return $this->uid_id_map[$mbox_name][$uid];
}
+ /**
+ * @access private
+ */
function _id2uid($id, $mbox_name=NULL)
{
if (!$mbox_name)
@@ -2342,7 +2465,10 @@ class rcube_imap
}
- // parse string or array of server capabilities and put them in internal array
+ /**
+ * Parse string or array of server capabilities and put them in internal array
+ * @access private
+ */
function _parse_capability($caps)
{
if (!is_array($caps))
@@ -2369,7 +2495,10 @@ class rcube_imap
}
- // subscribe/unsubscribe a list of mailboxes and update local cache
+ /**
+ * Subscribe/unsubscribe a list of mailboxes and update local cache
+ * @access private
+ */
function _change_subscription($a_mboxes, $mode)
{
$updated = FALSE;
@@ -2410,7 +2539,10 @@ class rcube_imap
}
- // increde/decrese messagecount for a specific mailbox
+ /**
+ * Increde/decrese messagecount for a specific mailbox
+ * @access private
+ */
function _set_messagecount($mbox_name, $mode, $increment)
{
$a_mailbox_cache = FALSE;
@@ -2436,7 +2568,10 @@ class rcube_imap
}
- // remove messagecount of a specific mailbox from cache
+ /**
+ * Remove messagecount of a specific mailbox from cache
+ * @access private
+ */
function _clear_messagecount($mbox_name='')
{
$a_mailbox_cache = FALSE;
@@ -2452,7 +2587,10 @@ class rcube_imap
}
- // split RFC822 header string into an associative array
+ /**
+ * Split RFC822 header string into an associative array
+ * @access private
+ */
function _parse_headers($headers)
{
$a_headers = array();
@@ -2473,6 +2611,9 @@ class rcube_imap
}
+ /**
+ * @access private
+ */
function _parse_address_list($str, $decode=true)
{
// remove any newlines and carriage returns before
@@ -2501,6 +2642,9 @@ class rcube_imap
}
+ /**
+ * @access private
+ */
function _explode_quoted_string($delimiter, $string)
{
$result = array();
@@ -2519,11 +2663,14 @@ class rcube_imap
$result[] = substr($string, $p);
return $result;
}
- }
+
+} // end class rcube_imap
/**
* Class representing a message part
+ *
+ * @package Mail
*/
class rcube_message_part
{
@@ -2544,10 +2691,9 @@ class rcube_message_part
/**
- * rcube_header_sorter
- *
* Class for sorting an array of iilBasicHeader objects in a predetermined order.
*
+ * @package Mail
* @author Eric Stadtherr
*/
class rcube_header_sorter
@@ -2555,9 +2701,9 @@ class rcube_header_sorter
var $sequence_numbers = array();
/**
- * set the predetermined sort order.
+ * Set the predetermined sort order.
*
- * @param array $seqnums numerically indexed array of IMAP message sequence numbers
+ * @param array Numerically indexed array of IMAP message sequence numbers
*/
function set_sequence_numbers($seqnums)
{
@@ -2565,9 +2711,9 @@ class rcube_header_sorter
}
/**
- * sort the array of header objects
+ * Sort the array of header objects
*
- * @param array $headers array of iilBasicHeader objects indexed by UID
+ * @param array Array of iilBasicHeader objects indexed by UID
*/
function sort_headers(&$headers)
{
@@ -2582,9 +2728,10 @@ class rcube_header_sorter
}
/**
- * get the position of a message sequence number in my sequence_numbers array
+ * Get the position of a message sequence number in my sequence_numbers array
*
- * @param integer $seqnum message sequence number contained in sequence_numbers
+ * @param int Message sequence number contained in sequence_numbers
+ * @return int Position, -1 if not found
*/
function position_of($seqnum)
{
@@ -2620,10 +2767,10 @@ class rcube_header_sorter
/**
* Add quoted-printable encoding to a given string
*
- * @param string $input string to encode
- * @param int $line_max add new line after this number of characters
- * @param boolena $space_conf true if spaces should be converted into =20
- * @return encoded string
+ * @param string String to encode
+ * @param int Add new line after this number of characters
+ * @param boolean True if spaces should be converted into =20
+ * @return string Encoded string
*/
function quoted_printable_encode($input, $line_max=76, $space_conv=false)
{