WP Manifestindependent plugin directory
manifest / content / ouinpo-suite

OuInPo Suite

Plugin WordPress modulaire pour l’enseignement NSI/SNT : exercices, compétences BO, flashcards, suivi élèves, sujets pratiques et IA pédagogique.

by OuInPo · github.com/archibogue/ouinpo-suite

0stars
0forks

Install

No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:

wp plugin install https://github.com/archibogue/ouinpo-suite/archive/refs/heads/main.zip

OuInPo Suite est un plugin WordPress destiné aux enseignants de NSI et de SNT.

Il propose un ensemble d’outils pédagogiques pour organiser des exercices, suivre la progression des élèves, gérer des compétences du programme, préparer des devoirs, utiliser des flashcards, attribuer des badges et, si l’enseignant le souhaite, activer certaines fonctions d’assistance par IA.

Statut

Version 0.7.9-beta : bêta technique enrichissant PataDesk avec le parcours guidé de traitement des demandes, les bilans Markdown et IA, et le nettoyage des tentatives. Elle conserve les groupes facultatifs au sein des classes et le centre d'entraînement NSI autonome. Elle ne doit pas être présentée comme une version stable. La recette WordPress/MySQL et la vérification visuelle responsive de PataDesk restent à effectuer sur le site cible.

Modules actifs par defaut sur une installation neuve : exercises et flashcards. Le module exercises est le socle et reste actif. Les autres modules, dont Gate, Submissions, SegFault, RechText et Projects, doivent etre actives volontairement depuis l'administration.

Pour commencer

Fonctionnalités principales

  • Banque d’exercices NSI / SNT
  • Classement par niveau, domaine, compétence et difficulté
  • Suivi de la progression des élèves
  • Gestion de classes et de groupes facultatifs pour partager les ressources avec une partie des élèves
  • Cycles pedagogiques et assistant de cloture annuelle non destructive
  • Badges pédagogiques
  • Flashcards de révision
  • Concepteur de devoirs
  • Sujets pratiques de type bac NSI
  • Suivi de projets BTS SIO avec Kanban et journal de bord via le module optionnel Projects
  • Simulation de tickets informatiques BTS SIO avec le module optionnel PataDesk (ticket_simulator)
  • Tableaux de suivi pour l’enseignant
  • Modules IA optionnels
  • Diagnostic d’installation

PataDesk — simulation de centre de services

Activer PataDesk dans OuInPo Suite → Réglages → Modules, puis ouvrir OuInPo Suite → PataDesk. Le module est désactivé par défaut et conserve ses données lorsqu'il est désactivé.

  1. Choisir Préparer le scénario de démonstration, sélectionner Publié, puis enregistrer.
  2. Ouvrir Affectations et affecter le scénario à un étudiant, une classe ou un sous-groupe existant.
  3. Créer une page contenant [ouinpo_ticket_simulator] (ou utiliser la création de pages de la Suite).
  4. L'étudiant ouvre son scénario et traite les tickets. Le professeur consulte les traces avec Observer.

Le scénario fourni, Le mystérieux export de Madame Boulier, comprend des questions utilisateur, du code pédagogique, des logs, des tests conditionnels, des échanges avec un DBA et une résolution documentée avec réouverture possible. Les tests sont simulés ; aucun code étudiant n'est exécuté sur WordPress.

Les ressources marquées modifiables proposent une console de correction : l'élève édite sa copie de l'extrait, l'enregistre et relance le test. La nouvelle démonstration utilise cette console pour ExportService.php. Les anciennes tentatives conservent leur scénario d'origine ; démarrer une nouvelle tentative sur la nouvelle démonstration pour utiliser ce parcours.

Guide d'édition, architecture et recette : docs/ticket-simulator.md. Contrôles isolés : php tools/check-ticket-simulator.php. La recette WordPress/MySQL et la vérification visuelle responsive sur le site cible restent nécessaires.

La page étudiant propose un Guide d'utilisation dépliable, également accessible dans les tickets. Côté professeur, Supprimer retire définitivement le scénario, ses affectations et toutes ses tentatives après confirmation ; Archiver conserve les traces.

Le bilan inclut aussi les conseils de SegFault sur les priorités et le diagnostic, si l'IA et les suggestions pédagogiques sont activées dans les réglages du site. En cas d'indisponibilité de l'IA, le bilan reste téléchargeable.

Dans une tentative, Télécharger mon bilan (.md) permet à l'élève de conserver un résumé de ses actions, échanges, notes, tests, code enregistré et résolution.

Pour accompagner le traitement des demandes (B1.2), l'éditeur propose un mode guidé par ticket : nature distincte de la catégorie technique, qualification argumentée obligatoire au choix et traces/tests réussis exigés avant résolution. La validation simulée du demandeur peut être exigée avant clôture, avec retour négatif et réouverture. Le critère de fin du scénario est configurable : résolution ou clôture de tous les tickets. Les anciens scénarios et tentatives restent compatibles. Le bilan distingue parcours, contrôles automatiques, appréciation IA des réponses libres et évaluation finale du professeur. La démonstration et le modèle JSON illustrent le parcours guidé jusqu'à la clôture.

