|
Il n'y a pas grand chose dedans:
<?php
$fond = "login";
$delais = 3600;
$flag_dynamique = true;
$flag_preserver = true;
$forcer_lang = true;
include ("inc-public.php3");
?>
Le membre se logue une fois pour toute à moins qu'il n'efface ses cookies..Mais l'include fait ref à inc-public.php3 :
<?php
if (!defined("_INC_PUBLIC")) {
define("_INC_PUBLIC", "1");
include("inc-public-global.php3");
}
else {
$cache_inclus = inclure_fichier($fond, $delais, $contexte_inclus);
if (!$delais) $cache_supprimes[] = $cache_inclus; // message pour suppression
include($cache_inclus);
}
?>
quand à in-ublic-global.php3 est bien plus nourri en variables :
<?php
include ("ecrire/inc_version.php3");
include_local ("inc-cache.php3");
if ($INSECURE['fond'] || $INSECURE['delais']) exit;
if (!isset($delais))
$delais = 1 * 3600;
/*function t($s = '') {
global $t0, $t1;
$t1 = explode(" ", microtime());
$dt = floor(1000 * ($t1[0] + $t1[1] - $t0[0] - $t0[1])) / 1000;
echo "<p>";
if ($s) echo "<b>$s :</b> ";
echo "$dt secondes</p>\n";
$t0 = $t1;
}*/
//
// Inclusions de squelettes
//
function inclure_fichier($fond, $delais, $contexte_inclus = "") {
global $fichier_cache;
$fichier_requete = $fond;
if (is_array($contexte_inclus)) {
reset($contexte_inclus);
while(list($key, $val) = each($contexte_inclus))
$fichier_requete .= '&'.$key.'='.$val;
}
$fichier_cache = generer_nom_fichier_cache($fichier_requete);
$chemin_cache = "CACHE/$fichier_cache";
$use_cache = utiliser_cache($chemin_cache, $delais);
if (!$use_cache) {
include_local("inc-calcul.php3");
$timer_a = explode(" ", microtime());
$fond = chercher_squelette($fond, $contexte_inclus['id_rubrique'], $contexte_inclus['lang']);
$page = calculer_page($fond, $contexte_inclus);
$timer_b = explode(" ", microtime());
if ($page) {
$timer = ceil(1000 * ($timer_b[0] + $timer_b[1] - $timer_a[0] - $timer_a[1]));
$taille = ceil(strlen($page) / 1024);
spip_log("inclus ($timer ms): $chemin_cache ($taille ko, delai: $delais s)");
$chemin_cache = ecrire_fichier_cache($chemin_cache, $page);
}
}
return $chemin_cache;
}
//
// Authentification
//
if ($HTTP_COOKIE_VARS['spip_session'] OR ($PHP_AUTH_USER AND !$ignore_auth_http)) {
include_ecrire ("inc_session.php3");
verifier_visiteur();
}
//
// Gestion de la langue dans l'URL
//
if ($forcer_lang) {
include_ecrire('inc_lang.php3');
verifier_lang_url();
}
if ($lang = $HTTP_GET_VARS['lang']) {
include_ecrire('inc_lang.php3');
lang_select($lang);
}
//
// Gestion du cache et calcul de la page
//
// Nom du fichier cache
$fichier_requete = $REQUEST_URI;
$fichier_requete = strtr($fichier_requete, '?', '&');
$fichier_requete = eregi_replace('&(submit|valider|PHPSESSID|(var_[^=&]*)|recalcul)=[^&]*', '', $fichier_requete);
$fichier_cache = generer_nom_fichier_cache($fichier_requete);
$chemin_cache = "CACHE/$fichier_cache";
$use_cache = utiliser_cache($chemin_cache, $delais);
$ecraser_cache = false;
$cache_supprimes = Array();
if (!$use_cache OR !defined("_ECRIRE_INC_META_CACHE")) {
include_ecrire("inc_meta.php3");
}
//
// Ajouter un forum
//
if ($ajout_forum) {
include_local ("inc-forum.php3");
ajout_forum();
}
if (!$use_cache) {
$lastmodified = time();
if (($lastmodified - lire_meta('date_purge_cache')) > 3600) {
ecrire_meta('date_purge_cache', $lastmodified);
$f = fopen('CACHE/.purge', 'w');
fclose($f);
}
//
// Recalculer le cache
//
$calculer_cache = true;
// Gestion '=chapo'
// + ne pas cacher si l'URL d'un article est demande avant sa publication
// (une seule requete, deux usages)
if ($id_article = intval($id_article)) {
$query = "SELECT chapo FROM spip_articles WHERE id_article='$id_article' AND statut='publie'";
$result = spip_query($query);
$row = spip_fetch_array($result);
if (!$row)
$ecraser_cache = true;
if (substr($row['chapo'], 0, 1) == '=') {
include_ecrire('inc_texte.php3');
$regs = array('','','',substr($row['chapo'], 1));
list(,$url) = extraire_lien($regs);
$url = addslashes($url);
$texte = "<"."?php @header (\"Location: $url\"); ?".">";
$calculer_cache = false;
spip_log("redirection: $url");
$chemin_cache = ecrire_fichier_cache($chemin_cache, $texte);
}
}
if ($calculer_cache) {
include_local ("inc-calcul.php3");
$timer_a = explode(" ", microtime());
$page = calculer_page_globale($fond);
$timer_b = explode(" ", microtime());
if ($page) {
$timer = ceil(1000 * ($timer_b[0] + $timer_b[1] - $timer_a[0] - $timer_a[1]));
$taille = ceil(strlen($page) / 1024);
spip_log("calcul ($timer ms): $chemin_cache ($taille ko, delai: $delais s)");
$chemin_cache = ecrire_fichier_cache($chemin_cache, $page);
}
}
}
//
// si $var_recherche est positionnee, on met en rouge les mots cherches (php4 uniquement)
//
if ($var_recherche AND $flag_ob AND $flag_pcre AND !$flag_preserver AND !$mode_surligne) {
include_ecrire("inc_surligne.php3");
$mode_surligne = 'auto';
timeout(false, true, false); // no lock, action, no mysql
ob_start();
}
else {
unset ($var_recherche);
unset ($mode_surligne);
}
//
// Inclusion du cache pour envoyer la page au client
//
$effacer_cache = !$delais;
$effacer_cache |= $ecraser_cache; // ecraser le cache de l'article x s'il n'est pas publie
// Envoyer les entetes
$headers_only = ($HTTP_SERVER_VARS['REQUEST_METHOD'] == 'HEAD');
if (!$effacer_cache && !$flag_dynamique && $recalcul != 'oui' && !$HTTP_COOKIE_VARS['spip_admin']) {
if ($lastmodified)
$headers_only |= http_last_modified($lastmodified, $lastmodified + $delais);
}
else {
@Header("Expires: 0");
@Header("Cache-Control: no-cache,must-revalidate");
@Header("Pragma: no-cache");
}
$flag_preserver |= $headers_only; // ne pas se fatiguer a envoyer des donnees
if (!$flag_preserver) {
@Header("Content-Type: text/html; charset=".lire_meta('charset'));
}
// Envoyer la page
if (@file_exists($chemin_cache)) {
if (!$headers_only) include($chemin_cache);
}
else if (!$flag_preserver) {
// Message d'erreur base de donnees
include_ecrire('inc_presentation.php3');
install_debut_html(_T('info_travaux_titre'));
echo "<p>"._T('titre_probleme_technique')."</p>\n";
install_fin_html();
}
// suite et fin mots en rouge
if ($var_recherche)
fin_surligne($var_recherche, $mode_surligne);
// nettoie
if ($effacer_cache) @unlink($chemin_cache);
while (list(, $chemin_cache_supprime) = each($cache_supprimes))
@unlink($chemin_cache_supprime);
//
// Verifier la presence du .htaccess dans le cache, sinon le generer
//
if (!@file_exists("CACHE/.htaccess")) {
if ($hebergeur == 'nexenservices'){
echo "<font color=\"#FF0000\">IMPORTANT : </font>";
echo "Votre hébergeur est Nexen Services.<br />";
echo "La protection du répertoire <i>CACHE/</i> doit se faire par l'intermédiaire de ";
echo "<a href=\"http://www.nexenservices.com/webmestres/htlocal.php\" target=\"_blank\">l'espace webmestres</a>.";
echo "Veuillez créer manuellement la protection pour ce répertoire (un couple login/mot de passe est nécessaire).<br />";
}
else{
$f = fopen("CACHE/.htaccess", "w");
fputs($f, "deny from all\n");
fclose($f);
}
}
//
// Fonctionnalites administrateur (declenchees par le cookie admin, authentifie ou non)
//
if ($HTTP_COOKIE_VARS['spip_admin'] AND !$flag_preserver AND !$flag_boutons_admin) {
include_local("inc-admin.php3");
afficher_boutons_admin();
}
// envoyer la page si possible
@flush();
// Mise a jour des fichiers langues de l'espace public
if ($cache_lang_modifs) {
include_ecrire('inc_lang.php3');
ecrire_caches_langues();
}
// Gestion des taches de fond ? toutes les 5 secondes (on mettra 30 s quand on aura prevu la preemption par une image-cron)
if (!@file_exists('ecrire/data/cron.lock')
OR (time() - @filemtime('ecrire/data/cron.lock') > 5)) {
// Si MySQL est out, laisser souffler
if (!@file_exists('ecrire/data/mysql_out')
OR (time() - @filemtime('ecrire/data/mysql_out') > 300)) {
include_ecrire('inc_cron.php3');
spip_cron();
}
}
//
// Gestion des statistiques du site public
// (a la fin pour ne pas forcer le $db_ok)
//
if (lire_meta("activer_statistiques") != "non") {
include_local ("inc-stats.php3");
ecrire_stats();
}
?>
C'est sans dout ici qu'il faut agir et recuperer le cookie, non?
Sinon SPip a la particularité de pouvoir utiliser des filtres que l'on rappelle dans le Html avec des balises gennre [(#auteurs)].C'est peut être une solution, voici par exemeple un fonction qui me permet de savoir qui c'est connecté dans l'espace privé:
<?php
/*
* +---------------------------------------------+
* Nom du Filtre : membres récemment connectés
* +---------------------------------------------+
* Fonctions de ce filtre :
* Permet de voir les personnes qui se sont
* connectés récemment
* Appelez le dans vos squelettes tout simplement
* par : [(#URL_SITE|nb_connect)]
* +---------------------------------------------+
*
*/
function nb_connect($resultat){
global $table_prefix;
$query = "SELECT nom, en_ligne FROM ".$table_prefix."_auteurs WHERE (TO_DAYS(now())-TO_DAYS(en_ligne))<=1 ORDER BY en_ligne DESC";
$resultat = " ";
$result_auteurs = spip_query($query);
$nb_connectes = spip_num_rows($result_auteurs);
$flag_cadre = ($nb_connectes > 0);
if ($flag_cadre) {
$resultat.="<div>";
if ($nb_connectes > 1) $resultat.="<i>Derniers connectés :</i><br>";
else $resultat.="<i>Derniers membres connectés :</i>";
while ($row = spip_fetch_array($result_auteurs)) {
$nom_auteur = $row["nom"];
$en_ligne = $row["en_ligne"];
$resultat.="<b>$nom_auteur </b><br><span style='font-size:78%'> [ $en_ligne ]</span></div>";
}
}
return $resultat;
}
?>
// FIN du Filtre nb_connect
Bon je sais, je suis perdu et un peu casse-pieds sans doute, mais j'aimerai tellement faire plaisir à mes internautes ;o) |
 Admin |
Pour te connecter à la base, apparemment c'est géré directement par la fonction spip_query()
En gros tu crées ton fichier, tu recherches dans les fichiers de spip où est située la fonction spip_query(), tu fais un include de ce fichier et tu exécutes ta requête à l'aide de la fonction spip_query. Tu peux aussi rechercher le fichier contenant tes paramètres mysql, faire un include de ce fichier et utiliser les fonctions classiques de mysql :
mysql_connect('hote','user','passe');
mysql_select_db('base');
$requete=mysql_query('ta requête');
mysql_close();
$r=mysql_fetch_row($requete); //si une seule ligne à trouver, sinon un while($r=mysql_fetch_row($requete)) -- 
|