Fork me on GitHub

Rapport de message :*
 

Re: Menu utilisateur, différent suivant le groupe logué

Titre du sujet : Re: Menu utilisateur, différent suivant le groupe logué
par bguegan sur 17/05/2009 08:19:27

@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_idfalse);

                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
Propulsé avec XOOPS | Graphisme adapté par Tatane, Grosdunord, Montuy337513

59 Personne(s) en ligne (50 Personne(s) connectée(s) sur Forum) | Utilisateur(s): 0 | Invité(s): 59 | Plus ...