Bonjour, je voudrais ajouter un lien dans le menu "Administration du cours". Quelle est la façon la plus "propre" de réaliser ceci ?
Ma question n'est peut être pas assez précise. La version de moodle sur laquelle je travaille est la 2.4.1
Je veux ajouter un lien vers la page d'assignation des rôles dans un cours pour les utilisateurs qui ont le rôle "manager" :
/admin/roles/assign.php?contextid=<???>
Ce lien manque beaucoup aux administrateurs fonctionnels (je ne comprends d'ailleurs pas pourquoi il n'apparaît plus directement dans le menu administration du cours). Si quelqu'un daigne m'expliquer, j'aimerais compredre ...
J'ai pensé à créer un bloc HTML mais je ne sais pas comment récupérer la valeur de la variable php $contextid.
Il faut peut-être que j'aille directement modifier le php, ce qui ne me plaît guère et dans ce cas quelqu'un peut-il m'indiquer où aller regarder.
Merci d'avance
bonjour
je vais essayer de comprendre.
je suis en 2.4 et quand je prends le rôle Manager, j'ai la vue suivante du bloc réglage quand je suis dans un espace de cours:
après, que souhaitez vous faire ?
le manager atttribue un rôle à un utilisateur inscrit ?
le manager prend le rôle de...
?
Il semble que je ne soit vraiment pas claire ... je vais essayer de faire mieux ...
Je veux que les utilisateurs, qui ont le rôle "manager", aient accès à cet écran pour chaque cours d'une manière simple (lien dans un menu ça me paraît bien comme en version 1.9).
En version 1.9, mes utilisateurs ont l'habitude d'utiliser le lien "Attribution des rôles" dans le menu "Administration" du cours comme ceci :
bon, je comprends mieux.
à priori, sur ma version, par défaut on ne peut pas, il faut aller dans utilisateur puis donner le rôle qu'on veut pour chacun...
donc oui, plus fastidieux qu'avant.
je vais continuer à chercher pour voir mais je ne suis pas sûr que ce soit plus rapide
à voir si d'autres trouvent...
bon week end
Merci beaucoup pour l'aide, je me sens moins seule .
Je crois avoir bien cherché et le lien n'apparaît dans aucun menu. Et pourtant la page existe, c'est "/admin/roles/assign.php?contextid=<context id du cours>". D'où mon idée d'ajouter ce lien moi-même. Mais je voudrais le faire le plus "proprement" possible.
Bonjour,
Je n'ai pas les compétences pour résoudre votre problème de départ : "je voudrais ajouter un lien dans le menu "Administration du cours".
Mais si l'administrateur ou un manager au niveau système veut "assez rapidement" récupérer la valeur $contextid, il peut faire:
Bloc "Réglages"-> Réglages de mon profil -> Rôles -> Rôles de cet utilisateur
Ainsi, à condition que l'administrateur ou manager se soit donné au moins un rôle dans le cours, il peut récupérer le contextid associé à chaque cours (voir copie d'écran ci-dessous).
Mais si vous avez accès à la base de données, en récupérant l'id des cours dans la table mdl_course puis en vous rendant dans la table mdl_context, vous pouvez récupérer le contextid pour chaque cours.
Les trois lignes surlignées en jaune donnent les contextid correspondants aux trois cours dont les id sont 13, 14 et 15.
Christian
id |
contextlevel |
instanceid |
path |
depth |
1 |
10 |
0 |
/1 |
1 |
2 |
50 |
1 |
/1/2 |
2 |
3 |
40 |
1 |
/1/3 |
2 |
4 |
30 |
1 |
/1/4 |
2 |
5 |
30 |
2 |
/1/5 |
2 |
9 |
80 |
4 |
/1/9 |
2 |
10 |
80 |
5 |
/1/10 |
2 |
11 |
80 |
6 |
/1/11 |
2 |
12 |
80 |
7 |
/1/12 |
2 |
14 |
80 |
9 |
/1/14 |
2 |
47 |
70 |
12 |
/1/2/47 |
3 |
62 |
80 |
31 |
/1/2/62 |
3 |
63 |
80 |
32 |
/1/2/63 |
3 |
64 |
80 |
33 |
/1/2/64 |
3 |
395 |
50 |
13 |
/1/3/395 |
3 |
396 |
80 |
34 |
/1/3/395/396 |
4 |
397 |
80 |
35 |
/1/3/395/397 |
4 |
398 |
80 |
36 |
/1/3/395/398 |
4 |
399 |
80 |
37 |
/1/3/395/399 |
4 |
400 |
70 |
13 |
/1/3/395/400 |
4 |
401 |
70 |
14 |
/1/3/395/401 |
4 |
402 |
70 |
15 |
/1/3/395/402 |
4 |
403 |
70 |
16 |
/1/3/395/403 |
4 |
404 |
30 |
32 |
/1/404 |
2 |
405 |
30 |
33 |
/1/405 |
2 |
406 |
70 |
17 |
/1/3/395/406 |
4 |
410 |
50 |
14 |
/1/3/410 |
3 |
411 |
80 |
38 |
/1/3/410/411 |
4 |
412 |
80 |
39 |
/1/3/410/412 |
4 |
413 |
80 |
40 |
/1/3/410/413 |
4 |
414 |
80 |
41 |
/1/3/410/414 |
4 |
415 |
70 |
18 |
/1/3/410/415 |
4 |
425 |
50 |
15 |
/1/3/425 |
3 |
426 |
80 |
42 |
/1/3/425/426 |
4 |
J'ai réussi à avoir ce que je veux en modifiant : lib/enrolllib.php.
// Add assign or override roles if allowed
//if ($course->id == SITEID or (!empty($CFG->adminsassignrolesincourse) and is_siteadmin())) {
if (has_capability('moodle/role:assign', $coursecontext)) {
$url = new moodle_url('/admin/roles/assign.php', array('contextid'=>$coursecontext->id));
$permissionsnode->add(get_string('assignedroles', 'role'), $url, navigation_node::TYPE_SETTING, null, 'roles', new pix_icon('i/assignroles', ''));
}
//}
Bonjour,
Il est possible de faire cela sans toucher au code de Moodle. Pour être plus précis, pour un de nos plugins nous avons ajouté un lien dans le menu Réglages. Nous n'avons cependant pas cherché à le mettre dans un sous-menu déjà existant comme vous l'avez fait.
Si cela vous intéresse, j'ai fait un "mini-plugin" qui ajoute simplement le lien "Rôles attribués" dans le menu Réglages (à la fin du menu par contre).
Il suffit de décompresser le dossier "mymodule" du zip dans le dossier local de Moodle et d'installer le plugin en vous connectant en tant qu'admin.
J'ai repris votre code : le lien est affiché si l'utilisateur connecté a la permission "moodle/role:assign". J'ai mis l'icone "settings" car je n'ai pas trouvé celle que vous utilisez (je suis en 2.3.4).
Notes :
- j'ai testé ce plugin avec 2.3.4 (mais il devrait fonctionner avec tout Moodle 2.x)
- rappel : tout fichier lib.php d'un dossier de local est executé à chaque appel de page Moodle, n'y mettez pas du code trop lourd, mal écrit ou avec des erreurs au risque de bloquer votre site !
- lisez la documentation à propos des plugins locaux et le fichier /local/readme.txt
- je me rends compte que j'ai appelé cela "mymodule" alors qu'il s'agit d'un plugin. C'était pour l'exemple.
Ceci dit, attention au nom : le nom doit être en cohérence à différents endroits, notamment dans cet exemple :
> le nom du dossier ("mymodule")
> le nom de la variable component dans le fichier version.php doit correspondre à l'arborescence exacte : $plugin->component = 'local_mymodule'; // dossier local, sous dossier mymodule
> le nom de la fonction local_mymodule_extends_settings_navigation : local_mymodule_ reprends ici aussi l'arborescence exacte; _extends_settings_navigation permet de surcharger automatiquement le menu.
Pascal
Super ! Je suis novice en Moodle et je suis consciente que ma solution est loin d'être satisfaisante. Je vais tester votre solution dès que possible, d'autant plus que cela pourrait servir dans d'autre cas. Merci.