]> _ Git - fluidbook-toolbox.git/commitdiff
wip #6153 @2.5
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Mon, 24 Jul 2023 18:04:36 +0000 (20:04 +0200)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Mon, 24 Jul 2023 18:04:36 +0000 (20:04 +0200)
app/Models/Quiz.php
app/Models/QuizTranslation.php

index 5de3dd2346608ca1003566805e97692e7eb2c3f3..c518fe94dfc1b4369b2d8553ae0ab9e36b7294b8 100644 (file)
@@ -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' => '<i class="fa fa-language"></i>',
-            'tab' => __('Contenus')]);
+            'column_label' => '<i class="fa fa-language"></i>']);
 
         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']);
 
     }
 
index 97a3a43aed4cee300b930eaf234d6abe50ae3155..a1e20c1e9265cb443a6639c70261df4804f33dc4 100644 (file)
@@ -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',
         ];
     }
 }