function traiter_appels_inclusions_ajax(){ // traiter les appels de bloc ajax (ex: pagination) if ($v = _request('var_ajax') AND $v !== 'form' AND $args = _request('var_ajax_env')) { include_spip('inc/filtres'); include_spip('inc/actions'); if ($args = decoder_contexte_ajax($args) AND $fond = $args['fond']) { include_spip('public/assembler'); $contexte = calculer_contexte(); $contexte = array_merge($args, $contexte); $page = recuperer_fond($fond,$contexte,array('trim'=>false)); $texte = $page; if ($ancre = _request('var_ajax_ancre')){ // pas n'importe quoi quand meme dans la variable ! $ancre = str_replace(array('<','"',"'"),array('<','"',''),$ancre); $texte = "<a href='#$ancre' name='ajax_ancre' style='display:none;'>anchor</a>".$texte; } } else { include_spip('inc/headers'); http_status(403); $texte = _L('signature ajax bloc incorrecte'); } ajax_retour($texte); return true; // on a fini le hit } return false; }
function assembler($fond, $connect='') { global $flag_preserver,$lastmodified, $use_cache, $contexte; $contexte = calculer_contexte(); $page = array('contexte_implicite'=>calculer_contexte_implicite()); $page['contexte_implicite']['cache'] = $fond . preg_replace(',\.[a-zA-Z0-9]*$,', '', preg_replace('/[?].*$/', '', $GLOBALS['REQUEST_URI'])); // Cette fonction est utilisee deux fois $cacher = charger_fonction('cacher', 'public'); // Les quatre derniers parametres sont modifies par la fonction: // emplacement, validite, et, s'il est valide, contenu & age $res = $cacher($GLOBALS['contexte'], $use_cache, $chemin_cache, $page, $lastmodified); // Si un resultat est retourne, c'est un message d'impossibilite if ($res) {return array('texte' => $res);} if (!$chemin_cache || !$lastmodified) $lastmodified = time(); $headers_only = ($_SERVER['REQUEST_METHOD'] == 'HEAD'); // Pour les pages non-dynamiques (indiquees par #CACHE{duree,cache-client}) // une perennite valide a meme reponse qu'une requete HEAD (par defaut les // pages sont dynamiques) if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) AND !$GLOBALS['var_mode'] AND $chemin_cache AND isset($page['entetes']) AND isset($page['entetes']['Cache-Control']) AND strstr($page['entetes']['Cache-Control'],'max-age=') AND !strstr($_SERVER['SERVER_SOFTWARE'],'IIS/') ) { $since = preg_replace('/;.*/', '', $_SERVER['HTTP_IF_MODIFIED_SINCE']); $since = str_replace('GMT', '', $since); if (trim($since) == gmdate("D, d M Y H:i:s", $lastmodified)) { $page['status'] = 304; $headers_only = true; } } // Si requete HEAD ou Last-modified compatible, ignorer le texte // et pas de content-type (pour contrer le bouton admin de inc-public) if ($headers_only) { $page['entetes']["Connection"] = "close"; $page['texte'] = ""; } else { // si la page est prise dans le cache if (!$use_cache) { // Informer les boutons d'admin du contexte // (fourni par $renommer ci-dessous lors de la mise en cache) $contexte = $page['contexte']; // vider les globales url propres qui ne doivent plus etre utilisees en cas // d'inversion url => objet unset($_SERVER['REDIRECT_url_propre']); unset($_ENV['url_propre']); } // ATTENTION, gestion des URLs transformee par le htaccess // $renommer = 'urls_propres_dist'; // renvoie array($contexte, $type, $url_redirect, $nfond) // $nfond n'est retourne que si l'url est definie apres le ? // et risque d'etre effacee par un form en get // elle est utilisee par form_hidden exclusivement // Compat ascendante si le retour est null: // 1. $contexte est global car cette fonction le modifie. // 2. $fond est passe par reference, pour la meme raison // et calculer la page else { $renommer = generer_url_entite(); if ($renommer) { $url = nettoyer_uri(); $a = $renommer($url, $fond, $contexte); if (is_array($a)) { list($ncontexte, $type, $url_redirect, $nfond) = $a; if (strlen($url_redirect) AND $url !== $url_redirect) { spip_log("Redirige $url vers $url_redirect"); include_spip('inc/headers'); redirige_par_entete($url_redirect, '', 301); } if (isset($nfond)) $fond = $nfond; else if ($fond == '' OR $fond == 'type_urls' /* compat avec htaccess 2.0.0 */ ) $fond = ($type === 'syndic') ? 'site' : $type; if (isset($ncontexte)) $contexte = $ncontexte; if (defined('_DEFINIR_CONTEXTE_TYPE') AND _DEFINIR_CONTEXTE_TYPE) $contexte['type'] = ($type === 'syndic') ? 'site' : $type; } } // compatibilite <= 1.9.2 elseif (function_exists('recuperer_parametres_url')) recuperer_parametres_url($fond, nettoyer_uri()); // vider les globales url propres qui ne doivent plus etre utilisees en cas // d'inversion url => objet unset($_SERVER['REDIRECT_url_propre']); unset($_ENV['url_propre']); // squelette par defaut if (!strlen($fond)) $fond = 'sommaire'; // produire la page : peut mettre a jour $lastmodified $produire_page = charger_fonction('produire_page','public'); $page = $produire_page($fond, $GLOBALS['contexte'], $use_cache, $chemin_cache, NULL, $page, $lastmodified, $connect); if ($page === '') { $erreur = _T('info_erreur_squelette2', array('fichier'=>htmlspecialchars($fond).'.'._EXTENSION_SQUELETTES)); erreur_squelette($erreur); // eviter des erreurs strictes ensuite sur $page['cle'] en PHP >= 5.4 $page = array('texte' => '', 'erreur' => $erreur); } } if ($page AND $chemin_cache) $page['cache'] = $chemin_cache; auto_content_type($page); $flag_preserver |= headers_sent(); // Definir les entetes si ce n'est fait if (!$flag_preserver) { if ($GLOBALS['flag_ob']) { // Si la page est vide, produire l'erreur 404 ou message d'erreur pour les inclusions if (trim($page['texte']) === '' AND $GLOBALS['var_mode'] != 'debug' AND !isset($page['entetes']['Location']) // cette page realise une redirection, donc pas d'erreur ) { // passer le type d'objet recherche au contexte de la page d'erreur $contexte['type'] = (isset($type)?$type:$fond); $page = message_page_indisponible($page, $contexte); // cacher la page d'erreur car celle ci est contextuelle if ($chemin_cache AND is_array($page) AND count($page) AND $page['entetes']['X-Spip-Cache'] > 0){ $cacher = charger_fonction('cacher', 'public'); $lastinclude = time(); $cacher($contexte_cache, $use_cache, $chemin_cache, $page, $lastinclude); } } // pas de cache client en mode 'observation' if ($GLOBALS['var_mode']) { $page['entetes']["Cache-Control"]= "no-cache,must-revalidate"; $page['entetes']["Pragma"] = "no-cache"; } } } } // Entete Last-Modified: // eviter d'etre incoherent en envoyant un lastmodified identique // a celui qu'on a refuse d'honorer plus haut (cf. #655) if ($lastmodified AND !isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) AND !isset($page['entetes']["Last-Modified"])) $page['entetes']["Last-Modified"]=gmdate("D, d M Y H:i:s", $lastmodified)." GMT"; return $page; }
function assembler($fond, $connect = '') { // flag_preserver est modifie ici, et utilise en globale // use_cache sert a informer le bouton d'admin pr savoir s'il met un * // contexte est utilise en globale dans le formulaire d'admin $GLOBALS['contexte'] = calculer_contexte(); $page = array('contexte_implicite' => calculer_contexte_implicite()); $page['contexte_implicite']['cache'] = $fond . preg_replace(',\\.[a-zA-Z0-9]*$,', '', preg_replace('/[?].*$/', '', $GLOBALS['REQUEST_URI'])); // Cette fonction est utilisee deux fois $cacher = charger_fonction('cacher', 'public', true); // Les quatre derniers parametres sont modifies par la fonction: // emplacement, validite, et, s'il est valide, contenu & age if ($cacher) { $res = $cacher($GLOBALS['contexte'], $GLOBALS['use_cache'], $chemin_cache, $page, $lastmodified); } else { $GLOBALS['use_cache'] = -1; } // Si un resultat est retourne, c'est un message d'impossibilite if ($res) { return array('texte' => $res); } if (!$chemin_cache || !$lastmodified) { $lastmodified = time(); } $headers_only = $_SERVER['REQUEST_METHOD'] == 'HEAD'; $calculer_page = true; // Pour les pages non-dynamiques (indiquees par #CACHE{duree,cache-client}) // une perennite valide a meme reponse qu'une requete HEAD (par defaut les // pages sont dynamiques) if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) and (!defined('_VAR_MODE') or !_VAR_MODE) and $chemin_cache and isset($page['entetes']) and isset($page['entetes']['Cache-Control']) and strstr($page['entetes']['Cache-Control'], 'max-age=') and !strstr($_SERVER['SERVER_SOFTWARE'], 'IIS/')) { $since = preg_replace('/;.*/', '', $_SERVER['HTTP_IF_MODIFIED_SINCE']); $since = str_replace('GMT', '', $since); if (trim($since) == gmdate("D, d M Y H:i:s", $lastmodified)) { $page['status'] = 304; $headers_only = true; $calculer_page = false; } } // Si requete HEAD ou Last-modified compatible, ignorer le texte // et pas de content-type (pour contrer le bouton admin de inc-public) if (!$calculer_page) { $page['texte'] = ""; } else { // si la page est prise dans le cache if (!$GLOBALS['use_cache']) { // Informer les boutons d'admin du contexte // (fourni par urls_decoder_url ci-dessous lors de la mise en cache) $GLOBALS['contexte'] = $page['contexte']; // vider les globales url propres qui ne doivent plus etre utilisees en cas // d'inversion url => objet // plus necessaire si on utilise bien la fonction urls_decoder_url #unset($_SERVER['REDIRECT_url_propre']); #unset($_ENV['url_propre']); } else { // Compat ascendante : // 1. $contexte est global // (a evacuer car urls_decoder_url gere ce probleme ?) // et calculer la page if (!test_espace_prive()) { include_spip('inc/urls'); list($fond, $GLOBALS['contexte'], $url_redirect) = urls_decoder_url(nettoyer_uri(), $fond, $GLOBALS['contexte'], true); } // squelette par defaut if (!strlen($fond)) { $fond = 'sommaire'; } // produire la page : peut mettre a jour $lastmodified $produire_page = charger_fonction('produire_page', 'public'); $page = $produire_page($fond, $GLOBALS['contexte'], $GLOBALS['use_cache'], $chemin_cache, null, $page, $lastmodified, $connect); if ($page === '') { $erreur = _T('info_erreur_squelette2', array('fichier' => spip_htmlspecialchars($fond) . '.' . _EXTENSION_SQUELETTES)); erreur_squelette($erreur); // eviter des erreurs strictes ensuite sur $page['cle'] en PHP >= 5.4 $page = array('texte' => '', 'erreur' => $erreur); } } if ($page and $chemin_cache) { $page['cache'] = $chemin_cache; } auto_content_type($page); $GLOBALS['flag_preserver'] |= headers_sent(); // Definir les entetes si ce n'est fait if (!$GLOBALS['flag_preserver']) { if ($GLOBALS['flag_ob']) { // Si la page est vide, produire l'erreur 404 ou message d'erreur pour les inclusions if (trim($page['texte']) === '' and _VAR_MODE != 'debug' and !isset($page['entetes']['Location'])) { $GLOBALS['contexte']['fond_erreur'] = $fond; $page = message_page_indisponible($page, $GLOBALS['contexte']); } // pas de cache client en mode 'observation' if (defined('_VAR_MODE') and _VAR_MODE) { $page['entetes']["Cache-Control"] = "no-cache,must-revalidate"; $page['entetes']["Pragma"] = "no-cache"; } } } } // Entete Last-Modified: // eviter d'etre incoherent en envoyant un lastmodified identique // a celui qu'on a refuse d'honorer plus haut (cf. #655) if ($lastmodified and !isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) and !isset($page['entetes']["Last-Modified"])) { $page['entetes']["Last-Modified"] = gmdate("D, d M Y H:i:s", $lastmodified) . " GMT"; } // fermer la connexion apres les headers si requete HEAD if ($headers_only) { $page['entetes']["Connection"] = "close"; } return $page; }
/** * Permet d’ajouter du contenu dans le menu admin du plugin réservation. * * @pipeline affiche_gauche * * @param array $flux * Données du pipeline * @return array Données du pipeline */ function reservations_credits_reservation_evenement_menu_admin($flux) { // reservations sur les evenements $contexte = calculer_contexte(); $data .= recuperer_fond('prive/gauche/menu_admin_credit', $contexte); $flux['data'] .= $data; return $flux; }