Ignore:
Timestamp:
10/08/13 16:20:46 (11 years ago)
Author:
douglas
Message:

Ticket #0000 - Copiadas as alterações do Trunk. Versão final 2.5.1.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2.5/expressoMail1_2/inc/class.imap_functions.inc.php

    r8114 r8232  
    4242        var $useCache = false; 
    4343        var $expirationCache = false; 
    44  
     44    var $msgIds = array();// Usado para guardar o messagesIds 
    4545         
    4646        function imap_functions (){ 
     
    233233                                    ++$i; 
    234234                            } 
    235                                                          
    236                                                         $filter = array('AND', array('=', 'folderName', $folder), array('IN','messageNumber', $sort_array_msg)); 
    237                                                         $followupflagged = Controller::find( 
    238                                                                 array('concept' => 'followupflagged'), 
    239                                                                 false,  
    240                                                                 array('filter' => $filter, 'criteria' => array('deepness' => '2')) 
    241                                                         ); 
    242                                                         $labeleds = Controller::find( 
    243                                                                 array('concept' => 'labeled'), 
    244                                                                 false,  
    245                                                                 array('filter' => $filter, 'criteria' => array('deepness' => '2')) 
    246                                                         ); 
    247                             $sort_array_msg_count = count($sort_array_msg); 
    248                                                         for($i=0; $i<$sort_array_msg_count; ++$i){ 
    249                                                                 if(!isset($return[$i]['msg_number'])) 
    250                                                                         continue; 
    251                                                                          
    252                                                                 $numFlags = count($followupflagged); 
    253                                                                 for($ii=0; $ii<$numFlags; ++$ii){ 
    254                                                                         if($return[$i]['msg_number'] == $followupflagged[$ii]['messageNumber']){ 
    255                                                                                 $followupflag = Controller::read( array( 'concept' => 'followupflag', 'id' => $followupflagged[$ii]['followupflagId'] )); 
    256                                                                                 $return[$i]['followupflagged'] = $followupflagged[$ii]; 
    257                                                                                 $return[$i]['followupflagged']['followupflag'] = $followupflag; 
    258                                                                                 break; 
    259                                                                         } 
    260                                                                 } 
    261                                                                 $numLabels = count($labeleds); 
    262                                                                 for($ii=0; $ii<$numLabels; ++$ii){ 
    263                                                                         if($return[$i]['msg_number'] == $labeleds[$ii]['messageNumber']){ 
    264                                                                                 $labels = Controller::read( array( 'concept' => 'label', 'id' =>  $labeleds[$ii]['labelId']));  
    265                                                                                 $return[$i]['labels'][$labeleds[$ii]['labelId']] = $labels; 
    266                                                                         } 
    267                                                                 } 
    268                                                         } 
     235                            if($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['use_followupflags_and_labels'] == "1") 
     236                            { 
     237                                $filter = array('AND', array('=', 'folderName', $folder), array('IN','messageNumber', $sort_array_msg)); 
     238                                $followupflagged = Controller::find( 
     239                                    array('concept' => 'followupflagged'), 
     240                                    false, 
     241                                    array('filter' => $filter, 'criteria' => array('deepness' => '2')) 
     242                                ); 
     243                                $labeleds = Controller::find( 
     244                                    array('concept' => 'labeled'), 
     245                                    false, 
     246                                    array('filter' => $filter, 'criteria' => array('deepness' => '2')) 
     247                                ); 
     248                                $sort_array_msg_count = count($sort_array_msg); 
     249                                for($i=0; $i<$sort_array_msg_count; ++$i){ 
     250                                    if(!isset($return[$i]['msg_number'])) 
     251                                        continue; 
     252 
     253                                    $numFlags = count($followupflagged); 
     254                                    for($ii=0; $ii<$numFlags; ++$ii){ 
     255                                        if($return[$i]['msg_number'] == $followupflagged[$ii]['messageNumber']){ 
     256                                            $followupflag = Controller::read( array( 'concept' => 'followupflag', 'id' => $followupflagged[$ii]['followupflagId'] )); 
     257                                            $return[$i]['followupflagged'] = $followupflagged[$ii]; 
     258                                            $return[$i]['followupflagged']['followupflag'] = $followupflag; 
     259                                            break; 
     260                                        } 
     261                                    } 
     262                                    $numLabels = count($labeleds); 
     263                                    for($ii=0; $ii<$numLabels; ++$ii){ 
     264                                        if($return[$i]['msg_number'] == $labeleds[$ii]['messageNumber']){ 
     265                                            $labels = Controller::read( array( 'concept' => 'label', 'id' =>  $labeleds[$ii]['labelId'])); 
     266                                            $return[$i]['labels'][$labeleds[$ii]['labelId']] = $labels; 
     267                                        } 
     268                                    } 
     269                                } 
     270                            } 
    269271                    } 
    270272                    $return['num_msgs'] =  $num_msgs;    
    271                 } else { 
     273                } 
     274        else 
     275        { 
    272276                        $num_msgs = imap_num_msg($this->mbox); 
    273277                        $sort_array_msg = $this-> get_msgs($folder, $sort_box_type, $search_box_type, $sort_box_reverse,$msg_range_begin,$num_msgs); 
    274278 
    275  
    276279                        $return['tot_unseen'] = 0; 
    277280                        $i = 0; 
    278281 
    279                         if(is_array($sort_array_msg)){ 
    280  
    281                             foreach($sort_array_msg as $msg_number => $value) 
    282                             { 
    283                                 $temp = $this->get_info_head_msg($msg_number); 
    284                                 if(!$temp) 
    285                                     return false; 
    286  
    287                                 if($temp['Unseen'] == 'U' || $temp['Recent'] == 'N'){ 
    288                                                 $return['tot_unseen']++; 
    289                                         } 
    290  
    291                                 if($i <= ($msg_range_end-$msg_range_begin)) 
    292                                     $return[$i] = $temp; 
    293                                 ++$i; 
    294                             } 
    295                         } 
    296                         $return['num_msgs'] = count($sort_array_msg)+($msg_range_begin-1); 
     282            if(is_array($sort_array_msg)) 
     283            { 
     284                foreach($sort_array_msg as $msg_number => $value) 
     285                { 
     286                    $temp = $this->get_info_head_msg($msg_number); 
     287                    if(!$temp) 
     288                        return false; 
     289 
     290                    if($temp['Unseen'] == 'U' || $temp['Recent'] == 'N') 
     291                        $return['tot_unseen']++; 
     292 
     293                    if($i <= ($msg_range_end-$msg_range_begin)) 
     294                        $return[$i] = $temp; 
     295 
     296                    ++$i; 
    297297                } 
    298                                                  
    299                 return $return;  
     298            } 
     299 
     300            $return['num_msgs'] = count($sort_array_msg)+($msg_range_begin-1); 
     301        } 
     302 
     303        $return['messagesIds'] = $this->msgIds; 
     304        return $return; 
    300305    } 
    301306         
     
    458463            $return['attachment'] = ( preg_match('/((Content-Disposition:(.)*([\r\n\s]*filename))|(Content-Type:(.)*([\r\n\s]*name)))/i', $mimeBody) ) ? '1' : '0'; //Verifica se a anexos na mensagem 
    459464            $return['reply_toaddress'] = isset($header->reply_toaddress) ? self::decodeMimeString($header->reply_toaddress) : ''; 
    460             $return['flag'] = $header->Unseen.$header->Recent.$header->Flagged.$header->Draft.$header->Answered.$header->Deleted.( $return['attachment'] === '1' ? 'T': '' ); 
    461                          
    462                         if (!empty($header->to)){ 
     465            $return['flag'] = $header->Unseen. 
     466                $header->Recent. 
     467                ($header->Flagged == 'F' || !( preg_match('/importance *: *(.*)\r/i', $mimeHeader , $importance) === 0 )? 'F' : ''). 
     468                $header->Draft. 
     469                $header->Answered. 
     470                $header->Deleted. 
     471                ( $return['attachment'] === '1' ? 'T': '' ); 
     472 
     473        if (!empty($header->to)){ 
    463474                                foreach ($header->to as $i => $v){ 
    464475                                        $return['to'][$i] = self::formatMailObject( $v ); 
     
    592603                                        if (zip_entry_open($zip, $zip_entry, "r")) { 
    593604                                                $email = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)); 
    594   
    595                                                 /*Caso mensagens vierem com quebras de linha diferentes do esperado, como por exemplo,  
    596                                                 mensagens exportadas pelo MailArchiver, é preciso corrigir.*/  
    597                                                 $email = str_replace("\r\n", "\n", $email);  
    598                                                 $email = str_replace("\n", "\r\n", $email);  
    599   
     605 
     606                                                /*Caso mensagens vierem com quebras de linha diferentes do esperado, como por exemplo, 
     607                                                mensagens exportadas pelo MailArchiver, é preciso corrigir.*/ 
     608                                                $email = str_replace("\r\n", "\n", $email); 
     609                                                $email = str_replace("\n", "\r\n", $email); 
     610 
    600611                                                $status = @imap_append($this->mbox, 
    601612                                                                "{".$this->imap_server.":".$this->imap_port.$this->imap_options."}".$params["folder"], 
     
    620631                }else if(substr($filename,strlen($filename)-4)==".eml") { 
    621632                        $email = implode("",file($params['FILES'][0]['tmp_name'])); 
    622   
    623                         /*Caso mensagens vierem com quebras de linha diferentes do esperado, como por exemplo,  
    624                         mensagens exportadas pelo MailArchiver, é preciso corrigir.*/  
    625                         $email = str_replace("\r\n", "\n", $email);  
    626                         $email = str_replace("\n", "\r\n", $email);  
    627   
     633 
     634                        /*Caso mensagens vierem com quebras de linha diferentes do esperado, como por exemplo, 
     635                        mensagens exportadas pelo MailArchiver, é preciso corrigir.*/ 
     636                        $email = str_replace("\r\n", "\n", $email); 
     637                        $email = str_replace("\n", "\r\n", $email); 
     638 
    628639                        $status = imap_append($this->mbox,"{".$this->imap_server.":".$this->imap_port.$this->imap_options."}".$params["folder"],$email); 
    629640                                 
     
    954965 
    955966                                   $content .= $this->decodeMailPart($part->body,$part->ctype_parameters['charset']); 
     967                                   $i = -1; 
    956968                                } 
    957969 
     
    962974 
    963975                                   $content .= '<pre>'. htmlentities($this->decodeMailPart($part->body,$part->ctype_parameters['charset'],false)).'</pre>'; 
     976                                   $i = -1; 
    964977                                } 
    965                                 if(strtolower($part->ctype_secondary) == 'calendar') 
    966                                     $content.= $this->builderMsgCalendar($this->decodeMailPart($part->body, $part->ctype_parameters['charset'])); 
    967  
     978                               // Comentado para tratamento de e-mail multipart alternative com html e ical. Parseava o ical e ignorava o html. 
     979                               //if(strtolower($part->ctype_secondary) == 'calendar') 
     980                               //     $content.= $this->builderMsgCalendar($this->decodeMailPart($part->body, $part->ctype_parameters['charset'])); 
    968981                           } 
    969982 
    970                             $i = -1; 
    971983                            break; 
    972984 
    973985                       case 'multipart': 
    974986 
    975                             if(strtolower($part->ctype_secondary) == 'alternative' ) //Unico formato multipart suportado, escapa os outros  
    976                             {  
    977                                 if($printHeader)  
    978                                     $content .= $this->builderMsgHeader($part);  
    979  
    980                                 $this->builderMsgBody($part,$content);  
    981  
    982                                 $i = -1;  
    983                             }  
    984   
    985                             break; 
     987                           if(strtolower($part->ctype_secondary) == 'alternative' ) //Unico formato multipart suportado, escapa os outros 
     988                           { 
     989                               if($printHeader) 
     990                                   $content .= $this->builderMsgHeader($part); 
     991 
     992                               $this->builderMsgBody($part,$content); 
     993 
     994                               $i = -1; 
     995                           } 
     996 
     997                           break; 
    986998 
    987999                       case 'message': 
     
    12111223 
    12121224                $return['msg_number'] = $msg_number.$plus_id; 
    1213                 $return['msg_folder'] = mb_convert_encoding( $msg_folder, "ISO-8859-1", "UTF-8" );  
    1214                 //isset($params['decoded']) ? mb_convert_encoding( $msg_folder, "ISO-8859-1", "UTF-8" ) : $msg_folder;  
     1225                $return['msg_folder'] = mb_convert_encoding( $msg_folder, "ISO-8859-1", "UTF-8" ); 
     1226                //isset($params['decoded']) ? mb_convert_encoding( $msg_folder, "ISO-8859-1", "UTF-8" ) : $msg_folder; 
    12151227 
    12161228                 
     
    14601472                }   
    14611473                $return['alarm'] = $alarm; 
    1462                  
     1474 
    14631475                return $return; 
    14641476        } 
     
    21862198        function delete_msgs($params) 
    21872199        { 
    2188  
    21892200                $folder = $params['folder']; 
    21902201                $folder =  mb_convert_encoding($folder, "UTF7-IMAP","ISO-8859-1"); 
    21912202                $msgs_number = explode(",",$params['msgs_number']); 
     2203 
    21922204                if(array_key_exists('border_ID' ,$params)) 
    21932205                $border_ID = $params['border_ID']; 
     
    22052217                $mbox_stream = @imap_open("{".$this->imap_server.":".$this->imap_port.$this->imap_options."}".$folder, $this->username, $this->password) or die(serialize(array('imap_error' => $this->parse_error(imap_last_error())))); 
    22062218 
    2207                 foreach ($msgs_number as $msg_number) 
     2219        foreach ($msgs_number as $msg_number) 
    22082220                { 
    22092221                        if (imap_delete($mbox_stream, $msg_number, FT_UID)); 
     
    26502662        function ren_mailbox($arr) 
    26512663        { 
    2652                 $namebox = $arr['current'];               
    2653                 $path_delimiter = strrpos($namebox,$this->imap_delimiter)+1;  
    2654                 $base_path = substr($namebox,0,$path_delimiter);  
    2655                 $rename = preg_split("/\/|\./",substr($arr['rename'], $path_delimiter));  
    2656                 $new_box = array_shift($rename);  
    2657                 $subfolders = $rename;  
     2664                $namebox = $arr['current'];              
     2665                $path_delimiter = strrpos($namebox,$this->imap_delimiter)+1; 
     2666                $base_path = substr($namebox,0,$path_delimiter); 
     2667                $rename = preg_split("/\/|\./",substr($arr['rename'], $path_delimiter)); 
     2668                $new_box = array_shift($rename); 
     2669                $subfolders = $rename; 
    26582670                $imap_server = $_SESSION['phpgw_info']['expressomail']['email_server']['imapServer']; 
    26592671                $mbox_stream = $this->open_mbox(); 
     
    26662678                        $result = imap_last_error(); 
    26672679                } 
    2668                 /*Cria as subpastas*/  
    2669                 if (is_array($subfolders)){  
    2670                         $child = $new_box.$this->imap_delimiter;  
    2671             $subfolders_count = count($subfolders);  
    2672                         for($i =0; $i < $subfolders_count; ++$i){  
    2673                                 $child .= ($subfolders[$i] ? $subfolders[$i] : $this->functions->getLang("New Folder"));  
    2674                                 $namebox =  mb_convert_encoding($child, "UTF7-IMAP", "UTF-8");  
    2675                                 $result = "Ok";  
    2676                                 if(!imap_createmailbox($mbox_stream,"{".$imap_server."}$namebox"))  
    2677                                 {  
    2678                                         $result = imap_last_error();                                              
    2679                                 }  
    2680                                 $child .=$this->imap_delimiter;  
    2681                         }                         
    2682                 }  
    2683   
     2680                /*Cria as subpastas*/ 
     2681                if (is_array($subfolders)){ 
     2682                        $child = $new_box.$this->imap_delimiter; 
     2683            $subfolders_count = count($subfolders); 
     2684                        for($i =0; $i < $subfolders_count; ++$i){ 
     2685                                $child .= ($subfolders[$i] ? $subfolders[$i] : $this->functions->getLang("New Folder")); 
     2686                                $namebox =  mb_convert_encoding($child, "UTF7-IMAP", "UTF-8"); 
     2687                                $result = "Ok"; 
     2688                                if(!imap_createmailbox($mbox_stream,"{".$imap_server."}$namebox")) 
     2689                                { 
     2690                                        $result = imap_last_error();                                             
     2691                                } 
     2692                                $child .=$this->imap_delimiter; 
     2693                        }                        
     2694                } 
     2695 
    26842696                if($mbox_stream) 
    26852697                        imap_close($mbox_stream); 
     
    27112723                return $return; 
    27122724        } 
    2713          
     2725 
     2726        /*Método utilizado para retornar dados da mensagem local (desarquivada na pasta lixeira) 
     2727        para poder ser anexada à mensagem.*/ 
     2728    function get_info_msg_archiver($params){ 
     2729        $folder = "INBOX".$this->imap_delimiter.$this->folders['trash']; 
     2730        $mbox_stream = $this->open_mbox($folder); 
     2731        $id = $params['idMsgs']; 
     2732 
     2733        $name = imap_headerinfo($mbox_stream, imap_msgno($mbox_stream, $id)); 
     2734        $return[] =  array( 
     2735            'uid' => $id, 
     2736            'folder' => "archiver", 
     2737            'type' => "imapMSG", 
     2738            'name' => base64_encode($name->subject.".eml") 
     2739        ); 
     2740 
     2741        return json_encode($return); 
     2742    } 
     2743 
    27142744        function send_mail($params) { 
    27152745            require_once dirname(__FILE__) . '/../../services/class.servicelocator.php'; 
     
    29342964                                        $arr_new_folder['base_path'] = $base_path; 
    29352965 
    2936                                         $this->create_mailbox($arr_new_folder);                                  
     2966                                        $this->create_mailbox($arr_new_folder);  
    29372967                                        $has_new_folder = true; 
    29382968                    $folder = $newfolder; 
     
    29542984 
    29552985                        $from = $fromaddress ?  ('"' . $fromaddress[0] . '" <' . $fromaddress[1] . '>') : ('"' . $_SESSION['phpgw_info']['expressomail']['user']['firstname'] . ' ' . $_SESSION['phpgw_info']['expressomail']['user']['lastname'] . '" <' . $_SESSION['phpgw_info']['expressomail']['user']['email'] . '>'); 
    2956                         $mailService->setFrom($from);                            
     2986                        $mailService->setFrom( mb_convert_encoding($from, "ISO-8859-1","UTF-8, ISO-8859-1")); 
    29572987         
    29582988                        $mailService->addHeaderField('Reply-To', !!$replytoaddress ? $replytoaddress : $from); 
     
    30043034            $isHTML = ( isset($params['type']) && $params['type'] == 'html' )?  true : false; 
    30053035 
    3006  
    3007     //  TODO - tratar mensagem criptografada e remover o AND false abaixo 
     3036                //      TODO - tratar mensagem criptografada e remover o AND false abaixo 
    30083037            if (($encrypt && $signed && $params['smime']) || ($encrypt && !$signed) AND false) { // a msg deve ser enviada cifrada... 
    30093038                $email = $this->add_recipients_cert($toaddress . ',' . $ccaddress . ',' . $ccoaddress); 
     
    31033132                { 
    31043133                    $value = json_decode($value, true); 
     3134                    if($value["folder"] == "archiver"){ 
     3135                        $value['folder'] = "INBOX/Trash"; 
     3136                    } 
    31053137 
    31063138                    switch ($value['type']) { 
     
    31103142                                if(strstr($body,'src="./inc/get_archive.php?msgFolder='.$value['folder'].'&msgNumber='.$value['uid'].'&indexPart='.$value['part'].'"') !== false)//Embeded IMG 
    31113143                                {     
    3112                                     $body = str_ireplace('src="./inc/get_archive.php?msgFolder='.$value['folder'].'&msgNumber='.$value['uid'].'&indexPart='.$value['part'].'"' , 'src="'.$att['name'].'"', $body); 
     3144                                    $body = str_ireplace('src="./inc/get_archive.php?msgFolder='.$value['folder'].  '&msgNumber='.$value['uid'].'&indexPart='.$value['part'].'"' , 'src="'.$att['name'].'"', $body); 
    31133145                                    $mailService->addStringImage($att['source'], $att['type'],mb_convert_encoding($att['name'], 'ISO-8859-1' , 'UTF-8,ISO-8859-1') ); 
    31143146                                } 
     
    31243156                                 
    31253157                                $mailService->addStringAttachment($rawmsg, mb_convert_encoding(base64_decode($value['name']), 'ISO-8859-1' , 'UTF-8,ISO-8859-1'), 'message/rfc822', '7bit', 'attachment' ); 
     3158                                /*envia o anexo para o email*/ 
    31263159                                $message_size_total += mb_strlen($rawmsg); //Adiciona o tamanho do anexo a variavel que controlao tamanho da msg. 
    31273160                                unset($rawmsg); 
     
    34193452                        $sort = array(); 
    34203453                } 
     3454 
     3455        $this->msgIds = $sort; 
     3456 
    34213457                if ($slice_array) 
    34223458                        $sort = array_slice($sort,$offsetBegin-1,$offsetEnd-($offsetBegin-1),true); 
     
    35563592        } 
    35573593 
     3594    function verifyShareFolder($params){ 
     3595        $folder = $params['folder']; 
     3596 
     3597         if (substr($folder,0,4) == 'user'){ 
     3598            $acl = $this->getacltouser($folder, isset($params['decoded'])); 
     3599 
     3600            $acl_share_delete = (stripos($acl,'t') !== false && stripos($acl,'e') !== false); 
     3601 
     3602            if (!$acl_share_delete) { 
     3603                $return['status'] = false; 
     3604                return $return; 
     3605            } 
     3606        } 
     3607    } 
    35583608        function move_messages($params) 
    35593609        { 
     
    36763726        } 
    36773727         
    3678         function set_messages_flag_from_search($params){                 
     3728        function set_messages_flag_from_search($params){ 
    36793729                $error = False; 
    36803730                $fileNames = ""; 
     
    44044454                                            $elem['uid'] = $new_search; 
    44054455                                            /* compare dates in ordering */ 
    4406                                             $elem['udatecomp'] = substr ($elem['udate'], -4) ."-". substr ($elem['udate'], 3, 2) ."-". substr ($elem['udate'], 0, 2);   
    4407  
    4408                                                                                         $filter = array('AND', array('=', 'folderName', $name_box), array('=','messageNumber', $new_search)); 
    4409                                                                                         $followupflagged = Controller::find( 
    4410                                                                                                 array('concept' => 'followupflagged'), 
    4411                                                                                                 false,  
    4412                                                                                                 array('filter' => $filter, 'criteria' => array('deepness' => '2')) 
    4413                                                                                         ); 
    4414  
    4415                                                                                         if(isset($followupflagged[0]['followupflagId'])) 
    4416                                                                                         { 
    4417                                                                                                 $followupflag = Controller::read( array( 'concept' => 'followupflag', 'id' => $followupflagged[0]['followupflagId'] ));      
    4418                                                                                                 $followupflagged[0]['followupflag'] = $followupflag; 
    4419                                                                                                 $elem['followupflagged'] = $followupflagged[0]; 
    4420  
    4421                                                                                         }        
    4422                                                                                         $labeleds = Controller::find( 
    4423                                                                                                 array('concept' => 'labeled'), 
    4424                                                                                                 false,  
    4425                                                                                                 array('filter' => $filter, 'criteria' => array('deepness' => '2')) 
    4426                                                                                         ); 
    4427                                                                                         foreach ($labeleds as $e){ 
    4428                                                                                                 $labels = Controller::read( array( 'concept' => 'label', 'id' =>  $e['labelId']));      
    4429                                                                                                 $elem['labels'][$e['labelId']] = $labels; 
    4430 }                                                                                        
     4456                                            $elem['udatecomp'] = substr ($elem['udate'], -4) ."-". substr ($elem['udate'], 3, 2) ."-". substr ($elem['udate'], 0, 2); 
     4457                                            if($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['use_followupflags_and_labels'] == "1") 
     4458                                            { 
     4459                                                $filter = array('AND', array('=', 'folderName', $name_box), array('=','messageNumber', $new_search)); 
     4460                                                $followupflagged = Controller::find( 
     4461                                                    array('concept' => 'followupflagged'), 
     4462                                                    false, 
     4463                                                    array('filter' => $filter, 'criteria' => array('deepness' => '2')) 
     4464                                                ); 
     4465 
     4466                                                if(isset($followupflagged[0]['followupflagId'])) 
     4467                                                { 
     4468                                                    $followupflag = Controller::read( array( 'concept' => 'followupflag', 'id' => $followupflagged[0]['followupflagId'] )); 
     4469                                                    $followupflagged[0]['followupflag'] = $followupflag; 
     4470                                                    $elem['followupflagged'] = $followupflagged[0]; 
     4471 
     4472                                                } 
     4473                                                $labeleds = Controller::find( 
     4474                                                    array('concept' => 'labeled'), 
     4475                                                    false, 
     4476                                                    array('filter' => $filter, 'criteria' => array('deepness' => '2')) 
     4477                                                ); 
     4478                                                foreach ($labeleds as $e){ 
     4479                                                    $labels = Controller::read( array( 'concept' => 'label', 'id' =>  $e['labelId'])); 
     4480                                                    $elem['labels'][$e['labelId']] = $labels; 
     4481                                                } 
     4482                                            } 
    44314483                                            $retorno[] = $elem; 
    44324484                                        } 
     
    44604512            $arrayRetorno['data']               =  $pageret; 
    44614513            $arrayRetorno['currentTab'] =  $params['current_tab']; 
    4462             return ($pageret) ? $arrayRetorno : 'none'; 
     4514        return ($pageret) ? $arrayRetorno : 'none'; 
    44634515        } 
    44644516 
     
    45464598                    { 
    45474599                        $folder = str_replace($serverString, "", imap_utf7_decode($val->name)); 
    4548                         //$folder = str_replace("&-", "&", $folder);                      
    4549                         $trashFolder = explode($this->imap_delimiter,$folder);  
    4550                         $acls = ($trashFolder[count($trashFolder) - 1] == "Trash") ? $value['acls']."i" : $value['acls'];  
    4551                         $folder = imap_utf7_encode($folder);                      
    4552                         imap_setacl ($mbox_stream, $folder, "$user", $acls);  
     4600                        //$folder = str_replace("&-", "&", $folder);                     
     4601                        $trashFolder = explode($this->imap_delimiter,$folder); 
     4602                        $acls = ($trashFolder[count($trashFolder) - 1] == "Trash") ? $value['acls']."i" : $value['acls']; 
     4603                        $folder = imap_utf7_encode($folder);                     
     4604                        imap_setacl ($mbox_stream, $folder, "$user", $acls); 
    45534605                    } 
    45544606                } 
     
    49094961                                $insert = $this->insert_email($source,$dest_folder,$timestamps[$index],$flags[$index]); 
    49104962 
     4963                $return['idsMsg'] = $insert['msg_no']; 
    49114964                if($insert['error']) 
    49124965                { 
     
    50705123                                foreach ($subject as $tmp) 
    50715124                                        $return['msgs'][$i]['subject'] .= mb_convert_encoding($tmp->text, 'UTF-8', 'UTF-8 , ISO-8859-1'); 
    5072                                  
    5073                                 $filter = array('AND', array('=', 'folderName', $folder), array('=','messageNumber', $v)); 
    5074                                 $followupflagged = Controller::find( 
    5075                                         array('concept' => 'followupflagged' , 'folder' => $folder ), 
    5076                                         false,  
    5077                                         array('filter' => $filter, 'criteria' => array('deepness' => '2')) 
    5078                                 ); 
    5079  
    5080                                 if(isset($followupflagged[0]['followupflagId'])) 
    5081                                 { 
    5082                                         $followupflag = Controller::read( array( 'concept' => 'followupflag', 'id' => $followupflagged[0]['followupflagId'] ));      
    5083                                         $followupflagged[0]['followupflag'] = $followupflag; 
    5084                                         $return['msgs'][$i]['followupflagged'] = $followupflagged[0]; 
    5085  
    5086                                 }        
    5087                                 $labeleds = Controller::find( 
    5088                                         array('concept' => 'labeled'), 
    5089                                         false,  
    5090                                         array('filter' => $filter, 'criteria' => array('deepness' => '2')) 
    5091                                 ); 
    5092                                 if(is_array($labeleds)) 
    5093                                 foreach ($labeleds as $e){ 
    5094                                         $labels = Controller::read( array( 'concept' => 'label', 'id' =>  $e['labelId']));      
    5095                                         $return['msgs'][$i]['labels'][$e['labelId']] = $labels; 
    5096                                 }        
     5125 
     5126 
     5127                if($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['use_followupflags_and_labels'] == "1") 
     5128                { 
     5129 
     5130                    $filter = array('AND', array('=', 'folderName', $folder), array('=','messageNumber', $v)); 
     5131                    $followupflagged = Controller::find( 
     5132                        array('concept' => 'followupflagged' , 'folder' => $folder ), 
     5133                        false, 
     5134                        array('filter' => $filter, 'criteria' => array('deepness' => '2')) 
     5135                    ); 
     5136 
     5137                    if(isset($followupflagged[0]['followupflagId'])) 
     5138                    { 
     5139                        $followupflag = Controller::read( array( 'concept' => 'followupflag', 'id' => $followupflagged[0]['followupflagId'] )); 
     5140                        $followupflagged[0]['followupflag'] = $followupflag; 
     5141                        $return['msgs'][$i]['followupflagged'] = $followupflagged[0]; 
     5142 
     5143                    } 
     5144                    $labeleds = Controller::find( 
     5145                        array('concept' => 'labeled'), 
     5146                        false, 
     5147                        array('filter' => $filter, 'criteria' => array('deepness' => '2')) 
     5148                    ); 
     5149                    if(is_array($labeleds)) 
     5150                    foreach ($labeleds as $e){ 
     5151                        $labels = Controller::read( array( 'concept' => 'label', 'id' =>  $e['labelId'])); 
     5152                        $return['msgs'][$i]['labels'][$e['labelId']] = $labels; 
     5153                    } 
     5154                } 
     5155 
    50975156                                $mimeBody = imap_body( $this->mbox, $v  , FT_UID|FT_PEEK  ); 
    50985157                                $return['msgs'][$i]['flag'] = ' '; 
    50995158                                $return['msgs'][$i]['flag'] .= $msg->Unseen ? $msg->Unseen : ''; 
    5100                                 $return['msgs'][$i]['flag'] .= $msg->Recent ? $msg->Recent : '';         
     5159                                $return['msgs'][$i]['flag'] .= $msg->Recent ? $msg->Recent : ''; 
    51015160                                $return['msgs'][$i]['flag'] .= $msg->Draft ? $msg->Draft : '';   
    51025161                                $return['msgs'][$i]['flag'] .= $msg->Answered ? $msg->Answered : '';     
     
    51595218                        $nMsgs[] = $v; 
    51605219                } 
    5161                 $return['msgs'] = $nMsgs;        
    5162                  
    5163                 $return = json_encode($return);          
     5220                $return['msgs'] = $nMsgs; 
     5221 
     5222                $return = json_encode($return); 
    51645223                $return = base64_encode($return); 
    5165          
     5224         
    51665225                return $return; 
    51675226        } 
     
    52275286        function searchSieveRule( $params ) 
    52285287        { 
    5229   
    5230                 $imap = $this->open_mbox( 'INBOX' ); 
     5288                $imap = $this->open_mbox( $params['folder']['criteria'] ? $params['folder']['criteria'] : 'INBOX' ); 
    52315289                $msgs = imap_sort( $imap , SORTDATE , 0 , SE_UID); 
    5232                  
     5290         
    52335291                $rr = array(); 
    5234   
     5292 
    52355293        if(isset($params['from']))  $rr['from'] = array(); 
    52365294        if(isset($params['to']))  $rr['to'] = array(); 
    52375295        if(isset($params['subject'])) $rr['subject'] = array(); 
    5238         if(isset($params['body'])) $rr['body'] = array();  
    5239         if(isset($params['size'])) $rr['size'] = array();  
    5240   
     5296        if(isset($params['body'])) $rr['body'] = array(); 
     5297        if(isset($params['size'])) $rr['size'] = array(); 
     5298 
     5299        //$params['search'] = mb_convert_encoding($params['search'], 'UTF-8',mb_detect_encoding($params['search'].'x', 'UTF-8, ISO-8859-1')); 
     5300 
    52415301                foreach ($msgs as $i => $v) 
    52425302                { 
     
    52645324                         
    52655325                        if(isset($params['to'])) 
    5266                         {  
     5326                        { 
    52675327                                $tos = $msg->to; 
    52685328                                $val = ''; 
     
    52845344                                         
    52855345                                } 
    5286                                  
     5346 
    52875347                                if($this->filterCheck( $val , $params['to']['criteria'] , $params['to']['filter'] )) 
    52885348                                        $rr['to'][] = $v; 
     
    52945354                                $subject = imap_mime_header_decode($msg->subject); 
    52955355                                foreach ($subject as $tmp) 
    5296                                         $ss .= $tmp->text; 
     5356                                        $ss .= ($tmp->charset == "default") ? $tmp->text : utf8_encode($tmp->text); 
    52975357                                 
    52985358                                if($this->filterCheck($ss , $params['subject']['criteria'] , $params['subject']['filter'] )) 
     
    53025362                        if(isset($params['body'])) 
    53035363                        {                        
    5304                                 $this->mbox = $this->open_mbox( 'INBOX' ); 
    5305                                 $b = $this->get_body_msg( $v , 'INBOX' ); 
    5306                                  
    5307                                 if( $this->filterCheck( $b['body'] , $params['body']['criteria'] , $params['body']['filter'] )) 
     5364                                $this->mbox = $this->open_mbox( $params['folder']['criteria'] ? $params['folder']['criteria'] : 'INBOX' ); 
     5365                                $b = $this->get_body_msg( $v , $params['folder']['criteria'] ? $params['folder']['criteria'] : 'INBOX' ); 
     5366 
     5367                                if( $this->filterCheck( mb_convert_encoding(html_entity_decode($b['body']), 'UTF-8',mb_detect_encoding(html_entity_decode($b['body']).'x', 'UTF-8, ISO-8859-1')) , $params['body']['criteria'] , $params['body']['filter'] )) 
    53085368                                        $rr['body'][] = $v; 
    5309                                  
     5369 
    53105370                                unset($b); 
    53115371                        } 
     
    53205380                $rrr = array(); 
    53215381                $init = true; 
    5322                  
    5323                  
    53245382                foreach ($rr as $i => $v) 
    5325                 {                        
     5383                { 
    53265384                        if(count($rrr) == 0 && $init === true) 
    53275385                                $rrr = $v; 
    53285386                        else if($params['isExact'] == 'yes') 
    5329                                 $rrr = array_intersect($rrr , $v); 
     5387                $rrr = array_intersect($rrr , $v); 
    53305388                        else 
    53315389                                $rrr =  array_unique(array_merge($rrr , $v)); 
    5332                          
    5333                 } 
    5334                  
     5390                } 
    53355391 
    53365392//              if($params['page'] && $params['rows']) 
     
    54035459                                                $ret[$msg][] = imap_mail_copy($imap,$msg,$proc['value'], CP_UID); 
    54045460                                        else 
     5461                                        { 
    54055462                                                /* Está sempre copiando a mensagem para a pasta destino */ 
    54065463                                            //$ret[$msg][] = imap_mail_move($imap,$msg,$proc['parameter'], CP_UID); 
    54075464                                                $ret[$msg][] = imap_mail_move($imap,$msg,$proc['parameter'], CP_UID);                                            
     5465                                                imap_expunge($imap); 
     5466                                        } 
    54085467                                        break; 
    54095468                                case 'redirect':                                                                                         
Note: See TracChangeset for help on using the changeset viewer.