Modèle JSON prêt à adapter : modele-scenario.json et guide du format. Importer ce modèle dans PataDesk, puis publier et affecter le scénario.

Partager une ressource avec un groupe

Dans Suivre → Affectations, sélectionner une classe puis créer ses groupes facultatifs (par exemple « Groupe 1 » et « Groupe 2 » en BTS) et cocher leurs élèves. Une classe peut fonctionner sans groupe, avec un seul groupe ou avec plusieurs.

Dans Ressources prof → Accès des élèves, cocher Toute la classe pour un partage collectif, ou seulement les groupes concernés pour un partage restreint. Les accès se cumulent avec les élèves sélectionnés individuellement : cocher « Toute la classe » donne donc accès à tous ses élèves, même si un groupe est également coché. Les ressources existantes conservent leurs accès. Les restrictions de groupe s'appliquent aussi au téléchargement protégé.

Prérequis

  • WordPress 6.4 ou supérieur recommandé
  • PHP 8.1 ou supérieur recommandé
  • Base de données MySQL ou MariaDB
  • Droits administrateur WordPress pour l’installation
  • Un thème WordPress compatible avec les shortcodes

Le plugin a été développé pour un usage pédagogique en lycée, principalement en NSI et SNT. Les niveaux Seconde, Première et Terminale ne sont que des valeurs installées par défaut. Ils sont gérés comme des niveaux ordinaires : un administrateur peut les renommer, les réordonner, les remplacer par d'autres niveaux, ou les supprimer lorsqu'ils ne sont liés à aucune donnée.

Installation

  1. Télécharger l’archive du plugin.
  2. Dans WordPress, aller dans Extensions → Ajouter une extension.
  3. Cliquer sur Téléverser une extension.
  4. Choisir le fichier .zip.
  5. Installer puis activer le plugin.
  6. Aller dans OuInPo Suite → Réglages → Diagnostic.
  7. Vérifier que les tables principales sont présentes.

Archives et distribution

Le depot GitHub de developpement peut contenir des outils de maintenance, par exemple .distignore, tools/ et tools/build-dist.ps1.

Le zip installable WordPress doit contenir le dossier du plugin, son code, ses assets, sa documentation publique et les packs pedagogiques prevus. Il ne doit pas contenir le dossier dist/, d'anciennes archives, de dumps SQL, d'exports WordPress personnels, de secrets ou de fichiers locaux.

Le zip de distribution est l'archive partagee aux enseignants. Il peut etre produit depuis le depot de developpement, mais il doit rester directement installable dans WordPress comme une extension classique.

Commandes utiles depuis le depot de developpement :

.\tools\build-dist.ps1
.\scripts\test-dist.ps1
php .\tools\verify-optimizations.php

Le script de test reconstruit le zip, verifie la presence de ouinpo-suite/ouinpo-suite.php, les chemins internes et l'absence de fichiers interdits. Le script verify-optimizations.php effectue des controles cibles sur les optimisations recentes sans charger WordPress ni modifier le plugin.

Choix de securite a verifier

  • La suppression du plugin conserve volontairement les tables, options et fichiers OuInPo. uninstall.php evite une perte accidentelle de donnees pedagogiques.
  • Les acces publics aux exercices, indices, solutions, fichiers pratiques et fonctions IA sont opt-in. Ils doivent etre actives volontairement par l'administrateur.
  • Les quotas publics IA utilisent un hash de l'adresse IP. Des eleves derriere un meme NAT ou proxy peuvent donc partager un quota.
  • Les fichiers pratiques publics exposent les ressources placees dans uploads/ouinpo/practical/ si l'administrateur active l'acces public correspondant.
  • L'extraction PDF SegFault peut utiliser pdftotext via shell_exec lorsque l'hebergement l'autorise. Sinon le plugin utilise son parseur PHP de secours.

Test sur WordPress vierge

Pour valider une archive avant partage :

  1. Installer un WordPress neuf avec une base vide.
  2. Installer le zip du plugin depuis Extensions > Ajouter une extension > Televerser une extension.
  3. Activer le plugin puis ouvrir OuInPo Suite > Reglages > Diagnostic.
  4. Verifier que les tables principales existent et qu'aucune cle API ou chemin local n'est configure.
  5. Importer un pack de demonstration depuis OuInPo Suite > Reglages > Import pedagogique.
  6. Creer les pages depuis Pages & shortcodes, puis tester les pages publiques et les pages eleves avec un compte distinct.

Première configuration

