Changeset 4157


Ignore:
Timestamp:
04/27/11 15:12:19 (8 years ago)
Author:
niltonneto
Message:

Ticket #1655 - #1751 - Solução p contagem de msgs em pasta acentuada sem degradar a performance

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/expressoMail1_2/inc/class.imap_functions.inc.php

    r4154 r4157  
    9999 
    100100    function get_range_msgs2($params) 
    101     { 
    102         // Free others requests 
    103         session_write_close(); 
    104          
    105         $folder                         = $params['folder']; 
    106         $msg_range_begin        = $params['msg_range_begin']; 
    107         $msg_range_end          = $params['msg_range_end']; 
    108         $sort_box_type          = $params['sort_box_type']; 
    109         $sort_box_reverse       = $params['sort_box_reverse']; 
    110         $search_box_type        = $params['search_box_type'] != "ALL" && $params['search_box_type'] != "" ? $params['search_box_type'] : false; 
    111  
    112         if( !$this->mbox || !is_resource( $this->mbox ) ) 
    113             $this->mbox = $this->open_mbox($folder); 
    114  
    115                 // Correção para caixas acentuadas; 
    116                 $name_folder = mb_convert_encoding($folder, "UTF7-IMAP","ISO_8859-1"); 
    117  
    118         $return = array(); 
     101        { 
     102                // Free others requests  
     103                session_write_close();  
     104                $folder = $params['folder']; 
     105                $msg_range_begin = $params['msg_range_begin']; 
     106                $msg_range_end = $params['msg_range_end']; 
     107                $sort_box_type = $params['sort_box_type']; 
     108                $sort_box_reverse = $params['sort_box_reverse']; 
     109                $search_box_type = $params['search_box_type'] != "ALL" && $params['search_box_type'] != "" ? $params['search_box_type'] : false; 
     110 
     111                if(!$this->mbox || !is_resource($this->mbox)) 
     112                        $this->mbox = $this->open_mbox($folder); 
    119113                 
    120                 $return['folder'] = $folder; 
     114                $return = array(); 
     115                //Para enviar o offset entre o timezone definido pelo usuário e GMT 
     116                $return['offsetToGMT'] = $this->functions->CalculateDateOffset(); 
    121117                 
    122         //Para enviar o offset entre o timezone definido pelo usuário e GMT 
    123         $return['offsetToGMT'] = $this->functions->CalculateDateOffset(); 
    124                                            
    125         $msgs_info   = imap_status( $this->mbox,"{".$this->imap_server.":".$this->imap_port.$this->imap_options."}".$name_folder ,SA_ALL ); 
    126         $num_msgs    = $msgs_info->messages; //imap_num_msg($this->mbox); 
    127          
    128         $sort_array_msg    = $this->get_msgs( $folder, $sort_box_type, $search_box_type, $sort_box_reverse, $msg_range_begin, $msg_range_end ); 
    129                  
    130                 // Total Msg Unseen 
    131         $return['tot_unseen']   = $msgs_info->unseen; 
    132  
    133                 // Total Msg 
    134         $return['num_msgs']             = $msgs_info->messages; 
    135         
    136         if( is_array($sort_array_msg) ) 
    137         { 
     118                if(!$search_box_type || $search_box_type=="UNSEEN" || $search_box_type=="SEEN") { 
     119                        $msgs_info = imap_status($this->mbox,"{".$this->imap_server.":".$this->imap_port.$this->imap_options."}".mb_convert_encoding( $folder, "UTF7-IMAP", "ISO_8859-1" ) ,SA_ALL); 
     120 
     121 
     122                        $return['tot_unseen'] = $search_box_type == "SEEN" ? 0 : $msgs_info->unseen; 
     123 
     124                        $sort_array_msg = $this-> get_msgs($folder, $sort_box_type, $search_box_type, $sort_box_reverse,$msg_range_begin,$msg_range_end); 
     125 
     126                        $num_msgs = ($search_box_type=="UNSEEN") ? $msgs_info->unseen : (($search_box_type=="SEEN") ? ($msgs_info->messages - $msgs_info->unseen) : $msgs_info->messages); 
     127 
    138128                        $i = 0; 
    139                          
    140             foreach($sort_array_msg as $msg_number => $value) 
    141             { 
    142                 $temp = $this->get_info_head_msg($msg_number); 
    143                 $temp['msg_sample'] = $this->get_msg_sample($msg_number,$folder); 
    144                 if(!$temp) 
    145                     return false; 
    146  
    147                 if($i <= ($msg_range_end-$msg_range_begin)) 
    148                     $return[$i] = $temp; 
    149                 
    150                 $i++; 
    151             } 
    152         } 
    153         
    154         return $return; 
    155     } 
     129                        if(is_array($sort_array_msg)){ 
     130                                foreach($sort_array_msg as $msg_number => $value) 
     131                                { 
     132                                        $temp = $this->get_info_head_msg($msg_number); 
     133                                        if(!$temp) 
     134                                                return false; 
     135 
     136                                        $return[$i] = $temp; 
     137                                        $i++; 
     138                                } 
     139                        } 
     140                        $return['num_msgs'] =  $num_msgs; 
     141                } 
     142                else { 
     143                        $num_msgs = imap_num_msg($this->mbox);   
     144                        $sort_array_msg = $this-> get_msgs($folder, $sort_box_type, $search_box_type, $sort_box_reverse,$msg_range_begin,$num_msgs); 
     145 
     146 
     147                        $return['tot_unseen'] = 0; 
     148                        $i = 0;          
     149 
     150                        if(is_array($sort_array_msg)){ 
     151                                foreach($sort_array_msg as $msg_number => $value) 
     152                                { 
     153                                        $temp = $this->get_info_head_msg($msg_number); 
     154                                        if(!$temp) 
     155                                                return false; 
     156                                 
     157                                        if($temp['Unseen'] == 'U' || $temp['Recent'] == 'N'){ 
     158                                                $return['tot_unseen']++; 
     159                                        } 
     160                                 
     161                                        if($i <= ($msg_range_end-$msg_range_begin)) 
     162                                                $return[$i] = $temp; 
     163                                        $i++; 
     164                                } 
     165                        } 
     166                        $return['num_msgs'] = count($sort_array_msg)+($msg_range_begin-1); 
     167 
     168                } 
     169                return $return; 
     170        } 
    156171 
    157172        function get_info_head_msg($msg_number) 
Note: See TracChangeset for help on using the changeset viewer.