- Timestamp:
- 10/08/13 16:20:46 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2.5/expressoMail1_2/inc/class.imap_functions.inc.php
r8114 r8232 42 42 var $useCache = false; 43 43 var $expirationCache = false; 44 44 var $msgIds = array();// Usado para guardar o messagesIds 45 45 46 46 function imap_functions (){ … … 233 233 ++$i; 234 234 } 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 } 269 271 } 270 272 $return['num_msgs'] = $num_msgs; 271 } else { 273 } 274 else 275 { 272 276 $num_msgs = imap_num_msg($this->mbox); 273 277 $sort_array_msg = $this-> get_msgs($folder, $sort_box_type, $search_box_type, $sort_box_reverse,$msg_range_begin,$num_msgs); 274 278 275 276 279 $return['tot_unseen'] = 0; 277 280 $i = 0; 278 281 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; 297 297 } 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; 300 305 } 301 306 … … 458 463 $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 459 464 $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)){ 463 474 foreach ($header->to as $i => $v){ 464 475 $return['to'][$i] = self::formatMailObject( $v ); … … 592 603 if (zip_entry_open($zip, $zip_entry, "r")) { 593 604 $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 600 611 $status = @imap_append($this->mbox, 601 612 "{".$this->imap_server.":".$this->imap_port.$this->imap_options."}".$params["folder"], … … 620 631 }else if(substr($filename,strlen($filename)-4)==".eml") { 621 632 $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 628 639 $status = imap_append($this->mbox,"{".$this->imap_server.":".$this->imap_port.$this->imap_options."}".$params["folder"],$email); 629 640 … … 954 965 955 966 $content .= $this->decodeMailPart($part->body,$part->ctype_parameters['charset']); 967 $i = -1; 956 968 } 957 969 … … 962 974 963 975 $content .= '<pre>'. htmlentities($this->decodeMailPart($part->body,$part->ctype_parameters['charset'],false)).'</pre>'; 976 $i = -1; 964 977 } 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'])); 968 981 } 969 982 970 $i = -1;971 983 break; 972 984 973 985 case 'multipart': 974 986 975 if(strtolower($part->ctype_secondary) == 'alternative' ) //Unico formato multipart suportado, escapa os outros976 {977 if($printHeader)978 $content .= $this->builderMsgHeader($part);979 980 $this->builderMsgBody($part,$content);981 982 $i = -1;983 }984 985 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; 986 998 987 999 case 'message': … … 1211 1223 1212 1224 $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; 1215 1227 1216 1228 … … 1460 1472 } 1461 1473 $return['alarm'] = $alarm; 1462 1474 1463 1475 return $return; 1464 1476 } … … 2186 2198 function delete_msgs($params) 2187 2199 { 2188 2189 2200 $folder = $params['folder']; 2190 2201 $folder = mb_convert_encoding($folder, "UTF7-IMAP","ISO-8859-1"); 2191 2202 $msgs_number = explode(",",$params['msgs_number']); 2203 2192 2204 if(array_key_exists('border_ID' ,$params)) 2193 2205 $border_ID = $params['border_ID']; … … 2205 2217 $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())))); 2206 2218 2207 2219 foreach ($msgs_number as $msg_number) 2208 2220 { 2209 2221 if (imap_delete($mbox_stream, $msg_number, FT_UID)); … … 2650 2662 function ren_mailbox($arr) 2651 2663 { 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; 2658 2670 $imap_server = $_SESSION['phpgw_info']['expressomail']['email_server']['imapServer']; 2659 2671 $mbox_stream = $this->open_mbox(); … … 2666 2678 $result = imap_last_error(); 2667 2679 } 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 2684 2696 if($mbox_stream) 2685 2697 imap_close($mbox_stream); … … 2711 2723 return $return; 2712 2724 } 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 2714 2744 function send_mail($params) { 2715 2745 require_once dirname(__FILE__) . '/../../services/class.servicelocator.php'; … … 2934 2964 $arr_new_folder['base_path'] = $base_path; 2935 2965 2936 $this->create_mailbox($arr_new_folder); 2966 $this->create_mailbox($arr_new_folder); 2937 2967 $has_new_folder = true; 2938 2968 $folder = $newfolder; … … 2954 2984 2955 2985 $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")); 2957 2987 2958 2988 $mailService->addHeaderField('Reply-To', !!$replytoaddress ? $replytoaddress : $from); … … 3004 3034 $isHTML = ( isset($params['type']) && $params['type'] == 'html' )? true : false; 3005 3035 3006 3007 // TODO - tratar mensagem criptografada e remover o AND false abaixo 3036 // TODO - tratar mensagem criptografada e remover o AND false abaixo 3008 3037 if (($encrypt && $signed && $params['smime']) || ($encrypt && !$signed) AND false) { // a msg deve ser enviada cifrada... 3009 3038 $email = $this->add_recipients_cert($toaddress . ',' . $ccaddress . ',' . $ccoaddress); … … 3103 3132 { 3104 3133 $value = json_decode($value, true); 3134 if($value["folder"] == "archiver"){ 3135 $value['folder'] = "INBOX/Trash"; 3136 } 3105 3137 3106 3138 switch ($value['type']) { … … 3110 3142 if(strstr($body,'src="./inc/get_archive.php?msgFolder='.$value['folder'].'&msgNumber='.$value['uid'].'&indexPart='.$value['part'].'"') !== false)//Embeded IMG 3111 3143 { 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); 3113 3145 $mailService->addStringImage($att['source'], $att['type'],mb_convert_encoding($att['name'], 'ISO-8859-1' , 'UTF-8,ISO-8859-1') ); 3114 3146 } … … 3124 3156 3125 3157 $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*/ 3126 3159 $message_size_total += mb_strlen($rawmsg); //Adiciona o tamanho do anexo a variavel que controlao tamanho da msg. 3127 3160 unset($rawmsg); … … 3419 3452 $sort = array(); 3420 3453 } 3454 3455 $this->msgIds = $sort; 3456 3421 3457 if ($slice_array) 3422 3458 $sort = array_slice($sort,$offsetBegin-1,$offsetEnd-($offsetBegin-1),true); … … 3556 3592 } 3557 3593 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 } 3558 3608 function move_messages($params) 3559 3609 { … … 3676 3726 } 3677 3727 3678 function set_messages_flag_from_search($params){ 3728 function set_messages_flag_from_search($params){ 3679 3729 $error = False; 3680 3730 $fileNames = ""; … … 4404 4454 $elem['uid'] = $new_search; 4405 4455 /* 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 } 4431 4483 $retorno[] = $elem; 4432 4484 } … … 4460 4512 $arrayRetorno['data'] = $pageret; 4461 4513 $arrayRetorno['currentTab'] = $params['current_tab']; 4462 4514 return ($pageret) ? $arrayRetorno : 'none'; 4463 4515 } 4464 4516 … … 4546 4598 { 4547 4599 $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); 4553 4605 } 4554 4606 } … … 4909 4961 $insert = $this->insert_email($source,$dest_folder,$timestamps[$index],$flags[$index]); 4910 4962 4963 $return['idsMsg'] = $insert['msg_no']; 4911 4964 if($insert['error']) 4912 4965 { … … 5070 5123 foreach ($subject as $tmp) 5071 5124 $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 5097 5156 $mimeBody = imap_body( $this->mbox, $v , FT_UID|FT_PEEK ); 5098 5157 $return['msgs'][$i]['flag'] = ' '; 5099 5158 $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 : ''; 5101 5160 $return['msgs'][$i]['flag'] .= $msg->Draft ? $msg->Draft : ''; 5102 5161 $return['msgs'][$i]['flag'] .= $msg->Answered ? $msg->Answered : ''; … … 5159 5218 $nMsgs[] = $v; 5160 5219 } 5161 $return['msgs'] = $nMsgs; 5162 5163 $return = json_encode($return); 5220 $return['msgs'] = $nMsgs; 5221 5222 $return = json_encode($return); 5164 5223 $return = base64_encode($return); 5165 5224 5166 5225 return $return; 5167 5226 } … … 5227 5286 function searchSieveRule( $params ) 5228 5287 { 5229 5230 $imap = $this->open_mbox( 'INBOX' ); 5288 $imap = $this->open_mbox( $params['folder']['criteria'] ? $params['folder']['criteria'] : 'INBOX' ); 5231 5289 $msgs = imap_sort( $imap , SORTDATE , 0 , SE_UID); 5232 5290 5233 5291 $rr = array(); 5234 5292 5235 5293 if(isset($params['from'])) $rr['from'] = array(); 5236 5294 if(isset($params['to'])) $rr['to'] = array(); 5237 5295 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 5241 5301 foreach ($msgs as $i => $v) 5242 5302 { … … 5264 5324 5265 5325 if(isset($params['to'])) 5266 { 5326 { 5267 5327 $tos = $msg->to; 5268 5328 $val = ''; … … 5284 5344 5285 5345 } 5286 5346 5287 5347 if($this->filterCheck( $val , $params['to']['criteria'] , $params['to']['filter'] )) 5288 5348 $rr['to'][] = $v; … … 5294 5354 $subject = imap_mime_header_decode($msg->subject); 5295 5355 foreach ($subject as $tmp) 5296 $ss .= $tmp->text;5356 $ss .= ($tmp->charset == "default") ? $tmp->text : utf8_encode($tmp->text); 5297 5357 5298 5358 if($this->filterCheck($ss , $params['subject']['criteria'] , $params['subject']['filter'] )) … … 5302 5362 if(isset($params['body'])) 5303 5363 { 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'] )) 5308 5368 $rr['body'][] = $v; 5309 5369 5310 5370 unset($b); 5311 5371 } … … 5320 5380 $rrr = array(); 5321 5381 $init = true; 5322 5323 5324 5382 foreach ($rr as $i => $v) 5325 { 5383 { 5326 5384 if(count($rrr) == 0 && $init === true) 5327 5385 $rrr = $v; 5328 5386 else if($params['isExact'] == 'yes') 5329 5387 $rrr = array_intersect($rrr , $v); 5330 5388 else 5331 5389 $rrr = array_unique(array_merge($rrr , $v)); 5332 5333 } 5334 5390 } 5335 5391 5336 5392 // if($params['page'] && $params['rows']) … … 5403 5459 $ret[$msg][] = imap_mail_copy($imap,$msg,$proc['value'], CP_UID); 5404 5460 else 5461 { 5405 5462 /* Está sempre copiando a mensagem para a pasta destino */ 5406 5463 //$ret[$msg][] = imap_mail_move($imap,$msg,$proc['parameter'], CP_UID); 5407 5464 $ret[$msg][] = imap_mail_move($imap,$msg,$proc['parameter'], CP_UID); 5465 imap_expunge($imap); 5466 } 5408 5467 break; 5409 5468 case 'redirect':
Note: See TracChangeset
for help on using the changeset viewer.