Tout se passe dans le fichier
/chat/inc/cmses/xoops2016CMS.phpAu niveau de la fonction
getUser vers la ligne 75.
Le code d'origine de la fonction est celui-ci :
function getUser($userid) {
$u = null;
$user =& $this->member_handler->getUser($userid);
if($user) {
$u = array(
'id' => $userid,
'login' => $user->getVar('uname')
);
$u['roles'] = $GLOBALS['fc_config']['liveSupportMode']?ROLE_CUSTOMER:ROLE_USER;
if($user->getVar('rank') == 6) $u['roles'] = ROLE_MODERATOR;
if($user->isAdmin()) $u['roles'] = ROLE_ADMIN;
}
return $u;
}
On voit qu'une personne dans le groupe "Webmestres" du site est forcément administrateur du tchat.
Et on voit qu'une personne ayant le rang spécial de modérateur (rang 6) sur le site, est modérateur du tchat également.
Pour diverses raisons, ceci pourrait ne pas convenir à votre gestion des droits d'accès (par exemple, on pourrait vouloir définir un modérateur du tchat, qui n'ait pas d'autre rôle sur le site lui-même).
J'avais donc proposé de modifier la fonction
getUser comme suit, afin de régler ça.
Avec l'inconvénient principal, de vous obliger à éditer manuellement le fichier
/chat/inc/cmses/xoops2016CMS.php pour indiquer les UID des membres avec pouvoir sur le tchat.
function getUser($userid) {
$u = null;
$user =& $this->member_handler->getUser($userid);
if($user)
{
$u = array('id' => $userid, 'login' => $user->getVar('uname'));
$u['roles'] = $GLOBALS['fc_config']['liveSupportMode']?ROLE_CUSTOMER:ROLE_USER;
$uidokadmin = array("77", "78", "85", "11211", "11646"); //indiquer ici les uid des membres qui seront administrateurs du tchat
if (in_array($userid, $uidokadmin)) {$u['roles'] = ROLE_ADMIN;}
$uidokmodo = array("12", "31", "154", "729"); //indiquer ici les uid des membres qui seront modérateurs du tchat
if (in_array($userid, $uidokmodo)) {$u['roles'] = ROLE_MODERATOR;}
}
return $u;
}
Vous le voyez ci-dessus, il suffit d'indiquer les UID des membres pour les définir comme modérateur ou administrateur du tchat (liste des 'uid' entre guillemets et séparés par une virgule).
Voici donc une nouvelle modification de la fonction
getUser, qui permettra de gérer depuis votre site, qui est administrateur ou modérateur de votre tchat, avec la gestion des groupes intégrée à xoops.
Sachant qu'ensuite, les droits propres au tchat, se gèreront depuis l'administration du tchat lui-même (qui peut bannir, ignorer, accéder aux logs, etc...).
Première étape, créer dans votre site, 2 nouveaux groupes pour les administrateurs et les modérateurs du tchat (Admin flashchat et Modo flashchat par exemple).
Ensuite, lorsque vous êtes sur la page de gestion des groupes :
/modules/system/admin.php?fct=groups, vous passez juste la souris sur le lien qui sert à modifier un groupe.
Vous verrez alors dans le bas de votre navigateur, un lien du genre :
/modules/system/admin.php?fct=groups&op=modify&g_id=6.
Ce qui nous intéressse, c'est la partie :
g_id=6, qui indique sur le groupe possède l'id 6.
Dans mon cas, ça correspond au groupe des modérateurs du tchat (Modo flashchat), j'indique donc cet id sur la ligne adéquate dans le code ci-dessous.
Je fais la même chose avec mon groupe "Admin flashchat", créé juste après le groupe des modérateurs, et qui porte donc l'id 7. (voir code ci-dessous).
J'édite donc mon fichier
/chat/inc/cmses/xoops2016CMS.php, et je remplace la fonction
getUser par celle-ci :
function getUser($userid) {
$u = null;
$groupsok=99;
$user =& $this->member_handler->getUser($userid);
if($user)
{
$u = array('id' => $userid, 'login' => $user->getVar('uname'));
$u['roles'] = $GLOBALS['fc_config']['liveSupportMode']?ROLE_CUSTOMER:ROLE_USER;
$groupsok = $user->getGroups();
if (in_array("7", $groupsok)) //si le membre est dans le groupe "Admin flashchat"
{
$u['roles'] = ROLE_ADMIN;
}
elseif (in_array("6", $groupsok)) //si le membre est dans le groupe "Modo flashchat"
{
$u['roles'] = ROLE_MODERATOR;
}
}
return $u;
}
A présent, je n'ai plus qu'à indiquer (à partir de mon site xoops), qui doit être administrateur ou modérateur du tchat.
Le membre a juste à se déconnecter/reconnecter du tchat pour que ce soit pris en compte.