auteur_session_enhance.php

<?php
	//
	// Script qui ajoute des parametres dans la session de spip au premier appel
	// Auteur : Frederic PLE (frederic _POINT_ ple _AT_ gmail _POINT_ com)
	//

	$DEBUG=false;
	if ($DEBUG) $logf=fopen($_SERVER['DOCUMENT_ROOT'].'/ecrire/data/enhance_session.log','a');
	
	function printlog ($texte) {
		global $logf;
		global $auteur_session;
		fwrite($logf,date('Ymd-Hjs')." [".$auteur_session['login']."] [".$_SERVER['REMOTE_ADDR']."] $texte
");
	}
	//print_r($auteur_session);
	if (isset($auteur_session['id_diplome'])) {
		if ($DEBUG) printlog("OK session deja etandue");
		return("OK session deja etandue"); // Session deja etenduee
	}
	if (!isset($auteur_session['login'])) {
		if ($DEBUG) printlog("KO session pas authentifiee");
		return("KO session pas authentifiee"); // Session pas encore authentifiee
	}

	// Recherche le fichier de session
	$sessions_dir=$_SERVER['DOCUMENT_ROOT'].'/ecrire/data';
	$sessions_mine='session_'.$auteur_session['id_auteur'].'_';
	$sessions_mine_length=strlen($sessions_mine);
	$hash_env=md5($GLOBALS['ip'].$_SERVER['HTTP_USER_AGENT']);
	
	$dir=opendir($sessions_dir);
	$session_file=false;
	while ($file=readdir($dir)) {
		if (strncmp($file,$sessions_mine,$sessions_mine_length)==0) {
			// Fichier de session appartenant a l'utilisateur
			$sf=file($sessions_dir.'/'.$file);
			for($i=0;$i<count($sf);$i++) $sf[$i]=trim($sf[$i]);
			if (in_array("\$GLOBALS['auteur_session']['hash_env'] = '".$hash_env."';",$sf)) {
				$session_file=$sessions_dir.'/'.$file;
				break;
			}
		}
	}
	
	if (!$session_file) {
		if ($DEBUG) printlog("KO pas de fichier de session trouve pour la session");
		return("KO pas de fichier de session trouve pour la session"); // Fichier de session non trouve
	} else if ($DEBUG) printlog("OK fichier de session : $session_file");
	array_pop($sf);
	
	// Extension
	// Code à personnaliser
	include('sql.php.inc');
	$request_value="SELECT * FROM ma_table WHERE id='".$auteur_session['login']."';";
	$res=mysql_query($request_value);
	if (!$res) {
		if ($DEBUG) printlog("KO Erreur mysql_query ".mysql_error());
		return("KO Erreur mysql_query ".mysql_error());
	}
	$u=mysql_fetch_array($res,MYSQL_ASSOC);
	mysql_free_result($res);
	foreach(array_keys($u) as $champ) {
		$GLOBALS['auteur_session'][$champ]=$u[$champ];
		$sf[]="\$GLOBALS['auteur_session']['".$champ."'] = '".$u[$champ]."';";
	}
	unset($u);
	// Fin du code à personnaliser

	// Fin	
	$sf[]="?>";

	$fp=fopen($session_file,'w');
	if ($fp) {
		foreach($sf as $ligne) fwrite($fp,$ligne."
");
		fclose ($fp);
		if ($DEBUG) printlog("OK Session etendue");
		return("OK Session etendue");
	} else {
		if ($DEBUG) printlog("KO Erreur de modification de $session_file");
		return("KO Erreur de modification de $session_file"); // Impossible d'ecrire dans le fichier de session
	}

?>

sql.php.inc

Ce script permet d'utiliser la chaîne de connexion SQL de SPIP sans pour autant l'implémenter à plusieurs endroits

<?php
	//
	// Script qui se connecte à la base de donnees a partir de la conf de spip
	// Auteur : Frederic PLE (frederic _POINT_ ple _AT_ gmail _POINT_ com)
	//

	$spipfile=$_SERVER['DOCUMENT_ROOT'].'/ecrire/inc_connect.php';
	
	$spip=file($spipfile);
	foreach($spip as $l) if (strncmp($l,'spip_connect_db',12)==0) break;
	
	list($host,$user,$pass,$db)=explode(' ',preg_replace('/^[^\']+\'([^\']*)\',\'([^\']*)\',\'([^\']*)\',\'([^\']*)\',\'([^\']*)\'.*$/','$1 $3 $4 $5',$l));
	$db=rtrim($db);
	
	if (!mysql_connect($host,$user,$pass)) { echo mysql_error(); exit() ;}
	if (!mysql_select_db($db)) { echo mysql_error(); exit() ;}
?>