Utiliser phpMyChat avec les comptes auteurs de SPIP

Cet article présente les modifications apportées à phpMyChat afin que l’authentification des utilisateurs s’effectue sur la table des auteurs SPIP.

phpMyChat est un système de discussion temps-réel développé par Nicolas Hoizey et disponible sur SourceForge
Cette application open source est simple à mettre en œuvre, entièrement personnalisable et s’appuie sur une base de données. Un chat s’effectue par le biais d’une simple page HTML contenant des frames invisibles rafraîchies périodiquement, ce qui permet d’afficher les nouveaux messages. Le code développé permet un maximum de compatibilité et une utilisation derrière un firewall. Pour ces raisons, cette application rencontre un vif succès et de nombreux sites l’utilisent.

SPIP étant particulièrement adapté à des usages communautaires, l’idée d’y associer un système de discussion temps-réel entre membres d’une même communauté peut paraitre évidente. Dans le cas d’une association, il est intéressant de créer un espace membre pour mettre en commun des ressources entre les auteurs SPIP, c’est à dire entre les membres de l’association. L’ajout d’un chat entre membres peut s’avérer pratique pour organiser des réunions virtuelles.

Recherche des utilisateurs dans la table spip_auteurs

phpMyChat recherche les utilisateurs enregistrés dans la table c_reg_users qui contient un champs username et un champs password ; ce dernier étant crypté par un hachage MD5. Dans SPIP, les auteurs sont authentifiés à partir de la table spip_auteurs qui contient un champs login et un champ pass ; ce dernier étant également crypté en MD5 mais après l’avoir concaténé préalablement par le champs alea_actuel. Il suffit donc de modifier les fonctions de phpMyChat afin que les requêtes SQL pour l’authentification s’effectuent sur les champs de spip_auteurs au lieu de c_reg_users.

Il se pose également 2 problèmes :

  1. Il faut désactiver et/ou supprimer les fonctions phpMyChat permettant d’enregistrer ou modifier un nouvel utilisateur (sinon on prend le risque d’ajouter / modifier des auteurs spip depuis le chat).
  2. Certains champs présent dans la table c_reg_users de phpMyChat ne sont pas présents dans la table spip_auteurs.

Pour le premier point les fonctions de modification des utilisateurs ont été supprimées. Pour le second point, faute d’utiliser 2 tables séparées, il faut ajouter des champs dans la table spip_auteurs de spip.

Le fichier ci-après joint propose une version modifiée de phpMyChat 0.14.5 permettant d’authentifier les utilisateurs du chat en tant qu’auteur SPIP.

Installation de phpMyChat modifié pour SPIP

Télécharger le fichier ci-dessous puis décompresser le dans votre répertoire courant de SPIP (où n’importe où ailleurs). Renommez le répertoire crée chat.

phpMyChat-0.14.5 modif 0.1pour spip

Ensuite à partir de votre interface phpMyAdmin, exécutez les requêtes suivantes sur votre base SPIP :

ALTER TABLE spip_auteurs ADD rooms varchar(128) NOT NULL default '';
ALTER TABLE spip_auteurs ADD ip varchar(16) NOT NULL default '';
ALTER TABLE spip_auteurs ADD gender tinyint(1) NOT NULL default '0';
ALTER TABLE spip_auteurs ADD perms varchar(9) NOT NULL default 'user';
ALTER TABLE spip_auteurs ADD reg_time varchar(11) NOT NULL default '';


DROP TABLE IF EXISTS chat_messages;
CREATE TABLE chat_messages (
   type tinyint(1) DEFAULT '0' NOT NULL,
   room varchar(30) NOT NULL,
   username varchar(30) NOT NULL,
   latin1 tinyint(1) DEFAULT '0' NOT NULL,
   m_time int(11) DEFAULT '0' NOT NULL,
   address varchar(30) NOT NULL,
   message text NOT NULL
);

