Archives FluxBB.fr

Les archives de FluxBB.fr

Vous n'êtes pas identifié(e).

#1 11-05-2009 15:31:48

Testor68
Membre

fusionner les tables users

Hello,

j"aimerai intégrer la table users de phpwcms dans la table users de fluxbb.

Le probleme est que l'index sur fluxbb est "id" mais "usr_id" dans les anciennes tables du cms.

Est ce que je peux ouvrir tous les fichiers fluxbb et faire un "search and replace" de "id" par "usr_id" ?

Merci

Hors ligne

#2 11-05-2009 17:06:18

Otomatic
Régisseur

Re : fusionner les tables users

Bonjour,

Qu'entends-tu exactement par intégrer ?

La table user de FluxBB comprend trente-sept champs (sans compter les mods), une clé primaire et deux index.
Pour intégrer une table dans une autre, il ne suffit pas de renommer un champ.


Ce n'est pas parce que l'erreur se propage qu'elle devient vérité. Gandhi
Sont différents : ça et sa - est et ait - à et a - ce et se - mes et mais ou met - été et était - c'est et ces - ce-si et ceci
La vie sans musique est tout simplement une erreur, une fatigue, un exil. Friedrich Nietzsche

Hors ligne

#3 11-05-2009 17:26:08

Testor68
Membre

Re : fusionner les tables users

Merci de ton aide. J'ai un site avec une base users remplie et j'aimerai rajouter un forum (si possible flubb qui me plait bien) à ce site.

J'aimerai trouver une bidouille pour éviter lorsqu'on est deja connecté sur le site d'avoir à  se relogguer pour poster dans le forum.

Il faudrait aussi que les pseudo correspondent si possible

Hors ligne

#4 11-05-2009 17:32:38

Otomatic
Régisseur

Re : fusionner les tables users

Bonjour,

Il me semble qu'il y a déjà eu de nombreuses réponses sur le sujet d'identification automatique sur un forum après s'être identifié sur le portail du site.

D'autres, plus qualifiés que moi sur ce sujet pourront te répondre.


Ce n'est pas parce que l'erreur se propage qu'elle devient vérité. Gandhi
Sont différents : ça et sa - est et ait - à et a - ce et se - mes et mais ou met - été et était - c'est et ces - ce-si et ceci
La vie sans musique est tout simplement une erreur, une fatigue, un exil. Friedrich Nietzsche

Hors ligne

#5 11-05-2009 17:46:40

EBS
Membre

Re : fusionner les tables users

J'ai eu la même problèmatique.
La solution que j'ai faite (qui n'est peut-être pas la mieux mais qui a évité de tout casser dans le forum fluxBB) :

Gérer 2 tables de users : une pour le site et une pour le forum.
Dans mon cas, le profil est géré au niveau de mon site --> Le menu permettant d'accéder au profil a été enlevé au niveau du forum; de même que le menu "S'identifier" et "s'inscrire".

Ensuite, lors de l'identification de l'utilisateur sur mon site, j'ai créé une fonction qui permet de créer automatiquement la connexion sur le forum.

Ce n'est pas évident à mettre en place, il faut être super rigoureux et bien vérifier tous les cas de figure.
A l'époque où je l'ai fait (6 mois environ), je n'avais rien trouvé sur le web; il existe peut-être maintennat des tutoriaux

Hors ligne

#6 11-05-2009 18:23:44

Testor68
Membre

Re : fusionner les tables users

oui EBS j'ai pas mal réfléchi à ce sujet et je crois aussi que c'est ce qu'il y a de plus judicieux.

sans vouloir abuser tu n'aurais pas ce bout de code a portée de main que je puisse m'en inspirer ? wink

Hors ligne

#7 11-05-2009 22:51:28

EBS
Membre

Re : fusionner les tables users

euh ce n'est pas que je n'ai pas envie de  t'aider mais il ne s'agit pas d'un simple bout de code...il y a beaucoup de travail à faire.
Tu dois étudier les fichiers php fournis par fluxbb enfin de comprendre le mécanisme puis externaliser ce que tu as besoin.

Commences par le fichier login.php pour voir ce que fait le forum lorsque l'utilisateur se connectes.

tu peux faire une fonction de ce style que tu appelles dès qu'une personne s'est identifiée sur ton site

function loginForum($userId)
{
    global $db, $db_type, $pun_config, $pun_user, $cookie, $cookie_name, $cookie_seed, $cookie_path, $cookie_domain, $cookie_secure;

    define('PUN_QUIET_VISIT', 1);
    define('PUN_ROOT', 'forum/');
    require_once PUN_ROOT.'include/common.php';

    // Recherche des info de l'utilisateur
    $pun_user = array();
    $pun_user = get_pun_user($userId);

    // Mise à jour de la table f_online
    updateOnlineTable();

    $result = $db->query("SELECT id, group_id, password, save_pass FROM ".$db->prefix."users WHERE id='".$userId."'") or error('Unable to fetch user info', __FILE__, __LINE__, $db->error());
    list($user_id, $group_id, $db_password_hash, $save_pass) = $db->fetch_row($result);

    // Update the status if this is the first time the user logged in
    if ($group_id == PUN_UNVERIFIED)
        $db->query('UPDATE '.$db->prefix.'users SET group_id='.$pun_config['o_default_user_group'].' WHERE id='.$user_id) or error('Unable to update user status', __FILE__, __LINE__, $db->error());

    // Remove this users guest entry from the online list
    $db->query('DELETE FROM '.$db->prefix.'online WHERE ident=\''.$db->escape(get_remote_address()).'\'') or error('Unable to delete from online list', __FILE__, __LINE__, $db->error());

    $expire = ($save_pass == '1') ? time() + 31536000 : 0;
    pun_setcookie($user_id, $db_password_hash, $expire);
}

