Créer des groupes personnalisés dans Joomla
La première étape consiste à créer des groupes personnalisés dans Joomla. Pour le besoin de cette manipulation, disons que nous réalisons un site pour une communauté comprenant deux groupes d'utilisateurs : des employeurs et des personnes qui cherchent un emploi.
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 ). 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 :
<?php
mysql_connect("localhost", "NOM_DUTILISATEUR_BD", "MOT_DE_PASSE_BD") or
die("Could not connect: " . mysql_error());
mysql_select_db("NOM_DELA_BD");
// 0-> parent_id in Joomla this is the value of the parent_id field of the Root record
// 1-> start the left tree at 1
rebuild_tree ( 0 , 1);
function rebuild_tree($parent_id, $left) {
// the right value of this node is the left value + 1
$right = $left+1;
// get all children of this node
$result = mysql_query('SELECT id FROM jos_core_acl_aro_groups '.
'WHERE parent_id="'.$parent_id.'";');
while ($row = mysql_fetch_array($result)) {
// recursive execution of this function for each
// child of this node
// $right is the current right value, which is
// incremented by the rebuild_tree function
$right = rebuild_tree($row['id'], $right);
}
// we've got the left value, and now that we've processed
// the children of this node we also know the right value
mysql_query('UPDATE jos_core_acl_aro_groups SET lft='.$left.', rgt='.
$right.' WHERE id="'.$parent_id.'";');
// return the right value of this node + 1
return $right+1;
}
?>