Après activation, vérifier les points suivants :

  1. Les tables du plugin sont bien créées.
  2. Les niveaux scolaires et les difficultés de base sont présents.
  3. Importer un pack pédagogique si l’on souhaite disposer de compétences, d’exercices, de sujets pratiques ou de flashcards de démonstration.
  4. Créer ou reparer les pages publiques depuis OuInPo Suite > Réglages > Pages & shortcodes, ou les créer manuellement dans WordPress.
  5. Vérifier que les shortcodes sont présents dans les pages correspondantes. Une page au bon slug mais sans shortcode attendu doit etre reparee avant d'etre consideree comme correcte.
  6. Vérifier que les liens entre pages fonctionnent, notamment avec les permaliens simples WordPress.
  7. Désactiver ou ignorer les modules non utilisés.
  8. Renseigner les clés API uniquement si l’enseignant souhaite utiliser les fonctions d’IA.

Les compétences BO complètes ne sont pas créées automatiquement par l’installeur. Elles doivent être importées via un pack pédagogique ou créées depuis l’administration du plugin.

Niveaux scolaires

La source de vérité des niveaux est la table ouin_exo_school_levels. Les contenus ne doivent pas supposer que les slugs seconde, premiere ou terminale existent : ce sont seulement les exemples créés sur une installation neuve.

Une compétence n'est pas rattachée à un niveau par son ancien champ level, mais par les liens de la table ouin_exo_competency_school_level. Le champ level reste un champ hérité d'affichage et de compatibilité.

Transversal n'est pas un niveau scolaire. Une compétence est considérée comme transversale lorsqu'elle est liée à plusieurs niveaux scolaires. Les anciens packs qui contiennent level = "Transversal" restent acceptés : à l'import, la compétence est alors liée aux niveaux existants.

Domaines BO

La source structurée des domaines est la table ouin_exo_domains. Une compétence appartient à un domaine via domain_id, et peut ensuite être liée à un ou plusieurs niveaux scolaires via ouin_exo_competency_school_level.

Les anciens champs domain et domain_slug de ouin_exo_competencies sont conservés pour compatibilité avec les packs et shortcodes existants. Les migrations créent automatiquement les domaines à partir des couples historiques domain_slug / domain / track, puis renseignent domain_id.

Un domaine n'est pas un niveau : il peut appartenir à un référentiel ou une filière (track) comme NSI, SNT ou BTS SIO, tandis que la transversalité d'une compétence reste déduite de ses liens avec plusieurs niveaux scolaires. Les pages publiques peuvent être créées depuis OuInPo Suite > Réglages > Pages & shortcodes. Elles peuvent aussi être créées manuellement dans WordPress, puis recevoir les shortcodes nécessaires.

Packs pédagogiques

Les packs pédagogiques permettent d’importer des contenus dans une installation neuve ou existante :

  • compétences ;
  • exercices ;
  • indices et solutions ;
  • métadonnées de type bac ;
  • sujets pratiques ;
  • flashcards.

Le dossier packs/ contient le schéma et les exemples fournis avec le plugin. Un pack peut déclarer ses propres niveaux dans school_levels, avec un slug, un label et optionnellement sort_order. Les exercices et compétences peuvent ensuite utiliser level_slug pour un niveau ou level_slugs pour plusieurs niveaux. Si un niveau référencé n'existe pas et n'est pas déclaré dans le pack, l'import signale un avertissement au lieu de créer silencieusement une donnée imprévue.

Un pack peut aussi déclarer ses domaines dans domains, avec slug, label, track, description, sort_order et active. Si un pack ancien ne déclare pas domains, l'import crée ou met à jour le domaine à partir des champs de compatibilité de chaque compétence.

Pour un test rapide, importer :

packs/ouinpo-pack-demo-minimal.json

Pour une installation professeur, importer dans cet ordre :

packs/ouinpo-pack-referentiel-snt-nsi.json
packs/ouinpo-pack-flashcards-nsi.json
packs/ouinpo-pack-exercices-site-origine.json

Les sujets pratiques ne sont pas encore distribues dans ces packs. Les fichiers packs/ouinpo-pack-test-*.json, lorsqu'ils existent dans le depot de travail, sont des packs de test technique exclus du zip de distribution par le script de build.

Après import, vérifier dans l’administration que les exercices et flashcards apparaissent bien.

Pages WordPress et shortcodes

Les pages et shortcodes ci-dessous correspondent à ceux proposés par OuInPo Suite > Réglages > Pages & shortcodes. Les slugs peuvent être adaptés si les liens internes sont ajustés en conséquence.

Attention : les shortcodes publics peuvent afficher des exercices, indices, solutions, sujets pratiques ou fichiers selon les reglages et les contenus disponibles. L'enseignant doit choisir volontairement les pages ou ils sont places.

Pages indispensables

Page WordPress Slug conseillé Shortcode
Exercices exercices [ouinpo_exercises]
Exercice exercice [ouinpo_exercise]
Épreuve pratique epreuve-pratique [ouinpo_practical_subjects]
Sujet pratique epreuve-pratique-sujet [ouinpo_practical_subject]
Flashcards flashcards [ouinpo_flashcards]
Mes compétences mes-competences [ouinpo_competences_progress]
Mes badges mes-badges [ouinpo_student_badges]
Centre d entrainement NSI entrainement-nsi [ouinpo_training_home]
Tableau apprenant autonome mon-entrainement [ouinpo_learner_dashboard]
Badges apprenant autonome badges-entrainement [ouinpo_learner_badges]
Palmarès des badges palmares-badges [ouinpo_badges_palmares]
Carte du site carte-du-site [ouinpo_site_map]

