) include_local("inc-forum.php3"); if (file_exists("inc-urls.php3")) { include_local ("inc-urls.php3"); } else { include_local ("inc-urls-dist.php3"); } // // Ajouter le &var_recherche=toto dans les boucles de recherche // function url_var_recherche($url, $activer_url_recherche) { if ($activer_url_recherche && $GLOBALS['HTTP_GET_VARS']['recherche'] && !ereg("var_recherche", $url)) { $url .= strpos($url, '?') ? '&' : '?'; $url .= "var_recherche=".urlencode($GLOBALS['recherche']); } return $url; } // // Retrouver le logo d'un objet (et son survol) // function cherche_image_nommee($nom) { $formats = array ('gif', 'jpg', 'png'); while (list(, $format) = each($formats)) if (file_exists('IMG/'.$nom.'.'.$format)) return ($nom.'.'.$format); } function cherche_image($id_objet, $type_objet) { $image = array('', ''); // cherche l'image liee a l'objet $image[0] = cherche_image_nommee($type_objet.'on'.$id_objet); // cherche un survol if ($image[0]) { $image[1] = cherche_image_nommee($type_objet.'off'.$id_objet); } return $image; } function image_document($id_document){ $query = "SELECT * FROM spip_documents WHERE id_document = $id_document"; $result = spip_query($query); if ($row = spip_fetch_array($result)) { $id_document = $row['id_document']; $id_type = $row['id_type']; $titre = propre($row ['titre']); $descriptif = propre($row['descriptif']); $fichier = generer_url_document($id_document); $largeur = $row['largeur']; $hauteur = $row['hauteur']; $taille = $row['taille']; $mode = $row['mode']; $id_vignette = $row['id_vignette']; // recuperer la vignette pour affichage inline if ($id_vignette) { $query_vignette = "SELECT * FROM spip_documents WHERE id_document = $id_vignette"; $result_vignette = spip_query($query_vignette); if ($row_vignette = @spip_fetch_array($result_vignette)) { $fichier_vignette = generer_url_document($id_vignette); $largeur_vignette = $row_vignette['largeur']; $hauteur_vignette = $row_vignette['hauteur']; } } else if ($mode == 'vignette') { $fichier_vignette = $fichier; $largeur_vignette = $largeur; $hauteur_vignette = $hauteur; } // si pas de vignette, utiliser la vignette par defaut du type du document if (!$fichier_vignette) { // on construira le lien en fonction du type de doc $result_type = spip_query("SELECT * FROM spip_types_documents WHERE id_type = $id_type"); if ($type = @spip_fetch_object($result_type)) { $extension = $type->extension; } list($fichier_vignette, $largeur_vignette, $hauteur_vignette) = vignette_par_defaut($extension); } $image[0] = $fichier_vignette; return $image; } } function image_article($id_article){ return cherche_image($id_article,'art'); } function image_auteur($id_auteur){ return cherche_image($id_auteur,'aut'); } function image_breve($id_breve){ return cherche_image($id_breve,'breve'); } function image_site($id_syndic){ return cherche_image($id_syndic,'site'); } function image_mot($id_mot){ return cherche_image($id_mot,'mot'); } function image_rubrique($id_rubrique) { // Recherche recursive vers les rubriques parentes (y compris racine) for (;;) { $image = cherche_image($id_rubrique, 'rub'); if ($image[0]) break; $result = spip_query("SELECT id_parent FROM spip_rubriques WHERE id_rubrique='$id_rubrique'"); if ($row = spip_fetch_array($result)) { $id_rubrique = $row['id_parent']; } else break; } return $image; } function IMG_image($im) { // ajoute les "IMG/" devant les noms des images trouvees if ($im[0]) $im[0] = 'IMG/'.$im[0]; if ($im[1]) $im[1] = 'IMG/'.$im[1]; return $im; } // Renvoie le code html pour afficher le logo, avec ou sans survol, avec ou sans lien, etc. function affiche_logos($arton, $artoff, $lien, $align) { global $num_survol; global $espace_logos; $num_survol++; if ($arton) { //$imgsize = @getimagesize("$arton"); //$taille_image = ereg_replace("\"","'",$imgsize[3]); if ($align) $align="align='$align' "; $milieu = ""; if ($artoff) { if ($lien) { $afflien = "$milieu$milieu"; } } else { $milieu=""; } return $milieu; } // Retourne la hierarchie d'une rubrique function construire_hierarchie($id_rubrique) { $hierarchie = ""; $id_rubrique = intval($id_rubrique); while ($id_rubrique) { $hierarchie = $id_rubrique.",".$hierarchie; $query = " SELECT a.id_parent AS ida, b.id_parent AS idb FROM spip_rubriques AS a LEFT JOIN spip_rubriques AS b ON (b.id_rubrique = a.id_parent) WHERE a.id_rubrique = $id_rubrique"; $result = spip_query($query); if (!$row = spip_fetch_array($result)) break; if ($id_parent = $row['ida']) $hierarchie = $id_parent.",".$hierarchie; $id_rubrique = $row['idb']; } return ((!$hierarchie) ? "0" : substr($hierarchie, 0, -1)); } // // Critere {branche} : recuperer les descendants d'une rubrique // function calcul_generation ($generation) { $lesfils = array(); $result = spip_query("SELECT id_rubrique FROM spip_rubriques WHERE id_parent IN ($generation)"); while ($row = spip_fetch_array($result)) $lesfils[] = $row['id_rubrique']; return join(",",$lesfils); } function calcul_branche ($generation) { if ($generation) { $branche[] = $generation; while ($generation = calcul_generation ($generation)) $branche[] = $generation; return join(",",$branche); } else return '0'; } // // fonction standard de calcul de la balise #INTRODUCTION // on peut la surcharger en definissant dans mes_fonctions.php3 : // function introduction($type,$texte,$descriptif) {...} // function calcul_introduction ($type, $texte, $chapo='', $descriptif='') { if (function_exists("introduction")) return introduction ($type, $texte, $chapo, $descriptif); switch ($type) { case 'articles': if ($descriptif) return propre($descriptif); else if (substr($chapo, 0, 1) == '=') // article virtuel return ''; else return PtoBR(propre(supprimer_tags(couper_intro($chapo."\n\n\n".$texte, 500)))); break; case 'breves': return PtoBR(propre(supprimer_tags(couper_intro($texte, 300)))); break; case 'forums': return PtoBR(propre(supprimer_tags(couper_intro($texte, 600)))); break; case 'rubriques': if ($descriptif) return propre($descriptif); else return PtoBR(propre(supprimer_tags(couper_intro($texte, 600)))); break; } } ////////////////////////////////////////////////////////////////////////////// // // Calcul de la page // ////////////////////////////////////////////////////////////////////////////// // fonction appelée par les squelettes (insertion dans le code trop lourde) function cache_forum($id_a, $id_b, $id_r, $id_f) { global $fichier_cache, $requetes_cache; if ((!$id_f) OR $id_a OR $id_b OR $id_r) $id_f = 0; if (!$id_a) $id_a = 0; if (!$id_r) $id_r = 0; if (!$id_b) $id_b = 0; $valeurs = "$id_a, $id_r, $id_b, $id_f, \'$fichier_cache\'"; if (!$requetes_cache[$valeurs]) { spip_query("INSERT INTO spip_forum_cache (id_article, id_rubrique, id_breve, id_forum, fichier) VALUES ($valeurs)"); $requetes_cache[$valeurs] = 1; } } // fonction appelée par les squelettes (insertion dans le code trop lourde) function query_auteurs($larticle) { $auteurs = ""; if ($larticle) { $query_auteurs = "SELECT auteurs.nom, auteurs.email FROM spip_auteurs AS auteurs, spip_auteurs_articles AS lien WHERE lien.id_article=$larticle AND auteurs.id_auteur=lien.id_auteur"; $result_auteurs = spip_query($query_auteurs); while($row_auteur = spip_fetch_array($result_auteurs)) { $nom_auteur = typo($row_auteur["nom"]); $email_auteur = $row_auteur["email"]; if ($email_auteur) { $auteurs[] = "$nom_auteur"; } else { $auteurs[] = "$nom_auteur"; } } } return ($auteurs) ? "" : join($auteurs, ", "); } // // Executer un squelette dans un contexte donne // function executer_squelette($squelette, $contexte) { static $fonctions_squelettes = ''; // Si squelette pas deja inclus, l'inclure if (!$fonctions_squelettes[$squelette]) { $squelette_cache = 'CACHE/skel_'.rawurlencode($squelette).'.php3'; $use_cache = false; if (file_exists($squelette_cache)) { $t = filemtime($squelette_cache); if ((filemtime("$squelette.html") < $t) AND (filemtime("inc-calcul-squel.php3") < $t) AND (!file_exists("mes_fonctions.php3") OR (filemtime("mes_fonctions.php3") < $t))) { $use_cache = true; } } if ($GLOBALS['recalcul_squelettes'] == 'oui') { $use_cache = false; } // Au besoin, recompiler le squelette if (!$use_cache) { include_local ("inc-calcul-squel.php3"); calculer_squelette($squelette, $squelette_cache, $contexte); } // L'inclusion du squelette permet de definir les fonctions associees // aux boucles, et de recuperer le nom de la fonction principale include($squelette_cache); // Si le squelette compile est vide, pour une raison inconnue // (plantage disque lors du calcul precedent), tenter un recalcul if (!$func_squelette_executer) { @unlink($squelette_cache); spip_log ("ERREUR $squelette_cache est vide"); if ($use_cache) { include_local ("inc-calcul-squel.php3"); calculer_squelette($squelette, $squelette_cache, $contexte); include($squelette_cache); } } // fin du plantage squelette compile $fonctions_squelettes[$squelette] = $func_squelette_executer; if ($GLOBALS['flag_apc']) { apc_rm($squelette_cache); } } // Executer la fonction principale du squelette // (i.e. racine de l'arbre d'execution) $f = $fonctions_squelettes[$squelette]; return $f($contexte); } // // Recherche recursive du squelette // function chercher_squelette_hierarchie($fond, $id_rubrique, $dossier='') { if (!$id_rubrique) { if (@file_exists("$dossier$fond.html")) { return "$dossier$fond"; } else if (@file_exists("$fond.html")) { return "$fond"; } else if (@file_exists("$fond-dist.html")) { return "$fond-dist"; } else { // erreur webmaster : $fond ne correspond a rien include_ecrire ("inc_presentation.php3"); install_debut_html("Erreur sur le site"); echo "

