diff --git a/phpgwapi/inc/class.msg_imap_sock.inc.php b/phpgwapi/inc/class.msg_imap_sock.inc.php index c9a128240c..9ec55fba02 100644 --- a/phpgwapi/inc/class.msg_imap_sock.inc.php +++ b/phpgwapi/inc/class.msg_imap_sock.inc.php @@ -21,8 +21,10 @@ * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * \**************************************************************************/ + /* $Id$ */ + class msg extends msg_base - { + { /**************************************************************************\ * data analysis specific to IMAP data communications \**************************************************************************/ @@ -90,7 +92,7 @@ return False; } } - + /*! @function imap_read_port @abstract reads data from an IMAP server until the line that begins with the specified param "cmd_tag" @@ -179,7 +181,7 @@ $this->server_last_error_str = $line; // what should we return here IF there was a NO or BAD error ? // how about an empty array, how about FALSE ?? - + // TEST THIS ERROR DETECTION - empty array = error (BAD or NO) // empty the array $return_me = Array(); @@ -197,7 +199,7 @@ $this->server_last_error_str = 'imap unknown error in imap_read_port: "'.$line.'"'; // what should we return here IF there was a NO or BAD error ? // how about an empty array, how about FALSE ?? - + // TEST THIS ERROR DETECTION - empty array = error (BAD or NO) // empty the array $return_me = Array(); @@ -210,7 +212,7 @@ } return $return_me; } - + /*! @function report_svr_data @abstract reports server data array for debugging purposes @@ -231,7 +233,7 @@ echo 'imap: '.$calling_func_name.': last server completion line: "'.htmlspecialchars($this->server_last_ok_response).'"
'; } } - + /*! @function server_last_error @abstract implements IMAP_LAST_ERROR @@ -246,8 +248,7 @@ if ($this->debug >= 1) { echo 'imap: call to server_last_error
'; } return $this->server_last_error_str; } - - + /**************************************************************************\ * Functions NOT YET IMPLEMENTED \**************************************************************************/ @@ -348,8 +349,7 @@ if ($this->debug >= 1) { echo 'imap: call to not-yet-implemented socket function: search
'; } return $empty_return; } - - + /**************************************************************************\ * OPEN and CLOSE Server Connection \**************************************************************************/ @@ -393,10 +393,10 @@ $cmd_tag = 'L001'; $full_command = $cmd_tag.' LOGIN "'.quotemeta($user).'" "'.quotemeta($pass).'"'; $expecting = $cmd_tag; // may be followed by OK, NO, or BAD - + if ($this->debug >= 2) { echo 'imap: open: write_port: '. htmlspecialchars($full_command) .'
'; } if ($this->debug >= 2) { echo 'imap: open: expecting: "'. htmlspecialchars($expecting) .'" followed by OK, NO, or BAD
'; } - + if(!$this->write_port($full_command)) { if ($this->debug >= 1) { echo 'imap: open: could not write_port
'; } @@ -407,7 +407,7 @@ // server can spew some b.s. hello messages before the official response // read the server data $response_array = $this->imap_read_port($expecting); - + // TEST THIS ERROR DETECTION - empty array = error (BAD or NO) if (count($response_array) == 0) { @@ -425,7 +425,7 @@ if ($this->debug >= 2) { $this->report_svr_data($response_array, 'open', True); } if ($this->debug >= 1) { echo 'imap: open: Successful IMAP Login
'; } } - + // now that we have logged in, php's IMAP_OPEN would now select the desired folder if ($this->debug >= 2) { echo 'imap: open: php IMAP_OPEN would now select desired folder: "'. htmlspecialchars($folder) .'"
'; } // php's IMAP_OPEN also selects the desired folder (mailbox) after the connection is established @@ -440,24 +440,24 @@ function close($flags="") { if ($this->debug >= 1) { echo 'imap: Entering Close
'; } - + $cmd_tag = 'c001'; $full_command = $cmd_tag.' LOGOUT'; $expecting = $cmd_tag; // may be followed by OK, NO, or BAD - + if ($this->debug >= 2) { echo 'imap: close: write_port: "'. htmlspecialchars($full_command) .'"
'; } if ($this->debug >= 2) { echo 'imap: close: expecting: "'. htmlspecialchars($expecting) .'" followed by OK, NO, or BAD
'; } - + if(!$this->write_port($full_command)) { if ($this->debug >= 1) { echo 'imap: close: could not write_port
'; } $this->error(); } - + // server can spew some b.s. goodbye message before the official response // read the server data $response_array = $this->imap_read_port($expecting); - + // TEST THIS ERROR DETECTION - empty array = error (BAD or NO) if (count($response_array) == 0) { @@ -468,7 +468,7 @@ echo $this->server_last_error().'
'; } if ($this->debug >= 1) { echo 'imap: Leaving Close with error
'; } - return False; + return False; } else { @@ -492,29 +492,29 @@ function reopen($stream_notused, $fq_folder, $flags='') { if ($this->debug >= 1) { echo 'imap: Entering reopen
'; } - + // fq_folder is a "fully qualified folder", seperate the parts: $svr_data = array(); $svr_data = $this->distill_fq_folder($fq_folder); $folder = $svr_data['folder']; if ($this->debug >= 1) { echo 'imap: reopen: folder value is: ['.$folder.']
'; } - + $cmd_tag = 'r001'; $full_command = $cmd_tag.' SELECT "'.$folder.'"'; $expecting = $cmd_tag; // may be followed by OK, NO, or BAD - + if ($this->debug >= 2) { echo 'imap: reopen: write_port: "'. htmlspecialchars($full_command) .'"
'; } if ($this->debug >= 2) { echo 'imap: reopen: expecting: "'. htmlspecialchars($expecting) .'" followed by OK, NO, or BAD
'; } - + if(!$this->write_port($full_command)) { if ($this->debug >= 1) { echo 'imap: reopen: could not write_port
'; } $this->error(); } - + // read the server data $response_array = $this->imap_read_port($expecting); - + // TEST THIS ERROR DETECTION - empty array = error (BAD or NO) if (count($response_array) == 0) { @@ -525,7 +525,7 @@ echo $this->server_last_error().'
'; } if ($this->debug >= 1) { echo 'imap: Leaving reopen with error
'; } - return False; + return False; } else { @@ -568,7 +568,7 @@ { if ($this->debug >= 1) { echo 'imap: Entering listmailbox
'; } $mailboxes_array = Array(); - + // prepare params, seperate wildcards "*" or "%" from param $pattern // LIST param 1 is empty or is a mailbox reference string withOUT any wildcard // LIST param 2 is empty or is the wildcard either "%" or "*" @@ -604,7 +604,7 @@ $cmd_tag = 'X001'; $full_command = $cmd_tag.' LIST '.$list_params; $expecting = $cmd_tag; // may be followed by OK, NO, or BAD - + if ($this->debug >= 2) { echo 'imap: listmailbox: write_port: ['. htmlspecialchars($full_command) .']
'; } if ($this->debug >= 2) { echo 'imap: listmailbox: expecting: "'. htmlspecialchars($expecting) .'" followed by OK, NO, or BAD
'; } @@ -613,10 +613,10 @@ if ($this->debug >= 1) { echo 'imap: listmailbox: could not write_port
'; } $this->error(); } - + // read the server data $response_array = $this->imap_read_port($expecting); - + // TEST THIS ERROR DETECTION - empty array = error (BAD or NO) if (count($response_array) == 0) { @@ -627,13 +627,13 @@ echo $this->server_last_error().'
'; } if ($this->debug >= 1) { echo 'imap: Leaving listmailbox with error
'; } - return False; + return False; } else { if ($this->debug >= 2) { $this->report_svr_data($response_array, 'reopen', True); } } - + // delete all text except the folder name for ($i=0; $idebug >= 2) { $this->report_svr_data($mailboxes_array, 'listmailbox INTERNAL_mailboxes_array', False); } if ($this->debug >= 1) { echo 'imap: Leaving listmailbox
'; } //return ''; return $mailboxes_array; } - + // OBSOLETED function fix_folder($folder) { @@ -698,17 +698,17 @@ } return $folder; } - + /**************************************************************************\ * Mailbox Status and Information \**************************************************************************/ - + function mailboxmsginfo($stream_notused='') { if ($this->debug >= 1) { echo 'imap: mailboxmsginfo
'; } return False; } - + /* function mailboxmsginfo($folder='') { @@ -730,10 +730,10 @@ { $mailbox = $folder; } - + $info->messages = $this->num_msgs($mailbox); $info->size = $this->total($this->fetch_field(1,$info->messages,'RFC822.SIZE')); - + if ($info->messages) { return $info; @@ -744,7 +744,7 @@ } } */ - + /*! @function status @abstract implements php function IMAP_STATUS @@ -773,11 +773,11 @@ // build the query string $query_str = ''; $available_options = Array( - SA_MESSAGES => 'MESSAGES', - SA_RECENT => 'RECENT', - SA_UNSEEN => 'UNSEEN', - SA_UIDNEXT => 'UIDNEXT', - SA_UIDVALIDITY => 'UIDVALIDITY' + SA_MESSAGES => 'MESSAGES', + SA_RECENT => 'RECENT', + SA_UNSEEN => 'UNSEEN', + SA_UIDNEXT => 'UIDNEXT', + SA_UIDVALIDITY => 'UIDVALIDITY' ); @reset($available_options); while(list($key,$value) = each($available_options)) @@ -788,22 +788,22 @@ } } $query_str = trim($query_str); - + $cmd_tag = 's001'; //$full_command = $cmd_tag.' STATUS '.$svr_data['folder'].' (MESSAGES RECENT UIDNEXT UIDVALIDITY UNSEEN)'; $full_command = $cmd_tag.' STATUS "'.$svr_data['folder'].'" ('.$query_str.')'; $expecting = $cmd_tag; // may be followed by OK, NO, or BAD - + if ($this->debug >= 2) { echo 'imap: status: write_port: "'. htmlspecialchars($full_command) .'"
'; } if ($this->debug >= 2) { echo 'imap: status: expecting: "'. htmlspecialchars($expecting) .'" followed by OK, NO, or BAD
'; } - + if(!$this->write_port($full_command)) { if ($this->debug >= 1) { echo 'imap: status: could not write_port
'; } $this->error(); - return False; + return False; } - + // read the server data $response_array = $this->imap_read_port($expecting); @@ -817,7 +817,7 @@ echo $this->server_last_error().'
'; } if ($this->debug >= 1) { echo 'imap: Leaving status with error
'; } - return False; + return False; } // STATUS should only return 1 line of data if (count($response_array) > 1) @@ -829,12 +829,12 @@ echo $this->server_last_error().'
'; } if ($this->debug >= 1) { echo 'imap: Leaving status with error
'; } - return False; + return False; } - + // if we get here we have valid server data if ($this->debug >= 2) { $this->report_svr_data($response_array, 'status', True); } - + // initialize structure $info = new mailbox_status; $info->messages = ''; @@ -842,20 +842,20 @@ $info->unseen = ''; $info->uidnext = ''; $info->uidvalidity = ''; - + //typical server data: // * STATUS INBOX (MESSAGES 15 RECENT 1 UNSEEN 2 UIDNEXT 17 UIDVALIDITY 1005967489) // data starts after the mailbox name, which could actually have similar strings as the status querey // get data the includes and follows the opening paren $status_data_raw = strstr($response_array[0], '('); - + // snarf any of the 5 possible pieces of data if they are present $status_data['messages'] = $this->snarf_status_data($status_data_raw, 'MESSAGES'); $status_data['recent'] = $this->snarf_status_data($status_data_raw, 'RECENT'); $status_data['unseen'] = $this->snarf_status_data($status_data_raw, 'UNSEEN'); $status_data['uidnext'] = $this->snarf_status_data($status_data_raw, 'UIDNEXT'); $status_data['uidvalidity'] = $this->snarf_status_data($status_data_raw, 'UIDVALIDITY'); - + // fill structure and unset any unfilled data elements if ($status_data['messages'] != '') { @@ -901,7 +901,7 @@ if ($this->debug >= 1) { echo 'imap: Leaving status
'; } return $info; } - + function snarf_status_data($status_raw_str='',$snarf_this='') { // bogus data detection @@ -912,10 +912,10 @@ } // fallback value $return_data = ''; - + //typical server data: // * STATUS INBOX (MESSAGES 15 RECENT 1 UNSEEN 2 UIDNEXT 17 UIDVALIDITY 1005967489) - + // see if $snarf_this is in the raw data $data_mini_str = stristr($status_raw_str, $snarf_this); if ($data_mini_str != False) @@ -947,7 +947,7 @@ } return $return_data; } - + // OBSOLETED function num_msg($folder='') { @@ -957,7 +957,7 @@ } return $this->status_query($folder,'MESSAGES'); } - + // OBSOLETED function total($field) { @@ -969,19 +969,19 @@ } return $total; } - + /**************************************************************************\ * Message Sorting \**************************************************************************/ // options/flags are: - //SE_UID Return UIDs instead of sequence numbers - //SE_NOPREFETCH Don't prefetch searched messages. + //SE_UID Return UIDs instead of sequence numbers + //SE_NOPREFETCH Don't prefetch searched messages. function sort($stream_notused='',$criteria=SORTARRIVAL,$reverse=False,$options='') { if ($this->debug >= 1) { echo 'imap: sort
'; } return False; } - + /* function sort($folder='',$criteria=SORTDATE,$reverse=False,$options='') { @@ -1029,7 +1029,7 @@ else { uasort($field_list,array($this,"ssort_decending")); - } + } } elseif(!$reverse) { @@ -1051,7 +1051,7 @@ return $return_array; } */ - + /**************************************************************************\ * * Message Structural Information @@ -1063,7 +1063,7 @@ if ($this->debug >= 1) { echo 'imap: fetchstructure
'; } return False; } - + /* function fetchstructure($msgnum) { @@ -1098,8 +1098,7 @@ return $this->header; } */ - - + /**************************************************************************\ * Message Envelope (Header Info) Data \**************************************************************************/ @@ -1108,12 +1107,11 @@ if ($this->debug >= 1) { echo 'imap: header
'; } return False; } - - + /**************************************************************************\ * More Data Communications (dcom) With IMAP Server \**************************************************************************/ - + /**************************************************************************\ * DELETE a Message From the Server \**************************************************************************/ @@ -1122,8 +1120,7 @@ if ($this->debug >= 1) { echo 'imap: delete
'; } return False; } - - + /**************************************************************************\ * Get Message Headers From Server \**************************************************************************/ @@ -1133,7 +1130,7 @@ if ($this->debug >= 1) { echo 'imap: fetchheader
'; } return False; } - + function fetch_header($start,$stop,$element) { if(!$this->write_port('a001 FETCH '.$start.':'.$stop.' RFC822.HEADER')) @@ -1169,8 +1166,7 @@ $response = $this->read_port(); return $field_element; } - - + function fetch_field($start,$stop,$element) { if(!$this->write_port('a001 FETCH '.$start.':'.$stop.' '.$element)) @@ -1188,9 +1184,8 @@ $response = $this->read_port(); } return $field_element; - } - - + } + /**************************************************************************\ * Get Message Body (Parts) From Server \**************************************************************************/ @@ -1199,7 +1194,7 @@ if ($this->debug >= 1) { echo 'imap: fetchbody
'; } return False; } - + /*! @function get_body @abstract implements IMAP_BODY @@ -1210,7 +1205,5 @@ if ($this->debug >= 1) { echo 'imap: get_body
'; } return False; } - } - ?> diff --git a/phpgwapi/inc/class.msg_nntp.inc.php b/phpgwapi/inc/class.msg_nntp.inc.php index 80cb5f2b60..2a66085770 100644 --- a/phpgwapi/inc/class.msg_nntp.inc.php +++ b/phpgwapi/inc/class.msg_nntp.inc.php @@ -1,7 +1,7 @@ '.'userid='.$GLOBALS['phpgw_info']['user']['preferences']['email']['userid']; } - + error_reporting(error_reporting() - 2); if($folder!='INBOX') { @@ -205,4 +205,3 @@ return $folder_str; } } // end of class msg - diff --git a/phpgwapi/inc/class.msg_nntp_sock.inc.php b/phpgwapi/inc/class.msg_nntp_sock.inc.php index e6038b7d9b..3c2a2e1fe0 100644 --- a/phpgwapi/inc/class.msg_nntp_sock.inc.php +++ b/phpgwapi/inc/class.msg_nntp_sock.inc.php @@ -21,178 +21,197 @@ * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * \**************************************************************************/ - class msg extends msg_base - { - var $db; - var $folder; - var $start_msg; - var $end_msg; + /* $Id$ */ - function mode_reader() + class msg extends msg_base { - return $this->msg2socket('mode reader','^20[01]',&$response); - } + var $db; + var $folder; + var $start_msg; + var $end_msg; - function login ($user,$passwd,$server,$port,$folder = '') - { - global $phpgw; - - $this->db = $phpgw->db; - - if(@!$server) + function mode_reader() { - echo 'Error: Configuration Error! The administrator has not configured the NNTP Server.'; - } - - if(@!$port) - { - $port = 119; + return $this->msg2socket('mode reader','^20[01]',&$response); } - if (!$this->open_port($server,$port,15)) + function login ($user,$passwd,$server,$port,$folder = '') { - $this->error(); - } - $this->read_port(); + $this->db = $GLOBALS['phpgw']->db; - if ($user <> '' && $passwd <> '') - { - if (!$this->msg2socket('authinfo user '.$user,'^381',&$response)) + if(@!$server) + { + echo 'Error: Configuration Error! The administrator has not configured the NNTP Server.'; + } + + if(@!$port) + { + $port = 119; + } + + if (!$this->open_port($server,$port,15)) { $this->error(); } - if (!$this->msg2socket('authinfo pass '.$passwd,'^281',&$response)) + $this->read_port(); + + if ($user <> '' && $passwd <> '') + { + if (!$this->msg2socket('authinfo user '.$user,'^381',&$response)) + { + $this->error(); + } + if (!$this->msg2socket('authinfo pass '.$passwd,'^281',&$response)) + { + $this->error(); + } + } + if (!$this->mode_reader()) { $this->error(); } - } - if (!$this->mode_reader()) - { - $this->error(); - } - if(!$folder) - { - $folder = $this->get_first_folder(); if(!$folder) { - $this->error(); + $folder = $this->get_first_folder(); + if(!$folder) + { + $this->error(); + } } + $this->folder = $folder; + $this->mailbox = $this->get_mailbox_name($folder); + $this->num_msgs = $this->num_msg($this->mailbox); + $this->start_msg = $this->first_message($this->mailbox); + $this->end_msg = $this->last_message($this->mailbox); + echo 'Successful connection to '.$this->mailbox."
\n"; } - $this->folder = $folder; - $this->mailbox = $this->get_mailbox_name($folder); - $this->num_msgs = $this->num_msg($this->mailbox); - $this->start_msg = $this->first_message($this->mailbox); - $this->end_msg = $this->last_message($this->mailbox); - echo 'Successful connection to '.$this->mailbox."
\n"; - } - function fix_folder($folder='') - { - if($folder=='') + function fix_folder($folder='') { - $mailbox = $this->mailbox; - } - elseif(is_int($folder)) - { - $mailbox = $this->get_mailbox_name($folder); - } - else - { - $mailbox = $folder; - } - return $mailbox; - } - - function get_first_folder() - { - if(@!$GLOBALS['phpgw_info']['user']['preferences']['nntp']) - { - $this->set_error('Configuration','User Preferences','You have not set your user preferences in NNTP.'); - $this->error(); - } - else - { - $pref = @each($GLOBALS['phpgw_info']['user']['preferences']['nntp']); - return $pref[0]; - } - } - - function get_mailbox_name($folder) - { - $active = False; - $this->db->query('SELECT name,active FROM newsgroups WHERE con='.$folder,_LINE__,__FILE__); - if ($this->db->num_rows() > 0) - { - $this->db->next_record(); - $mailbox = $this->db->f('name'); - } - if ($this->db->f('active') != 'Y') - { - $GLOBALS['phpgw']->preferences->delete('nntp',$folder); - $GLOBALS['phpgw']->preferences->save_repository(); - - $this->set_error('Administration','Automatic Disabling','The newsgroup '.$mailbox.' is not activated by the Administrator.'); - $this->error(); - } - return $mailbox; - } - - function get_mailbox_counts($folder='',$index=1) - { - $mailbox = $this->fix_folder($folder); - if (!$this->msg2socket('group '.$mailbox,'^211',&$response)) - { - $this->error(); - } - $temp_array = explode(' ',$response); - return $temp_array[$index]; - } - - function num_msg($folder='') - { - if(($folder == '' || $folder == $this->mailbox) && isset($this->num_msgs)) - { - return $this->num_msgs; - } - return $this->get_mailbox_counts($folder,1); - } - - function first_message($folder='') - { - if(($folder == '' || $folder == $this->mailbox) && isset($this->start_msg)) - { - return $this->start_msg; - } - return $this->get_mailbox_counts($folder,2); - } - - function last_message($folder='') - { - if(($folder == '' || $folder == $this->mailbox) && isset($this->end_msg)) - { - return $this->end_msg; - } - return $this->get_mailbox_counts($folder,3); - } - - function mailboxmsginfo($folder='') - { - $info = new msg_mb_info; - if($folder=='' || $folder==$this->mailbox || $folder==$this->folder) - { - if(isset($this->num_msgs)) + if($folder=='') { - $info->messages = $this->num_msgs; + $mailbox = $this->mailbox; + } + elseif(is_int($folder)) + { + $mailbox = $this->get_mailbox_name($folder); } else { - if($folder==$this->folder) - { - $this->mailbox = $this->get_mailbox_name($folder); - } - $info->messages = $this->num_msg($this->mailbox); + $mailbox = $folder; } + return $mailbox; + } + + function get_first_folder() + { + if(@!$GLOBALS['phpgw_info']['user']['preferences']['nntp']) + { + $this->set_error('Configuration','User Preferences','You have not set your user preferences in NNTP.'); + $this->error(); + } + else + { + $pref = @each($GLOBALS['phpgw_info']['user']['preferences']['nntp']); + return $pref[0]; + } + } + + function get_mailbox_name($folder) + { + $active = False; + $this->db->query('SELECT name,active FROM newsgroups WHERE con='.$folder,_LINE__,__FILE__); + if ($this->db->num_rows() > 0) + { + $this->db->next_record(); + $mailbox = $this->db->f('name'); + } + if ($this->db->f('active') != 'Y') + { + $GLOBALS['phpgw']->preferences->delete('nntp',$folder); + $GLOBALS['phpgw']->preferences->save_repository(); + + $this->set_error('Administration','Automatic Disabling','The newsgroup '.$mailbox.' is not activated by the Administrator.'); + $this->error(); + } + return $mailbox; + } + + function get_mailbox_counts($folder='',$index=1) + { + $mailbox = $this->fix_folder($folder); + if (!$this->msg2socket('group '.$mailbox,'^211',&$response)) + { + $this->error(); + } + $temp_array = explode(' ',$response); + return $temp_array[$index]; + } + + function num_msg($folder='') + { + if(($folder == '' || $folder == $this->mailbox) && isset($this->num_msgs)) + { + return $this->num_msgs; + } + return $this->get_mailbox_counts($folder,1); + } + + function first_message($folder='') + { + if(($folder == '' || $folder == $this->mailbox) && isset($this->start_msg)) + { + return $this->start_msg; + } + return $this->get_mailbox_counts($folder,2); + } + + function last_message($folder='') + { + if(($folder == '' || $folder == $this->mailbox) && isset($this->end_msg)) + { + return $this->end_msg; + } + return $this->get_mailbox_counts($folder,3); + } + + function mailboxmsginfo($folder='') + { + $info = new msg_mb_info; + if($folder=='' || $folder==$this->mailbox || $folder==$this->folder) + { + if(isset($this->num_msgs)) + { + $info->messages = $this->num_msgs; + } + else + { + if($folder==$this->folder) + { + $this->mailbox = $this->get_mailbox_name($folder); + } + $info->messages = $this->num_msg($this->mailbox); + } + $info->size = 0; + if ($info->messages) + { + return $info; + } + else + { + return False; + } + } + else + { + $mailbox = $this->fix_folder($folder); + } + + $info->messages = $this->num_msgs($mailbox); $info->size = 0; + + $this->num_msgs($this->mailbox); + if ($info->messages) { return $info; @@ -202,123 +221,104 @@ return False; } } - else + + function fetch_field($start,$stop,$element) { - $mailbox = $this->fix_folder($folder); + if (!$this->msg2socket('XHDR '.$element.' '.$start.'-'.$stop,'^221',&$response)) + { + $this->error(); + } + + $field_element = Array(); + while ($line = $this->read_port()) + { + $line = chop($line); + if ($line == '.') + { + break; + } + $breakpos = strpos($line,' '); + + $field_element[intval(substr($line,0,$breakpos-1))] = $this->phpGW_quoted_printable_decode2(substr($line,$breakpos+1)); + } + return $field_element; } - $info->messages = $this->num_msgs($mailbox); - $info->size = 0; - - $this->num_msgs($this->mailbox); - - if ($info->messages) + function status($folder='',$options=SA_ALL) { + $info = new mailbox_status; + $info->messages = $this->num_msg($folder); return $info; } - else - { - return False; - } - } - function fetch_field($start,$stop,$element) - { - if (!$this->msg2socket('XHDR '.$element.' '.$start.'-'.$stop,'^221',&$response)) + function sort($folder='',$criteria=SORTDATE,$reverse=False,$options='') { - $this->error(); - } - - $field_element = Array(); - while ($line = $this->read_port()) - { - $line = chop($line); - if ($line == '.') + if($folder == '' || $folder == $this->mailbox) { - break; - } - $breakpos = strpos($line,' '); - - $field_element[intval(substr($line,0,$breakpos-1))] = $this->phpGW_quoted_printable_decode2(substr($line,$breakpos+1)); - } - return $field_element; - } - - function status($folder='',$options=SA_ALL) - { - $info = new mailbox_status; - $info->messages = $this->num_msg($folder); - return $info; - } - - function sort($folder='',$criteria=SORTDATE,$reverse=False,$options='') - { - if($folder == '' || $folder == $this->mailbox) - { - $mailbox = $this->mailbox; - $start_msg = $this->start_msg; - $end_msg = $this->end_msg; - } - else - { - $mailbox = $this->fix_folder($folder); - $start_msg = $this->first_message($mailbox); - $end_msg = $this->last_message($mailbox); - } - - switch($criteria) - { - case SORTDATE: - $old_list = $this->fetch_field($start_msg,$end_msg,'Date'); - $field_list = $this->convert_date_array($old_list); - break; - case SORTARRIVAL: - break; - case SORTFROM: - $field_list = $this->fetch_field($start_msg,$end_msg,'From'); - break; - case SORTSUBJECT: - $field_list = $this->fetch_field($start_msg,$end_msg,'Subject'); - break; - case SORTTO: - $field_list = $this->fetch_field($start_msg,$end_msg,'To'); - break; - case SORTCC: - $field_list = $this->fetch_field($start_msg,$end_msg,'cc'); - break; - case SORTSIZE: - break; - } - @reset($field_list); - if($criteria == SORTSUBJECT) - { - if(!$reverse) - { - uasort($field_list,array($this,"ssort_ascending")); + $mailbox = $this->mailbox; + $start_msg = $this->start_msg; + $end_msg = $this->end_msg; } else { - uasort($field_list,array($this,"ssort_decending")); - } + $mailbox = $this->fix_folder($folder); + $start_msg = $this->first_message($mailbox); + $end_msg = $this->last_message($mailbox); + } + + switch($criteria) + { + case SORTDATE: + $old_list = $this->fetch_field($start_msg,$end_msg,'Date'); + $field_list = $this->convert_date_array($old_list); + break; + case SORTARRIVAL: + break; + case SORTFROM: + $field_list = $this->fetch_field($start_msg,$end_msg,'From'); + break; + case SORTSUBJECT: + $field_list = $this->fetch_field($start_msg,$end_msg,'Subject'); + break; + case SORTTO: + $field_list = $this->fetch_field($start_msg,$end_msg,'To'); + break; + case SORTCC: + $field_list = $this->fetch_field($start_msg,$end_msg,'cc'); + break; + case SORTSIZE: + break; + } + @reset($field_list); + if($criteria == SORTSUBJECT) + { + if(!$reverse) + { + uasort($field_list,array($this,"ssort_ascending")); + } + else + { + uasort($field_list,array($this,"ssort_decending")); + } + } + elseif(!$reverse) + { + asort($field_list); + } + else + { + arsort($field_list); + } + $return_array = Array(); + @reset($field_list); + $i = 1; + while(list($key,$value) = each($field_list)) + { + $return_array[] = $key; + echo '('.$i++.') Field: '.$value."\t\tMsg Num: ".$key."
\n"; + } + @reset($return_array); + return $return_array; } - elseif(!$reverse) - { - asort($field_list); - } - else - { - arsort($field_list); - } - $return_array = Array(); - @reset($field_list); - $i = 1; - while(list($key,$value) = each($field_list)) - { - $return_array[] = $key; - echo '('.$i++.') Field: '.$value."\t\tMsg Num: ".$key."
\n"; - } - @reset($return_array); - return $return_array; } -} ?>