Changeset 4893


Ignore:
Timestamp:
08/03/11 09:06:59 (13 years ago)
Author:
fernando-alberto
Message:

Ticket #1269 - Desenvolvimento da nova solucao de arquivamento local MailArchiver?, novo offsetGMT

Location:
sandbox/expressoMail1_2/MailArchiver/2.2/expressoMail1_2
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • sandbox/expressoMail1_2/MailArchiver/2.2/expressoMail1_2/inc/class.imap_functions.inc.php

    r4644 r4893  
    1414                'get_folders_list'                              => True, 
    1515                'import_msgs'                                   => True, 
    16                 'msgs_to_archive'                               => True 
     16                'msgs_to_archive'                               => True, 
     17                'get_offset_gmt'                                => True 
    1718        ); 
    1819 
     
    116117                $return['folder'] = $folder; 
    117118                 
    118                 //Para enviar o offset entre o timezone definido pelo usuário e GMT 
     119                //Para enviar o offset entre o timezone definido pelo usuï¿œrio e GMT 
    119120                $return['offsetToGMT'] = $this->functions->CalculateDateOffset(); 
    120121                 
     
    182183                //if ($this->prefs['use_important_flag'] ) 
    183184                //{ 
    184                         /*Como eu preciso do atributo Importance para saber se o email é 
    185                          * importante ou não, uso abaixo a função imap_fetchheader e busco 
    186                          * o atributo importance nela. Isso faz com que eu acesse o cabeçalho 
     185                        /*Como eu preciso do atributo Importance para saber se o email ï¿œ 
     186                         * importante ou nï¿œo, uso abaixo a funᅵᅵo imap_fetchheader e busco 
     187                         * o atributo importance nela. Isso faz com que eu acesse o cabeï¿œalho 
    187188                         * duas vezes e de duas formas diferentes, mas em contrapartida, eu 
    188                          * não preciso reimplementar o método utilizando o fetchheader. 
    189                          * Como as mensagens são renderizadas em um número pequeno por vez, 
    190                          * não parece ter perda considerável de performance. 
     189                         * nï¿œo preciso reimplementar o mï¿œtodo utilizando o fetchheader. 
     190                         * Como as mensagens sï¿œo renderizadas em um nï¿œmero pequeno por vez, 
     191                         * nï¿œo parece ter perda considerï¿œvel de performance. 
    191192                         */ 
    192193 
     
    194195                        $flag = preg_match('/importance *: *(.*)\r/i', $tempHeader, $importance); 
    195196                //} 
    196                 // Reimplementado código para identificação dos e-mails assinados e cifrados 
    197                 // no método getMessageType(). Mário César Kolling <mario.kolling@serpro.gov.br> 
     197                // Reimplementado cï¿œdigo para identificaᅵᅵo dos e-mails assinados e cifrados 
     198                // no mï¿œtodo getMessageType(). Mï¿œrio Cï¿œsar Kolling <mario.kolling@serpro.gov.br> 
    198199                $head_array['ContentType'] = $this->getMessageType($msg_number, $tempHeader); 
    199200                $head_array['Importance'] = $flag==0?"Normal":$importance[1]; 
     
    242243                $to = $header->to; 
    243244                $head_array['to'] = array(); 
    244                 if($to[1] && $to[1]->host == ".SYNTAX-ERROR.") { //E-mails que não possuem o campo "para", vêm com o recipiente preenchido, porém com um recipiente a mais alegando erro de sintaxe. 
     245                if($to[1] && $to[1]->host == ".SYNTAX-ERROR.") { //E-mails que nï¿œo possuem o campo "para", vï¿œm com o recipiente preenchido, porï¿œm com um recipiente a mais alegando erro de sintaxe. 
    245246                        $head_array['to']['name'] = $head_array['to']['email'] = NULL; 
    246247                } 
     
    316317        } 
    317318        /** 
    318         * Função que importa arquivos .eml exportados pelo expresso para a caixa do usuário. Testado apenas 
    319         * com .emls gerados pelo expresso, e o arquivo pode ser um zip contendo vários emls ou um .eml. 
     319        * Funᅵᅵo que importa arquivos .eml exportados pelo expresso para a caixa do usuï¿œrio. Testado apenas 
     320        * com .emls gerados pelo expresso, e o arquivo pode ser um zip contendo vï¿œrios emls ou um .eml. 
    320321        */ 
    321322        function import_msgs($params) { 
     
    408409        } 
    409410        /* 
    410                 Remove os anexos de uma mensagem. A estratégia para isso é criar uma mensagem nova sem os anexos, mantendo apenas 
    411                 a primeira parte do e-mail, que é o texto, sem anexos. 
    412                 O método considera que o email é multpart. 
     411                Remove os anexos de uma mensagem. A estratï¿œgia para isso ï¿œ criar uma mensagem nova sem os anexos, mantendo apenas 
     412                a primeira parte do e-mail, que ï¿œ o texto, sem anexos. 
     413                O mï¿œtodo considera que o email ï¿œ multpart. 
    413414        */ 
    414415        function remove_attachments($params) { 
     
    420421 
    421422                $headertemp = explode("\n",imap_fetchheader($this->mbox, imap_msgno($this->mbox, $params["msg_num"]))); 
    422                 foreach($headertemp as $head) {//Se eu colocar todo o header do email dá pau no append, então procuro apenas o que interessa. 
     423                foreach($headertemp as $head) {//Se eu colocar todo o header do email dï¿œ pau no append, entï¿œo procuro apenas o que interessa. 
    423424                        $head1 = explode(":",$head); 
    424425                        if ( (strtoupper($head1[0]) == "TO") || 
     
    430431 
    431432                $msg = &new message_components($this->mbox); 
    432                 $msg->fetch_structure($params["msg_num"]);/* O fetchbody tava trazendo o email com problemas na acentuação. 
    433                                                              Então uso essa classe para verificar a codificação e o charset, 
    434                                                              para que o método decodeBody do expresso possa trazer tudo certinho*/ 
     433                $msg->fetch_structure($params["msg_num"]);/* O fetchbody tava trazendo o email com problemas na acentuaᅵᅵo. 
     434                                                             Entï¿œo uso essa classe para verificar a codificaᅵᅵo e o charset, 
     435                                                             para que o mï¿œtodo decodeBody do expresso possa trazer tudo certinho*/ 
    435436 
    436437                $all_body_type = strtolower($msg->file_type[$params["msg_num"]][0]); 
     
    470471                                                                ) 
    471472                                                ) 
    472                                                 , "\\Seen"); //Append do novo email, só com header e conteúdo sem anexos.                        
     473                                                , "\\Seen"); //Append do novo email, sï¿œ com header e conteï¿œdo sem anexos.                    
    473474                }else{   
    474475                        $status = imap_append($this->mbox, 
     
    485486                                                                ) 
    486487                                                ) 
    487                                                 , "\\Seen"); //Append do novo email, só com header e conteúdo sem anexos. 
     488                                                , "\\Seen"); //Append do novo email, sï¿œ com header e conteï¿œdo sem anexos. 
    488489                } 
    489490 
     
    555556                        $msg_info = $this->get_info_msg($new_params); 
    556557 
    557                         $this->mbox = $this->open_mbox($params['folder']); //Não sei porque, mas se não abrir de novo a caixa dá erro. 
     558                        $this->mbox = $this->open_mbox($params['folder']); //Nï¿œo sei porque, mas se nï¿œo abrir de novo a caixa dï¿œ erro. 
    558559                        $msg_info['header'] = $this->get_info_head_msg($msg_number); 
    559560 
     
    13611362                $body = $this-> replace_links($body); 
    13621363 
    1363                 //Remoção de tags <span></span> para correção de erro no firefox  
     1364                //Remoᅵᅵo de tags <span></span> para correᅵᅵo de erro no firefox  
    13641365                $body = mb_eregi_replace("<span><span>","",$body);  
    13651366                $body = mb_eregi_replace("</span></span>","",$body);  
    1366                 //Correção para compatibilização com Outlook, ao visualizar a mensagem  
     1367                //Correᅵᅵo para compatibilizaᅵᅵo com Outlook, ao visualizar a mensagem  
    13671368                $body = mb_ereg_replace('<!--\[','<!-- [',$body);  
    13681369                $body = mb_ereg_replace('&lt;!\[endif\]--&gt;', '<![endif]-->', $body); 
     
    14241425                 */  
    14251426 
    1426                 // PHP 5.2.x - Remover assim que possível  
     1427                // PHP 5.2.x - Remover assim que possï¿œvel  
    14271428                $body = preg_replace_callback( $pattern,  
    14281429                        create_function(  
     
    16461647                foreach($msgs_to_exec as $msg_number) 
    16471648                { 
    1648                         /*A função imap_headerinfo não traz o cabeçalho completo, e sim alguns 
    1649                         * atributos do cabeçalho. Como eu preciso do atributo Importance 
    1650                         * para saber se o email é importante ou não, uso abaixo a função 
     1649                        /*A funᅵᅵo imap_headerinfo nï¿œo traz o cabeï¿œalho completo, e sim alguns 
     1650                        * atributos do cabeï¿œalho. Como eu preciso do atributo Importance 
     1651                        * para saber se o email ï¿œ importante ou nï¿œo, uso abaixo a funᅵᅵo 
    16511652                        * imap_fetchheader e busco o atributo importance nela para passar 
    1652                         * para as funções ajax. Isso faz com que eu acesse o cabeçalho 
     1653                        * para as funᅵᅵes ajax. Isso faz com que eu acesse o cabeï¿œalho 
    16531654                        * duas vezes e de duas formas diferentes, mas em contrapartida, eu 
    1654                         * não preciso reimplementar o método utilizando o fetchheader. 
     1655                        * nï¿œo preciso reimplementar o mï¿œtodo utilizando o fetchheader. 
    16551656                        */ 
    16561657     
     
    17401741 
    17411742     /** 
    1742      * Método que faz a verificação do Content-Type do e-mail e verifica se é um e-mail normal, 
     1743     * Mï¿œtodo que faz a verificaᅵᅵo do Content-Type do e-mail e verifica se ï¿œ um e-mail normal, 
    17431744     * assinado ou cifrado. 
    1744      * @author Mário César Kolling <mario.kolling@serpro.gov.br> 
    1745      * @param $headers Uma String contendo os Headers do e-mail retornados pela função imap_imap_fetchheader 
    1746      * @param $msg_number O número da mesagem 
     1745     * @author Mï¿œrio Cï¿œsar Kolling <mario.kolling@serpro.gov.br> 
     1746     * @param $headers Uma String contendo os Headers do e-mail retornados pela funᅵᅵo imap_imap_fetchheader 
     1747     * @param $msg_number O nï¿œmero da mesagem 
    17471748     * @return Retorna o tipo da mensagem (normal, signature, cipher). 
    17481749     */ 
     
    17661767     * Metodo que retorna todas as pastas do usuario logado. 
    17671768     * @param $params array opcional para repassar os argumentos ao metodo. 
    1768      * Se usar $params['noSharedFolders'] = true, ira retornar todas as pastas do usuário logado, 
     1769     * Se usar $params['noSharedFolders'] = true, ira retornar todas as pastas do usuï¿œrio logado, 
    17691770     * excluindo as compartilhadas para ele. 
    1770      * Se usar $params['folderType'] = "default" irá retornar somente as pastas defaults 
    1771      * Se usar $params['folderType'] = "personal" irá retornar somente as pastas pessoais 
    1772      * Se usar $params['folderType'] = null irá retornar todas as pastas 
     1771     * Se usar $params['folderType'] = "default" irï¿œ retornar somente as pastas defaults 
     1772     * Se usar $params['folderType'] = "personal" irï¿œ retornar somente as pastas pessoais 
     1773     * Se usar $params['folderType'] = null irï¿œ retornar todas as pastas 
    17731774     * @return Retorna um array contendo as seguintes informacoes de cada pasta: folder_unseen, 
    17741775     * folder_id, folder_name, folder_parent e folder_hasChildren. 
     
    21312132        { 
    21322133            $body = $params['body']; 
    2133             //Compatibilização com Outlook, ao encaminhar a mensagem 
     2134            //Compatibilizaᅵᅵo com Outlook, ao encaminhar a mensagem 
    21342135            $body = mb_ereg_replace('<!--\[','<!-- [',$body); 
    21352136        } 
     
    34643465        function remove_accents($string) { 
    34653466                return strtr($string, 
    3466                 "?Ó??ó?Ý?úÁÀÃÂÄÇÉÈÊËÍÌ?ÎÏÑÕÔÓÒÖÚÙ?ÛÜ?áàãâäçéèêëíì?îïñóòõôöúù?ûüýÿ", 
     3467                "?ï¿œ??ï¿œ?ï¿œ?ᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵ?ᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵ?ᅵᅵ?ᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵ?ᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵ?ᅵᅵᅵᅵ", 
    34673468                "SOZsozYYuAAAAACEEEEIIIIINOOOOOUUUUUsaaaaaceeeeiiiiinooooouuuuuyy"); 
    34683469        } 
     
    39483949 
    39493950//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 
    3950 ///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. 
     3951///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. 
    39513952 
    39523953    function insert_email($source,$folder,$timestamp,$flags){ 
     
    40044005        if (version_compare(PHP_VERSION, '5.2.0', '>=')){ 
    40054006            if(!$source = base64_decode($source,true)) 
    4006                 return "error ".$source."Espaços ".$i; 
     4007                return "error ".$source."Espaï¿œos ".$i; 
    40074008 
    40084009        } 
    40094010        else { 
    40104011            if(!$source = base64_decode($source)) 
    4011                 return "error ".$source."Espaços ".$i; 
     4012                return "error ".$source."Espaï¿œos ".$i; 
    40124013        } 
    40134014 
     
    40454046 
    40464047//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 
    4047 //Base64 os "+" são substituidos por " " no envio e essa função arruma esse efeito. 
     4048//Base64 os "+" sï¿œo substituidos por " " no envio e essa funᅵᅵo arruma esse efeito. 
    40484049 
    40494050    function treat_base64_from_post($source){ 
     
    40714072    } 
    40724073 
    4073 //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. 
     4074//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. 
    40744075 
    40754076    function unarchive_mail($params) 
     
    41394140            return $data;  
    41404141    }   
     4142     
     4143    //MailArchiver -> get offsettogmt as a global javascript variable, invoked at "main.js", init() 
     4144    function get_offset_gmt(){ 
     4145        return($this->functions->CalculateDateOffset()); 
     4146    } 
    41414147} 
    41424148?> 
  • sandbox/expressoMail1_2/MailArchiver/2.2/expressoMail1_2/js/draw_api.js

    r4778 r4893  
    877877                        if ((headers_msgs[i].Unseen == 'U') || (headers_msgs[i].Recent == 'N')) 
    878878                                f_unseen++; 
     879                        //alert('adicionando mensagem ' + i + ' de ' + headers_msgs.length + '[' +headers_msgs[i].attachment+ ']') 
    879880                        tr_element = make_tr_message(headers_msgs[i], msg_folder, headers_msgs.offsetToGMT); 
    880881                        if (tr_element){ 
     
    979980                td_element2 = document.createElement("TD"); 
    980981                td_element2.className = "td_msg"; 
    981                 td_element2.setAttribute("width", "2%"); 
     982                td_element2.setAttribute("width", "2%");                 
    982983                if (headers_msgs.attachment && headers_msgs.attachment.number_attachments > 0) 
    983984                        td_element2.innerHTML = "<img src ='templates/"+template+"/images/clip.gif' title='" + url_decode(headers_msgs.attachment.names) + "'>"; 
     
    11731174                        // Using offset between user defined timezone and GMT 
    11741175                        // Date object converts time to local timezone, so we have to adjust it 
    1175                         udate_local = headers_msgs.udate*1000 + offsetToGMT*1000 + today.getTimezoneOffset()*60*1000; 
     1176                        // MailArchiver: use global user preference from GMT to calculate time slice instead message serialized based 
     1177                        //udate_local = headers_msgs.udate*1000 + offsetToGMT*1000 + today.getTimezoneOffset()*60*1000; 
     1178                        udate_local = headers_msgs.udate*1000 + gmtoffset*1000 + today.getTimezoneOffset()*60*1000; 
    11761179                        date_msg = new Date(udate_local); 
    11771180                    } 
    1178  
    11791181                if (today.getTime() - date_msg.getTime() < 86400000) 
    11801182                        td_element5.innerHTML = norm(date_msg.getHours()) + ':' + norm(date_msg.getMinutes()); 
  • sandbox/expressoMail1_2/MailArchiver/2.2/expressoMail1_2/js/mail_archiver.js

    r4878 r4893  
    880880} 
    881881 
     882MailArchiver.prototype.toExpressoDate = function(data){ 
     883    var ndate = new Date(data); 
     884    //ndate.setTime(data); 
     885    var odate = zeroFill(ndate.getDate()) + '/' + zeroFill(ndate.getMonth()+1) + '/' + zeroFill(ndate.getFullYear() + ' ' + zeroFill(ndate.getHours()) + ':' + zeroFill(ndate.getMinutes()) + ':' + zeroFill(ndate.getSeconds())); 
     886    return(odate); 
     887} 
     888 
    882889MailArchiver.prototype.toExpressoFlags = function(data){ 
    883890    if((data.length > 0) && (typeof(data) != 'undefined')){ 
     
    916923 
    917924MailArchiver.prototype.toExpressoHeader = function(data){    
    918     var tplHeader = 'a:19:{' 
     925    var tplHeader = 'a:16:{' 
    919926+           's:11:"ContentType";' 
    920927+           's:' + data.getContentType().length + ':"' + data.getContentType() + '";' 
     
    924931+           's:5:"udate";' 
    925932+           'i:' + parseInt(data.getDate()/1000) + ';' 
    926 +           's:11:"offsetToGMT";' 
    927 +           'i:-10800;' 
    928933+           's:9:"timestamp";' 
    929934+           'i:' + parseInt(data.getDate()/1000) + ';' 
    930 +           's:9:"smalldate";' 
    931 +           's:10:"01/04/2011";' 
    932 +           's:8:"aux_date";' 
    933 +           's:1:" ";' 
    934935+           's:4:"from";' 
    935936+           expresso_mail_archive.toExpressoAddress(data.getFrom()) 
     
    943944+           expresso_mail_archive.toExpressoAttachmentsHeader(data.getAttachments()) 
    944945+           '}'; 
    945     //window.alert('Serialized data\n\n' + tplHeader); 
     946    //window.alert('Serialized data\n\n' + tplHeader + '\ngmtoffset: ' + gmtoffset); 
    946947    return(tplHeader); 
    947948} 
  • sandbox/expressoMail1_2/MailArchiver/2.2/expressoMail1_2/js/main.js

    r4665 r4893  
    1414 
    1515function init(){ 
    16         if (!is_ie) 
     16        if (!is_ie) 
    1717                Element('tableDivAppbox').width = '100%'; 
    1818 
     
    2424 
    2525        } 
     26        //MailArchiver save offset to gmt user preference data to list correctly date/time from messages list 
     27        var save_gmtoffset = function(data){ 
     28            gmtoffset = data; 
     29        } 
     30         
    2631        var save_preferences = function(data){ 
    2732 
     
    6671                cExecute ("$this.imap_functions.get_folders_list&onload=true", update_menu); 
    6772                cExecute ("$this.db_functions.get_dropdown_contacts", save_contacts); //Save contacts needs preferences. 
     73                 
    6874                if(preferences.hide_folders == "1") 
    6975                        Element('divAppboxHeader').innerHTML =  title_app_menu; 
     
    101107 
    102108        cExecute ("$this.functions.get_preferences", save_preferences); 
     109        //MailArchiver invoke get_offset_gmt from imap functions 
     110        cExecute ("$this.imap_functions.get_offset_gmt", save_gmtoffset); 
     111         
    103112        cExecute ("phpgwapi.browser.isMobile", function( data ) 
    104113        { 
Note: See TracChangeset for help on using the changeset viewer.