Il n'existe pas encore de fonctionnalité implémentée dans Joomla pour avoir des groupes d'utilisateurs personnalisés selon votre besoin. Vous êtes obligés de vous en tenir aux groupes par défaut, à moins d'utiliser JaCL (commercial), ce qui n'est pas toujours acceptable, dépendamment du projet.
Si vous utilisez Community Builder, et que vous souhaitez avoir différents groupes d'utilisateurs possédant chacun des onglets (et des champs, donc) propres à eux, il existe une solution.
Il est possible d'attribuer un onglet spécialement à un groupe d'utilisateurs; il suffit de répartir judicieusement les champs de profiles selon les onglets, pour pouvoir afficher ou ne pas afficher un onglet, dépendament du groupe auquel appartient l'utilisateur.
Cet article vous montre comment appliquer un hack manuel à Joomla 1.5.x pour permettre l'utilisation de groupes différents et personnalisés pour Community Builder.
Je préfère vous conseiller dès maintenant de faire des copies de sauvegarde de tous les fichiers que vous allez modifier, car c'est vraiment de la bidouille!
Les versions de Joomla et CB utilisées pour l'exemple sont Joomla! 1.5.9 et Community Builder 1.2 RC4.
<!--tableofcontents-->
La première étape consiste à créer des groupes personnalisés dans Joomla. Pour le besoin de l'article, disons que nous réalisons un site pour une communauté comprenant deux groupes d'utilisateurs : des employeurs et des personnes qui cherchent un emploi.
Cette unique partie est tirée de la documentation Joomla, réintégrée ici dans le souci de faire un tutoriel vraiment complet (ne suivez cependant pas les instruction sur la page de documentation, elles ne sont plus à jour).
Le bidouillage commence en force ici : il faut modifier la base de données, puis exécuter un script pour la restructurer correctement. Je n'expliquerai ici pas trop comment fonctionne la table qui contient les groupes d'utilisateurs dans Joomla; je me bornerai à expliquer comment la modifier à notre guise.
Accédez à votre base de données (avec l'outil PHPmyAdmin dans mon cas). Trouvez la table des groupes, qui s'apelle « jos_core_acl_aro_groups ». Par défaut, le préfixe de table est « jos », mais vérifiez cette information et remplacez le préfixe « jos » par le vôtre s'il est différent. Dans tous les exemples nous utiliserons « jos » comme préfixe; n'oubliez pas de le changer partout!
Donc dans PHPmyAdmin, j'accède à la table « jos_core_acl_aro_groups ». Cette table contient tous mes groupes d'utilisateurs. Nous allons donc insérer deux nouveaux groupes : un pour les employés et un pour les employeurs (ou ce qui vous conviendra). Ce qui est important, c'est de correctement spécifier comme parent_id le id du groupe d'utilisateurs parent. Dans notre cas, ce sera simplement Registered (id : 18). Donc nous insérons ces deux groupes, en spécifiant uniquement le parent_id.
Nos groupes sont insérés, mais incorrectement hiérarchisés car cette table utilise un système de hiérarchisation qui repose sur une borne gauche et droite (nombres), qui selon certains calculs permettent de spécifier quel groupe est imbriqué dans quel groupe. Pas de panique : on a un script pour regénérer les bonnes bornes pour nos deux nouveaux groupes.
Créez un fichier nommé rebuild.php, placez-le à la racine de votre site Joomla, en mettant ceci dedans :
...en changeant bien sûr « NOM_DUTILISATEUR », « MOT_DE_PASSE_BD » et « NOM_DE_LA_BD » par le nom d'utilisateur, le mot de passe et le nom de la BD.
Lancez le script dans votre navigateur, en accédant la page rebuild.php. Normalement, vous ne devriez rien remarquer, le script n'écrit aucune confirmation (donc une page blanche). Allez vérifier de quoi ça a l'air dans la base de données si vous comprenez un peu le système de structure hiérarchique des groupes, sinon faites-vous confiance et passez à l'étape suivante.
Un indice : normalement vos deux nouveaux groupes devraient maintenant avoir une nouvelle valeur, autre que zéro, pour les colonnes « lft » et « rgt ». Sinon, je crois bien que vous avez dû mal spécifier les informations de connexion à la base de données, ou bien vous avez mal changé les noms des tables dans les requêtes.
Un autre bon moyen de vérifier si tout est en ordre serait de vous rendre dans la Gestion des utilisateurs (Administration Joomla), sélectionnez un utilisateur et vérifiez que vous pouvez lui attribuer les groupes personnalisés que vous venez de créer.
Le principe est simple : Il est possible, dans Community Builder, d'attribuer un groupe d'utilisateurs à un onglet.
Pour continuer l'exemple, rendez-vous dans la page composant de Community Builder, cliquez sur Tab Management et créez deux nouveaux onglets :
« Historique d'entreprise » : Attribuez cet onglet au groupe « Employeur », et n'oubliez pas de le publier.
« Expériences d'emploi » : Attribuez cet onglet au groupe « Employé », et n'oubliez pas de le publier.
Chaque groupe d'utilisateur personnalisé possède maintenant un onglet juste pour lui. Comme les onglets ne s'afficheront pas s'ils ne contiennent pas de champs, allez maintenant dans Field Management, et créez pour chacun de ces deux nouveaux onglets un champs (du même nom que l'onglet, on va dire), en n'oubliant pas de les placer chacun d'eux dans l'onglet correspondant.
Il est maintenant temps de s'attaquer à une problématique plutôt désagréable. Nous avons certes créé les deux groupes personnalisés d'utilisateurs, mais il n'existe en réalité dans Joomla que 3 niveaux d'accès : « publique », « enregistré » et « spécial ». Ces niveaux s'embriquent, c'est à dire que l'utilisateur « spécial » possède aussi les droits de l'utilisateur « enregistré ». Ça nous cause un certain problème, car nous souhaitons, dans cet exemple, que chaque utilisateur ait ses propres onglets, sans aucun mélange!
Par exemple, l'employeur possède dans son profil un onglet pour décrire l'historique de son entreprise, mais l'employé n'a pas besoin de cet onglet! Forcément, l'un des deux groupes aura plus de droits que l'autre, il faut donc trouver un moyen de les rendre réellement indépendants l'un de l'autre.
Il existe une solution un peu « broche à foin » : il faut appliquer un hack aux fichiers de Community Builder pour que les onglets soient réellement bien répartis. C'est maintenant que la chirurgie à coeur ouvert commence, n'oubliez pas de faire une copie de sauvegarde du fichier avant toute modification! Les numéros de ligne de code sont donnés pour la version CB 1.2 RC4, si vous possédez une version antérieure, recherchez les mêmes lignes mais leur emplacement peut avoir changé. Il y aura trois remplacements à faire, notez que nous laissons l'ancienne ligne en commenté dans le fichier.
Ouvrez le fichier [VOTRE SITE]/administrator/components/com_comprofiler/comprofiler.class.php
Cherchez cette ligne de code (ligne 3036) :
Remplacez-là par ceci :
Cherchez cette ligne de code (ligne 3493) :
Remplacez-là par ceci :
Cherchez cette ligne de code (ligne 3550) :
Remplacez-là par ceci :
Ça y'est, votre fichier est correctement patché!
Donc si vous faites un test en créant un utilisateur pour chaque groupe d'utilisateurs, chaque compte utilisateur devrait normalement avoir son onglet personnalisé dans son profil.
Maintenant que l'affichage de champs personnalisés pour des groupes d'utilisateurs personnalisés fonctionne, il faut s'attaquer à un autre problème : comment faire pour distribuer automatiquement les bons groupes aux bons utilisateurs?
En les laissant choisir!
Fort heureusement pour nous, il existe un plugin pour ça : CB JLS Group Selection, créé par Jorge Luis Savoini. Attention, ce plugin fonctionne uniquement pour Community Builder 1.2 RC3 !
Après avoir téléchargé le plugin, installez-le (au bas de la page Plugin Management du composant Community Builder).
Dans Field Management, créez un nouveau champs appelé précisément « cb_usertype », de type « Drop Down (Single Select) »). Entrez deux valeurs, soit les noms exacts de vos deux groupes, dans notre exemple « employe » et « employeur ».
Cliquez sur le plugin (JLSGroupSelector) dans la liste de la page Plugin Management pour le configurer.
Maintenant qu'il est possible pour tout le monde d'accéder à la configuration du plugin JLS Group Selection, assurez-vous que le plugin est bien publié ET activé (enabled).
Il vous suffit de demander obligatoirement à l'utilisateur de répondre au champ « cb_usertype » à l'enregistrement pour le forcer à choisir son groupe!
Voilà, c'est tout! C'est bien complexe pour quelque chose qui devrait pourtant être très simple...
J'aimerais remercier Jorge Luis Savoini pour l'aide qu'il m'a apporté afin de solutionner le problème dont est sujet cet article, et pour son plugin très utile!
Commentaires
bonjour (bonsoir
bonjour (bonsoir plutot),
D'abord un grand merci a l'auteur de ce topic qui et fort sympatique ^^ (et aux personnes qui l'on commenté pour les manips suivant les differante version de CB et JLS)
Me reste quand meme une petite question... es t il possible de faire en sorte que le champ cb_usertype rajouter sur le formulaire d'inscription soit directement mise a jour par une variable passer en paramettre?
Je m'explique j'ai une page d'accueil "sans" le block login et j'ai 3 entrée (groupe) distincte : Etudients, Entreprises et Etablisements j'affiche donc le formulaire d'inscription avec un lien genre
J'imagine qu'il faut gratouiller dans les source de CB pour que le champ soit directement mit a la bonne valeur mais je vois pas trop où.
D'avance merci de l'aide que vous pourrez m'aporter.
Il faut modifier
Il faut modifier cb.jls_regroup.php pour éviter le mode legacy dans joomla.
modifier la ligne ou commenter
et ceci
la ou il y a le // ce son les anciennes lignes
Aprés le plugin ne vous fera plus de soucis avec joomla 1.5
Bonjour, j'ai suivi votre
Bonjour, j'ai suivi votre manip et je tiens a remercier l'auteur du tuto car il m'a bien dépanné.
Je suis juste à la recherche d'une ultime résolution de pb:
J'ai donc créé plusieurs groupes et sous groupes d'utilisateurs. cependant, j'aimerais faire en sorte que tel groupe ait le droit a tels element de menu (ex forum) et d'autres non.
Seulement la gestion ds elemens de joomla ne laisse pas le choix a part enregistré, public ou spécial.
Je suppose que c'est une condition php qui est a effectuer mais je ne sait comment et ou réaliser cela.
Merci d'avance à tous ceux qui voudront bien se pencher sur mon problème, ça devrait en aider beaucoup...
Bonjour, j'ai suivi votre
Bonjour, j'ai suivi votre manip et je tiens a remercier l'auteur du tuto car il m'a bien dépanné.
Je suis juste à la recherche d'une ultime résolution de pb:
J'ai donc créé plusieurs groupes et sous groupes d'utilisateurs. cependant, j'aimerais faire en sorte que tel groupe ait le droit a tels element de menu (ex forum) et d'autres non.
Seulement la gestion ds elemens de joomla ne laisse pas le choix a part enregistré, public ou spécial.
Je suppose que c'est une condition php qui est a effectuer mais je ne sait comment et ou réaliser cela.
Merci d'avance à tous ceux qui voudront bien se pencher sur mon problème, ça devrait en aider beaucoup...
Bonjour, Merci pour ces
Bonjour,
Merci pour ces informations très utiles.
Toutefois, est-il possible de définir les paramètres de CB ou Joomla afin que lorsqu'un utilisateur s'enregistre il fasse automatiquement parti d'un de ces nouveau groupe?
Merci d'avance.
germain
Bonne question, je pense
Bonne question, je pense qu'il faudra trafiquer un peu dans le formulaire de CB pour ça ...
Concernant mon dernier
Concernant mon dernier commentaire relatant un dysfonctionnement sous Joomla! 1.5.15, il s'agissait en fait d'un problème causé par GMAccess qui "hacke" les fichiers natifs de Joomla et notamment celui-ci :
"/administrator/components/com_users/views/user/view.html.php"
(plus d'info ici http://www.eduvs.ch/gmaccess/index.php?option=com_agora&task=viewtopic&i... )
Cordialement,
Thierry
Merci pour votre complément
Merci pour votre complément de réponse! :)
Bonjour, merci pour votre
Bonjour, merci pour votre tuto très explicite.
Malheureusement, sous Joomla 1.5.15, les groupes créés avec cette méthode n'apparaissent pas dans la liste permettant de sélectionner un groupe pour un utilisateur (il n'y que les groupes natifs). La table "jos_core_acl_aro_groups" a bien été modifiée avec le script php et j'ai bien fait la modification dans le fichier administrator/components/com_users/views/user/view.html.php comme indiqué sur le site http://docs.joomla.org/Custom_user_groups mais sans résultat...
Par contre, les nouveaux groupes apparaissent bien sous Community Builder 1.2 (???)
Cordialement,
Thierry
Bonjour, PB cb.jlsgroup
Bonjour,
PB cb.jlsgroup !!!
J'ai fait tous les manips, mais j'arrive pas à avoir à l'enregistrement l'utilisateur lorsqu'il sélectionne un groupe, par exemple employeur, qu'il soit connecté comme employeur.
Càd que j'arrive pas à configurer le plugin cb.jlsgroup ou le plugin "update" pas le(s) table(s) correspondant(es).
Help me please!
cordialement.
Ma question est chiante je
Ma question est chiante je sais mais est-ce que le plugin est bien activé?
bonjour, après avoir créé le
bonjour,
après avoir créé le fichier, je l'appel depuis le navigateur et là il me dit :
Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'xxxxxxx'@'localhost' (using password: YES) in /xxxxxx/xxxxx/xxxx/xxxx/rebuild.php on line 2
Could not connect: Access denied for user 'xxxxxx'@'localhost' (using password: YES)
cet utilisateur est pourtant unique et dispose de tous les droits.
Je ne comprends pas
Merci
Salut, Vérifie que c'est le
Salut,
Vérifie que c'est le bon mot de passe et le bon nom de table. C'est certain que c'est un de ces trois problèmes-là
Hello quel est le 3ème
Hello
quel est le 3ème problème? car j'ai le même problème et vérifier identifiant et nom de table et tout est OK
Bonjour j'ai le même problème
Bonjour j'ai le même problème que toi crony mais je n'arrive pas à le résoudre même en prenant "noixacl" aucun changement, les listes sont vides sans être logué et pleine en l'étant. Quelqu'un pourrait m'aider svp?
Salut je voudrais savoir
Salut je voudrais savoir comment avez vous fait pour résoudre le problème Warning: Invalid argument supplied for foreach() in ...\htdocs\components\com_com profiler\comprofiler.php on line 1123?
J'ai aucun utilisateurs affiché lorsque je ne suis pas connecté mais lorsque je le suis ils sont là!
J'ai essayé avec noixacl mais toujours le même problème.
Je n'arrive pas à exécuter le
Je n'arrive pas à exécuter le script, je trouve dans les champs lft et rgt les valeurs initiales 0 et 0, pourtant j'ai bien vérifié tout le processus.
info : nom d'utilisateur je ne sais pas si c'est : root ou root@localhost et je n'ai pas de mot de passe pour acceder à la BDD
Merci de votre assistance
Salut, Tu as obligatoirement
Salut,
Tu as obligatoirement besoin du mot de passe... tu dois renseigner ces champs sans quoi tu ne peux modifier la base de données
Bonjour, J'ai un souci. Je
Bonjour,
J'ai un souci. Je n'arrive pas à modifier un users dans CB depuis le back office. Je modofie un profil par ex. et quand je clique sur Save, rien ne se passe...A l'aide!
Merci d'avance pour vos réponses et bravo guy pour le tuto.
Bonjour Pascal, J'ai le même
Bonjour Pascal,
J'ai le même problème sur CB.
Avez-vous trouvé une solution?
Merci d'avance
Claude
As-tu trouvé une solution,
As-tu trouvé une solution, j'ai le même problème que toi, j'ai besoin de laisser gérer les utilisateurs à un administrateur et non un super admin. et lorsque il est connecté il ne peut ni ajouter de fiches ni en modifier (bouton save inactif).
Merci
Hum, c'est bizarre... ton
Hum, c'est bizarre... ton javascript est bien activé ?(il me semble que le système de boutons dans joomla en dépent, toutefois pas certain)
Salut, J'ai essayé ton hack
Salut,
J'ai essayé ton hack sur un joomla 1.0.15. Vu que ca n'a pas l'air d'avoir fonctionné, je me demandais si ce code était réservé à Joomla 1.5...
malheureusement, cela ne
malheureusement, cela ne fonctionne pas avec J1.0.x, seulement J1.5.x. Pourquoi tu ne migres pas vers J1.5.9, ça vaut le coup maintenant
merci pour ce tutoriel qui
merci pour ce tutoriel qui est vraiment détaillé
j'ai une question: est ce qu'on peut créer des formulaires d'inscriptions propres à chaque groupe avec des champs distincts pour chaque groupe?
Salut! Je crains que non,
Salut! Je crains que non, mais tu devrais mettre à l'enregistrement des champs communs à chaque groupe (nom, email etc.), et dans leur profile, tu leur met des champs obligatoires personnalisés à chacun. Il s'agirait d'un autre Hack un peu plus complexe, pour faire ce que tu demande (à la page d'inscription).
Bonjour, Super astuce, qui
Bonjour,
Super astuce, qui fonctionne très bien sous la dernière version également ( CB 1.2 stable).
Néanmoins, j'ai un souci avec les listes d'utilisateurs qui restent désespérément vides !
Celle que j'avais créée initialement, me renvois:
Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\components\com_com profiler\comprofiler.php on line 1123
Je me dis "normal, il faut la rééditer, puisque les groupes n'existaient pas..." Mais non...J'en crée une nouvelle, et elle reste vide également...
Je pense vraiment avoir suivi à la lettre les indications...Est ce que kkun d'autre aurait le problème ?
Alors en fait, cela viens
Alors en fait, cela viens bien du patch appliqué sur le fichier comprofiler.class.php
Le truc très étrange, c'est que lorsque je suis loggué, aucun problème, la recherche fonctionne bien, j'ai la liste de tous les utilisateurs.
Mais non loggué, impossible de lister les utilisateurs, et si le moteur de recherche est activé, j'ai l'erreur citée précédemment...
Ce ne doit pas être très gros comme souci, mais je ne vois pas comment corriger...
Salut, excuse-moi pour ma
Salut, excuse-moi pour ma réponse tardive. je suis présentement pas mal dans le jus pour divers trucs mais notamment après la migration de ce site je pourrais bien me pencher sur le problème (et ainsi mieux compléter ce tutorial) ... est-ce que tu as un besoin pressant?
Pas de problèmes, je suis sur
Pas de problèmes, je suis sur 25 trucs en même temps aussi ^^
Le soucis c'est de savoir si je peux vraiment utiliser ce hack, ou si je vais devoir passer par un composant type Juga pour la gestion des groupes...Ce qui m'ennuie pas mal...
Je continue de tester voir si je n'aurais pas loupé kk chose...Comme je te disais, c'est seulement lorsque je ne suis pas logué que le message d'erreur survient...
Pour info : J! 1.5.9 / CB 1.2 / SH404Sef / Joomfish 2.0.2 (oui je cherche les coups ;) )
En fait, je suis passé à
En fait, je suis passé à noixacl , et je peux gérer mes groupes et des droits d'accès simplement et de façon assez avancée!
http://extensions.joomla.org/extensions/access-&-security/frontend-acces...
Voilà :)
Salut Crony! Est-ce que ce
Salut Crony! Est-ce que ce composant permet de gérer les groupes personnalisés et tout? Car si oui... je crois bien que je vais fermer ce post et l'utiliser moi aussi! lol
Oui tu peux y aller, j'ai des
Oui tu peux y aller, j'ai des groupes personnalisés, ça marche impec ! (ça recrées bien les bons droits selon ce que tu sélectionnes comme "parent", j'ai regardé la table qui est remise à jour avec ton script rebuild.php (plus besoin de l'utiliser, mais je pense que tu devrais le laisser en ligne, c'est assez pratique, si on a fichu le bazard avec ça...)
Mais tu arrives à l'utiliser
Mais tu arrives à l'utiliser avec CB, attribuer des tabs spécifiques à un groupe, etc.?
Oui, ils sont visibles et
Oui, ils sont visibles et assignables dans tous les autres composants.
Les groupes sont ajoutés dans la table acl_groups comme les groupes de base :)
almost
almost forgotten...
http://extensions.joomla.org/extensions/extension-specific/community-bui...
ça peut aider aussi ;)
Commenter sur ce sujet :