--- /dev/null
+<?php
+
+
+namespace App\Models;
+
+use App\Fields\NSISLocale;
+use App\Http\Controllers\Admin\Base\FluidbookTranslateController;
+use App\Http\Controllers\Admin\Operations\FluidbookTranslate\ExcelExportOperation;
+use App\Http\Controllers\Admin\Operations\FluidbookTranslate\ExcelImportOperation;
+use App\Models\Traits\FluidbookPlayerBranches;
+use Cubist\Backpack\Facades\App;
+use Cubist\Backpack\Magic\Models\Translate;
+use Cubist\Util\PHP;
+use Illuminate\Support\Facades\Cache;
+
+// __('!!Traduction des contenus e-learning')
+class ElearningTranslate extends Translate{
+
+ protected $table = 'elearning_translate';
+
+ protected static $_allTranslations = null;
+
+ protected $_enableRevisions = false;
+
+ protected $_options = ['name' => 'elearning-translate',
+ 'singular' => 'traduction',
+ 'plural' => 'traductions',
+ 'oneinstance' => true];
+
+ protected $_operations = [ExcelExportOperation::class, ExcelImportOperation::class];
+
+
+ public function __construct(array $attributes = [])
+ {
+ PHP::neverStop();
+
+ $this->_availableLocales = \Cubist\Locale\Locale::getList(App::getLocale());
+ $this->addEditAction('fluidbook_translate.excel_export');
+ $this->addEditAction('fluidbook_translate.excel_import');
+
+ parent::__construct($attributes);
+ }
+
+ public function setFields()
+ {
+ //$this->addField(['name' => 'nsis', 'type' => NSISLocale::class, 'label' => __('Langue de l\'installeur') . ' (' . __('Version offline windows') . ')', 'translatable' => true, 'default' => 'English']);
+ parent::setFields();
+ }
+
+ public function getPaths()
+ {
+ $res = [];
+ foreach (self::getActiveBranches() as $branch) {
+ $res['Player - git:' . $branch] = 'resources/fluidbookpublication/player/branches/' . $branch . '/js';
+ $res['Player - local:' . $branch] = 'resources/fluidbookpublication/player/local/' . $branch . '/js';
+ }
+ //$res[__('Compilateur')]='resources/compiler';
+ //$res[__('Application')]=''resources/html5app';
+ return $res;
+ }
+
+ public function getExtensions()
+ {
+ return array_merge(parent::getExtensions(), ['js']);
+ }
+
+ protected function _getLanguageFile($locale)
+ {
+ return self::getLanguageFile($locale);
+ }
+
+ public static function getLanguageFile($locale)
+ {
+ return resource_path('lang/elearning.' . $locale . '.json');
+ }
+
+ public static function getAllElearningTranslations($force = false)
+ {
+ if (null === self::$_allTranslations) {
+ $cacheKey = 'all_elearning_translations';
+ if ($force) {
+ Cache::forget($cacheKey);
+ }
+ self::$_allTranslations = Cache::remember($cacheKey, 3600, function () {
+ start_measure('Get all elearning translations !');
+ $t = ElearningTranslate::find(1);
+ try {
+ $json = json_decode($t->getRawOriginal('content_translatable'), true, 512, JSON_THROW_ON_ERROR);
+ } catch (\Exception $e) {
+ $json = [];
+ }
+
+ $res = [];
+
+ foreach ($json as $code => $tr) {
+ $res[$code] = [];
+ foreach ($tr as $k => $v) {
+ $res[$code][$k] = ['str' => self::keyToStr($k), 'translation' => $v];
+ }
+ }
+ stop_measure('Get all fluidbook translations !');
+ return $res;
+
+ });
+ }
+ return self::$_allTranslations;
+ }
+
+ public static function getCompiledTranslations()
+ {
+ $raw = self::getAllElearningTranslations();
+ $res = [];
+ foreach ($raw as $code => $data) {
+ $res[$code] = [];
+ foreach ($data as $k => $v) {
+ if (is_string($v)) {
+ $res[$code][$k] = $v;
+ } else {
+ $res[$code][$v['str']] = $v['translation'];
+ }
+ }
+ }
+ return $res;
+ }
+
+ /**
+ * @throws \JsonException
+ */
+ public static function updateElearningTranslation($locale, $translations)
+ {
+ /** @var FluidbookTranslate $t */
+ $t = self::find(1);
+ $json = json_decode($t->getRawOriginal('content_translatable'), true, 512, JSON_THROW_ON_ERROR);
+ foreach ($translations as $k => $v) {
+ $json[$locale][$k] = $v;
+ }
+ $t->setRawAttributes(['content_translatable' => json_encode($json, JSON_THROW_ON_ERROR)]);
+ $t->save();
+ }
+
+ /**
+ * @param string $locale
+ * @return array[]|null
+ * @throws \JsonException
+ */
+ public static function getElearningTranslation($locale)
+ {
+ $all = self::getAllFluidbookTranslations();
+ $res = $all[$locale] ?? null;
+ return $res;
+ }
+
+
+}