Exemplo n.º 1
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;
 }
Exemplo n.º 2
0
     $htmltoparse = $cms->transform_html($htmltoparse);
 }
 //Compression CSS
 if ($opac_compress_css == 1 && !$cms_active) {
     $compressed_file_exist = file_exists("./temp/full.css");
     require_once $class_path . "/curl.class.php";
     $dom = new DOMDocument();
     $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);
     }
Exemplo n.º 3
0
/**
 * Compression d'un fichier CSS
 */
function compresscss($content, $file, $relocate = true)
{
    if (preg_match_all("!@import\\s+url\\(['\"]([^'^\"]*)['\"]\\);!", $content, $matches)) {
        $css_filepath = dirname($file);
        for ($i = 0; $i < count($matches[0]); $i++) {
            $content = str_replace($matches[0][$i], loadandcompresscss($css_filepath . "/" . $matches[1][$i]), $content);
        }
    }
    if ($relocate && preg_match_all("!url\\(['\"]?([^'^\")]+)['\"]?\\)!", $content, $matches)) {
        for ($i = 0; $i < count($matches[0]); $i++) {
            $target = $matches[1][$i];
            $target = "." . dirname($file) . "/" . str_replace("." . dirname($file) . "/", "", $target);
            $content = str_replace($matches[0][$i], "url('" . $target . "')", $content);
        }
    }
    $content = preg_replace('!/\\*[^*]*\\*+([^/][^*]*\\*+)*/!', '', $content);
    // Remove space after colons
    $content = preg_replace('!\\s?:\\s?!', ':', $content);
    // Remove whitespace
    $content = str_replace(array("\r", "\n\n", "\t"), '', $content);
    return $content;
}