Cet article s’adresse au gens qui utilisent un forum phpBB3 intégré à leur site et qui veulent garder sur l’ensemble de celui-ci les liens : «Connexion / Inscription» et «Déconnection [ Mr X ] |Vous avez 10 nouveaux messages». Cette amélioration permet au passage de propager les sessions de phpBB3. Ainsi un utilisateur qui s’est logué sur votre forum, qui se balade sur votre site et reviens sur le forum n’a pas besoin de se reloguer.

Pour réaliser cette amélioration, je me suis basé sur cette page :

http://forums.phpbb-fr.com/documentation-phpbb3/sujet154874.html

Certains lecteurs perspicaces ne comprennent peut être pas pourquoi j’écris tout un article sur le sujet au lieu de vous donner simplement ce lien… En fait dans le lien ci-dessus, on explique comment faire un formulaire de connexion à l’intérieur de vos pages alors qu’ici je vais vous montrer comment utiliser le formulaire de votre forum et rediriger l’utilisateur sur la page d’où il provient. Cette solution est plus simple et plus propre à mon sens.

La seconde raison pour laquelle j’ai préféré utiliser le formulaire du forum plutôt qu’un formulaire maison est que le code proposé dans le lien ci-dessus ne gère pas correctement les erreurs d’authentification. Malgré de nombreuses tentatives, je n’ai pas réussi à régler le problème, j’ai donc décidé d’utiliser le formulaire du forum qui marche déjà très bien.

Pour commencer, il faut insérer un code sur toutes les pages de votre site pour propager les sessions de phpBB3. Vous devez insérer le code suivant en tout début de vos scripts, avant d’afficher le moindre caractère !

define('IN_PHPBB', true);
$phpbb_root_path = 'path/'; // changer path par le nom du dossier de votre forum.
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' .$phpEx);
$user->session_begin();

Ces quelques lignes sont très bien décrites sur le lien que je vous ai donné en début d’article dans la partie « Le script de base », donc je vous invite à y aller si vous voulez plus d’information.

Maintenant que les sessions phpBB3 se propagent sur l’ensemble de votre site, il va falloir ajouter ces deux lignes sur chacune de vos pages pour toujours savoir vers où rediriger l’utilisateur après qu’il se soit logué ou délogué.

session_start();
$_SESSION['return_page'] =$_SERVER['REQUEST_URI'];

Vous aurez peut être besoin de remplacer $_SERVER ['REQUEST_URI'] par $_SERVER['PHP_SELF'] ou $_SERVER['SCRIPT_NAME']. Cela dépend de la configuration de votre serveur. L’important étant d’avoir l’adresse absolu de la page.

L’étape suivante consiste à modifier le script ucp.php qui se trouve à la racine de votre forum. Ajoutez en tout début de fichier les deux lignes suivantes pour savoir où rediriger l’utilisateur :

session_start();
$return_page_URI = isset($_SESSION['return_page']) ?$_SESSION['return_page'] : false ;

Quelques lignes plus loin, vous trouverez un « swith($mode) » dans lequel il va falloir changer les cas « login » et « logout ».
Modifier votre cas « login » comme ceci :

case 'login':
	if ($user->data['is_registered'])
		redirect(append_sid("{$phpbb_root_path}index.$phpEx"));
	if($_GET['redir']==1 &&$return_page_URI) // redirection personnalisée
		login_box(request_var('redirect',$return_page_URI);
	else // redirection classique sur le forum
		login_box(request_var('redirect', "index.$phpEx"));
	break;

Et le cas « logout » comme cela :

case 'logout':
	if ($user->data['user_id'] != ANONYMOUS && isset($_GET['sid']) && !is_array($_GET['sid']) &&$_GET['sid'] ===$user->session_id() {
		$user->session_kill();
		$user->session_begin();
		$message =$user->lang['LOGOUT_REDIRECT'];
	} else {
		$message = ($user->data['user_id'] == ANONYMOUS) ?$user->lang['LOGOUT_REDIRECT'] :$user->lang['LOGOUT_FAILED'];
	}
	if($_GET['redir']==1 &&$return_page_URI) { // redirection personnalisée
		meta_refresh(3, append_sid($return_page_URI))
		$message =$message . '<br /><br />' . sprintf($user->lang['RETURN_INDEX'], '<a href="' . append_sid($return_page_URI) . '">', '</a> ');
	} else { // redirection classique vers le forum
		meta_refresh(3, append_sid("{$phpbb_root_path}index.$phpEx"));
		$message =$message . '<br /><br />' . sprintf($user->lang['RETURN_INDEX'], '<a href="' . append_sid("{$phpbb_root_path}index.$phpEx") . '">', '</a> ');
	}
	trigger_error($message);
	break;

Maintenant que tout fonctionne à merveille, il ne reste plus qu’a placer les liens de connexion, déconnexion, etc…

Voici le code à placer là où vous avez envie de voir apparaitre les liens :

if(!$user->data['is_bot']) { // Si l’utilisateur n’est pas un bot (Google, Yahoo, …)
	if(!$user->data['is_registered']){ // Si l’utilisateur n’est pas encore logué
		echo '<a href="'.$phpbb_root_path.'ucp.php?mode=login&redir=1">Connexion</a> |
		 <a href="'.$phpbb_root_path.'ucp.php?mode=register">Inscription</a>';
	}else{ // Autrement, si l’utilisateur est logué
		// j’utilise ici les fonctions interne à phpBB3 pour interroger la base de donnée sur le nombre de nouveaux message.
		$nb_new_msg =$db->sql_query("SELECT COUNT(msg_id) AS nb FROM phpbb_privmsgs_to WHERE user_id='".$user->data['user_id']."' AND pm_new=1 LIMIT 1");
		$nb_new_msg =$db->sql_fetchrow($nb_new_msg);
		echo '<a href="'.$phpbb_root_path.'ucp.php?mode=logout&redir=1&sid='.$user->session_id.'">Déconnexion [ '.$user->data['username'].' ]</a> |
		 <a href="'.$phpbb_root_path.'ucp.php?i=pm&folder=inbox">Vous avez <strong>'.$nb_new_msg['nb'].'</strong> nouveau message</a>';
	}
}

Et voilà le tour est joué !

Un commentaire

  • roger (1 comments), le 31 décembre 2010

    Et pour une redirection après connection sur version 3.0.7 rajouter:
    Dans functions.php
    function login_box()
    ligne 2783 dans global $return_page_URI
    et juste avant $redirect = meta_refresh(3, $redirect); ligne 2885
    if ($return_page_URI)
    $redirect = $return_page_URI;

    Voila, vous aurez une redirection après loggage.

    Pour un codage plus propre remplacer aussi:
    if($_GET['redir']==1
    par
    if(isset($_GET['redir']) && $_GET['redir']==1

Poster un commentaire

Subscribe without commenting