La carte du site dynamique est optionnelle et reflète surtout l'organisation du site OuInPo d'origine. Elle peut être ignorée sur une installation plus simple.

Pages utiles selon les modules activés

Page WordPress Slug conseillé Shortcode
Dépôt de travaux depot-travaux [ouinpo_upload]
Mes dépôts mes-depots [ouinpo_my_submissions]
Ressources ressources [ouinpo_resources]
Mes projets mes-projets [ouinpo_my_projects]
Suivi des projets suivi-projets [ouinpo_teacher_projects]
Suivi des compétences suivi-competences [ouinpo_competences_prof]

Un parcours autonome demarrable par un apprenant doit etre un modele public : path_scope = autonomous ou mixed, is_template = 1, visible et autorise par les reglages publics du centre d entrainement. L instance personnelle creee pour l apprenant utilise une cible utilisateur et ne l inscrit pas dans une classe.

Les trois premieres pages de ce tableau sont prevues pour des eleves connectes lorsque le module Submissions est active. Le suivi des competences est reserve aux enseignants ou administrateurs ayant les capacites OuInPo necessaires.

Il est possible de regrouper le dépôt et l’historique des dépôts sur une seule page :

[ouinpo_upload]

[ouinpo_my_submissions]

Pages IA et parcours

Page WordPress Slug conseillé Shortcode
Assistant SegFault assistant-segfault [segfault_chat]
Mes parcours mes-parcours [segfault_mes_parcours]

Ces pages supposent le module SegFault active. Le chat peut etre public ou reserve selon les reglages IA ; les parcours sont destines aux eleves connectes.

Pages optionnelles

Page WordPress Slug conseillé Shortcode
Recherche textuelle recherche-textuelle [ouinpo_recherche_textuelle]
Gate gate [ouinpo_gate]
Signatures signatures [ouinpo_signpad]

Ces pages correspondent a des modules avances desactives par defaut sur une installation neuve. Les activer seulement si elles sont configurees et utiles au site.

SPOPI Projects

Le module optionnel projects ajoute le suivi pedagogique de projets BTS SIO. Il fournit une gestion simple des projets, des membres, d'un tableau Kanban, d'un journal de bord projet, de livrables, de traces/preuves avec fichiers, de liens vers les competences BO existantes, d'une fiche projet portfolio imprimable et d'une fiche de situation professionnelle BTS SIO.

Depuis 0.6.3-beta, Projects inclut aussi un assistant IA encadre pour les enseignants : propositions de taches, livrables adaptes, competences liees, analyse de risques, aide portfolio et synthese enseignant. Toutes les reponses IA sont des brouillons/previsualisations. Le serveur n'applique rien sans selection explicite et confirmation par un enseignant ou administrateur autorise.

Les lots 5 et 5.1 ajoutent puis stabilisent un assistant IA eleve distinct et limite a la preparation personnelle du portfolio BTS : questions de recul, synthese personnelle et brouillon portfolio. Il est desactive par defaut, doit etre active globalement puis projet par projet, refuse les projets archives et ne modifie jamais les donnees Projects.

Shortcodes disponibles :

Shortcode Usage
[ouinpo_my_projects] Liste des projets visibles par l'utilisateur connecte, avec acces Kanban et journal
[ouinpo_project_kanban id="..."] Tableau Kanban d'un projet autorise
[ouinpo_project_journal id="..."] Journal de bord d'un projet autorise
[ouinpo_project_deliverables id="..."] Livrables attendus, statuts et validation enseignant
[ouinpo_project_evidence id="..."] Traces/preuves deposees par les membres du projet : texte, lien ou fichier
[ouinpo_project_sheet id="..."] Fiche projet portfolio HTML imprimable avec export Markdown
[ouinpo_project_bts_situation id="..."] Fiche situation professionnelle BTS SIO imprimable avec export Markdown
[ouinpo_project_ai_assistant id="..."] Assistant IA enseignant pour propositions Projects en brouillon
[ouinpo_project_student_ai id="..."] Assistant IA eleve lecture seule pour brouillons portfolio personnels
[ouinpo_teacher_projects] Vue enseignant avec statut, membres, taches, livrables, traces, alertes et acces Kanban/fiche

Capacites ajoutees :

ouinpo_projects_manage_all
ouinpo_projects_manage_class
ouinpo_projects_create
ouinpo_projects_view_own
ouinpo_projects_edit_own_tasks
ouinpo_projects_comment
ouinpo_projects_validate
ouinpo_projects_ai_use
ouinpo_projects_ai_apply
ouinpo_projects_ai_student_use

Les capacites IA Projects enseignant (ouinpo_projects_ai_use, ouinpo_projects_ai_apply) sont attribuees aux administrateurs et enseignants OuInPo lors de l'installation/mise a jour. La capacite ouinpo_projects_ai_student_use est aussi attribuee aux eleves, mais les routes eleves exigent en plus l'appartenance actuelle au projet, l'activation globale et l'activation du projet. Les eleves ne recoivent jamais ouinpo_projects_ai_apply.

