Changeset 1000


Ignore:
Timestamp:
06/16/09 18:29:16 (15 years ago)
Author:
rafaelraymundo
Message:

Ticket #550 - Unificação de funcionalidade do SERPRO referentes ao arquivamento local.

Location:
trunk/expressoMail1_2
Files:
1 added
12 edited

Legend:

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

    r711 r1000  
    4444         
    4545        // create EML File. 
    46     function createFileEml($sEMLData, $tempDir, $id)   
     46        // Funcao alterada para tratar a exportacao 
     47        // de mensagens arquivadas localmente. 
     48        // Rommel Cysne (rommel.cysne@serpro.gov.br) 
     49        // em 17/12/2008. 
     50        function createFileEml($sEMLData, $tempDir, $id, $subject=false, $i) 
    4751    { 
    4852        if($id) 
     
    5458                $subject = substr($subject, 0, 59); 
    5559  
    56             $subject = ereg_replace('/', '\'', $subject);             
     60                        //$subject = ereg_replace('/', '\'', $subject); 
     61                        $from = "áàâãäéèêëíìîïóòôõöúùûüç?\"!@#$%š&*()-=+Ž`[]{}~^,<>;:/?\\|¹²³£¢¬§ªº°ÁÀÂÃÄÉÈÊËÍÌÎÏÓÒÔÕÖÚÙÛÜÇ"; 
     62                        $to =   "aaaaaeeeeiiiiooooouuuuc__________________________________________AAAAAEEEEIIIIOOOOOUUUUC"; 
     63                        $subject = strtr($subject,$from,$to); 
    5764            $file =    $subject."_".$id.".eml"; 
     65                } else{ 
     66                        // Se mensagem for arquivada localmente, $subject (assunto da mensagem) 
     67                        // sera passado para compor o nome do arquivo .eml; 
     68 
     69                        if($subject){ 
     70                                $from = "áàâãäéèêëíìîïóòôõöúùûüç?\"!@#$%š&*()-=+Ž`[]{}~^,<>;:/?\\|¹²³£¢¬§ªº°ÁÀÂÃÄÉÈÊËÍÌÎÏÓÒÔÕÖÚÙÛÜÇ"; 
     71                                $to =   "aaaaaeeeeiiiiooooouuuuc__________________________________________AAAAAEEEEIIIIOOOOOUUUUC"; 
     72                                $subject = strtr($subject,$from,$to); 
     73                                //$subject = ereg_replace(':', '_', $subject); 
     74                                //$subject = ereg_replace('/', '_', $subject); 
     75                                $file = $subject."_".$i.".eml"; 
     76                        } else{ 
     77                                $file = "email_".md5(microtime()).".eml"; 
    5878        }     
    59         else{ 
    60             $file =    "email_".md5(microtime()).".eml"; 
    6179        } 
    6280         
     
    124142        } 
    125143 
     144        // Funcao alterada para tratar a exportacao 
     145        // de mensagens arquivadas localmente. 
     146        // Rommel Cysne (rommel.cysne@serpro.gov.br) 
     147        // em 17/12/2008. 
    126148        function makeAll($params) { 
    127                  
    128                 $this-> folder = $params['folder']; 
    129                 $this->folder = mb_convert_encoding($this->folder, "UTF7-IMAP","UTF-8"); 
    130                 $array_ids = explode(',', $params['msgs_to_export']);    
    131                 $error = False;          
    132                 $fileNames = ""; 
    133                 $tempDir = ini_get("session.save_path"); 
    134                 $this->connectImap(); 
    135                                  
    136                 for($i = 0; $i < count($array_ids); $i++) { 
    137                                  
     149                // Exportacao de mensagens arquivadas localmente 
     150                if($params['l_msg'] == "t"){ 
     151                // Recebe todos os subjects e bodies das mensagens locais selecionadas para exportacao 
     152                // e gera arrays com os conteudos separados; 
     153                $array_mesgs = explode('@@',$params['mesgs']); 
     154                $array_subjects = explode('@@',$params['subjects']); 
     155            $array_ids = explode(',', $params['msgs_to_export']); 
     156            $tempDir = ini_get("session.save_path"); 
     157                        // Para cada mensagem selecionada sera gerado um arquivo .eml cujo titulo sera o assunto (subject) da mesma; 
     158                        include_once("class.imap_functions.inc.php"); 
     159                        $imapf = new imap_functions(); 
     160                foreach($array_ids as $i=>$id) { 
     161                                $sEMLData=$imapf->treat_base64_from_post($array_mesgs[$i]); 
     162                                $fileName=$this->CreateFileEml($sEMLData, $tempDir,'',$array_subjects[$i],$i); 
     163                                if(!$fileName){ 
     164                                        $error = True; 
     165                                        break; 
     166                                } else{ 
     167                                        $fileNames .= "\"".$fileName."\" "; 
     168                                } 
     169                        } 
     170                        $nameFileZip = 'False'; 
     171                        if($fileNames && !$error) { 
     172                                $nameFileZip = $this -> createFileZip($fileNames, $tempDir); 
     173                                if($nameFileZip){ 
     174                                        $file = $tempDir.'/'.$nameFileZip; 
     175                                } else{ 
     176                                        $file = false; 
     177                                } 
     178 
     179                        } else{ 
     180                                $file = false; 
     181                        } 
     182 
     183            return $file; 
     184 
     185                // Exportacao de mensagens da caixa de entrada (imap) - processo original do Expresso 
     186                } else{ 
     187            $this-> folder = $params['folder']; 
     188            $this->folder = mb_convert_encoding($this->folder, "UTF7-IMAP","UTF-8"); 
     189            $array_ids = explode(',', $params['msgs_to_export']); 
     190            $error = False; 
     191            $fileNames = ""; 
     192            $tempDir = ini_get("session.save_path"); 
     193            $this->connectImap(); 
     194                        for($i = 0; $i < count($array_ids); $i++) { 
    138195                        $header         = $this-> getHeader($array_ids[$i]);                                                                                     
    139196                        $body           = $this-> getBody($array_ids[$i]);                       
     
    165222                         
    166223                return $file; 
    167         } 
     224        } 
     225    } 
    168226 
    169227        function export_msg($params) { 
     
    209267                imap_close($this->mbox_stream); 
    210268                return $urlPath; 
    211         } 
     269        } 
    212270 
    213271        function remove_accents($string) { 
     
    241299                $imap_attachment = new imap_attachment(); 
    242300                $attachments = $imap_attachment->download_attachment($this->mbox_stream, $id_number); 
    243                  
    244  
    245                  
    246301                foreach($attachments as $i => $attachment){ 
    247302                        if($i && $i == 'names') 
     
    280335                imap_close($this->mbox_stream); 
    281336                return $return_attachments; 
    282         } 
     337        } 
    283338         
    284339        private function getFileType($nameFile) { 
  • trunk/expressoMail1_2/inc/class.imap_functions.inc.php

    r990 r1000  
    209209        * com .emls gerados pelo expresso, e o arquivo pode ser um zip contendo vários emls ou um .eml. 
    210210        */ 
     211/** 
     212        * Função que importa arquivos .eml exportados pelo expresso para a caixa do usuário. Testado apenas 
     213        * com .emls gerados pelo expresso, e o arquivo pode ser um zip contendo vários emls ou um .eml. 
     214        */ 
    211215        function import_msgs($params) { 
    212                 if(!$this->mbox)                 
     216                if(!$this->mbox) 
    213217                        $this->mbox = $this->open_mbox(); 
     218 
     219                if( preg_match('/local_/',$params["folder"]) ) 
     220                { 
     221 
     222                        $tmp_box = mb_convert_encoding('INBOX/Lixeira/tmpMoveToLocal', "UTF7-IMAP", "UTF-8"); 
     223                        if ( ! imap_createmailbox( $this -> mbox,"{".$this -> imap_server."}$tmp_box" ) ) 
     224                                return $this->functions->getLang( 'Import to Local : fail...' ); 
     225                        imap_reopen($this->mbox, "{".$this->imap_server.":".$this->imap_port.$this->imap_options."}".$tmp_box); 
     226                        $params["folder"] = $tmp_box; 
     227                } 
    214228                $errors = array(); 
    215229                $invalid_format = false; 
     
    218232                if((($quota['limit'] - $quota['usage'])*1024) <= $params['FILES'][0]['size']){ 
    219233                        return array( 'error' => $this->functions->getLang("fail in import:"). 
    220                                                         " ".$this->functions->getLang("Over quota"));            
     234                                                        " ".$this->functions->getLang("Over quota")); 
    221235                } 
    222236                if(substr($filename,strlen($filename)-4)==".zip") { 
     
    225239                        if ($zip) { 
    226240                                while ($zip_entry = zip_read($zip)) { 
    227                                          
     241 
    228242                                        if (zip_entry_open($zip, $zip_entry, "r")) { 
    229243                                                $email = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)); 
     
    239253                                zip_close($zip); 
    240254                        } 
     255 
     256                        if ( isset( $tmp_box ) && ! sizeof( $errors ) ) 
     257                        { 
     258 
     259                                $mc = imap_check($this->mbox); 
     260 
     261                                $result = imap_fetch_overview( $this -> mbox, "1:{$mc -> Nmsgs}", 0 ); 
     262 
     263                                $ids = array( ); 
     264                                foreach ($result as $overview) 
     265                                        $ids[ ] = $overview -> uid; 
     266 
     267                                return implode( ',', $ids ); 
     268                        } 
    241269                        } 
    242270                else if(substr($filename,strlen($filename)-4)==".eml") { 
     
    251279                        } 
    252280                } 
    253                 else  
    254                 { 
     281                else 
     282                { 
     283                        if ( isset( $tmp_box ) ) 
     284                                imap_deletemailbox( $this->mbox,"{".$this -> imap_server."}$tmp_box" ); 
     285 
    255286                        return array("error" => $this->functions->getLang("wrong file format")); 
    256287                        $invalid_format = true; 
    257288                } 
    258                  
     289 
    259290                if(!$invalid_format) { 
    260291                        if(count($errors)>0) { 
     
    266297                        } 
    267298                        else 
    268                                 return $this->functions->getLang("The import was executed successfully.");                       
    269                 } 
    270         }        
    271         /* 
     299                                return $this->functions->getLang("The import was executed successfully."); 
     300                } 
     301        } 
     302        /* 
    272303                Remove os anexos de uma mensagem. A estratégia para isso é criar uma mensagem nova sem os anexos, mantendo apenas 
    273304                a primeira parte do e-mail, que é o texto, sem anexos. 
     
    28512882                return $header; 
    28522883        } 
     2884 
     2885//Por Bruno Costa(bruno.vieira-costa@serpro.gov.br - Insere emails no imap a partir do fonte do mesmo. Se o argumento timestamp for passado ele utiliza do script python 
     2886///expressoMail1_2/imap.py para inserir uma msg com o horário correto pois isso não é porssível com a função imap_append do php. 
     2887 
     2888    function insert_email($source,$folder,$timestamp){ 
     2889        $username = $_SESSION['phpgw_info']['expressomail']['user']['userid']; 
     2890        $password = $_SESSION['phpgw_info']['expressomail']['user']['passwd']; 
     2891        $imap_server = $_SESSION['phpgw_info']['expressomail']['email_server']['imapServer']; 
     2892        $imap_port      = $_SESSION['phpgw_info']['expressomail']['email_server']['imapPort']; 
     2893        $imap_options = '/notls/novalidate-cert'; 
     2894        $mbox_stream = imap_open("{".$imap_server.":".$imap_port.$imap_options."}".$folder, $username, $password); 
     2895        if(imap_last_error()) 
     2896        { 
     2897            imap_createmailbox($mbox_stream,imap_utf7_encode("{".$imap_server."}".$folder)); 
     2898       } 
     2899        if($timestamp){ 
     2900            $tempDir = ini_get("session.save_path"); 
     2901            $file = $tempDir."imap_".md5(microtime()); 
     2902                $f = fopen($file,"w"); 
     2903                fputs($f,base64_encode($source)); 
     2904            fclose($f); 
     2905            $command = "python ".$_SERVER['DOCUMENT_ROOT']."expressoMail1_2/imap.py ".$imap_server." ".$imap_port." ".$username." ".$password." ".$timestamp." ".$folder." ".$file; 
     2906            $return['command']=exec($command); 
     2907        }else{ 
     2908            $return['append'] = imap_append($mbox_stream, "{".$imap_server.":".$imap_port."}".$folder, $source, "\\Seen"); 
     2909        } 
     2910        $status = imap_status($mbox_stream, "{".$this->imap_server.":".$this->imap_port."}".$folder, SA_UIDNEXT); 
     2911        $return['msg_no'] = $status->uidnext - 1; 
     2912                $return['error'] = imap_last_error(); 
     2913        if($mbox_stream) 
     2914                        imap_close($mbox_stream); 
     2915        return $return; 
     2916 
     2917    } 
     2918 
     2919//Por Bruno Costa(bruno.vieira-costa@serpro.gov.br - Trata fontes de emails enviados via POST para o servidor por um xmlhttprequest, as partes codificados com 
     2920//Base64 os "+" são substituidos por " " no envio e essa função arruma esse efeito. 
     2921 
     2922    function treat_base64_from_post($source){ 
     2923            $offset = 0; 
     2924            do 
     2925            { 
     2926                    if($inicio = strpos($source, 'Content-Transfer-Encoding: base64', $offset)) 
     2927                    { 
     2928                            $inicio = strpos($source, "\n\r", $inicio); 
     2929                            $fim = strpos($source, '--', $inicio); 
     2930                            if(!$fim) 
     2931                                    $fim = strpos($source,"\n\r", $inicio); 
     2932                            $length = $fim-$inicio; 
     2933                            $parte = substr( $source,$inicio,$length-1); 
     2934                            $parte = str_replace(" ", "+", $parte); 
     2935                            $source = substr_replace($source, $parte, $inicio, $length-1); 
     2936                    } 
     2937                    if($offset > $inicio) 
     2938                    $offset=FALSE; 
     2939                    else 
     2940                    $offset = $inicio; 
     2941            } 
     2942            while($offset); 
     2943            return $source; 
     2944    } 
     2945 
     2946//Por Bruno Costa(bruno.vieira-costa@serpro.gov.br - Recebe os fontes dos emails a serem desarquivados, separa e envia cada um para função insert_mail. 
     2947 
     2948    function unarchive_mail($params) 
     2949    { 
     2950        $dest_folder = $params['folder']; 
     2951        $sources = explode("#@#@#@",$params['source']); 
     2952        $timestamps = explode("#@#@#@",$params['timestamp']); 
     2953        foreach($sources as $index=>$src) { 
     2954                        if($src!=""){ 
     2955                                $source = $this->treat_base64_from_post($src); 
     2956                                $insert = $this->insert_email($source,$dest_folder,$timestamps[$index]); 
     2957                        } 
     2958                } 
     2959        return $insert; 
     2960    } 
     2961 
     2962    function download_all_local_attachments($params) 
     2963    { 
     2964        $source = $params['source']; 
     2965        $source = $this->treat_base64_from_post($source); 
     2966        $insert = $this->insert_email($source,'INBOX'.$this->imap_delimiter.'decifradas'); 
     2967        $exporteml = new ExportEml(); 
     2968        $params['num_msg']=$insert['msg_no']; 
     2969        $params['folder']='INBOX'.$this->imap_delimiter.'decifradas'; 
     2970        return $exporteml->download_all_attachments($params); 
     2971    } 
    28532972} 
    28542973?> 
  • trunk/expressoMail1_2/js/TreeS.js

    r689 r1000  
    4545                                                            "</tr>"+ 
    4646                                                            "<tr>"+ 
    47                                                             "<td><input type='button' value='"+get_lang('Export messages')+"' onclick='ttreeBox.export_all_msg()'></td>"+ 
     47                                                            //Por Bruno Costa(bruno.vieira-costa@serpro.gov.br - Chama o proxy_mensagens para que uma pasta local também possa ser exportada 
     48                                                            "<td><input type='button' value='"+get_lang('Export messages')+"' onclick='proxy_mensagens.proxy_export_all_msg()'></td>"+ 
    4849                                                            "</tr>"+ 
    4950                                                            "<tr><td><br><br><br><br><br></td></tr>"+ 
     
    128129                 
    129130                folders_tree = new dFTree({name: name_tree}); 
    130  
    131131                if(click_root != ""){ 
    132132                        var n_root = new dNode({id:'root', caption:get_lang("My Folders"), onClick:click_root}); 
     
    166166                                id: 'local_root', 
    167167                                caption: get_lang("local messages"), 
    168                                 plusSign: true 
     168                                plusSign: true, 
     169                                onClick:"ttree.get_folder('local_root')" 
    169170                        }); 
    170171                        folders_tree.add(n_root_local, 'root'); 
  • trunk/expressoMail1_2/js/common_functions.js

    r994 r1000  
    119119function set_msg_as_unread(msg_number){ 
    120120        tr_message = Element(msg_number); 
    121         if (exist_className(tr_message, 'tr_msg_read') || exist_className(tr_message, 'tr_msg_read2'))  
     121        if (exist_className(tr_message, 'tr_msg_read') || exist_className(tr_message, 'tr_msg_read2')) 
    122122                increment_folder_unseen(); 
    123123        remove_className(tr_message, 'selected_msg'); 
     
    693693                Element('new_m').innerHTML = '<font style="color:red">' + abas_unseen + '</font>'; 
    694694        } 
    695         if ( current_folder.indexOf( 'INBOX' ) !== 0 ) 
     695        if ( current_folder.indexOf( 'INBOX' ) !== 0 && current_folder.indexOf( 'local_' ) !== 0 ) 
    696696        { 
    697697                var display_unseen_in_shared_folders = Element('dftree_user_unseen'); 
  • trunk/expressoMail1_2/js/doiMenuData.js

    r790 r1000  
    159159                        _tab + get_lang("Move to")+" ... |wfolders.makeWindow('', 'move_to')", 
    160160                        _tab + get_lang("Delete")+"|"+"proxy_mensagens.delete_msgs('null','selected','null')", 
    161                         _tab + get_lang("Export")+"|"+"export_all_selected_msgs()" 
     161                        _tab + get_lang("Export")+"|"+"proxy_mensagens.export_all_messages()" 
    162162                ); 
    163163 
  • trunk/expressoMail1_2/js/draw_api.js

    r999 r1000  
    916916 
    917917        proxy_mensagens.messages_list(current_folder,1,preferences.max_email_per_page,sort,search,sort_box_reverse,handler_draw_box); 
    918         cExecute ("$this.imap_functions.get_range_msgs2&folder="+current_folder+"&msg_range_begin=1&msg_range_end="+preferences.max_email_per_page+"&sort_box_type="+sort+"&search_box_type="+search+"&sort_box_reverse="+sort_box_reverse+"", handler_draw_box); 
    919918        current_page = 1; 
    920919        //Comentado para nao sobrepor o numero de msgs nao lidas ao utilizar os filtros 
     
    978977                        currentTab = ID; 
    979978                        openTab.type[ID] = 2; 
    980                         cExecute("$this.imap_functions.get_info_msg&msg_number="+folder.nextSibling.id+"&msg_folder="+nextMsgBox, show_msg); 
     979                        proxy_mensagens.get_msg(parseInt(folder.nextSibling.id),nextMsgBox,true,show_msg); 
     980                        //cExecute("$this.imap_functions.get_info_msg&msg_number="+folder.nextSibling.id+"&msg_folder="+nextMsgBox, show_msg); 
    981981                }; 
    982982        } 
     
    10141014                        currentTab = ID; 
    10151015                        openTab.type[ID] = 2; 
    1016                         cExecute("$this.imap_functions.get_info_msg&msg_number="+folder.previousSibling.id+"&msg_folder=" + previousMsgBox, show_msg); 
     1016                        //cExecute("$this.imap_functions.get_info_msg&msg_number="+folder.previousSibling.id+"&msg_folder=" + previousMsgBox, show_msg); 
     1017                        proxy_mensagens.get_msg(parseInt(folder.previousSibling.id),previousMsgBox,true,show_msg); 
    10171018                }; 
    10181019        } 
     
    15001501                        if(info_msg.attachments.length > 1) { 
    15011502                                var link_attachment     = document.createElement("A"); 
    1502                                 link_attachment.setAttribute("href", "javascript:download_all_attachments('"+info_msg.msg_folder+"','"+info_msg.msg_number+"')"); 
     1503                 if(proxy_mensagens.is_local_folder(current_folder)) 
     1504                    link_attachment.setAttribute("href", "javascript:expresso_local_messages.download_all_local_attachments('"+info_msg.msg_folder+"','"+info_msg.msg_number+"')"); 
     1505                else 
     1506                    link_attachment.setAttribute("href", "javascript:download_all_attachments('"+info_msg.msg_folder+"','"+info_msg.msg_number+"')"); 
    15031507                                link_attachment.innerHTML = " "+info_msg.attachments.length+' '+get_lang('files')+' :: '+get_lang('Download all atachments'); 
    15041508                                link_attachment.innerHTML += '<BR>'; 
     
    16031607                        var showImgLink = document.createElement('DIV'); 
    16041608                        showImgLink.id="show_img_link"; 
    1605                         showImgLink.onclick = function () { cExecute('$this.imap_functions.get_info_msg&msg_number='+info_msg.msg_number+'&msg_folder='+info_msg.msg_folder,show_msg_img); }; 
     1609                        showImgLink.onclick = function(){show_msg_img(info_msg.msg_number,info_msg.msg_folder)}; 
    16061610                        showImgLink.className="show_img_link"; 
    16071611                        showImgLink.innerHTML = get_lang("Show images from")+": "+info_msg.from.email; 
     
    16421646                        _link_attachments       = document.createElement("A"); 
    16431647                        _link_attachments.className = "message_options"; 
    1644                         _link_attachments.setAttribute("href", "javascript:download_all_attachments('"+info_msg.msg_folder+"','"+info_msg.msg_number+"')"); 
     1648             if(proxy_mensagens.is_local_folder(current_folder)) 
     1649                _link_attachments.setAttribute("href", "javascript:expresso_local_messages.download_all_local_attachments('"+info_msg.msg_folder+"','"+info_msg.msg_number+"')"); 
     1650            else 
     1651                _link_attachments.setAttribute("href", "javascript:download_all_attachments('"+info_msg.msg_folder+"','"+info_msg.msg_number+"')"); 
    16451652                        _link_attachments.innerHTML = get_lang('Download all atachments'); 
    16461653                } 
     
    26172624                '<span class="message_options_move"><span ' + change_font_color + ' title="'+get_lang("Move")+'" class="message_options" onclick=wfolders.makeWindow(\"\",\"move_to\")>'+get_lang("Move")+'</span></span>'+ 
    26182625                '<span class="message_options_print"><span ' + change_font_color + ' title="'+get_lang("Print")+'" class="message_options" onclick=print_all()>'+get_lang("Print")+'</span></span>'+ 
    2619                 '<span class="message_options_export"><span ' + change_font_color + ' title="'+get_lang("Export")+'" class="message_options" onclick="export_all_selected_msgs()">'+get_lang("Export")+'</span></span>' + 
     2626        '<span class="message_options_export"><span ' + change_font_color + ' title="'+get_lang("Export")+'" class="message_options" onclick="proxy_mensagens.export_all_messages()">'+get_lang("Export")+'</span></span>' + 
    26202627                '<span class="message_options_import"><span ' + change_font_color + ' title="'+get_lang("Import")+'" class="message_options" onclick="import_window()">'+get_lang("Import")+'</span></span>'; 
    2621         if(preferences.use_local_messages==1) 
    2622                 span_options.innerHTML += '&nbsp;<span ' + change_font_color + ' title="'+get_lang("Archive")+'" class="message_options" onclick="archive_msgs(\''+folder+'\',null)">'+get_lang("Archive")+'</span>'; 
     2628    if(preferences.use_local_messages==1) 
     2629                if(proxy_mensagens.is_local_folder(current_folder)) 
     2630                        span_options.innerHTML += '&nbsp; <span title="'+get_lang("Unarchive")+'" class="message_options" onclick="expresso_local_messages.unarchive_msgs(\''+folder+'\',null)">'+get_lang("Unarchive")+'</span>'; 
     2631                else 
     2632                        span_options.innerHTML += '&nbsp; <span title="'+get_lang("Archive")+'" class="message_options" onclick="archive_msgs(\''+folder+'\',null)">'+get_lang("Archive")+'</span>'; 
    26232633        if (use_spam_filter) { 
    26242634                if ( current_folder == 'INBOX'+cyrus_delimiter+'Spam' ) { 
  • trunk/expressoMail1_2/js/local_messages.js

    r670 r1000  
    5959         
    6060        local_messages.prototype.insert_mail = function(msg_info,msg_header,anexos,folder) { 
    61  
    6261                try { 
    6362                        this.init_local_messages(); 
     
    8281                        msg_info.cc = null; 
    8382                        msg_header.Size=null; 
    84                          
    8583                        //If the mail was archieved in the same date the user received it, the date cames with the time. 
    8684                        //here I solved it 
     
    109107                         
    110108                        var rs = this.dbGears.execute("select rowid from folder where folder=? and uid_usuario=?",[folder,account_id]); 
    111                          
    112                         if(rs.isValidRow()) 
     109                        if(rs.isValidRow()) 
    113110                                id_folder=rs.field(0); 
    114111                        else { 
     
    119116                        if(msg_info.Unseen=="U") 
    120117                                unseen = 1; 
    121                         this.dbGears.execute("insert into mail (mail,original_id,original_folder,header,timestamp,uid_usuario,unseen,id_folder,ffrom,subject,fto,cc,body,size) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?)",[mail,original_id,original_folder,header,timestamp,login,unseen,id_folder,from,subject,to,cc,body,size]); 
     118            this.dbGears.execute("insert into mail (mail,original_id,original_folder,header,timestamp,uid_usuario,unseen,id_folder,ffrom,subject,fto,cc,body,size) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?)",[mail,original_id,original_folder,header,timestamp,login,unseen,id_folder,from,subject,to,cc,body,size]); 
    122119                        var call_back = function() { 
    123120                        } 
     
    148145                retorno['subject'] = rs.field(3); 
    149146                retorno['body'] = rs.field(4); 
     147                //Codigo que as imagens embutidas em emails (com multipart/related ou multipart/mixed) sejam corretamente mostradas em emails arquivados. Os links do 
     148                //tipo "./inc/show_embedded_attach.php?msg_folder=[folder]&msg_num=[msg_num]&msg_part=[part]" 
     149                //são substituidos pelos links dos anexos capturados pelo gears. 
     150 
     151                var thumbs= retorno.thumbs; 
     152                var anexos= retorno.array_attach; 
     153                for (i in anexos) 
     154                { 
     155                    nomeArquivo = anexos[i]['name'].substring(0,anexos[i]['name'].length - 4); 
     156                    if(nomeArquivo.match('jpg')||anexos[i]['name'].match('gif')||anexos[i]['name'].match('png')) 
     157                        { 
     158                            var er_imagens = new RegExp("\\.\\/inc\\/show_embedded_attach.php\\?msg_folder=[\\w/]+\\&msg_num=[0-9]+\\&msg_part="+anexos[i]['pid']); 
     159                            var Result_imagens = er_imagens.exec(retorno['body']); 
     160                            retorno['body'] = retorno['body'].replace(Result_imagens,anexos[i]['url']); 
     161                            if(thumbs && thumbs[i]){ 
     162                                er_imagens = new RegExp("\\.\\/inc\\/show_thumbs.php\\?file_type=image\\/[\\w]+\\&msg_num=[0-9]+\\&msg_folder=[\\w/%]+\\&msg_part="+anexos[i]['pid']); 
     163                                Result_imagens = er_imagens.exec(thumbs[i]); 
     164                                thumbs[i] = thumbs[i].replace(Result_imagens,"'"+anexos[i]['url']+"'"); 
     165                                er_imagens = new RegExp("\\.\\/inc\\/show_img.php\\?msg_num=[0-9]+\\&msg_folder=[\\w/%]+\\&msg_part="+anexos[i]['pid']); 
     166                                Result_imagens = er_imagens.exec(thumbs[i]); 
     167                                thumbs[i] = thumbs[i].replace(Result_imagens,"'"+anexos[i]['url']+"'"); 
     168                                thumbs[i] = thumbs[i].replace(/<IMG/i,'<img width="120"'); 
     169                            } 
     170                        } 
     171                } 
     172 
    150173                retorno['to'] = connector.unserialize(rs.field(5)); 
    151174                retorno['cc'] = connector.unserialize(rs.field(6)); 
     
    508531                                                sql += " and"; 
    509532                                } 
    510                                 sql+=" mail."+this.aux_convert_filter_field(friendly_filters[z])+" like '%"+friendly_filters[z+1]+"%'"; 
     533                                sql+=" mail."+this.aux_convert_filter_field(friendly_filters[z])+" like '%"+url_decode(friendly_filters[z+1])+"%'"; 
    511534                        } 
    512535                } 
     
    559582                return retorno; 
    560583        } 
     584 
     585     //Por Bruno Costa(bruno.vieira-costa@serpro.gov.br - Essa função é um AJAX simples que serve apenas para pegar o fonte de uma msg local (no formato RFC 822). 
     586    local_messages.prototype.get_src = function(url){ 
     587        AJAX = false; 
     588        if (window.XMLHttpRequest) { // Mozilla, Safari,... 
     589            AJAX = new XMLHttpRequest(); 
     590            if (AJAX.overrideMimeType) { 
     591                AJAX.overrideMimeType('text/xml'); 
     592            } 
     593        } else if (window.ActiveXObject) { // IE 
     594            try { 
     595                AJAX = new ActiveXObject("Msxml2.XMLHTTP"); 
     596            } catch (e) { 
     597                try { 
     598                AJAX = new ActiveXObject("Microsoft.XMLHTTP"); 
     599                } catch (e) {} 
     600            } 
     601        } 
     602 
     603        if (!AJAX) { 
     604            alert('ERRO :(Seu navegador não suporta a aplicação usada neste site'); 
     605            return false; 
     606        } 
     607 
     608        AJAX.onreadystatechange = function() { 
     609            if (AJAX.readyState == 4) { 
     610                AJAX.src=AJAX.responseText; 
     611                if (AJAX.status == 200) { 
     612                    return AJAX.responseText; 
     613                    } else { 
     614                    return false; 
     615                } 
     616            } 
     617        } 
     618 
     619        AJAX.open('get', url, false); 
     620        AJAX.send(null); 
     621        return AJAX.responseText; 
     622    }; 
     623 
     624  //Por Bruno Costa(bruno.vieira-costa@serpro.gov.br - Dessarquiva msgs locais pegando o codigo fonte das mesmas e mandando via POST para o servidor 
     625  //para que elas sejam inseridas no imap pela função  imap_functions.unarchive_mail. 
     626    local_messages.prototype.unarchive_msgs = function (folder,new_folder,msgs_number){ 
     627 
     628        if(!new_folder) 
     629            new_folder='INBOX'; 
     630        this.init_local_messages(); 
     631       // alert(folder+new_folder+msgs_number); 
     632        var handler_unarchive = function(data) 
     633        { 
     634            if(data.error == '') 
     635                write_msg(get_lang('All messages are successfully unarchived')); 
     636            else 
     637                alert(data.error); 
     638        } 
     639        if(msgs_number =='selected' || !msgs_number) 
     640        { 
     641            msgs_number = get_selected_messages() 
     642            if (!msgs_number){ 
     643                write_msg(get_lang('No selected message.')); 
     644                return; 
     645            } 
     646            var rs = this.dbGears.execute("select mail,timestamp from mail where rowid in ("+msgs_number+")"); 
     647            var source=""; 
     648            var timestamp=""; 
     649            while(rs.isValidRow()) { 
     650                mail=connector.unserialize(rs.field(0)); 
     651                source_tmp=escape(this.get_src(mail.url_export_file)); 
     652                    source+="#@#@#@"+source_tmp; 
     653                    timestamp+="#@#@#@"+rs.field(1); 
     654                rs.next(); 
     655            } 
     656            rs.close(); 
     657            this.finalize(); 
     658        } 
     659        else 
     660        { 
     661            var rs = this.dbGears.execute("select mail,timestamp from mail where rowid="+msgs_number); 
     662            mail=connector.unserialize(rs.field(0)); 
     663            var source =""; 
     664            source = this.get_src(mail.url_export_file); 
     665            timestamp=rs.field(1); 
     666             rs.close(); 
     667             this.finalize(); 
     668        } 
     669            params="&folder="+new_folder+"&source="+source+"&timestamp="+timestamp; 
     670            cExecute ("$this.imap_functions.unarchive_mail&", handler_unarchive, params); 
     671    } 
     672 
     673 
     674    local_messages.prototype.download_all_local_attachments = function(folder,id){ 
     675        this.init_local_messages(); 
     676        var rs = this.dbGears.execute("select mail from mail where rowid="+id); 
     677        var tmp = connector.unserialize(rs.field(0)); 
     678        rs.close(); 
     679        this.finalize(); 
     680        source = this.get_src(tmp.url_export_file); 
     681        source = escape(source); 
     682        var handler_source = function(data){ 
     683            download_attachments(null, null, data, null,null,'anexos.zip'); 
     684        } 
     685        cExecute("$this.imap_functions.download_all_local_attachments",handler_source,"source="+source); 
     686    } 
     687 
     688    /*************************************************************************/ 
     689/* Funcao usada para exportar mensagens arquivadas localmente. 
     690 * Rommel de Brito Cysne (rommel.cysne@serpro.gov.br) 
     691 * em 22/12/2008. 
     692 */ 
     693    local_messages.prototype.local_messages_to_export = function(){ 
     694 
     695        if (openTab.type[currentTab] > 1){ 
     696            var msgs_to_export_id = currentTab.substring(0,currentTab.length-2,currentTab); 
     697        }else{ 
     698            var msgs_to_export_id = get_selected_messages(); 
     699        } 
     700        var handler_local_mesgs_to_export = function(data){ 
     701            download_attachments(null, null, data, null,null,'mensagens.zip'); 
     702        } 
     703        if(msgs_to_export_id){ 
     704            this.init_local_messages(); 
     705            var l_msg = "t"; 
     706            var mesgs =""; 
     707            var subjects =""; 
     708            var rs = this.dbGears.execute("select mail,subject from mail where rowid in ("+msgs_to_export_id+")"); 
     709            while(rs.isValidRow()){ 
     710                mail = connector.unserialize(rs.field(0)); 
     711                src = this.get_src(mail.url_export_file); 
     712                subject = rs.field(1); 
     713                mesgs += src; 
     714                mesgs += "@@"; 
     715                subjects += subject; 
     716                subjects += "@@"; 
     717                rs.next(); 
     718            } 
     719            rs.close(); 
     720            this.finalize(); 
     721            mesgs = escape(mesgs); 
     722            subjects = escape(subjects); 
     723            params = "subjects="+subjects+"&mesgs="+mesgs+"&l_msg="+l_msg+"&msgs_to_export="+msgs_to_export_id; 
     724            cExecute ("$this.exporteml.makeAll&", handler_local_mesgs_to_export, params); 
     725        } 
     726        return true; 
     727    } 
     728 
     729    local_messages.prototype.get_all_local_folder_messages= function(folder_name){ 
     730 
     731 
     732         var mesgs = new Array(); 
     733         var subjects = new Array(); 
     734         var hoje = new Date(); 
     735         var msgs_to_export = new Array(); 
     736         var l_msg="t"; 
     737 
     738        this.init_local_messages(); 
     739        var query = "select mail,subject,mail.rowid from mail inner join folder on (mail.id_folder=folder.rowid) where folder.folder='" + folder_name + "'"; 
     740 
     741        var rs = this.dbGears.execute(" "+query) 
     742 
     743            var handler_local_mesgs_to_export = function(data){ 
     744                    //alert("data - " + data + " - tipo - " + typeof(data)); 
     745                    download_attachments(null, null, data, null,null,'mensagens.zip'); 
     746            } 
     747        var j=0; 
     748        while (rs.isValidRow()){ 
     749              msgs_to_export[j]=rs.field(2) 
     750              mail = connector.unserialize(rs.field(0)); 
     751                      msg=this.get_src(mail.url_export_file); 
     752                      subject = rs.field(1); 
     753                      mesgs += msg; 
     754                      mesgs += "@@"; 
     755                      subjects += subject; 
     756                      subjects += "@@"; 
     757                      rs.next(); 
     758              j++; 
     759 
     760        } 
     761           rs.close(); 
     762           this.finalize(); 
     763           source = escape(mesgs); 
     764           subjects = escape(subjects); 
     765           params = "folder="+folder_name+"&subjects="+subjects+"&mesgs="+source+"&l_msg="+l_msg+"&msgs_to_export="+msgs_to_export; 
     766           cExecute ("$this.exporteml.makeAll&", handler_local_mesgs_to_export, params); 
     767           
     768 
     769    } 
     770 
     771 
     772    /*************************************************************************/ 
     773 
    561774         
    562775        var expresso_local_messages; 
  • trunk/expressoMail1_2/js/main.js

    r976 r1000  
    103103} 
    104104 
    105 function show_msg_img(msg_info){ 
    106        delete_border(msg_info.msg_number+"_r"); 
    107        msg_info.showImg = true; 
    108        if (!Element(msg_info.msg_number)){ 
     105function show_msg_img(msg_number,folder){ 
     106    var call_back = function(data){ 
     107       delete_border(data.msg_number+"_r"); 
     108       data.showImg = true; 
     109       if (!Element(data.msg_number)){ 
    109110               trElement = document.createElement('DIV'); 
    110                trElement.id = msg_info.msg_number; 
     111               trElement.id = data.msg_number; 
    111112               Element("tbody_box").appendChild(trElement); 
    112113       } 
    113        show_msg(msg_info); 
     114       show_msg(data); 
     115    } 
     116 
     117    proxy_mensagens.msg_img(msg_number,folder,call_back); 
     118 
    114119} 
    115120 
     
    281286} 
    282287 
    283 function delete_msgs(folder, msgs_number, border_ID, show_success_msg) 
     288function delete_msgs(folder, msgs_number, border_ID, show_success_msg,archive) 
    284289{ 
    285290        if (arguments.length < 4){ 
     
    297302        } 
    298303 
    299         if ((parseInt(preferences.save_deleted_msg)) && (folder!='INBOX'+cyrus_delimiter+trashfolder)){ 
     304        if (!archive && (parseInt(preferences.save_deleted_msg)) && (folder!='INBOX'+cyrus_delimiter+trashfolder)){ 
    300305                move_msgs2(folder, msgs_number, border_ID, 'INBOX'+cyrus_delimiter+trashfolder,trashfolder,show_success_msg ); 
    301306                return; 
     
    595600                var msgs_to_remove = new Array(); 
    596601                var update_tree; 
    597  
    598602                for (var i = 0; i < data.length; i++) { 
    599603                        msg_info = connector.unserialize(data[i]); 
     604                        if ( folder == 'INBOX/Lixeira/tmpMoveToLocal' ){ 
     605                                msg_info.msg_folder += (Date.parse(new Date)); 
     606                        } 
    600607                        temp = expresso_local_messages.insert_mail(msg_info, msg_info['header'],msg_info['array_attach'],folder_dest ); 
    601608                        if ( Element("check_box_message_" + msg_info.msg_number) ) 
     
    609616                        if ( Element(msg_info.msg_number) ) 
    610617                                remove_className(Element(msg_info.msg_number), 'selected_msg'); 
     618                       if ( tree_folders._selected.id.indexOf( 'local_' ) == 0 || folder.indexOf( 'INBOX/Lixeira/tmpMoveToLocal' ) == 0 ) 
     619                        { 
     620                                openTab.imapBox[0] = ''; 
     621                                tree_folders.getNodeById( 'local_Inbox' )._select( ); 
     622                                change_folder('local_Inbox','Inbox') 
     623                        } 
    611624 
    612625                } 
    613626                 
    614627                if (preferences.keep_archived_messages == 0) { //Remove as mensagens 
    615                                 delete_msgs(folder,msgs_to_remove,'null',false); 
     628                                delete_msgs(folder,msgs_to_remove,'null',false,true); 
    616629                } 
    617630                update_tree=(!has_local_messages_before) && expresso_local_messages.has_local_mails(); 
     
    19151928                if(data == 'Post-Content-Length') 
    19161929                        write_msg(get_lang('The size of this message has exceeded  the limit (%1B).',Element('upload_max_filesize').value)); 
    1917                 else { 
    1918                         write_msg(data); 
    1919                         arrayJSWin["import_window"].close(); 
    1920                         if(openTab.imapBox[0] == wfolders_tree._selected.id){ 
    1921                                 openTab.imapBox[0] = ''; 
    1922                                 change_folder(wfolders_tree._selected.id, wfolders_tree._selected.caption); 
    1923                         } 
    1924                         else{ 
    1925                                 refresh(); 
    1926                         } 
    1927                 } 
    1928         } 
     1930                else {  /* 
     1931                        * @author Rommel Cysne (rommel.cysne@serpro.gov.br) 
     1932                        * @date 2009/05/15 
     1933                        * Foi colocado um teste para verificar se a pasta selecionada, passada como parametro, 
     1934                        * eh uma pasta local (qualquer uma) 
     1935                        */ 
     1936                        var er = /^local_/; 
     1937                        if ( er.test(wfolders_tree._selected.id) ) 
     1938                        { 
     1939                                archive_msgs('INBOX/Lixeira/tmpMoveToLocal',wfolders_tree._selected.id,data); 
     1940                                cExecute('$this.imap_functions.delete_mailbox',function(){},'del_past=INBOX/Lixeira/tmpMoveToLocal'); 
     1941                        } 
     1942                         else{ 
     1943                                write_msg(data); 
     1944                                arrayJSWin["import_window"].close(); 
     1945                                if(openTab.imapBox[0] == wfolders_tree._selected.id) 
     1946                                { 
     1947                                        openTab.imapBox[0] = ''; 
     1948                                        change_folder(wfolders_tree._selected.id, wfolders_tree._selected.caption); 
     1949                                } else{ 
     1950                                        refresh(); 
     1951                                } 
     1952                        } 
     1953        } 
     1954    } 
     1955 
    19291956} 
    19301957 
  • trunk/expressoMail1_2/js/messages_proxy.js

    r670 r1000  
    183183                        } 
    184184                        else { 
    185                                 write_msg(get_lang("you can't move mails from local to server folders")); 
     185                //Por Bruno Costa (bruno.vieira-costa@serpro.gov.br) permite o desarquivamento de menssagens chamando a função unarchive_msgs quando uma msg é movida de uma pasta local para uma pasta remota. 
     186 
     187                                expresso_local_messages.unarchive_msgs(folder,new_folder,msgs_number); 
     188                //write_msg(get_lang("you can't move mails from local to server folders")); 
    186189                        } 
    187190                 
     
    250253        } 
    251254 
     255        messages_proxy.prototype.msg_img = function(msgs_number,folder_name,call_back) { 
     256     if(this.is_local_folder(folder_name)){ 
     257         var msg = expresso_local_messages.get_local_mail(msgs_number); 
     258                 eval('call_back(msg)'); 
     259     } 
     260     else 
     261        cExecute('$this.imap_functions.get_info_msg&msg_number='+msgs_number+'&msg_folder='+folder_name,call_back); 
     262    } 
     263 
     264    messages_proxy.prototype.export_all_messages = function(folder){ 
     265 
     266                if (!folder){ 
     267                        folder = get_current_folder(); 
     268                } 
     269 
     270                if(!this.is_local_folder(folder)){ 
     271                        export_all_selected_msgs(); 
     272                }else{ 
     273                        local_messages.prototype.local_messages_to_export(); 
     274                } 
     275        } 
     276 
     277        messages_proxy.prototype.proxy_export_all_msg=function(){ 
     278 
     279                var er=/^local/; 
     280 
     281 
     282                if(ttree.FOLDER == "local_root"){return false;}   //Usuario não selecionou uma pasta local e esta no começo dos nós 
     283                var nm_bx = ttree.FOLDER.split(cyrus_delimiter); 
     284 
     285                var name_f = nm_bx[nm_bx.length -1].replace("local_",""); 
     286 
     287                if (!er.test(nm_bx)){ 
     288                        //Se a pasta nao for local, ou seja a string nao contem a string "local" 
     289                        ttreeBox.export_all_msg(); 
     290                } else{ 
     291                        expresso_local_messages.get_all_local_folder_messages(name_f); 
     292                } 
     293        } 
     294 
    252295        var proxy_mensagens; 
    253296        proxy_mensagens = new messages_proxy(); 
  • trunk/expressoMail1_2/js/search.js

    r976 r1000  
    351351                                add_className(tr,'tr_msg_unread'); 
    352352                        add_className(tr, i%2 != 0 ? 'tr_msg_read2' : 'tr_msg_read'); 
    353                            
    354                         var _onclick = function () { cExecute("$this.imap_functions.get_info_msg&msg_number="+this.parentNode.id+"&msg_folder="+url_encode(this.parentNode.getAttribute('name')),show_msg); };                   
    355                         for(var j=0 ; j < 10 ; j++) 
     353            var _onclick = function () { proxy_mensagens.get_msg(this.parentNode.id,url_encode(this.parentNode.getAttribute('name')),false,show_msg);}; 
     354            for(var j=0 ; j < 10 ; j++) 
    356355                        { 
    357356                                var td = document.createElement("TD"); 
  • trunk/expressoMail1_2/setup

    • Property svn:ignore set to
      .phpgw_pt-br.lang.swp
Note: See TracChangeset for help on using the changeset viewer.