From c99269911d56c39b21e1331c7fc990bc2d0c7e5f Mon Sep 17 00:00:00 2001 From: Vincent Vanwaelscappel Date: Mon, 24 Jul 2023 20:04:36 +0200 Subject: [PATCH] wip #6153 @2.5 --- app/Models/Quiz.php | 133 +++++++++++++++++++++------------ app/Models/QuizTranslation.php | 3 +- 2 files changed, 86 insertions(+), 50 deletions(-) diff --git a/app/Models/Quiz.php b/app/Models/Quiz.php index 5de3dd234..c518fe94d 100644 --- a/app/Models/Quiz.php +++ b/app/Models/Quiz.php @@ -11,12 +11,20 @@ use App\Http\Controllers\Admin\Operations\Quiz\PreviewOperation; use App\Http\Controllers\Admin\Operations\Quiz\ReportOperation; use App\Models\Base\ToolboxModel; use App\Models\Traits\SCORMVersionTrait; +use Cubist\Backpack\Magic\Fields\Checkbox; use Cubist\Backpack\Magic\Fields\Code; +use Cubist\Backpack\Magic\Fields\FormBigSection; +use Cubist\Backpack\Magic\Fields\FormSection; +use Cubist\Backpack\Magic\Fields\FormSeparator; +use Cubist\Backpack\Magic\Fields\FormSuperSection; use Cubist\Backpack\Magic\Fields\SelectFromArray; +use Cubist\Backpack\Magic\Fields\Text; +use Cubist\Backpack\Magic\Fields\Textarea; use Cubist\Scorm\Manifest; use Cubist\Util\Files\VirtualDirectory; use Spatie\Image\Manipulations; use Spatie\MediaLibrary\MediaCollections\Models\Media; + // __('!! e-Learning') class Quiz extends ToolboxModel { @@ -33,7 +41,7 @@ class Quiz extends ToolboxModel public $registerMediaConversionsUsingModelInstance = false; - protected $_operations = [PreviewOperation::class, DownloadOperation::class, LogOperation::class, ReportOperation::class, ImportOperation::class,ChangeownerOperation::class]; + protected $_operations = [PreviewOperation::class, DownloadOperation::class, LogOperation::class, ReportOperation::class, ImportOperation::class, ChangeownerOperation::class]; use SCORMVersionTrait; @@ -94,78 +102,104 @@ class Quiz extends ToolboxModel 'type' => 'Text', 'column' => true, 'column_label' => 'Client', - 'tab' => __('Projet')]); + ]); $this->addField(['name' => 'project', 'label' => __('Nom du projet'), 'type' => 'Text', 'column' => true, - 'column_label' => __('Projet'), - 'tab' => __('Projet')]); + ]); + + $this->addColumnDateFields(); + $this->addOwnerField(); - $this->addColumnDateFields(__('Projet')); - $this->addOwnerField(['tab' => __('Projet')]); + $this->addField('section_settings', FormSuperSection::class, __('Paramètres')); + + $this->addField('section_main', FormSection::class, __('Informations')); $this->addField(['name' => 'title', 'label' => __('Titre du quiz'), 'type' => 'Text', 'column' => true, - 'tab' => __('Contenus')]); + ]); + + $this->addField([ + 'name' => 'type', + 'type' => SelectFromArray::class, + 'label' => __('Mode'), + 'options' => ['quiz' => __('Quiz'), 'test' => __('Test')], + 'default' => 'quiz', + 'database_default' => 'quiz', + ]); + $this->addField('section_translation', FormSection::class, __('Langue et traductions')); $this->addField(['name' => 'translation', 'label' => __('Langue'), 'type' => 'SelectFromModel', 'optionsmodel' => QuizTranslation::class, 'attribute' => 'locale', 'column' => true, - 'column_label' => '', - 'tab' => __('Contenus')]); + 'column_label' => '']); foreach (self::_getMessages() as $name => $label) { $this->addField(['name' => $name, 'label' => $label, 'hint' => __('Laisser vide pour utiliser le message par défaut'), 'type' => 'Text', - 'tab' => __('Contenus')]); + ]); } - $this->addField([ - 'name' => 'questions', - 'type' => 'BunchOfFieldsMultiple', - 'bunch' => \App\SubForms\Quiz\Question::class, - 'label' => '', - 'add_label' => __('Nouvelle question'), - 'tab' => __('Questions / Réponses'), - ]); - - $this->addField([ - 'name' => 'type', - 'type' => SelectFromArray::class, - 'label' => __('Mode'), - 'options' => ['quiz' => __('Quiz'), 'test' => __('Test')], - 'default' => 'quiz', - 'database_default' => 'quiz', - 'tab' => __('Paramètres'), - ]); + $this->addField('section_scorm', FormSection::class, __('SCORM')); $this->addField(['name' => 'scorm', 'label' => __('SCORM activé'), 'column_label' => __('SCORM'), 'type' => 'Checkbox', - 'tab' => __('SCORM')]); + ]); $this->addField(['name' => 'scorm_version', 'label' => __('Version SCORM'), 'column' => true, 'type' => SCORMVersion::class, - 'tab' => __('SCORM')] + 'when' => ['scorm' => ['1']] + ] ); + $this->addField('section_accessibility', FormSection::class, __('Accessibilité')); + $this->addField('accessibility_show_hotkeys', Checkbox::class, __('Afficher les raccourcis claviers'), ['default' => 1, 'hint' => __('Si cette option est désactivée, la navigation au clavier reste possible, mais sans indication visuelle')]); + + $this->addField('section_instantfeedback', FormSection::class, __('Revue instantanée')); + $this->addField(['name' => 'instantReview', + 'label' => __('Activer l\'indication de réussite instantané'), + 'hint' => __('Indiquer à l\'utilisateur si il a bien répondu ou non après sa réponse'), + 'default' => true, + 'type' => 'Checkbox', + ]); + $this->addField('instant_success_messages', Textarea::class, __('Petits messages accompagnant une bonne réponse'), ['placeholder' => __('Bonne réponse'), 'hint' => __('Une phrase par ligne, la phrase affichée sera sélectionnée aléatoirement dans cette liste.') . ' ' . __(' Par défaut "Bonne réponse" dans la langue du quiz')]); + $this->addField('instant_fail_messages', Textarea::class, __('Petits messages accompagnant une mauvaise réponse'), ['placeholder' => __('Mauvaise réponse'), 'hint' => __('Une phrase par ligne, la phrase affichée sera sélectionnée aléatoirement dans cette liste.') . ' ' . __(' Par défaut "Mauvaise réponse" dans la langue du quiz')]); + + $this->addField('section_theme', FormBigSection::class, __('Thème graphique')); + $this->addField('theme', \App\Fields\FluidbookTheme::class, __('Thème'), ['non_default_tracking' => false, 'default' => 3]); + + $this->addField('section_screens', FormSuperSection::class, __('Écrans')); + + $this->addField('section_intro', FormSection::class, __('Introduction')); + $this->addField('intro_enable', Checkbox::class, __('Activer l\'écran d\'introduction'), ['default' => 1]); + $this->addField('intro_title', Text::class, __('Titre d\'introduction'), ['when' => ['intro_enable' => ['1']]]); + $this->addField('intro_text', Textarea::class, __('Titre d\'introduction'), ['when' => ['intro_enable' => ['1']]]); + $this->addField('intro_button', Text::class, __('Texte du bouton d\'introduction'), ['when' => ['intro_enable' => ['1']]]); + $this->addField('', FormSeparator::class); + $this->addField('intro_custom_mobile', Checkbox::class, __('Personnaliser les textes sur Mobile'), ['when' => ['intro_enable' => ['1']]]); + $this->addField('intro_title_mobile', Text::class, __('Titre d\'introduction'), ['when' => ['intro_enable' => ['1'], 'intro_custom_mobile' => ['1']]]); + $this->addField('intro_text_mobile', Textarea::class, __('Titre d\'introduction'), ['when' => ['intro_enable' => ['1'], 'intro_custom_mobile' => ['1']]]); + $this->addField('intro_button_mobile', Text::class, __('Texte du bouton d\'introduction'), ['when' => ['intro_enable' => ['1'], 'intro_custom_mobile' => ['1']]]); + + $this->addField('section_score', FormSection::class, __('Fin du quiz')); + $this->addField(['name' => 'display_score', 'label' => __('Afficher le score'), 'type' => 'Checkbox', 'default' => true, - 'tab' => __('Paramètres'), 'when' => ['type' => 'quiz'], ]); @@ -175,17 +209,7 @@ class Quiz extends ToolboxModel 'min' => 0, 'max' => 100, 'hint' => __('Au dessus de ce score (sur 100), le quiz est considéré comme réussi. Indiquer 0 pour désactiver'), - 'tab' => __('Paramètres'), 'when' => ['type' => 'quiz'], - ], - ); - - $this->addField(['name' => 'instantReview', - 'label' => __('Activer l\'indication de réussite instantané'), - 'hint' => __('Montrer une pastille à l\'utilisateur juste après sa réponse pour signaler si il a bien répondu'), - 'default' => true, - 'type' => 'Checkbox', - 'tab' => __('Paramètres'), ]); $this->addField(['name' => 'review', @@ -203,7 +227,6 @@ class Quiz extends ToolboxModel '0' => 'never', ], 'default' => true, - 'tab' => __('Paramètres'), 'when' => ['type' => 'quiz'], ]); @@ -211,16 +234,28 @@ class Quiz extends ToolboxModel 'label' => __('Ajouter un bouton "Redémarrer" lorsque l\'utilisateur a échoué'), 'type' => 'Checkbox', 'default' => false, - 'tab' => __('Paramètres'), 'when' => ['type' => 'quiz'], ]); + + + + $this->addField('section_qa', FormBigSection::class, __('Question & réponses')); + $this->addField([ + 'name' => 'questions', + 'type' => 'BunchOfFieldsMultiple', + 'bunch' => \App\SubForms\Quiz\Question::class, + 'label' => '', + 'add_label' => __('Nouvelle question'), + ]); + + $this->addField('section_advanced',FormSuperSection::class,__('Paramètres avancés')); + $this->addField('section_advanced_',FormSection::class); $this->addField(['name' => 'logattempts', 'label' => __('Activer l\'enregistrement des tentatives'), 'hint' => __('Les tentatives seront enregistrées sur le serveur de la Toolbox'), 'type' => 'Checkbox', 'default' => false, - 'tab' => __('Paramètres'), 'when' => ['type' => 'quiz'], ]); @@ -229,7 +264,6 @@ class Quiz extends ToolboxModel 'label' => $label, 'hint' => __('Code Javascript'), 'type' => 'Textarea', - 'tab' => __('Paramètres'), 'when' => ['type' => 'quiz'], ]); } @@ -240,21 +274,22 @@ class Quiz extends ToolboxModel 'type' => 'BunchOfFieldsMultiple', 'bunch' => \App\SubForms\Quiz\TestResult::class, 'add_label' => __('Nouveau résultat'), - 'tab' => __('Paramètres'), 'when' => ['type' => 'test'], ]); - $default = ['tab' => __('Thème'), 'type' => 'Color']; + $this->addField('section_legacy', FormBigSection::class, __('Paramètres à supprimer')); + + $default = ['type' => 'Color']; foreach (self::_getColors() as $name => $color) { $f = array_merge($default, $color, ['name' => $name]); $this->addField($f); } - $default = ['tab' => __('Thème'), 'type' => 'Images', 'maxFiles' => 1]; + $default = ['type' => 'Images', 'maxFiles' => 1]; foreach (self::_getImages() as $name => $label) { $f = array_merge($default, ['name' => $name, 'label' => $label]); $this->addField($f); } - $this->addField('css', Code::class, __('Code CSS supplémentaire'), ['language' => 'css', 'tab' => __('Thème')]); + $this->addField('css', Code::class, __('Code CSS supplémentaire'), ['language' => 'css']); } diff --git a/app/Models/QuizTranslation.php b/app/Models/QuizTranslation.php index 97a3a43ae..a1e20c1e9 100644 --- a/app/Models/QuizTranslation.php +++ b/app/Models/QuizTranslation.php @@ -3,6 +3,7 @@ namespace App\Models; use Cubist\Backpack\Magic\Models\CubistMagicAbstractModel; + // __('!! e-Learning') class QuizTranslation extends CubistMagicAbstractModel { @@ -43,7 +44,7 @@ class QuizTranslation extends CubistMagicAbstractModel 'question' => 'Question %d:', 'totalQuestions' => 'Total questions:', 'correctAnswers' => 'Correct answers:', - 'restartQuiz' => 'Restart the quiz' + 'restartQuiz' => 'Restart the quiz', ]; } } -- 2.39.5