Tables creees :

{prefix}ouinpo_projects
{prefix}ouinpo_project_members
{prefix}ouinpo_project_columns
{prefix}ouinpo_project_tasks
{prefix}ouinpo_project_task_comments
{prefix}ouinpo_project_checklist_items
{prefix}ouinpo_project_logs
{prefix}ouinpo_project_deliverables
{prefix}ouinpo_project_evidence
{prefix}ouinpo_project_competency_links

Les routes REST utilisent le namespace ouinpo-projects/v1 et exigent un utilisateur connecte, un nonce REST et les capacites/appartenances adaptees. Les eleves ne voient que les projets dont ils sont membres. Les livrables sont geres/valides par les enseignants du projet ; les membres peuvent deposer des traces si leurs capacites Projects le permettent.

Routes REST principales Projects :

GET/POST /projects/{id}/deliverables
PATCH/DELETE /deliverables/{id}
PATCH /deliverables/{id}/status
GET/POST /projects/{id}/evidence
POST /projects/{id}/evidence/upload
PATCH/DELETE /evidence/{id}
GET /evidence/{id}/download
GET/POST /projects/{id}/competencies
GET/POST /tasks/{id}/competencies
GET/POST /deliverables/{id}/competencies
DELETE /competency-links/{id}
GET /projects/{id}/export/html
GET /projects/{id}/export/markdown
GET /projects/{id}/bts-situation/markdown
POST /projects/{id}/ai/suggest-tasks
POST /projects/{id}/ai/suggest-deliverables
POST /projects/{id}/ai/suggest-competencies
POST /projects/{id}/ai/analyze-risks
POST /projects/{id}/ai/portfolio-summary
POST /projects/{id}/ai/teacher-summary
POST /projects/{id}/ai/apply-suggestion
POST /projects/{id}/student-ai/reflection-questions
POST /projects/{id}/student-ai/personal-summary
POST /projects/{id}/student-ai/portfolio-draft

Les liens de competences utilisent la table existante ouin_exo_competencies. Le module ne cree pas un second referentiel : si aucune competence BO n'est importee ou creee, les panneaux de liaison restent vides.

Assistant IA Projects :

  • les routes IA exigent utilisateur connecte, nonce REST, capacite ouinpo_projects_ai_use, et ouinpo_projects_ai_apply en plus pour l'application, avec droits enseignant/admin sur le projet ;
  • aucun appel IA anonyme ou declenche par un eleve n'est prevu dans ce lot ;
  • l'usage IA reutilise ouinpo_ai_usage_pedagogical_suggestions, les fournisseurs IA existants et les quotas enseignants ouinpo_ai_teacher_per_minute / ouinpo_ai_teacher_per_day ;
  • le quota est consomme uniquement lors d'un appel reel au fournisseur IA ; l'application d'une proposition deja recue, les erreurs de permission, les nonces invalides et l'IA desactivee ne consomment pas de quota ;
  • aucun quota dedie Projects n'est ajoute dans ce lot ; TODO possible ulterieur si les usages Projects doivent etre separes des autres usages enseignants ;
  • le contexte transmis a l'IA est minimise : metadonnees de projet, taches, livrables, traces, journal et competences disponibles ; le contenu des fichiers n'est pas lu ;
  • les reponses sont demandees en JSON strict, parsees et revalidees cote serveur ; un JSON vide, incomplet, tronque, hors schema ou visant un objet hors projet est refuse avant toute application ;
  • les identifiants de projet, tache, livrable et competence sont reverifies avant application ; les doublons evidents et titres vides sont refuses ;
  • les logs IA sont synthetiques via les reglages IA existants et ne stockent pas les prompts complets, reponses completes, chemins, traces detaillees, noms ou emails.

Assistant IA eleve Projects :

  • activation en deux temps : option globale ouinpo_projects_student_ai_enabled dans les reglages IA SegFault, puis case IA eleve sur le projet ;
  • routes REST connectees uniquement, avec nonce REST, capacite ouinpo_projects_ai_student_use, projet existant non archive, membre actuel du projet, option globale active, option projet active et quota disponible ;
  • champs eleve disponibles dans l'interface : role, travail realise, difficultes, solutions, apprentissages et elements a montrer ; au moins le role ou le travail reel doit etre renseigne ;
  • si le role et le travail reel sont vides, le message attendu est : Indique d’abord ce que tu as réellement fait dans le projet. ;
  • quotas dedies : ouinpo_ai_projects_student_per_minute, ouinpo_ai_projects_student_per_day et ouinpo_ai_projects_student_max_tokens ;
  • contexte minimise : titre, description generale, statut, periode, taches liees a l'eleve, livrables en metadata, traces de l'eleve, synthese de traces globales, journal de l'eleve et competences liees ;
  • autres membres non nommes, pas d'emails, pas de chemins prives, pas d'URLs de telechargement, pas de contenu de fichier ;
  • reponses attendues en JSON strict et revalidees cote serveur avec constantes de bornage MAX_STUDENT_AI_QUESTIONS, MAX_STUDENT_AI_TEXT_LENGTH, MAX_STUDENT_AI_WARNINGS et MAX_STUDENT_CONTEXT_ITEMS ; un JSON invalide, incomplet ou hors type n'est pas affiche ;
  • les logs IA eleve restent synthetiques : user_id, project_id, action, provider, succes/echec, code, taille approximative et date, sans texte eleve, prompt, reponse, nom, email, URL, chemin ou contenu de fichier ;
  • aucune action d'application : l'IA eleve ne cree, modifie ni supprime tache, livrable, competence, trace ou journal.