et lorsqu'il se déconnecte

function logoutForum($userId)
{
    global $db, $db_type, $pun_config, $pun_user, $cookie, $cookie_name, $cookie_seed, $cookie_path, $cookie_domain, $cookie_secure;

    define('PUN_QUIET_VISIT', 1);
    define('PUN_ROOT', 'forum/');
    require_once PUN_ROOT.'include/common.php';

    // Remove user from "users online" list.
    $db->query("DELETE FROM ".$db->prefix."online WHERE user_id='".$userId."'") or error('Unable to delete from online list', __FILE__, __LINE__, $db->error());

    // Update last_visit (make sure there's something to update it with)
    if (isset($pun_user['logged']))
        $db->query("UPDATE ".$db->prefix."users SET last_visit='".$pun_user['logged']."' WHERE id='".$userId."'") or error('Unable to update user visit data', __FILE__, __LINE__, $db->error());

    pun_setcookie(0, sha1(uniqid(rand(), true)), time() + 0);
}

Mais après cela tu auras encore beaucoup de points à régler

Dernière modification par EBS (11-05-2009 23:06:55)

Hors ligne

#8 11-05-2009 23:02:31

Testor68
Membre

Re : fusionner les tables users

ah genial merci c'est un bon début smile

Hors ligne

#9 11-05-2009 23:14:10

EBS
Membre

Re : fusionner les tables users

J'ai supprimé un peu de code inutile dans les 2 fonctions que je t'ai donné dans mon post précédent.
Ensuite tu appelles la page index.php du forum lorsque l'utilisateur clique sur le menu forum (par exemple) et tu vois ce que ça donne...
A partir de là bon courage...j'ai mis plusieurs semaines pour mettre en place tout cela (avec d'autres modifications dont j'avais besoin).

Hors ligne

#10 12-05-2009 02:41:31

Mpok
Néo Admin

Re : fusionner les tables users

1. Oui la "méthode" générale proposée par EBS (quelques posts plus haut) est la meilleure solution. En fait, pas tout à fait wink, car il vaudrait mieux n'avoir QU'UNE seule table valable dans tous les cas, mais cela nécessite du coup de faire des modifs des 2 côtés...
Là, avec deux tables, l'inconvénient est qu'il faut reporter les éventuelles modifs de l'une sur l'autre. Si la table du site ne comporte pas trop d'infos communes aux deux (genre uniquement le username/password), alors pas de souci. Sinon ça risque d'être un peu plus long.

2. Dans le code de la partie "login" proposé ci-dessus, j'ai un peu de mal à comprendre ce que tu fais : à partir du moment où tu inclues common.php, l'ensemble des opérations suivantes est DEJA réalisé (update de la table online, etc...). Les variables $pun_user[] sont également déjà renseignées...

Ce qu'il SUFFIT de faire (dans l'optique où les tables ont des ids/username communs), c'est juste le "pun_setcookie" avec les bonnes valeurs...
Et ENSUITE, les appels SUIVANTS à common.php donneront les bonnes valeurs...
(bref, là, il me semble que tu prends le pbm à l'envers, ou j'ai rien compris).

3. Dans la partie "logout", c'est 1 qu'il faut mettre comme user_id, pas 0.

4. Reste un script à prévoir pour "construire" la table users de FluxBB à partir de la table users du site... (comme le font les outils de migration d'un forum X à FluxBB/PunBB).

Hors ligne

#11 12-05-2009 09:36:27

EBS
Membre

Re : fusionner les tables users

Merci Mpok pour ces précisions.
Dans mon cas, il n'y a en effet que le username et l'id qui sont communs entre les 2 tables

Pour la fonction login, il y a certainement du code inutile, je ferais le test en ne mettant que le common mais je pense l'avoir déjà testé à l'époque et je crois que cela ne fonctionnait pas comme je le voulais.

Pour le logout, en effet il faut mettre 1 pour le cas standard mais pas dans mon cas car sur mon site, le 1 correspond à l'admin, j'ai donc modifié le comportement  du forum pour que 0 correspondent à l'invité

Hors ligne

#12 12-05-2009 15:00:55

EBS
Membre

Re : fusionner les tables users

Je viens de refaire des essais et en fait j'ai bien besoin de mettre à jour la table des utilisateurs en ligne.

Sur mon site, quand l'utilisateur se connecte il n'arrive pas directement sur le forum mais sur ma page d'accueil et comme j'ai voulu que sur cette page on puisse voir les personnes connectées; j'ai par conséquent utilisé le mécanisme de fluxbb et donc je mets à jour la table _online dès qu'une personne se connecte.
Je n'ai pas trouvé pour le moment une meilleure solution.

[Edit]
En effet, en étudiant un peu plus le code, la fonction de login peut être simplifiée par le script suivant

function loginForum($userId, $form_password_hash)
{
    global $db, $db_type, $pun_config;
    global $cookie, $cookie_name, $cookie_seed, $cookie_path, $cookie_domain, $cookie_secure;
    
    define('PUN_ROOT', 'forum/');
    require_once PUN_ROOT.'include/common.php';
    pun_setcookie($userId, $form_password_hash, time() + 31536000);
}

Dernière modification par EBS (12-05-2009 18:14:45)

Hors ligne

Pied de page des forums