Skip to content

MelisCmsMcq

Constructeur de QCM (questionnaire à choix multiples / quiz) back-office pour le Melis CMS. Package melisplatform/melis-cms-mcq.

Présentation

MelisCmsMcq est la partie interface du système QCM. Il fournit l'atelier back-office permettant de créer des questions (avec réponses, type, difficulté, catégorie et tags), de les organiser en catégories de questions et en groupes de QCM, et d'assembler des QCM (tests) soit manuellement via un panier par utilisateur, soit automatiquement via un modèle aléatoire. Il ne possède pas sa propre couche de données : toute la persistance (tables, services, notation, instantanés XML et rendu front-office) est déléguée au module compagnon MelisCmsMcqEngine.

Activation

Ajouter dans config/melis.module.load.php :

php
return [
    'MelisCmsMcq',
];

Requiert melisplatform/melis-cms-mcq-engine (^5.3) et laminas/laminas-paginator. Nécessite également que MelisCms, MelisCore (back-office) et MelisCmsTags (tags des questions) soient chargés. Chaîne d'installation : MelisCmsMcqmelis-cms-mcq-enginemelis-cms + melis-cms-tags.

Services principaux

MelisCmsMcq ne déclare aucun service en propre — ses contrôleurs résolvent des alias provenant de MelisCmsMcqEngine à l'exécution :

Alias de service EngineUtilisé par ce module pour
MelisCmsMcqQuestionsServiceCRUD des questions, liste du panier (getQuestionsBasketList), sélection aléatoire (getRandomQuestionIds)
MelisCmsMcqAnswersServiceCRUD des réponses (éditeur de question)
MelisCmsMcqQuestionCategoryServiceCRUD des catégories de questions
MelisCmsMcqGroupsServiceCRUD des groupes de QCM
MelisCmsMcqServiceCRUD des QCM, génération XML (generateMcqXml), récupération (getMcq), notation (evaluateAnswers)

Les fabriques d'éléments de formulaire proviennent également du moteur : McqQuestionCategoriesSelect, McqQuestionsDifficultySelect, QuestionsTypesSelect, McqPreviewTemplatesSelect.

Back-office

Accessible via Menu gauche → MelisCms → MCQ (fa fa-list). L'outil expose quatre onglets et un bouton d'en-tête Questions Favorites (liste raccourcie de questions favorites par utilisateur).