Uploads de traces fichier :

  • taille maximale par fichier : 10 Mo ;
  • extensions autorisees : pdf, txt, md, csv, json, sql, py, html.txt, css.txt, js.txt, png, jpg, jpeg, webp, zip ;
  • extensions refusees directement : php, phtml, phar, exe, bat, cmd, sh, svg, html, js, css, htaccess ;
  • les fichiers web doivent etre neutralises avant depot, par exemple index.html.txt, style.css.txt, script.js.txt ;
  • les nouveaux fichiers sont stockes dans wp-content/uploads/ouinpo/projects/, avec index.php et .htaccess de refus d'acces direct quand le serveur les applique ;
  • le plugin verifie en administration que les fichiers de protection locaux existent, mais cette verification ne garantit pas qu'un serveur Nginx, IIS ou Apache/LiteSpeed mal configure bloque l'acces HTTP direct ;
  • les fichiers sont crees comme attachments WordPress, rattaches a la table ouinpo_project_evidence via attachment_id, puis servis par GET /evidence/{id}/download avec nonce REST et droits de vue projet ;
  • la suppression d'une trace fichier privee supprime aussi son attachment WordPress et son fichier physique, uniquement si l'attachment est marque comme fichier prive Projects ;
  • une trace ancienne avec attachment public conserve son fichier public ; seule la ligne de trace est supprimee.

Compatibilite : les fichiers Projects uploades avant le stockage protege par route REST ne sont pas migres physiquement. Ils restent affiches via leur URL historique et peuvent rester accessibles directement selon la configuration du site. Pour Nginx, IIS ou un serveur qui ignore .htaccess, il faut ajouter une regle serveur refusant l'acces web a uploads/ouinpo/projects/. Le stockage dans uploads/ ne doit pas etre considere comme prive de maniere absolue sans cette regle serveur.

Exports :

  • [ouinpo_project_sheet] et [ouinpo_project_bts_situation] proposent un bouton Imprimer / Enregistrer en PDF qui appelle simplement l'impression du navigateur ;
  • les routes Markdown retournent un Markdown serveur nettoye, sans generation PDF serveur et sans dependance externe ;
  • l'export HTML retourne un fragment HTML echappe avec classes prefixees ouinpo-projects-.

Limites actuelles : IA Projects limitee a des brouillons enseignants valides manuellement et a des brouillons eleves lecture seule, pas d'export PDF serveur, pas de badge projet, pas d'integration GitHub/GitLab, pas de Gantt, pas de temps passe, pas de messagerie ni notification email.

Recette manuelle recommandee

  1. Activer le module Projects dans OuInPo Suite > Reglages > Modules.
  2. Verifier que la migration a cree les tables ouinpo_project*.
  3. Creer un projet depuis l'administration Projects.
  4. Verifier la creation des 7 colonnes par defaut.
  5. Ajouter deux eleves comme membres.
  6. Tester [ouinpo_my_projects] avec un eleve membre.
  7. Tester le meme shortcode avec un eleve non membre.
  8. Creer une tache depuis le Kanban.
  9. Deplacer la tache avec les boutons gauche/droite.
  10. Ajouter un commentaire via REST ou outil de test.
  11. Ajouter une entree de journal.
  12. Creer les livrables BTS par defaut depuis l'admin Projects.
  13. Deposer une trace avec un eleve membre.
  14. Lier une competence BO au projet ou a un livrable.
  15. Verifier la fiche [ouinpo_project_sheet].
  16. Verifier la fiche [ouinpo_project_bts_situation].
  17. Verifier la vue [ouinpo_teacher_projects] avec un compte professeur.
  18. Avec deux professeurs distincts, verifier que ?page=ouinpo-projects&project_id= d'un projet non gere renvoie un refus 403.