DROP TABLE IF EXISTS chat_users;
CREATE TABLE chat_users (
   room varchar(30) NOT NULL,
   username varchar(30) NOT NULL,
   latin1 tinyint(1) DEFAULT '0' NOT NULL,
   u_time int(11) DEFAULT '0' NOT NULL,
   status varchar(1) NOT NULL,
   ip varchar(16) NOT NULL,
   UNIQUE room (room, username)
);

DROP TABLE IF EXISTS chat_ban_users;
CREATE TABLE chat_ban_users (
   username varchar(30) NOT NULL,
   latin1 tinyint(1) DEFAULT '0' NOT NULL,
   ip varchar(16) NOT NULL,
   rooms varchar(100) NOT NULL,
   ban_until int(11) DEFAULT '0' NOT NULL
);

Modifiez ensuite le fichier config.lib.php3 contenu dans le répertoire config :

<?php
// Database settings
define("C_DB_TYPE", 'mysql');
define("C_DB_HOST", 'localhost');
define("C_DB_NAME", '*** MY SPIP DB NAME ****');
define("C_DB_USER", '*** MY DB USER ***');
define("C_DB_PASS", '*** MY DB PASSWORD ***');
define("C_MSG_TBL", 'chat_messages');
define("C_USR_TBL", 'chat_users');
define("C_REG_TBL", 'spip_auteurs');
define("C_BAN_TBL", 'chat_ban_users');

// SPIP settings
define("C_FIELD_USERNAME", 'login');
define("C_FIELD_PASSWORD", 'pass');
define("C_FIELD_ALEA", 'alea_actuel');

// Cleaning settings for messages and usernames
define("C_MSG_DEL", '96');
define("C_USR_DEL", '4');
define("C_REG_DEL", '0');

// Proposed rooms
$DefaultChatRooms = array('Default', 'MyRoom1', 'MyRoom2');
$DefaultPrivateRooms = array('Priv1', 'Priv2');

// Language settings
define("C_LANGUAGE", 'french');
define("C_MULTI_LANG", '0');

// Registration of users
define("C_REQUIRE_REGISTER", '0');
define("C_EMAIL_PASWD", '0');

// Security and restriction settings
define("C_SHOW_ADMIN", '0');
define("C_SHOW_DEL_PROF", '0');
define("C_VERSION", '0');
define("C_BANISH", '0');
define("C_NO_SWEAR", '0');
define("C_SAVE", '*');

// Messages enhancements
define("C_USE_SMILIES", '1');
define("C_HTML_TAGS_KEEP", 'simple');
define("C_HTML_TAGS_SHOW", '1');

// Default display seetings
define("C_TMZ_OFFSET", '0');
define("C_MSG_ORDER", '0');
define("C_MSG_NB", '20');
define("C_MSG_REFRESH", '10');
define("C_SHOW_TIMESTAMP", '1');
define("C_NOTIFY", '1');
define("C_WELCOME", '1');
?>

Vous devez simplement renseigner le nom de votre base SPIP et votre user/password MySQL dans le premier bloc du fichier de configuration.

Si vous ne souhaitez qu’une salle de discussion par défaut, remplacez $DefaultChatRooms = array('Default', 'MyRoom1', 'MyRoom2'); par $DefaultChatRooms = array('Default');

A noter que les noms des champs utilisés pour l’autentification sont définies dans le second bloc.