OngletContenu géré
MCQDataTable filtrable des tests assemblés (#tableMcq/MelisCmsMcq/getMcqList) : id, statut, code, nom, date de création, total groupes, total questions
QuestionsDataTable des questions (#tableMcqQuestions/McqQuestions/getQuestionsList) : id, statut, texte de la question, nombre de réponses, type, difficulté, catégorie, tags — avec filtres catégorie/type/statut/difficulté/tags/recherche ; l'action de favori ajoute au panier
Question CategoriesDataTable (#tableMcqQuestionCategories/McqQuestions/getQuestionCategoriesList) : id, statut, code, nom de catégorie — modal d'ajout/édition (Statut, Code, Nom par langue)
MCQ GroupsDataTable (#tableMcqGroups/MelisCmsMcq/getMcqGroupsList) : id, statut, code, nom du groupe — modal d'ajout/édition

Éditeur de QCM

L'ouverture d'une entrée QCM affiche un éditeur à trois onglets :

Onglet éditeurContenu
PropertiesNom, code, statut, Score minimum requis (%) (taux de réussite), bascule Modifier l'ordre des questions à chaque création de QCM
QuestionsAjout/suppression de groupes de QCM ; remplissage de chaque groupe en faisant glisser des questions depuis les panneaux latéraux Questions Favorites ou Search Questions ; le bouton Configure a random MCQ ouvre la modale Modèle Aléatoire
PreviewChoisir un template de rendu, passer le test assemblé, puis soumettre pour afficher le panneau Correction (score, réussite/échec, réponse de l'utilisateur par rapport à la bonne réponse pour chaque question)

La modale Modèle Aléatoire (meliscmsmcq_mcq_page_random_model_modal) permet de définir des lignes de critères par groupe : Difficulté / Catégorie / Tag / Nombre. L'enregistrement appelle getRandomQuestionIds du moteur pour résoudre les identifiants de questions correspondants.

Éditeur de question

L'ouverture d'une question affiche un éditeur à deux onglets :

Onglet éditeurContenu
PropertiesCode, Type (MCQ / Open Ended), Catégorie, Tags, Difficulté, Statut ; par langue : texte de la question, note pour le candidat
AnswersListe de réponses, chacune avec un texte, un indicateur Correct Answer (Yes/No), un code, un statut ; faire glisser la poignée ✛ pour réordonner ; bouton Add an answer

Front office

MelisCmsMcq ne produit aucun rendu front-office en propre. Le moteur de rendu du quiz est un view helper (renderMcqQuestions) enregistré dans MelisCmsMcqEngine ; l'onglet Aperçu l'utilise via le moteur. Consultez la référence MelisCmsMcqEngine pour les détails du rendu front-office.

Tables de base de données

Toutes les tables appartiennent à MelisCmsMcqEngine. Les interfaces back-office de ce module leur correspondent comme suit :

Table EngineInterface BO qui y écrit
melis_cms_mcq_questions + _transOnglet Questions + éditeur de question
melis_cms_mcq_answers + _transÉditeur de réponses (dans l'éditeur de question)
melis_cms_mcq_question_groups + _transOnglet Question Categories (remarque : "question groups" en base de données, "categories" dans l'interface)
melis_cms_mcq_groups + _transOnglet MCQ Groups (lié à un QCM via mcqg_mcq_id)
melis_cms_mcq + _transOnglet MCQ ; test assemblé stocké en XML dans mcq_xml
melis_cms_mcq_questions_listAppartenance question-à-groupe-QCM
melis_cms_mcq_basketsQuestions Favorites par utilisateur

Attention aux nommages. Les "Question categories" de l'interface correspondent à melis_cms_mcq_question_groups ; les "MCQ groups" de l'interface correspondent à melis_cms_mcq_groups. Deux tables "group" distinctes avec des finalités différentes — voir la documentation de MelisCmsMcqEngine.

Intégration des tags

config/app.interface.php enregistre une association MelisCmsTags afin que les questions soient taguables :

php
'melis_cms_tag' => ['datas' => ['associations' => [
    'meliscmsmcq' => [
        'module'           => 'MelisCmsMcq',
        'entity_type'      => 'MCQ_QUESTION',
        'entity_table'     => 'melis_cms_mcq_questions',
        'entity_primary_id'=> 'mcqq_id',
        'trans' => [
            'trans_table'      => 'melis_cms_mcq_questions_trans',
            'trans_foreign_id' => 'mcqqt_question_id',
            'trans_lang_key'   => 'mcqqt_lang_id',
        ],
        'association_title_key' => 'mcqqt_question_text',
    ],
]]],

Le type d'association est MCQ_QUESTION. La DataTable des questions affiche une colonne tags et un filtre tags pilotés par cet enregistrement.

Fichiers clés

ÉlémentChemin
Routes + enregistrements des contrôleursvendor/melisplatform/melis-cms-mcq/config/module.config.php
Arbre des outils back-office, onglets, pages d'édition, modales, association Tagsvendor/melisplatform/melis-cms-mcq/config/app.interface.php
Configurations des DataTables (4 tables)vendor/melisplatform/melis-cms-mcq/config/app.tools.php
Contrôleur MCQ + groupes + modèle aléatoire + aperçuvendor/melisplatform/melis-cms-mcq/src/Controller/MelisCmsMcqController.php
Contrôleur Questions + catégories + paniervendor/melisplatform/melis-cms-mcq/src/Controller/McqQuestionsController.php
Listener flash-messengervendor/melisplatform/melis-cms-mcq/src/Listener/MelisCmsMcqFlashMessengerListener.php
Vues (éditeur de question, éditeur QCM, panier, modèle aléatoire, aperçu)vendor/melisplatform/melis-cms-mcq/view/melis-cms-mcq/
JS (questions, QCM, groupes, catégories, aperçu, sélection multiple)vendor/melisplatform/melis-cms-mcq/public/js/

Voir aussi : melis-cms-mcq-engine, melis-cms-tags, melis-cms, melis-core