Recette securite lot 2.1

  1. Avec un eleve membre, verifier l'acces a [ouinpo_my_projects], au Kanban, aux livrables, aux traces et a la fiche projet.
  2. Avec le meme eleve membre, verifier qu'il peut ajouter une trace et supprimer uniquement sa propre trace.
  3. Avec un eleve non membre, verifier qu'il ne voit pas le projet dans [ouinpo_my_projects].
  4. Avec un eleve non membre, appeler directement une route REST de livrable connue : GET /projects/{id}/deliverables doit renvoyer 403.
  5. Avec un eleve non membre, appeler directement une route REST de trace connue : PATCH /evidence/{id} ou DELETE /evidence/{id} doit renvoyer 403 ou 404.
  6. Avec un eleve non membre, appeler directement une route REST de competence liee : DELETE /competency-links/{id} doit renvoyer 403 ou 404.
  7. Avec un eleve membre, verifier que PATCH /deliverables/{id}/status ne permet pas de valider un livrable.
  8. Avec un professeur, verifier la validation, le rejet et la demande de reprise d'un livrable.
  9. Avec un professeur, verifier que la fiche [ouinpo_project_sheet] reste imprimable sans livrable, sans trace et sans competence liee.
  10. Retirer un eleve du projet, puis verifier que les anciens liens directs vers Kanban, livrables, traces et fiche ne donnent plus acces au projet.

Recette securite lot 3

  1. Avec un eleve membre, deposer une trace texte, une trace lien et une trace fichier autorisee.
  2. Verifier qu'un fichier index.html est refuse et que index.html.txt est accepte.
  3. Verifier que php, phtml, phar, exe, bat, cmd, sh, svg, js, css, html et .htaccess sont refuses.
  4. Verifier qu'un fichier de plus de 10 Mo est refuse.
  5. Avec un eleve non membre, appeler directement POST /projects/{id}/evidence/upload : la route doit renvoyer 403.
  6. Avec un eleve membre, fournir un deliverable_id ou task_id d'un autre projet : la route doit refuser la demande.
  7. Supprimer un attachment WordPress deja rattache et verifier que [ouinpo_project_evidence], [ouinpo_project_sheet] et [ouinpo_project_bts_situation] ne cassent pas.
  8. Verifier GET /projects/{id}/export/markdown, GET /projects/{id}/export/html et GET /projects/{id}/bts-situation/markdown avec membre, professeur et non membre.
  9. Verifier que les boutons Copier Markdown et Imprimer / Enregistrer en PDF fonctionnent dans les deux fiches.
  10. Confirmer qu'aucune route Projects n'utilise __return_true et qu'aucun fichier dist/ n'est modifie.

Recette stabilisation lot 3.1

  1. Avec un eleve membre, verifier POST /projects/{id}/evidence/upload avec un fichier autorise.
  2. Avec un eleve non membre, verifier que le meme upload renvoie 403.
  3. Retirer un ancien membre du projet, puis verifier que l'upload et la suppression de ses anciennes traces sont refuses.
  4. Verifier que php, phtml, phar, exe, bat, cmd, sh, svg, html, js, css, htaccess et .env sont refuses.
  5. Verifier qu'un fichier sans extension, un fichier commencant par un point et une double extension dangereuse sont refuses.
  6. Verifier que index.html.txt, style.css.txt et script.js.txt sont acceptes, mais pas .html, .css ou .js.
  7. Verifier qu'un fichier vide, un fichier de plus de 10 Mo et un MIME incoherent sont refuses.
  8. Supprimer manuellement un attachment WordPress lie a une trace, puis verifier que les shortcodes de traces, fiche projet et fiche BTS affichent un message propre.
  9. Simuler un echec de creation de trace apres upload si possible, puis verifier que le fichier et l'attachment ne restent pas orphelins.
  10. Tester les exports Markdown/HTML avec un professeur, un eleve membre, un eleve non membre et un ancien membre retire.
  11. Imprimer la fiche BTS et verifier que les boutons sont masques et que les longues URLs ne debordent pas.

Recette securite lot 3.2

  1. Avec un eleve membre, deposer une trace fichier autorisee.
  2. Verifier que le fichier physique est cree sous wp-content/uploads/ouinpo/projects/.
  3. Verifier que index.php et .htaccess existent dans uploads/ouinpo/ et uploads/ouinpo/projects/.
  4. Verifier que la trace affiche un lien GET /ouinpo-projects/v1/evidence/{id}/download avec nonce REST, et pas l'URL directe du fichier upload.
  5. Avec l'eleve membre ou le professeur autorise, ouvrir ce lien et verifier le telechargement avec Content-Disposition: attachment et X-Content-Type-Options: nosniff.
  6. Avec un eleve non membre et avec un ancien membre retire du projet, appeler le meme lien : la route doit renvoyer 403 ou 401.
  7. Supprimer ou alterer la meta _ouinpo_project_evidence_id d'un attachment de test, puis verifier que le telechargement est refuse.
  8. Verifier qu'une ancienne trace fichier creee avant le lot 3.2 reste visible via son URL historique, sans migration physique.
  9. Supprimer une nouvelle trace fichier privee et verifier que son attachment et son fichier physique sont supprimes.
  10. Verifier l'URL directe du fichier : elle doit etre refusee seulement si le serveur applique .htaccess ou une regle equivalente.

