Server : Apache System : Linux webd348.cluster026.gra.hosting.ovh.net 5.15.148-ovh-vps-grsec-zfs-classid #1 SMP Thu Feb 8 09:41:04 UTC 2024 x86_64 User : hednacluml ( 122243) PHP Version : 8.3.9 Disable Function : _dyuweyrj4,_dyuweyrj4r,dl Directory : /home/hednacluml/unichild/plugins/auto/z-core/ |
<?php /* * Plugin Z-core * (c) 2008-2010 Cedric MORIN Yterium.net * Distribue sous licence GPL * */ if (!defined("_ECRIRE_INC_VERSION")) { return; } // definition des balises et filtres boites include_spip('inc/filtres_boites'); // verifier une seule fois que l'on peut utiliser APL si demande if (defined('_Z_AJAX_PARALLEL_LOAD')) { // les pages APL contiennent un <noscript> // avec une meta refresh sur self()+var_zapl=non // ainsi, les clients sans javascript rechargent la page, // se voient poser un cookie, et voient ensuite le site sans APL if (_request('var_zapl') == 'non') { include_spip('inc/cookie'); spip_setcookie('no_zapl', $_COOKIE['no_zapl'] = 'no_zapl'); } if (!isset($_COOKIE['no_zapl']) AND !_IS_BOT AND !_request('var_zajax') AND _request('var_mode') !== "debug" AND $_SERVER['REQUEST_METHOD'] == 'GET') { define('_Z_AJAX_PARALLEL_LOAD_OK', true); $GLOBALS['marqueur'] = isset($GLOBALS['marqueur']) ? $GLOBALS['marqueur'] . ":Zapl" : ":Zapl"; } } /** * Inutilise mais permet le chargement de ce fichier avant le decodage des urls * et l'utilisation de _DEFINIR_CONTEXTE_TYPE * * @param array $flux * * @return array */ function zcore_declarer_url_objets($flux) { return $flux; } /** * Fonction Page automatique a partir de contenu/page-xx * * @param array $flux * * @return array */ function zcore_styliser($flux) { // dans les futures versions de SPIP on pourra faire simplement un define('_ZPIP',true); if (!test_espace_prive() AND !defined('_ZCORE_EXCLURE_PATH')) { $styliser_par_z = charger_fonction('styliser_par_z', 'public'); $flux = $styliser_par_z($flux); } return $flux; } /** * Routage automatique de la 404 si le bloc de contenu est vide * Seul le bloc principal est pris en compte (le premier de la liste) * mais il est possible de personaliser le ou les blocs a prendre en compte pour detecter une 404 : * $GLOBALS['z_blocs_404'] = array('content','aside'); * On ne declenchera alors une 404 que si content/xxx et aside/xxx sont vide tous les deux * (attention a ce que la page 404 ait bien un de ces blocs non vide pour eviter une boucle infinie) * * @param array $flux * * @return array */ function zcore_recuperer_fond_detecter_404($flux) { static $empty_count = 0, $is_404 = false; static $z_blocs_404, $z_blocs_404_nlength, $z_blocs_404_ncount; if ($is_404) { if ($flux['args']['fond'] === "structure") { $is_404 = false; // pas de risque de reentrance $code = "404 Not Found"; $contexte_inclus = array( 'erreur' => "", 'code' => $code, 'lang' => $GLOBALS['spip_lang'], ); $flux['data'] = evaluer_fond('404', $contexte_inclus); $flux['data']['status'] = intval($code); // pas remonte vers la page mais un jour peut etre... // du coup on envoie le status a la main include_spip("inc/headers"); http_response_code(intval($code)); } } elseif (!test_espace_prive()) { if (!isset($z_blocs_404)) { if (isset($GLOBALS['z_blocs_404'])) { $z_blocs_404 = $GLOBALS['z_blocs_404']; if (is_array($z_blocs_404) AND count($z_blocs_404) == 1) { $z_blocs_404 = reset($z_blocs_404); } } else { if (!function_exists("z_blocs")) { $styliser_par_z = charger_fonction('styliser_par_z', 'public'); } $z_blocs = z_blocs(test_espace_prive()); $z_blocs_404 = reset($z_blocs); // contenu par defaut } if (is_array($z_blocs_404)) { $z_blocs_404_ncount = count($z_blocs_404); $z_blocs_404_nlength = array_map('strlen', $z_blocs_404); } else { $z_blocs_404_ncount = 1; $z_blocs_404_nlength = strlen($z_blocs_404); } } $fond = $flux['args']['fond']; // verifier rapidement que c'est un des fonds de reference pour la 404 : // le fond commende par nomdudossier/ // le fond n'a pas de / suppelementaires (on est au bon niveau) $quick_match = false; if (strpos($fond, "/") !== false AND $z_blocs_404_ncount) { if ($z_blocs_404_ncount == 1) { $quick_match = (strncmp($fond, "$z_blocs_404/", $z_blocs_404_nlength + 1) === 0 AND strpos($fond, "/", $z_blocs_404_nlength + 1) === false); } else { foreach ($z_blocs_404 as $k => $zb) { if (strncmp($fond, "$zb/", $z_blocs_404_nlength[$k] + 1) === 0 AND strpos($fond, "/", $z_blocs_404_nlength[$k] + 1) === false) { $quick_match = true; break; } } } } if ($quick_match AND !strlen(trim($flux['data']['texte']))) { $empty_count++; if ($empty_count >= $z_blocs_404_ncount) { $is_404 = true; } } } return $flux; } /** * Surcharger les intertires avant que le core ne les utilise * pour y mettre la class h3 * une seule fois suffit ! * * @param string $flux * * @return string */ function zcore_pre_propre($flux) { /* static $init = false; if (!$init){ $intertitre = $GLOBALS['debut_intertitre']; $class = extraire_attribut($GLOBALS['debut_intertitre'],'class'); $class = ($class ? " $class":""); $GLOBALS['debut_intertitre'] = inserer_attribut($GLOBALS['debut_intertitre'], 'class', "h3$class"); foreach($GLOBALS['spip_raccourcis_typo'] as $k=>$v){ $GLOBALS['spip_raccourcis_typo'][$k] = str_replace($intertitre,$GLOBALS['debut_intertitre'],$GLOBALS['spip_raccourcis_typo'][$k]); } $init = true; }*/ return $flux; } /** * Ajouter les scripts pour getZaplBloc() * Ajouter le inc-insert-head du theme si il existe * * @param string $flux * * @return string */ function zcore_insert_head($flux) { // insertion du script pour le chargement parallelisé des zblocs (ZAPL) // mode "one-liner" car on veut rester hors de la compression des js ou du chargement différe jQl pour agir plus vite. if ( defined('_Z_AJAX_PARALLEL_LOAD_OK') AND ($file = find_in_path('javascript/zapl.scripts.js')) ) { include_spip('filtres/compresseur'); if (function_exists('compacte')) { $file = compacte($file, 'js'); } lire_fichier($file, $js); $flux .= "\n".'<script type="text/javascript">/*<![CDATA[*/'. str_replace(PHP_EOL,'',$js) .'/*]]>*/</script>'."\n"; } if (find_in_path('inc-insert-head.html')) { $flux .= recuperer_fond('inc-insert-head', array()); } return $flux; } /** * Ajouter la definition du bloc contenu pour var_zajax * * @param string $flux * * @return string */ function zcore_insert_head_css($flux) { include_spip('public/styliser_par_z'); $contenu = z_blocs(false); $contenu = reset($contenu); $flux = "<script type='text/javascript'>var var_zajax_content='$contenu';</script>" . $flux; if (find_in_path('inc-insert-head-css.html')) { $flux .= recuperer_fond('inc-insert-head-css', array()); } return $flux; } // // fonction standard de calcul de la balise #INTRODUCTION // mais retourne toujours dans un <p> comme propre // // https://code.spip.net/@filtre_introduction_dist if (!function_exists('filtre_introduction')) { function filtre_introduction($descriptif, $texte, $longueur, $connect, $suite = null) { include_spip('public/composer'); $texte = filtre_introduction_dist($descriptif, $texte, $longueur, $connect, $suite); if ($GLOBALS['toujours_paragrapher'] AND strpos($texte, "</p>") === false) // Fermer les paragraphes ; mais ne pas en creer si un seul { $texte = paragrapher($texte, $GLOBALS['toujours_paragrapher']); } return $texte; } } /** * Tester la presence sur une page * * @param <type> $p * * @return <type> */ if (!function_exists('balise_SI_PAGE_dist')) { function balise_SI_PAGE_dist($p) { $_page = interprete_argument_balise(1, $p); $p->code = "((\n\t" . "((\$zp=$_page) AND isset(\$Pile[0][_SPIP_PAGE]) AND (\$Pile[0][_SPIP_PAGE]==\$zp))\n\t" . "OR (isset(\$Pile[0]['type-page']) AND \$Pile[0]['type-page']==\$zp)\n\t" . "OR (isset(\$Pile[0]['composition']) AND \$Pile[0]['composition']==\$zp AND \$Pile[0]['type-page']=='page'))?' ':'')\n"; $p->interdire_scripts = false; return $p; } } /** * balise #CSS * */ function balise_CSS_dist($p) { $_css = interprete_argument_balise(1, $p); if (!$_css) { $msg = array('zbug_balise_sans_argument', array('balise' => ' CSS')); erreur_squelette($msg, $p); } else { $p->code = "timestamp(direction_css(trouver_fond($_css)?produire_fond_statique($_css,array('format'=>'css')):find_in_path($_css)))"; } $p->interdire_scripts = false; return $p; }