Jak dohledat kurz, úkol a uživatele podle souboru v interním úložišti?

Jak dohledat kurz, úkol a uživatele podle souboru v interním úložišti?

autor Jan Blažek -
Počet odpovědí: 2

Dobrý den,

řeším situaci, kdy studenti nahráli do úkolu zavirovaný soubor, který byl odhalen a smazán AV programem v interním úložišti Moodle 2.6.6+ (takže znám jeho umístění: /var/lib/moodle/filedir/a0/c1/a2c5c2a9d420a37a1d6589cc419e823ddac4837b) a potřebuji dohledat, studenta, který soubor nahrál, kurz, úkol a čas (abych informoval studenta o smazání zavirovaného souboru a případně i vyučujícího daného kurzu dojde-li ke smazání na hranici časového limitu pro odevzdání úkolu). Mám přístup samozřejmě i k databázi, takže ideální by bylo z hashe souboru v umístění přes dotaz do DB najít informace, které potřebuji. Poradíte mi, prosím, jak na to?

Děkuji.





Počet hodnocení: -
V odpovědi na Jan Blažek

Re: Jak dohledat kurz, úkol a uživatele podle souboru v interním úložišti?

autor David Mudrák -
Obrázek: Moodle HQ Obrázek: Obzvláště nápomocní moodlisté Obrázek: Překladatelé Obrázek: Vývojáři

Dobrý den.

Předně, je to opravdu .../filedir/a0/c1/a2c5c2a9d420a37a1d6589cc419e823ddac4837b ? Ty dva adresáře, ve kterých jsou soubory ve filedir uloženy, vždy kopírují první znaky názvu souboru (kvůli lepší distribuci souborů). Takže by to mělo být v adresáři .../filedir/a2/c5/a2c5c2....

V každém případě, znáte-li jméno souboru, zjistíte další informace z databáze:

SELECT * FROM mdl_files WHERE contenthash = 'a2c5c2a9d420a37a1d6589cc419e823ddac4837b';

Získáte všechny lokace, kde je daný soubor použit. Zajímají vás asi nejvíce údaje contextid, component, userid a timecreated. Dohledat daný úkol (pokud byl soubor opravdu odevzdán prostřednictvím úkolu) můžete přes získané contextid:

SELECT * FROM mdl_context WHERE id = ... AND contextlevel = 70;

Z vrácených údajů vás zajímá instanceid, to je id modulu z tabulky mdl_course_modules. Pokud jste si jist, že se jedná o úkol, je to ten úkol, na který se díváte přes URL /mod/assign/view.php?id=... (pozor, nejedná se o id v tabulce mdl_assign).

V odpovědi na David Mudrák

Re: Jak dohledat kurz, úkol a uživatele podle souboru v interním úložišti?

autor Jan Blažek -

Dobrý den, Davide.

S názvem souboru máte úplnou pravdu. Do fóra jsem nakopíroval špatné jméno souobru (vůči adresářům), ale po přečtení Vaší odpovědi jsem všechny reportované soubory kontroloval a adresáře vždy souhlasí s prvními 4 znaky v názvu souobrů.

Co se týče dotazů do DB, tak moc děkuji! Je to přesně to, co potřebuji. úsměv

A věřím, že se to může ještě někomu hodit a tak přidávám úplný příklad postupu:

SELECT * FROM `mdl_files` WHERE `contenthash` LIKE 'a2c5c2a9d420a37a1d6589cc419e823ddac4837b';

mdl_files.contextid = 39774

SELECT * FROM `mdl_context` WHERE id LIKE '39774' AND contextlevel = 70;

mdl_context.instanceid = 35412

SELECT * FROM `mdl_course_modules` WHERE id LIKE '35412';

URL úkolu: /mod/assign/view.php?id=35412

mdl_course_modules.course = 401

SELECT * FROM `mdl_course` WHERE id LIKE '401';

mdl_course.fullname -> Úplné jméno kurzu