Quiz 5 — Expert & carrière
⏱️ TL;DR — 20 questions sur la sécurité, la qualité, la publication et la monétisation (Parties 11 & 13). Réponds de tête, puis déplie.
1. require_login vs require_capability : quelle différence ?
Réponse
require_login dit « connecté et accès au cours/activité » ; require_capability dit « autorisé (droit) dans ce contexte ». Les deux sont nécessaires.
2. Quand utiliser s(), format_string() et format_text() ?
Réponse
s() = texte simple échappé ; format_string() = noms/titres (échappe + filtres) ; format_text() = contenu riche HTML (nettoie + filtres + fichiers). On échappe à la sortie.
3. Comment interroger la base avec un paramètre utilisateur en sécurité ?
Réponse
Via le DML paramétré (get_record($t, ['id'=>$id])) ou get_records_sql($sql, $params) avec des placeholders. Jamais de concaténation dans une requête.
4. À quoi sert clean_param ?
Réponse
À appliquer un type PARAM_* à une valeur déjà en main (issue d’un calcul, d’un WS). Complète required_param. On type toute donnée douteuse.
5. Le privacy provider est-il optionnel ?
Réponse
Non, si le plugin stocke des données perso : le Privacy API (metadata + export + suppression) est obligatoire pour la conformité RGPD et la publication.
6. Qu’est-ce que « moodle-cs » vérifie ?
Réponse
Le coding style (PHP_CodeSniffer) : indentation, nommage, PHPDoc, en-tête GPL, fonctions interdites, patterns de sécurité. Vise zéro erreur avant publication.
7. Comment teste-t-on la logique d’un plugin ?
Réponse
Avec PHPUnit (framework intégré : advanced_testcase, générateurs de données, resetAfterTest). Filet contre les régressions.
8. À quoi sert Behat ?
Réponse
À tester les parcours utilisateur dans un navigateur (scénarios Gherkin Given/When/Then). Vérifie l’UX de bout en bout.
9. Pourquoi le backup/restore d’un module est-il critique ?
Réponse
Parce qu’un mod qui ne se sauvegarde pas correctement perd les données des utilisateurs à la restauration. C’est la partie la plus négligée et la plus testée en review.
10. Quel levier de performance côté Moodle ?
Réponse
Le cache (MUC — Moodle Universal Cache) pour éviter de recalculer, plus des requêtes DML efficaces et un cron correct. Query-profiling pour repérer les requêtes lourdes.
11. Qu’exécutent les tâches planifiées, et de quoi dépendent-elles ?
Réponse
Nettoyage, envois, calculs, sauvegardes… Elles supposent un cron système qui appelle admin/cli/cron.php régulièrement. Sans cron, « rien ne se passe » en arrière-plan.
12. Que vérifie la review du Moodle plugins directory ?
Réponse
Sécurité, coding style, i18n, privacy, backup/restore, absence de core hack, licence GPL. Publier = passer cette revue (Partie 11).
13. Pourquoi la double compétence Moodle × Next.js est-elle rare ?
Réponse
Peu de devs maîtrisent à la fois le cœur PHP de Moodle et le web moderne (React, headless, LTI). Ce pont (web services + outil LTI Next.js) se facture cher.
14. En freelance, TJM ou forfait au début ?
Réponse
TJM : il protège ton temps pendant la montée en maîtrise. Le forfait vient plus tard, quand tu sais estimer un type de mission sans risque.
15. Différence entre une mission et un produit récurrent ?
Réponse
La mission est consommable (temps = revenu, puis fini) ; le produit est un actif qui s’additionne à chaque client (MRR). Le produit découple revenu et temps.
16. Quel modèle pour QuizLab (outil LTI) ?
Réponse
Un micro-SaaS : outil LTI multi-tenant + abonnement par établissement/quotas. Standard LTI = portabilité (tout LMS), donc revenu récurrent (Partie 13).
17. La GPL de Moodle empêche-t-elle de gagner de l’argent ?
Réponse
Non : elle porte sur la licence du code, pas sur le revenu. On vend le service (SaaS hébergé, support, développement) — d’où l’intérêt du SaaS/LTI (valeur sur ton infra).
18. En CDD, peut-on cumuler une micro-entreprise (FR) ?
Réponse
Généralement oui, sous conditions (clause d’exclusivité/loyauté, secteur non concurrent, hors temps de travail). À vérifier au cas par cas — ce n’est pas un conseil juridique.
19. Pourquoi les web services sont-ils un « pont de valeur » ?
Réponse
Ils ouvrent Moodle à des fronts modernes (Next.js), apps mobiles, systèmes tiers. Brancher Moodle sur du moderne est une compétence recherchée et bien payée.
20. Résume les réflexes de sécurité en une phrase.
Réponse
Vérifier l’accès (require_login + require_capability), assainir l’entrée (PARAM_*), échapper la sortie (s/format_*), protéger les actions (sesskey). Non négociable.
🎓 Fin des quiz Moodle. Si tu scores > 70 % partout, tu maîtrises le cours. Sinon, chaque quiz raté pointe la partie à relire. Retour à la vue d’ensemble des quiz ou aux projets guidés.