Aucun squelette $dossier$fond n'est disponible...

"; install_fin_html(); spip_log ("ERREUR: aucun squelette $dossier$fond n'est disponible..."); exit; } } else { if (file_exists("$dossier$fond-$id_rubrique.html")) { return "$dossier$fond-$id_rubrique"; } else { $query = "SELECT id_parent FROM spip_rubriques WHERE id_rubrique='$id_rubrique'"; $result = spip_query($query); while($row = spip_fetch_array($result)) { $id_parent=$row['id_parent']; } return chercher_squelette_hierarchie($fond, $id_parent, $dossier); } } } function chercher_squelette($fond, $id_rubrique) { global $dossier_squelettes; // prendre en compte le bon repertoire (pas grave si on a deux / dans l'arborescence) $dossier = ($dossier_squelettes ? $dossier_squelettes.'/' : ''); // On selectionne, dans l'ordre : // fond=10.html, fond-10.html, fond-.html, fond.html puis fond-dist.html if (($id_rubrique > 0) AND (file_exists("$dossier$fond=$id_rubrique.html"))) { return "$dossier$fond=$id_rubrique"; } else { return chercher_squelette_hierarchie($fond, $id_rubrique, $dossier); // recursif le long de la hierarchie } } // // Calculer la page courante // function calculer_page($fond, $contexte) { global $id_doublons; static $pile_doublons = ''; static $n_doublons = 0; $pile_doublons[++$n_doublons] = $id_doublons; $id_doublons = ''; $id_doublons['articles'] = '0'; $id_doublons['rubriques'] = '0'; $id_doublons['breves'] = '0'; $id_doublons['auteurs'] = '0'; $id_doublons['forums'] = '0'; $id_doublons['mots'] = '0'; $id_doublons['groupes_mots'] = '0'; $id_doublons['syndication'] = '0'; $id_doublons['documents'] = '0'; $texte = executer_squelette($fond, $contexte); $id_doublons = $pile_doublons[$n_doublons--]; return $texte; } function calculer_page_globale($fond) { global $contexte; global $fichier_requete; global $id_rubrique_fond; // Generer le contexte $contexte = ''; $contexte_defaut = array('id_parent', 'id_rubrique', 'id_article', 'id_auteur', 'id_breve', 'id_forum', 'id_secteur', 'id_syndic', 'id_syndic_article', 'id_mot', 'id_groupe', 'id_document'); reset($contexte_defaut); while (list(, $val) = each($contexte_defaut)) { if ($GLOBALS[$val]) { $contexte[$val] = intval($GLOBALS[$val]); } } if ($GLOBALS['date']) $contexte['date'] = $contexte['date_redac'] = normaliser_date($GLOBALS['date']); else $contexte['date'] = $contexte['date_redac'] = date("Y-m-d H:i:s"); // Analyser les URLs personnalisees (inc-urls-...) recuperer_parametres_url($fond, $fichier_requete); $lang = lire_meta('langue_site'); if ($contexte['lang']) $lang = $contexte['lang']; // si inc-urls veut fixer la langue // Calcul de la rubrique associee a la requete // (selection de squelette specifique) if ($id_rubrique = $contexte['id_rubrique']) { $id_rubrique_fond = $id_rubrique; if ($row = spip_fetch_array(spip_query("SELECT lang FROM spip_rubriques WHERE id_rubrique='$id_rubrique'"))) if ($row['lang']) $lang = $row['lang']; } else if ($id_breve = $contexte['id_breve']) { if ($row = spip_fetch_array(spip_query("SELECT id_rubrique FROM spip_breves WHERE id_breve='$id_breve'"))) { $id_rubrique_fond = $row['id_rubrique']; if ($row = spip_fetch_array(spip_query("SELECT lang FROM spip_rubriques WHERE id_rubrique='$id_rubrique_fond'"))) if ($row['lang']) $lang = $row['lang']; } } else if ($id_syndic = $contexte['id_syndic']) { if ($row = spip_fetch_array(spip_query("SELECT id_rubrique FROM spip_syndic WHERE id_syndic='$id_syndic'"))) { $id_rubrique_fond = $row['id_rubrique']; if ($row = spip_fetch_array(spip_query("SELECT lang FROM spip_rubriques WHERE id_rubrique='$id_rubrique_fond'"))) if ($row['lang']) $lang = $row['lang']; } } else if ($id_article = $contexte['id_article']) { if ($row = spip_fetch_array(spip_query("SELECT id_rubrique,lang FROM spip_articles WHERE id_article='$id_article'"))) { $id_rubrique_fond = $row['id_rubrique']; if ($row['lang']) $lang = $row['lang']; } } else { $id_rubrique_fond = 0; } $fond = chercher_squelette($fond, $id_rubrique_fond); // selectionner la langue & affiner le squelette lang_select($lang); if (@file_exists("$fond.$lang.html")) $fond = "$fond.$lang"; // Special stats et boutons admin reset($contexte_defaut); while (list($key, $val) = each($contexte_defaut)) { if ($contexte[$val]) { $GLOBALS[$val] = $contexte[$val]; $signale_globals .= "\n".'$GLOBALS[\''.$val.'\'] = '.intval($contexte[$val]).";"; } } $signale_globals = '<'."?php$signale_globals\n?".'>'; return $signale_globals.calculer_page($fond, $contexte); } ?>