]> _ Git - fluidbook-toolbox.git/commitdiff
wip #6180 @1
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Thu, 27 Jul 2023 17:49:24 +0000 (19:49 +0200)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Thu, 27 Jul 2023 17:49:24 +0000 (19:49 +0200)
app/Elearning/QuizCompiler.php
app/Models/Quiz.php
resources/quizv2/style/101-header.sass [new file with mode: 0644]
resources/quizv2/style/style.sass
resources/views/quizv2/index.blade.php
resources/views/vendor/backpack/base/inc/sidebar_content.blade.php

index 2b959fa22592ed3cedd892e9d1447c8865a0a85f..bf009f5342505c99eb0c13aca6f9cfb016591759 100644 (file)
@@ -9,8 +9,9 @@ use App\Models\QuizTheme;
 use Cubist\Scorm\Manifest;
 use Cubist\Scorm\Version;
 use Cubist\Util\CommandLine\Npx;
+use Cubist\Util\Data;
+use Cubist\Util\Files\Files;
 use Cubist\Util\Files\VirtualDirectory;
-use Cubist\Util\Graphics\Color;
 
 class QuizCompiler extends Base
 {
@@ -31,6 +32,7 @@ class QuizCompiler extends Base
 
     protected $sassVariables = [];
     protected $mixDirectories = [];
+    protected $data;
 
     public function __construct($quiz, $dest, $forceScorm = false)
     {
@@ -43,7 +45,11 @@ class QuizCompiler extends Base
 
     public function handle()
     {
-        $this->copyFilesFromResources();
+        $compileVdir = new VirtualDirectory($this->compilePath);
+        $this->initData($compileVdir);
+        $this->copyFilesFromResources($compileVdir);
+        $compileVdir->sync(true);
+
         // Add data related to the current quiz in the "to compile" files
         $this->writeStyles();
         $this->writeData($data);
@@ -53,8 +59,9 @@ class QuizCompiler extends Base
         $vdir = new VirtualDirectory($this->dest);
         $vdir->copyDirectory($this->compilePath . '/dist/css', 'css');
         $vdir->copyDirectory($this->compilePath . '/dist/js', 'js');
+        $vdir->copyDirectory($this->compilePath . '/dist/assets', 'assets');
 
-        $html = view('quizv2.index', ['quiz' => $this->quiz, 'data' => $data])->render();
+        $html = view('quizv2.index', ['data' => new Data($this->data), 'quiz' => $this->quiz, 'theme' => $this->theme])->render();
 
         $vdir->file_put_contents('index.html', $html);
 
@@ -66,6 +73,31 @@ class QuizCompiler extends Base
         $vdir->sync(true);
     }
 
+    /**
+     * Init data object from Quiz and ThemeQuiz Models     * These data will be injected into the quiz at compile time
+     *
+     * @return void
+     * @throws \Exception
+     * @var $vdir VirtualDirectory
+     */
+    protected function initData($vdir)
+    {
+        $this->data = $this->quiz->getData();
+        $themePageData = $this->theme->getPageData();
+        $themeData = $themePageData->getRawData();
+        foreach ($this->theme->getFields() as $f) {
+            if ($f instanceof \Cubist\Backpack\Magic\Fields\Files) {
+                $path = $themePageData->getImageFile($f->getName());
+                $spl = new \SplFileInfo($path);
+                $dest = 'assets/' . Files::tidyName($spl->getFilename());
+                $themeData[$f->getName()] = $dest;
+                $vdir->copy($path, $dest);
+            }
+        }
+        $this->mixDirectories['assets'] = 'dist/assets';
+        $this->data['theme'] = new Data($themeData);
+    }
+
     protected function writeStyles()
     {
         // Main texts color
@@ -101,8 +133,8 @@ class QuizCompiler extends Base
 
     protected function writeData(&$data)
     {
-        $data = $this->quiz->getData();
-        $json = json_encode($data, JSON_THROW_ON_ERROR);
+
+        $json = json_encode($this->data, JSON_THROW_ON_ERROR);
         $dataSource = $this->compilePath . '/js/quiz.js';
         file_put_contents($dataSource, str_replace('this.data = data;', 'this.data = ' . $json . ';', file_get_contents($dataSource)));
     }
@@ -117,13 +149,15 @@ class QuizCompiler extends Base
     }
 
 
-    protected function copyFilesFromResources()
+    /**
+     * @param $vdir VirtualDirectory
+     * @return void
+     */
+    protected function copyFilesFromResources($vdir)
     {
         // Copy base files from resources
-        $compile = new VirtualDirectory($this->compilePath);
-        $compile->copyDirectory(resource_path('quizv2/js'), 'js');
-        $compile->copyDirectory(resource_path('quizv2/style'), 'style');
-        $compile->sync(true);
+        $vdir->copyDirectory(resource_path('quizv2/js'), 'js');
+        $vdir->copyDirectory(resource_path('quizv2/style'), 'style');
     }
 
     protected function runWebpack($dev = false)
index adb0707f8d9a5346e118e1843675dd45109782d4..041ffd86bc8b454ab29e2860933c97d4e29623f1 100644 (file)
@@ -6,6 +6,7 @@ use App\Elearning\QuizCompiler;
 use App\Fields\SCORMVersion;
 use App\Http\Controllers\Admin\Operations\ChangeownerOperation;
 use App\Http\Controllers\Admin\Operations\Quiz\DownloadOperation;
+use App\Http\Controllers\Admin\Operations\Quiz\ImportOperation;
 use App\Http\Controllers\Admin\Operations\Quiz\LogOperation;
 use App\Http\Controllers\Admin\Operations\Quiz\PreviewOperation;
 use App\Http\Controllers\Admin\Operations\Quiz\ReportOperation;
diff --git a/resources/quizv2/style/101-header.sass b/resources/quizv2/style/101-header.sass
new file mode 100644 (file)
index 0000000..0520c7f
--- /dev/null
@@ -0,0 +1,2 @@
+#logo
+    height: 40px
index 2f3559ccf14eb71ce0bb900aaef57850b6c2a9b7..2f98bde2de53e75add00c9a8474f4660c506d6c1 100644 (file)
@@ -3,3 +3,4 @@
 @import 003-reset
 
 @import 100-global
+@import 101-header
index 6c1c281b2b0ae68230822a31a5b23527ac75662d..97f9c43caaf6341aca8b8253c4aa56badce2421c 100644 (file)
@@ -6,21 +6,21 @@
     <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, shrink-to-fit=no">
     <meta name="width" content="1024">
     <meta name="height" content="768">
-    <title>{{$quiz->title}}</title>
+    <title>{{$data->title}}</title>
     <link type="text/css" rel="stylesheet" href="css/style.css">
 </head>
 <body>
 @include("quizv2.sprite")
 <div id="quiz">
-    <div id="title">
-        <h1 id="quizTitle">{{$quiz->title}}</h1>
-        <img src="{{$quiz->logo}}" id="logo"/>
-    </div>
-    @if($quiz->intro_enable)
+    <header id="title">
+        <h1 id="quizTitle">{{$data->title}}</h1>
+        <img src="{{$data->theme->logo}}" id="logo"/>
+    </header>
+    @if($data->intro_enable)
         <div class="screen" id="welcome">
-            <h2>{{$quiz->intro_title}}</h2>
-            <p>{{$quiz->intro_text}}</p>
-            <a class="btn">{{$quiz->intro_button}} <span data-icon="running-man"></span></a>
+            <h2>{{$data->intro_title}}</h2>
+            <p>{{$data->intro_text}}</p>
+            <a class="btn">{{$data->intro_button}} <span data-icon="running-man"></span></a>
         </div>
     @endif
 </div>
index 8d68af7eac3510a7f232a176c64204e8d51d9a6e..c588e3fffff372e375fd2b7ac1de93b21b3e0799 100644 (file)
@@ -69,7 +69,7 @@
                 <li class="nav-item"><a class="nav-link" href="{{ backpack_url('quiz') }}"><i
                             class="la la-question nav-icon"></i> {{__('Quiz')}}</a></li>
             @endcan
-            @can('quiz:read-theme')
+            @can('quiz-theme:read')
                 <li class="nav-item"><a class="nav-link" href="{{ backpack_url('quiz-theme') }}"><i
                             class="la la-palette nav-icon"></i> {{__('Thèmes')}}</a></li>
             @endcan