Requête SQL pour trouver un cours si je "connais" l'id d'une ressource

Re: Requête SQL pour trouver un cours si je "connais" l'id d'une ressource

par Bruno Malaval,
Nombre de réponses : 7
Avatar Moodleurs particulièrement utiles

Je n'ai pas étudié complètement l'API fichiers, mais globalement pour la question du contexte :

Il y a bien une table 'mdl_context'
Si je reprends ton exemple :
https://moodle.enm-toulouse.fr/pluginfile.php/113264/mod_resource/content/17/audio.html

tu devrais trouver dans la table des contextes :

mdl_context.id = 113264
mdl_context.contextlevel = 70 (càd un contexte de type MODULE , voir le fichier lib/accesslib.php)
mdl_context.instanceid = xxx , id de l'instance

Pour instanceid, vu qu'il s'agit d'un module, il faut chercher cet id dans mdl_course_modules.id
(s'il s'agissait d'un contexte de type COURSE, instanceid serait l'id d'un cours dans la table mdl_course)

mdl_course_modules.id = xxx
mdl_course_modules.module = 17 (Ressource , cf mdl_modules)
mdl_course_modules.instance = yyy

Et pour finir,

mdl_course_modules.instance = mdl_resource.id 

puisqu'il s'agit d'une ressource

Tout cela , c'est pour l'environnement de la ressource
Maintenant, tu peux retrouver directement le fichier dans la table mdl_files , en cherchant le contextid (113264) directement dans mdl_files.contextid

On retrouve dans la table les informations de l'URL .../mod_resource/content/ respectivement dans les champs component et filearea
Par contre, pour l'élément "arbitrary" (17 dans l'URL), je ne sais pas. Il semble qu'en changeant ce nombre, l'accès est identique.... à voir donc

Après, si le document est visible dans la section d'un cours, il est possible d'utiliser directement le lien vers ce document, qui serait de la forme :
https://moodle.enm-toulouse.fr/mod/resource/view.php?id= <instanceid>

J'ai essayé d'être clair, mais je ne me sentais pas de faire un schéma, désolé

PS : Possible de remplacer les tagadas par un ti'punch ?
on a beau être de grand enfants, je préfère les produits naturels : Citron-Rhum-Sucre (CRS pour les intimes 😁)

Bruno

Moyenne des évaluations Utile (3)
En réponse à Bruno Malaval

Re: Requête SQL pour trouver un cours si je "connais" l'id d'une ressource

par Franck Pithois,
Bonjour Bruno,
pour les CRS, il y a moyen de s'arranger, j'en connais de Guyane clin d’œil

Merci pour ton aide, j'ai réussi à aboutir !
Voici la requête opérationnelle,
"
SELECT
cx.id AS 'id du contexte',
cx.instanceid AS 'id de la ressource',
c.id AS 'id du cours hébergeant',
CONCAT('',c.fullname,'') AS 'lien cours'
FROM prefix_context AS cx
INNER JOIN prefix_course_modules AS cm ON cm.id = cx.instanceid
INNER JOIN prefix_course AS c ON c.id = cm.course
WHERE cx.id = 113264 #(c'est l'id du contexte récupéré dans l'url externe de la ressource URL)
"

Je ne sais pas si elle servira mais je vous laisse la verser dans la bibliothèque qui va bien.

Encore merci pour ton aide !
Amicalement.
Franck
En réponse à Franck Pithois

Re: Requête SQL pour trouver un cours si je "connais" l'id d'une ressource

par Franck Pithois,
Rebonjour !
Une dernière chose, j'aimerais récupérer le nom de la ressource associée au module (résultat du context.instanceid)
J'essaie de passer par la table ressource mais je n'ai pas trouvé de lien entre les tables course_modules, context et ressources...
Merci si vous avez encore une petite piste ! J'ajoute des citrons verts !
Amicalement.
Franck
En réponse à Franck Pithois

Re: Requête SQL pour trouver un cours si je "connais" l'id d'une ressource

par Bruno Malaval,
Avatar Moodleurs particulièrement utiles
En fait si
le nom de la ressource (nom affiché dans le cours) est dans la table mdl_resource.
le lien se fait par :
mdl_course_modules.instance = mdl_resource.id
donc pour la requête, cela donnerait :

SELECT
cx.id AS 'id du contexte',
cx.instanceid AS 'id de la ressource',
r.name AS 'nom de la ressource',
c.id AS 'id du cours hébergeant',
CONCAT('',c.fullname,'') AS 'lien cours'
FROM prefix_context AS cx
INNER JOIN prefix_course_modules AS cm ON cm.id = cx.instanceid
INNER JOIN prefix_course AS c ON c.id = cm.course
INNER JOIN prefix_resource AS r ON r.id = cm.instance
WHERE cx.id = 113264

Pour le guyanais, si c'est "La belle C....." (Loi Evin oblige, pas de nom)  alors oui, il est vraiment excellent

Bruno
Moyenne des évaluations Utile (2)
En réponse à Bruno Malaval

(désolé) Requête SQL pour trouver un cours si je "connais" l'id d'une ressource

par Luiggi Sansonetti,
Avatar Développeurs de plugins Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Titulaires du Moodle Course Creator Certificate Avatar Traducteurs
Pour le guyanais, si c'est "La belle C....." (Loi Evin oblige, pas de nom) alors oui, il est vraiment excellent

"Evin, Eveux, Evrois zéro..."
(désolé...)
Moyenne des évaluations Utile (1)
En réponse à Luiggi Sansonetti

(désolé) Requête SQL pour trouver un cours si je "connais" l'id d'une ressource

par Franck Pithois,
grand sourire
Ca, c'est parce que tu as fait du vélo : Sans les pieds !!! Puis Sans les mains !!! Et puis.... "fan les dents "...
Oui... je sais... je sors avec Luiggi.
En réponse à Bruno Malaval

Re: Requête SQL pour trouver un cours si je "connais" l'id d'une ressource

par Franck Pithois,
Bonjour Bruno !
Alors là ! Double dose, avec modération (d'habitude, on ne dira pas...)
Un très grand merci à toi !
Cela fonctionne parfaitement. Ta requête mérite d'être versée dans la librairie ad-hoc de Moodle.
Très bonne journée à tous.
Amicalement.
Franck