@burning
Merci beaucoup pour le module, il est très intéressant et permet de résoudre le problème. Mais, ça reste un peu compliqué quand on développe son module. De plus dès que l'on veut faire beaucoup de menu il faut cloner le module à l'aide du script perl ... Mais, ce module me plait pour d'autres utilités que de faire ce que je veux faire ! Alors j'ai cherché et fini par trouver une solution qui me semble satisfaisante.
Un petite remarque avant de commencer, tous mes groupes sont créés au moment de l'installation du module via un script :
$modversion['onInstall'] = 'include/install.php';
Dans mon fichier xoops_config.php :
// Les groupes prédéfinis ...
$modversion['groupe_1']="WSFadministrateurs";
$modversion['groupe_2']="WSFenseignants";
$modversion['groupe_3']="WSFetudiants";
$modversion['groupe_4']="WSFentreprises";
Après les autorisations :
$modversion['hasMain'] = 1;
if(isset($GLOBALS['xoopsModule']) && $GLOBALS['xoopsModule']->getVar('dirname') === $modversion['dirname'])
{
include_once XOOPS_ROOT_PATH.'/modules/'.$modversion['dirname'].'/class/publicPerm.php';
$permHandler = WSformationPublicPermHandler::getHandler();
// ENS
if ($permHandler->isUserInGroup($modversion['groupe_2']))
{
$modversion['sub'][1]['name'] = _MI_WSFORMATION_USERMENU_ENS1;
$modversion['sub'][1]['url'] = "enseignants.php";
$modversion['sub'][2]['name'] = _MI_WSFORMATION_USERMENU_ENS2;
$modversion['sub'][2]['url'] = "enseignants.php";
$modversion['sub'][3]['name'] = _MI_WSFORMATION_USERMENU_ENS3;
$modversion['sub'][3]['url'] = "enseignants.php";
$modversion['sub'][4]['name'] = _MI_WSFORMATION_USERMENU_ENS4;
$modversion['sub'][4]['url'] = "enseignants.php";
} // ETUD
elseif ($permHandler->isUserInGroup($modversion['groupe_3']))
{
$modversion['sub'][1]['name'] = _MI_WSFORMATION_USERMENU_ETUD1;
$modversion['sub'][1]['url'] = "etudiants.php";
$modversion['sub'][2]['name'] = _MI_WSFORMATION_USERMENU_ETUD2;
$modversion['sub'][2]['url'] = "etudiants.php";
$modversion['sub'][3]['name'] = _MI_WSFORMATION_USERMENU_ETUD3;
$modversion['sub'][3]['url'] = "etudiants.php";
...
}
La classe ? publicPerm.php :
if (!defined("XOOPS_ROOT_PATH")) {
die("XOOPS root path not defined");
}
class WSformationPublicPermHandler {
function &getHandler()
{
static $permHandler;
if(!isset($permHandler)) {
$permHandler = new WSformationPublicPermHandler();
}
return $permHandler;
}
/**
* retourne un booléen indiquant l'appartenance ou non d'un utilsateur à un groupe
* si ANONYMOUS retourne false
* @param chaine $group
* @return array() users of group
*/
function isUserInGroup($group) {
$userLogue = $GLOBALS['xoopsUser'];
$member_handler =& xoops_gethandler('member');
$groups = $member_handler->getGroups();
$count = count($groups);
// Groupe anonymous !
if (!is_object($GLOBALS['xoopsUser']))
return false;
for ($i = 0; $i < $count; $i++) {
$g_id = $groups[$i]->getVar('groupid');
if ($groups[$i]->getVar('name') === $group) {
$members = $member_handler->getUsersByGroup($g_id, false);
foreach ($members as $cle) {
$user =& $member_handler->getUser($cle);
if ($user->getVar("uname", "E") === $userLogue->getVar('uname'))
return true;
}
}
}
return false;
}
}
Et tout va bien, un menu pour chaque groupe et différent !
Cordialement,
Bruno