TODO

  • Il n’y a plus de distinction entre utilisateurs phpMyChat (user, admin, moderateur). On pourrait utiliser les statuts des auteurs de spip_auteurs pour distinguer les utilisateurs (par exemple 0minirezo = utilisateur du chat et 1comite = moderateur du chat.
  • Cette version modifiée représente une branche parallèle à la version officielle de phpMyChat et en outre ne bénéficie pas de l’assistant html d’installation. Pour fusionner les modifs dans la version courante, il faudrait rajouter un indicateur dans le fichier de config (spip et pas spip) et l’utiliser pour activer ou non les fonctions de modification/ajout d’utilisateurs + adapter la fonction setup.php3 pour la configuration interactive avec question intégré avec spip ou pas ?
  • Vérifier que les futures mises à jour de SPIP ne nécessitent pas d’ajouter à nouveau les champs maquants dans spip_auteurs (ou segmenter en 2 tables avec mise à jour à chaque execution du chat !!).

Discussion

14 discussions

  • 1
    Maitresinh

    superbe !

    Mais l’admin ne marche pas : l’erreur retournée est la suivante :

    Database error : Invalid SQL : SELECT password,perms FROM spip_auteurs WHERE username=’login’ LIMIT 1
    MySQL error : 1054 (Unknown column ’password’ in ’field list’)
    Session halted.

    le probleme doit pas etre bien mechant, mais vu mon niveau...

    • j’ai le même probleme l’as-tu résolu ?

    Répondre à ce message

  • 2

    Bravo pour cette super contrib que j’attendais depuis des mois ! Un petit problème cependant qui s’affiche dans la frame de droite, sous Quitter :

    Database error : Invalid SQL : SELECT usr.username, usr.latin1, usr.status, reg.gender FROM chat_users usr LEFT JOIN spip_auteurs reg ON usr.username = reg.username WHERE usr.room = ’Default’ ORDER BY username
    MySQL error : 1054 (Unknown column ’reg.username’ in ’on clause’)
    Session halted.

    Une idée ?

    • C’est une superbe contribution !
      Mais j’ai également ce problème :

      Database error : Invalid SQL : SELECT usr.username, usr.latin1, usr.status, reg.gender FROM chat_users usr LEFT JOIN spip_auteurs reg ON usr.username = reg.username WHERE usr.room = ’Default’ ORDER BY username
      MySQL error : 1054 (Unknown column ’reg.username’ in ’on clause’)
      Session halted.

      ça doit donc être un oubli sûrement mais de qui ? :D

      encore merci pour ce travail ;)

    • je confirme j’ai le même probléme je suis chez free http://unimed.free.fr/chat/

    Répondre à ce message

  • existe-t-il un moyen de modérer les messages. Cad un administrateur voit tous les messages, les autres ne voient rien jusqu’à ce que le message - la question - est validée par l’administrateur pour qu’ensuite une personne qui répond voit sa réponse elle aussi modérée....

    Merci pr votre aide.

    Répondre à ce message

  • Bonjour,

    Et merci pour le travail effectué et les réponses données sur le forum !

    -  j’ai installé phpMyChat puis, modifié avec cette contribution.
    -  j’ai installé spipVsPhpBB qui utilise lui aussi l’authentification Spip.

    Jusque là tout allait bien :-)

    -  Sur les pages de SpipVsphpBB j’ai inséré de quoi afficher les connectés soit :

     <div style="text-align: right;"><a href="phpMyChat.php3" target="_blank" title="tchater?">Connect&eacute;s sur le chat :
                    <?php
    // relative path from this page to your chat directory
    $ChatPath = "chat/";
    require("./${ChatPath}/lib/connected_users.lib.php3");       
    display_connected($ShowPrivate,$DisplayUsers,($DisplayUsers ? USERS_LOGIN : connecte),Personne);
    ?></a>
                    </div>

    Résultat : plus possible de se logguer sur le forum si je me suis loggué sur le chat.

    Je supprime ces quelques lignes et tout refonctionne : une idée de l’origine du conflit d’authentification ?

    merci

    Répondre à ce message

  • si quelqu’un est intéressé ....

    il y a un petit bug qui empêche de se logger en tant qu’admin même après voir donné les droits admin ( mettre admin dans la colonne perms de la table spip_auteurs de la personne à qui on veut donner ces droits )

    il faut modifier les premières lignes de /lib/login.lib.php3 comme suit :

    <?php
    if ((isset($AUTH_USERNAME) && $AUTH_USERNAME != "") && (isset($AUTH_PASSWORD) && $AUTH_PASSWORD != ""))
    {
            // Ensure the password is a correct one
            $DbLink4Login = new DB;
            {{$DbLink4Login->query("SELECT ".C_FIELD_PASSWORD.",".C_FIELD_ALEA.",perms perms FROM ". C_REG_TBL . "WHERE login='$AUTH_USERNAME' LIMIT 1");}}
    
            if ($DbLink4Login->num_rows() != 0)
            {
                    {{list($PWD_Hash, $alea , $perms) = $DbLink4Login->next_record();}}
    
                    if ($PWD_Hash == md5({{stripslashes($alea.$AUTH_PASSWORD)}}) || $PWD_Hash == stripslashes($alea.$AUTH_PASSWORD)$
          
    
    je continue

    Répondre à ce message

  • Bonjour,
    tout s’ets bien passé dans mon install...
    d’ailleurs je peux me loguer avec les login et mot de passes du spip.. c’est parfait

    mais une fois sur le chat rien ne fonctionne
    j’entre un message et je valide (par entrer ou en cliquant sur Envoyer) et le message ne « part pas »...

    quelqu’un a une idée ?

    Question subsidiaire : comment gérer le nom et le nombre des salles existantes ? Merci !!!!

    Répondre à ce message

  • 1

    Je suis en train de bosser dur sur un squelette pour un site d’école. Avoir un chat privé me paraît être important pour le travail collaboratif. Votre contrib paraissait être exactement ce qu’il me fallait. Quelques remarques à ce sujet :
    1. La partie installation de PHPmychat ayant été supprimée, aucun administrateur n’est déclaré. Accéder à la partie administration est impossible. Donc la table chat_ban_users me paraît ici inutile(Pour une école, c’est important... nous n’avons pas que des élèves polis et propres sur eux)
    2. Je ne vois pas comment créer un salon privé, où seuls les rédacteurs ont accès.

    Voilà comment j’ai remédier à cela :
    J’ai créé un bouton supplémentaire dans la partie privée de mon site pour accéder au chat. Il faut donc ^étre logué pour accéder au salon.

    J’ai programmé une petite install en partant de votre contrib pour modifier les tables de SPIP. Je la tiens à votre disposition. Je ne suis pas assez calé en php pour retrouver tous les codes mais j’aimerais ajouter cette partie admin. Alors si quelqu’un peut m’aider à trouver les paramètres...

    • Désolé pour les fôtes, c’est lamentable pour un instit, mais j’ai rédiger rapidement...

    Répondre à ce message

  • bonjour :)

    j’aimerais savoir s’il est possible de changer les couleurs de la palette où l’on choisit sa couleur d’écriture. Parce qu’il y a beaucoup de couleurs qui sont illisibles sur ce fond bleu clair que je ne veux pas changer, les verts en particulier qui sont trop clairs.

    merci de votre réponse

    claire

    Répondre à ce message

  • salut philippe,
    j’ai moi-même pas mal cherché pour voir comment intégrer un système de com-instantané sur mon site pour la communauté de rédacteur... j’avais essayé ta contrib, mais ce n’était pas exactement ce que je cherchais, et j’avais des bogues... j’ai trouvé ensuite webmessenger, fonctionnant comme phpMyChat avec une combinaison php/mysql et un serveur jabber local ou distant, qui permet d’ouvrir large sur les systèmes de chat existant. peut-être ça t’intéresse de jeter un coup d’oeil sur ce code-là (moi je galère enocre un peu dessus, débutant que je suis) et voir si ça t’intéresserait de modifier quelques trucs pour une nouvelle contrib-spip ? (notamment l’utilisation des mêmes id/pass serait un must).
    à+

    Répondre à ce message

  • Bonjour,

    est-ce que phpmychat tient compte de la bidirectionnalité du texte pour des langues comme l’hébreu ou l’arabe ?
    Merci

    Nicoco

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom