예제 #1
0
     $dom->encoding = $charset;
     $dom->loadHTML($htmltoparse);
     $css_buffer = "";
     $links = $dom->getElementsByTagName("link");
     $dom_css = array();
     for ($i = 0; $i < $links->length; $i++) {
         $dom_css[] = $links->item($i);
         if (!$compressed_file_exist && $links->item($i)->hasAttribute("type") && $links->item($i)->getAttribute("type") == "text/css") {
             $css_buffer .= loadandcompresscss(html_entity_decode($links->item($i)->getAttribute("href")));
         }
     }
     $styles = $dom->getElementsByTagName("style");
     for ($i = 0; $i < $styles->length; $i++) {
         $dom_css[] = $styles->item($i);
         if (!$compressed_file_exist) {
             $css_buffer .= compresscss($styles->item($i)->nodeValue, "");
         }
     }
     foreach ($dom_css as $link) {
         $link->parentNode->removeChild($link);
     }
     if (!$compressed_file_exist) {
         file_put_contents("./temp/full.css", $css_buffer);
     }
     $link = $dom->createElement("link");
     $link->setAttribute("href", "./temp/full.css");
     $link->setAttribute("rel", "stylesheet");
     $link->setAttribute("type", "text/css");
     $dom->getElementsByTagName("head")->item(0)->appendChild($link);
     $htmltoparse = $dom->saveHTML();
 } else {
예제 #2
0
 function transform_html($html)
 {
     global $lvl, $pageid, $search_type_asked;
     global $charset, $is_opac_included;
     global $opac_compress_css;
     if ($charset == 'utf-8') {
         $html = preg_replace('/[\\x00-\\x08\\x10\\x0B\\x0C\\x0E-\\x19\\x7F]' . '|[\\x00-\\x7F][\\x80-\\xBF]+' . '|([\\xC0\\xC1]|[\\xF0-\\xFF])[\\x80-\\xBF]*' . '|[\\xC2-\\xDF]((?![\\x80-\\xBF])|[\\x80-\\xBF]{2,})' . '|[\\xE0-\\xEF](([\\x80-\\xBF](?![\\x80-\\xBF]))|(?![\\x80-\\xBF]{2})|[\\x80-\\xBF]{3,})/S', '?', $html);
     }
     $pageid += 0;
     @ini_set("zend.ze1_compatibility_mode", "0");
     $this->cadre_portail_list = array();
     $this->dom = new DomDocument();
     $this->dom->encoding = $charset;
     // si pas d'entete on ajoute le charset
     if ($is_opac_included) {
         $html = '<meta http-equiv="content-type" content="text/html; charset=' . $charset . '" />' . $html;
     }
     if (!@$this->dom->loadHTML($html)) {
         return $html;
     }
     //bon, l'histoire se répète, c'est quand on pense que c'est simple que c'est vraiment complexe...
     // on commence par récupérer les zones...
     $this->id_version = $this->get_version_public();
     if (!$this->id_version) {
         return $html;
     }
     //On vide ce qui est trop vieux dans la table de cache des cadres
     $this->manage_cache_cadres("clean");
     $cache_cadre_object = array();
     //Tableau qui sert à stocker les objets générés pour les cadres.
     $query_zones = "select distinct build_parent from cms_build where build_type='cadre' and build_version_num= '" . $this->id_version . "'";
     $result_zones = pmb_mysql_query($query_zones);
     if (pmb_mysql_num_rows($result_zones)) {
         while ($row_zones = pmb_mysql_fetch_object($result_zones)) {
             //pour chaque zone, on récupère les cadres fixes...
             $query_cadres = "select cms_build.*,cadre_url from cms_build \n\t\t\t\tLEFT JOIN cms_cadres ON build_obj=CONCAT(cadre_object,'_',id_cadre) AND cadre_memo_url=1\n\t\t\t\twhere build_parent = '" . $row_zones->build_parent . "'\r\n\t\t\t\tand build_fixed = 1 and build_type='cadre' and build_version_num= '" . $this->id_version . "' ";
             $result_cadres = pmb_mysql_query($query_cadres);
             if (pmb_mysql_num_rows($result_cadres)) {
                 $cadres = array();
                 //on place les cadres dans un tableau
                 while ($row_cadres = pmb_mysql_fetch_object($result_cadres)) {
                     //Si on a récupéré un cadre_url
                     $cadreOk = true;
                     if ($row_cadres->cadre_url) {
                         $url = substr($row_cadres->cadre_url, strpos($row_cadres->cadre_url, '?') + 1);
                         foreach (explode('&', $url) as $idParam => $param) {
                             $tmp = array();
                             $tmp = explode('=', $param);
                             if (sizeof($tmp) == 2) {
                                 if (${$tmp[0]} != $tmp[1] && ($tmp[0] == "lvl" || $tmp[0] == "search_type_asked" || $tmp[0] == "pageid")) {
                                     //si le cadre rentre dans le cas ou il n'appartient pas à la page courante.
                                     $cadreOk = false;
                                 }
                             }
                         }
                     }
                     if ($cadreOk) {
                         $cadres[] = $row_cadres;
                     }
                 }
                 $ordered_cadres = $this->order_cadres($cadres, $cache_cadre_object);
                 $this->fixed_cadres[$row_zones->build_parent] = $ordered_cadres;
                 foreach ($ordered_cadres as $cadre) {
                     $this->apply_change($cadre, $cache_cadre_object);
                     if ($cadre->build_div) {
                         $this->add_div($cadre->build_obj);
                     }
                 }
                 //					print "pour chaque zone cadres fixes: ";
                 //					printr($cadres);
             }
             //on passe au cadre dynamiques
             $query_dynamics = "select cms_build.*,cadre_url from cms_build \n\t\t\t\tLEFT JOIN cms_cadres ON build_obj=CONCAT(cadre_object,'_',id_cadre) AND cadre_memo_url=1\n\t\t\t\twhere build_parent = '" . $row_zones->build_parent . "' \n\t\t\t\tand build_fixed = 0 and build_type='cadre' and  build_version_num= '" . $this->id_version . "' \n\t\t\t\torder by id_build ";
             $result_dynamics = pmb_mysql_query($query_dynamics);
             if (pmb_mysql_num_rows($result_dynamics)) {
                 $cadres = array();
                 while ($row_dynamics = pmb_mysql_fetch_object($result_dynamics)) {
                     //Si on a récupéré un cadre_url
                     $cadreOk = true;
                     if ($row_dynamics->cadre_url) {
                         $url = substr($row_dynamics->cadre_url, strpos($row_dynamics->cadre_url, '?') + 1);
                         foreach (explode('&', $url) as $idParam => $param) {
                             $tmp = array();
                             $tmp = explode('=', $param);
                             if (sizeof($tmp) == 2) {
                                 if (${$tmp[0]} != $tmp[1] && ($tmp[0] == "lvl" || $tmp[0] == "search_type_asked" || $tmp[0] == "pageid")) {
                                     //si le cadre rentre dans le cas ou il n'appartient pas à la page courante.
                                     $cadreOk = false;
                                 }
                             }
                         }
                     }
                     if ($cadreOk) {
                         $cadres[] = $row_dynamics;
                     }
                 }
                 $ordered_cadres = $this->order_cadres($cadres, $cache_cadre_object);
                 foreach ($ordered_cadres as $cadre) {
                     $this->apply_change($cadre, $cache_cadre_object);
                     if ($cadre->build_div) {
                         $this->add_div($cadre->build_obj);
                     }
                 }
             }
         }
     }
     //on traite la css des Zones. A voir plus tard pour la gestion du placement
     $query_css_zones = "select * from cms_build where build_type='zone' and  build_version_num= '" . $this->id_version . "' ";
     $res = pmb_mysql_query($query_css_zones);
     if (pmb_mysql_num_rows($res)) {
         while ($r = pmb_mysql_fetch_object($res)) {
             $node = $this->dom->getElementById($r->build_obj);
             if ($node) {
                 if ($r->build_css) {
                     $this->add_css($node, $r->build_css);
                 }
                 if ($r->build_div) {
                     $this->add_div($r->build_obj);
                 }
             }
         }
     }
     //gestion du placement des zones du contener
     $query_zones = "select * from cms_build where build_type='zone' and  build_version_num= '" . $this->id_version . "' and build_parent='container' ";
     $res = pmb_mysql_query($query_zones);
     $contener = $this->dom->getElementById("container");
     $zones = array();
     if (pmb_mysql_num_rows($res)) {
         while ($r = pmb_mysql_fetch_object($res)) {
             $zones[] = $r;
         }
         $ordered_zones = $this->order_cadres($zones, $cache_cadre_object);
         foreach ($ordered_zones as $zone) {
             $this->apply_change($zone, $cache_cadre_object);
             if ($cadre->build_div) {
                 //	$this->add_div($cadre->build_obj);
             }
         }
     }
     //on insère les entêtes des modules dans le head
     $this->insert_headers();
     //compression de la CSS si activé!
     if ($opac_compress_css == 1) {
         $compressed_file_exist = file_exists("./temp/full.css");
         $links = $this->dom->getElementsByTagName("link");
         $dom_css = array();
         for ($i = 0; $i < $links->length; $i++) {
             $dom_css[] = $links->item($i);
             if (!$compressed_file_exist && $links->item($i)->hasAttribute("type") && $links->item($i)->getAttribute("type") == "text/css") {
                 $css_buffer .= loadandcompresscss(html_entity_decode($links->item($i)->getAttribute("href")));
             }
         }
         $styles = $this->dom->getElementsByTagName("style");
         for ($i = 0; $i < $styles->length; $i++) {
             $dom_css[] = $styles->item($i);
             if (!$compressed_file_exist) {
                 $css_buffer .= compresscss($styles->item($i)->nodeValue, "");
             }
         }
         foreach ($dom_css as $link) {
             $link->parentNode->removeChild($link);
         }
         if (!$compressed_file_exist) {
             file_put_contents("./temp/full.css", $css_buffer);
         }
         $link = $this->dom->createElement("link");
         $link->setAttribute("href", "./temp/full.css");
         $link->setAttribute("rel", "stylesheet");
         $link->setAttribute("type", "text/css");
         $this->dom->getElementsByTagName("head")->item(0)->appendChild($link);
     } else {
         if (file_exists("./temp/full.css")) {
             unlink("./temp/full.css");
         }
     }
     $html = $this->dom->saveHTML();
     @ini_set("zend.ze1_compatibility_mode", "1");
     return $html;
 }
예제 #3
0
 function optimizecss($css_urls, $overwrite = false)
 {
     $content = '';
     $files = '';
     jimport('joomla.filesystem.file');
     foreach ($css_urls as $url) {
         $files .= $url[1];
         //join css files into one file
         $content .= "/* FILE: {$url[1]} */\n" . compresscss(@JFile::read($url[0]), $url[1]) . "\n\n";
     }
     $file = md5($files) . '.css';
     if (useGZip()) {
         $file = $file . '.php';
     }
     //$url = store_file($content, $file, $overwrite);
     $expireHeader = (int) 30 * 24 * 60 * 60;
     if (useGZip()) {
         $headers = "<?php if(extension_loaded('zlib')){ob_start('ob_gzhandler');} header(\"Content-type: text/css\");";
         $headers .= "header(\"Content-Encoding: gzip\");";
     }
     $headers .= "header('Expires: " . gmdate('D, d M Y H:i:s', strtotime(date('D, d M Y H:i:s')) + $expireHeader) . " GMT');";
     $headers .= "header('Last-Modified: " . gmdate('D, d M Y H:i:s', strtotime(date('D, d M Y H:i:s'))) . " GMT');";
     $headers .= "header('Cache-Control: Public');";
     $headers .= "header('Vary: Accept-Encoding');?>";
     $content = $headers . $content;
     $url = store_file($content, $file, $overwrite);
     return $url;
 }
예제 #4
0
파일: misc.inc.php 프로젝트: hogsim/PMB
/**
 * Charge et lance la compression d'un fichier CSS
 */
function loadandcompresscss($file)
{
    global $opac_default_style;
    $relocate = true;
    if (strpos($file, "?") && strpos($file, "./styles/" . $opac_default_style . "/") === false && strpos($file, "./styles/common/") === false) {
        $aCurl = new Curl();
        $content = $aCurl->get($file);
        $content = $content->body;
        $relocate = false;
    } else {
        if (strpos($file, "?")) {
            $file = substr($file, 0, strpos($file, "?"));
        }
        $content = file_get_contents($file);
    }
    return compresscss($content, $file, $relocate);
}