Recette IA Projects lot 4

  1. Activer l'IA globale et l'usage pedagogical_suggestions, puis configurer Albert ou OpenAI dans les reglages IA existants.
  2. Verifier qu'un compte enseignant responsable du projet voit le bouton IA dans [ouinpo_teacher_projects].
  3. Verifier qu'un eleve membre ne voit pas ce bouton et que POST /projects/{id}/ai/suggest-tasks renvoie 403.
  4. Generer des propositions de taches, livrables, competences, risques, portfolio et synthese enseignant.
  5. Verifier que les risques et syntheses restent en lecture seule.
  6. Selectionner une partie des taches/livrables/competences puis confirmer l'application.
  7. Verifier que le serveur dedoublonne les titres existants et refuse les identifiants hors projet.
  8. Verifier les logs synthetiques si WP_DEBUG et les logs IA OuInPo sont actifs.

Recette stabilisation IA Projects lot 4.1

  1. Avec l'IA desactivee, verifier qu'une route IA renvoie un message clair et ne consomme pas de quota.
  2. Avec un nonce absent ou invalide, verifier que les appels IA et l'application renvoient 401/403.
  3. Forcer une reponse IA vide, invalide, tronquee ou avec JSON entoure de texte : le JSON entoure peut etre extrait, les autres cas doivent etre refuses sans application.
  4. Tenter d'appliquer une tache/livrable sans titre, avec type ou priorite invalide, doublon evident, ou competence inconnue : le serveur doit refuser.
  5. Tenter de lier une competence a une tache ou un livrable d'un autre projet : le serveur doit refuser.
  6. Verifier que les boutons IA sont desactives pendant l'appel, que l'aperçu precedent est remplace, et qu'aucune application ne part apres annulation de confirmation.
  7. Verifier que les logs IA ne contiennent ni prompt, ni reponse complete, ni nom/email, ni chemin prive.

Recette IA eleve Projects lots 5 et 5.1

  1. Activer l'IA globale et ouinpo_projects_student_ai_enabled dans les reglages IA SegFault, puis cocher IA eleve sur un projet de test.
  2. Verifier qu'un eleve membre voit l'acces IA portfolio depuis [ouinpo_my_projects] ou le shortcode [ouinpo_project_student_ai].
  3. Appeler les trois actions avec les champs vides : la route doit renvoyer exactement Indique d’abord ce que tu as réellement fait dans le projet. et ne pas consommer de quota.
  4. Renseigner le role ou le travail realise, puis generer questions de recul, synthese personnelle et brouillon portfolio.
  5. Verifier que le resultat est copiable mais qu'aucun bouton d'application n'existe.
  6. Verifier qu'un eleve non membre, un ancien membre retire, un visiteur anonyme, un nonce invalide, l'option globale desactivee, l'option projet desactivee et un projet archive sont refuses sans appel fournisseur.
  7. Verifier que /ai/apply-suggestion reste refuse a un eleve et que les routes /student-ai/* ne modifient aucune table de projet.
  8. Verifier que les logs IA ne contiennent ni texte eleve complet, ni prompt, ni reponse complete, ni nom/email, ni chemin prive.
  9. Forcer une reponse IA vide, JSON invalide, JSON liste, objet incomplet ou champ de mauvais type : la route doit refuser avec une erreur de schema sans afficher de brouillon.
  10. Verifier que la copie fonctionne avec et sans navigator.clipboard, et que le rappel Cette aide ne remplace pas ton propre bilan. apparait dans le shortcode.
  11. Lancer les controles techniques : php -l sur les fichiers PHP Projects/Core modifies, node --check assets/js/front/projects.js, git diff --check -- . ':!CSS_additionnels/add._bts.css' ':!dist', puis les recherches statiques sur permissions REST, nonces, JSON strict, logs IA, apply-suggestion, student-ai, wp_ouinpo et dist/.

Gate configurable

Le module Gate se configure depuis l'administration OuInPo Suite, onglet Gate > Configuration.

Chaque enigme possede un identifiant stable, un ordre, un etat actif/inactif, un enonce, une aide optionnelle, une reponse de reference, des variantes acceptees, des criteres de validation IA, un niveau, un theme, des messages de feedback, des limites de tentatives, un cooldown et des options IA/fallback. Les reponses de reference et les criteres ne sont pas exposes dans le HTML public.

Lors de la premiere activation avec une configuration absente, OuInPo initialise ouinpo_gate_questions a partir de l'ancien corpus de 42 enigmes. Une configuration existante n'est pas ecrasee et les progressions eleves conservees dans ouinpo_progress ne sont pas reinitialisees. Les anciennes progressions par index sont relues et migrees progressivement vers les identifiants d'enigmes au prochain enregistrement.

La validation IA Gate est optionnelle et s'appuie sur les reglages IA centralises du plugin lorsque les classes IA sont disponibles. Le serveur envoie uniquement l'enonce, la reponse de reference, les variantes, les criteres, le niveau, le theme et la reponse saisie. L'IA doit repondre en JSON strict avec une decision booleenne et un feedback court. Si l'IA est desactivee ou indisponible, le fallback exa

This README is longer than the copy stored here. Read the rest on GitHub →