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
{
protected $sassVariables = [];
protected $mixDirectories = [];
+ protected $data;
public function __construct($quiz, $dest, $forceScorm = false)
{
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);
$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);
$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
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)));
}
}
- 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)
<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>