Changeset 5476


Ignore:
Timestamp:
02/06/12 11:20:51 (12 years ago)
Author:
cristiano
Message:

Ticket #2480 - Adequações no parser de e-mail - Tratamento do HTML

Location:
trunk
Files:
2 added
2 edited

Legend:

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

    r5463 r5476  
    18271827 
    18281828        function replace_special_characters($body)  
    1829         { 
    1830             // Suspected TAGS! 
    1831             // $tag_list = Array('blink','object','meta','html','link','frame','iframe','layer','ilayer','plaintext','script','style','img','applet','embed','head','frameset','xml','xmp'); 
    1832             // remove MS Office's proprietary tag 
    1833             //$body = mb_ereg_replace('<!\-\-\[if [^!]* mso .*\]>.*<!\[endif\]\-\->', '', $body); 
    1834             // Layout problem: Change html elements 
    1835             // with absolute position to relate position, CASE INSENSITIVE. 
     1829        {                
     1830            if(trim($body) === '') return; 
     1831             
    18361832            $body = str_ireplace('POSITION: ABSOLUTE;','', $body); 
     1833            $body = str_ireplace('<o:p>&nbsp;</o:p>','<br />', $body);//Qubra de linha do MSO 
     1834            $body = preg_replace('/<(meta|base|link|html|\/html)[^>]*>/i', '', $body); 
     1835             
     1836            require_once('../library/CssToInlineStyles/css_to_inline_styles.php'); 
     1837            $cssToInlineStyles = new CSSToInlineStyles($body); 
     1838            $cssToInlineStyles->setUseInlineStylesBlock(true); 
     1839            $cssToInlineStyles->setCleanup(TRUE); 
     1840            $body = $cssToInlineStyles->convert(); //Converte as tag style em inline styles 
    18371841 
    18381842            ///--------------------------------//  
     
    18411845                'blink', 'object', 'frame', 'iframe', 
    18421846                'layer', 'ilayer', 'plaintext', 'script', 
    1843                 'applet', 'embed', 'frameset', 'xml', 'xmp' 
     1847                'applet', 'embed', 'frameset', 'xml', 'xmp','style','head' 
    18441848            ); 
    18451849 
    18461850            foreach ($tag_list as $index => $tag)  
    18471851                $body = @mb_eregi_replace("<$tag\\b[^>]*>(.*?)</$tag>", '', $body); 
    1848              
    1849             $body = preg_replace('/<(meta|base|link)[^>]*>/i', '', $body); 
    1850  
    1851             //try to wrap CSS code instead of remove STYLE tags 
    1852             require_once('../library/csstidy/class.csstidy.php'); 
    1853             $css = new csstidy(); 
    1854             $css->set_cfg('preserve_css', false); 
    1855  
    1856             $regs_found = array(); 
    1857             $tags_found = preg_match_all("@<style[^>]*>.*?</style[^>]*>@si", $body, $regs_found); 
    1858             $wrapper_class = 'ExpressoCssWrapper' . time(); 
    1859                          
    1860             foreach ($regs_found as $k => &$v) { 
    1861                 foreach ($v as $kk => $vv) { 
    1862                     $n_start = strpos($vv, '>') + 1; 
    1863                     $n_length = strrpos($vv, '<') - $n_start; 
    1864                     $bf_innerHTML = substr($vv, $n_start, $n_length); 
    1865                     $bf_innerHTML = mb_ereg_replace('<!--', '', $bf_innerHTML); 
    1866                     $bf_innerHTML = mb_ereg_replace('-->', '', $bf_innerHTML); 
    1867                      
    1868                     $css->parse($bf_innerHTML); 
    1869  
    1870                     $prefix = ".$wrapper_class "; 
    1871                     if (isset($css->css[41]) && count($css->css[41] > 0)) 
    1872                         foreach ($css->css[41] as $key => $value) { 
    1873                             //explode multiple selectors per block  
    1874                             $selectors = explode(',', $key); 
    1875  
    1876                             foreach ($selectors as $selector) { 
    1877                                 if (ereg('\*', $key)) { 
    1878                                     //skip selecto '*'  
    1879                                     continue; 
    1880                                 } 
    1881  
    1882                                 $selector = eregi_replace('[^#\.]*body.*', '', $selector); 
    1883                                 $css->css[41][$prefix . trim($selector)] = $value; 
    1884                             } 
    1885                             unset($css->css[41][$key]); 
    1886                         } 
    1887  
    1888                     $body = str_replace($vv, '<style>' . $css->print->plain() . '</style>', $body); 
    1889                 } 
     1852 
     1853            // Malicious Code Remove 
     1854            $dirtyCodePattern = "/(<([\w]+[\w0-9]*)(.*)on(mouse(move|over|down|up)|load|blur|change|error|click|dblclick|focus|key(down|up|press)|select)([\n\ ]*)=([\n\ ]*)[\"'][^>\"']*[\"']([^>]*)>)(.*)(<\/\\2>)?/misU"; 
     1855            preg_match_all($dirtyCodePattern, $body, $rest, PREG_PATTERN_ORDER); 
     1856            foreach ($rest[0] as $i => $val) { 
     1857                if (!(preg_match("/javascript:window\.open\(\"([^'\"]*)\/index\.php\?menuaction=calendar\.uicalendar\.set_action\&cal_id=([^;'\"]+);?['\"]/i", $rest[1][$i]) && strtoupper($rest[4][$i]) == "CLICK" )) //Calendar events 
     1858                    $body = str_replace($rest[1][$i], "<" . $rest[2][$i] . $rest[3][$i] . $rest[7][$i] . ">", $body); 
    18901859            } 
    1891              
    1892         // Malicious Code Remove 
    1893         $dirtyCodePattern = "/(<([\w]+[\w0-9]*)(.*)on(mouse(move|over|down|up)|load|blur|change|error|click|dblclick|focus|key(down|up|press)|select)([\n\ ]*)=([\n\ ]*)[\"'][^>\"']*[\"']([^>]*)>)(.*)(<\/\\2>)?/misU"; 
    1894         preg_match_all($dirtyCodePattern, $body, $rest, PREG_PATTERN_ORDER); 
    1895         foreach ($rest[0] as $i => $val) { 
    1896             if (!(preg_match("/javascript:window\.open\(\"([^'\"]*)\/index\.php\?menuaction=calendar\.uicalendar\.set_action\&cal_id=([^;'\"]+);?['\"]/i", $rest[1][$i]) && strtoupper($rest[4][$i]) == "CLICK" )) //Calendar events 
    1897                 $body = str_replace($rest[1][$i], "<" . $rest[2][$i] . $rest[3][$i] . $rest[7][$i] . ">", $body); 
    1898         } 
    1899  
    1900         /* 
    1901          * Remove deslocamento a esquerda colocado pelo Outlook. 
    1902          * Este delocamento faz com que algumas palavras fiquem escondidas atras da barra lateral do expresso.  
    1903          */ 
    1904         $body = mb_ereg_replace("(<p[^>]*)(text-indent:[^>;]*-[^>;]*;)([^>]*>)", "\\1\\3", $body); 
    1905         $body = mb_ereg_replace("(<p[^>]*)(margin-right:[^>;]*-[^>;]*;)([^>]*>)", "\\1\\3", $body); 
    1906         $body = mb_ereg_replace("(<p[^>]*)(margin-left:[^>;]*-[^>;]*;)([^>]*>)", "\\1\\3", $body); 
    1907         //--------------------------------------------------------------------------------------------//         
    1908         //Remoção de tags <span></span> para correção de erro no firefox 
    1909         //Comentado pois estes replaces geram erros no html da msg, não se pode garantir que o os </span></span> sejam realmente os fechamentos dos <span><span>. 
    1910         //Caso realmente haja a nescessidade de remover estes spans deve ser repensado a forma de como faze-lo. 
    1911         //              $body = mb_eregi_replace("<span><span>","",$body); 
    1912         //              $body = mb_eregi_replace("</span></span>","",$body); 
    1913         //Correção para compatibilização com Outlook, ao visualizar a mensagem 
    1914         $body = mb_ereg_replace('<!--\[', '<!-- [', $body); 
    1915         $body = mb_ereg_replace('&lt;!\[endif\]--&gt;', '<![endif]-->', $body); 
    1916  
    1917         return "<div class=\"$wrapper_class\"><span>" . $body . '</span></div>'; 
     1860 
     1861            /* 
     1862            * Remove deslocamento a esquerda colocado pelo Outlook. 
     1863            * Este delocamento faz com que algumas palavras fiquem escondidas atras da barra lateral do expresso.  
     1864            */ 
     1865            $body = mb_ereg_replace("(<p[^>]*)(text-indent:[^>;]*-[^>;]*;)([^>]*>)", "\\1\\3", $body); 
     1866            $body = mb_ereg_replace("(<p[^>]*)(margin-right:[^>;]*-[^>;]*;)([^>]*>)", "\\1\\3", $body); 
     1867            $body = mb_ereg_replace("(<p[^>]*)(margin-left:[^>;]*-[^>;]*;)([^>]*>)", "\\1\\3", $body); 
     1868            //--------------------------------------------------------------------------------------------//     
     1869            //Remoção de tags <span></span> para correção de erro no firefox 
     1870            //Comentado pois estes replaces geram erros no html da msg, não se pode garantir que o os </span></span> sejam realmente os fechamentos dos <span><span>. 
     1871            //Caso realmente haja a nescessidade de remover estes spans deve ser repensado a forma de como faze-lo. 
     1872            //          $body = mb_eregi_replace("<span><span>","",$body); 
     1873            //          $body = mb_eregi_replace("</span></span>","",$body); 
     1874            //Correção para compatibilização com Outlook, ao visualizar a mensagem 
     1875            $body = mb_ereg_replace('<!--\[', '<!-- [', $body); 
     1876            $body = mb_ereg_replace('&lt;!\[endif\]--&gt;', '<![endif]-->', $body); 
     1877            $body  = preg_replace("/<p[^\/>]*>([\s]?)*<\/p[^>]*>/", '', $body); //Remove paragrafos vazios (evita duplo espaçamento em emails do MSO) 
     1878            
     1879            return  $body ; 
    19181880    } 
    19191881         
  • trunk/expressoMail1_2/js/draw_api.js

    r5469 r5476  
    29332933        _body.id = 'body_' + ID; 
    29342934        _body.innerHTML = newBody; 
    2935         //_body.style.fontSize = '16px'; 
     2935        _body.style.marginLeft = '5px'; 
    29362936 
    29372937        var _elements = _body.getElementsByTagName( '*' ); 
     
    37583758                        save_msg(ID); 
    37593759                }; 
    3760                 $("#save_message_options_"+ID).button({ disabled: false }); 
     3760                $("#save_message_options_"+ID).button({disabled: false}); 
    37613761        }; 
    37623762 
     
    39183918        $(".rich-button").click(function(){ 
    39193919                //TO-DO : Se o usuário clicar varias vezes no botão, a função de iniciar o ckeditor se perde e morre. 
    3920                 $(this).button({ disabled: true }); 
     3920                $(this).button({disabled: true}); 
    39213921                if($(this).find("span:first-child").html() == get_lang("Rich text")){ 
    39223922                        $(this).find("span:first-child").html(get_lang("Simple Text")); 
Note: See TracChangeset for help on using the changeset viewer.