====== Intégration avec le Forum phpBB ====== ===== phpBB v2 avec dokuwiki v2008-05-05 ===== Afin de clarifier ce que l'on trouve dans la page [[tips:integrate_with_phpbb|version "anglaise" de ce tips]] voici ce qui fonctionne : Nommer le contenu du fichier ci-dessous phpbb.class.php puis mettez-le dans le répertoire inc/auth/ success = true; $this->cando['logoff'] = true; //$this->cando['getGroups'] = true; $this->cando['external'] = true; // // Set page ID for session management // $this->userdata = session_pagestart($user_ip, PAGE_LOGIN); init_userprefs($this->userdata); // // End session management // } function trustExternal($user,$pass,$sticky=false){ $sticky ? $sticky = true : $sticky = false; if($this->userdata['session_logged_in']) { //already logged in... } else { if(!$this->checkPass2($user,$pass,$sticky)) { return; } } global $USERINFO; $USERINFO = $this->getUserData($this->userdata['username']); $_SERVER['REMOTE_USER'] = $this->userdata['username']; $_SESSION[$conf['title']]['auth']['user'] = $this->userdata['username']; $_SESSION[$conf['title']]['auth']['pass'] = "__"; $_SESSION[$conf['title']]['auth']['buid'] = auth_browseruid(); $_SESSION[$conf['title']]['auth']['info'] = $USERINFO; /*var_dump($_SESSION[$conf['title']]['auth']); die("fff");*/ } function checkPass($user,$pass){ return($this->checkPass2($user,$pass,0)); } function checkPass2($user,$pass,$auto){ global $user_ip; global $db; $sql = "SELECT user_id, username, user_password, user_active, user_level, user_login_tries, user_last_login_try FROM " . USERS_TABLE . " WHERE username = '" . str_replace("\\'", "''", $user) . "'"; if ( !($result = $db->sql_query($sql)) ) { message_die(GENERAL_ERROR, 'Error in obtaining userdata', '', __LINE__, __FILE__, $sql); } if( $row = $db->sql_fetchrow($result) ) { if( md5($pass) == $row['user_password'] && $row['user_active'] ) { $this->userdata = session_begin($row['user_id'], $user_ip, PAGE_INDEX, FALSE, $auto, 0); if( !$this->userdata ) { message_die(CRITICAL_ERROR, "Couldn't start session : login", "", __LINE__, __FILE__); } return(true); } } msg($lang['badlogin'],-1); return(false); } /** * Return user info * * Returns info about the given user needs to contain * at least these fields: * * name string full name of the user * mail string email addres of the user * grps array list of groups the user is in * */ function getUserData($user){ global $conf; if($this->userdata['session_logged_in']) { global $db; //ok, figure out what groups they are in $sql = "SELECT g.group_name, ug.user_pending FROM " . GROUPS_TABLE . " g, " . USER_GROUP_TABLE . " ug WHERE ug.user_id = " . $this->userdata['user_id'] . " AND ug.group_id = g.group_id AND g.group_single_user <> " . TRUE . " ORDER BY g.group_name, ug.user_id"; if ( !($result = $db->sql_query($sql)) ) { message_die(GENERAL_ERROR, 'Error getting users group information', '', __LINE__, __FILE__, $sql); } $groups = array($conf['defaultgroup']); while( $row = $db->sql_fetchrow($result) ) { if(!$row['user_pending']) $groups[] = $row['group_name']; } return(array('name' => $user, 'mail' => $this->userdata['user_email'], 'grps' => $groups ) ); } return(false); } function logOff(){ if( $this->userdata['session_logged_in'] ) { session_end($this->userdata['session_id'], $this->userdata['user_id']); } } /* I didnt get this working... function retrieveGroups($start=0,$limit=0) { die("hi g"); $sql = "SELECT g.group_name FROM " . GROUPS_TABLE . " g AND g.group_single_user <> " . TRUE; if($limit != 0) $sql = $sql . " LIMIT $start,$limit"; if ( !($result = $db->sql_query($sql)) ) { message_die(GENERAL_ERROR, 'Error getting group information', '', __LINE__, __FILE__, $sql); } $groups = array("User"); while( $row = $db->sql_fetchrow($result) ) { $groups[] = $row['group_name']; } return $groups; }*/ } Modifiez si besoin la variable $location.'../phpBB2/'; par le nom du répertoire de votre forum. Ensuite aller dans l'administration manager du DokuWiki, puis aller au niveau des configurations d'authentification, choisir phpbb.class.php, et choisissez ensuite le groupe par défaut du forum ex: user (pour les utilisateurs par défaut de l'ensemble du forum); puis choisissez le nom du superUtilisateur du DokuWiki parmi un des utilisateurs du forum. --- // lolo 09/09/2008 //