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
{
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;
'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'],
]);
'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',
'0' => 'never',
],
'default' => true,
- 'tab' => __('Paramètres'),
'when' => ['type' => 'quiz'],
]);
'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'],
]);
'label' => $label,
'hint' => __('Code Javascript'),
'type' => 'Textarea',
- 'tab' => __('Paramètres'),
'when' => ['type' => 'quiz'],
]);
}
'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']);
}