]> _ Git - fluidbook-toolbox.git/commitdiff
wip #6248
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Wed, 6 Sep 2023 07:13:09 +0000 (09:13 +0200)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Wed, 6 Sep 2023 07:13:09 +0000 (09:13 +0200)
app/Models/ElearningTranslate.php [new file with mode: 0644]
app/Models/FluidbookTranslate.php

diff --git a/app/Models/ElearningTranslate.php b/app/Models/ElearningTranslate.php
new file mode 100644 (file)
index 0000000..42b3a72
--- /dev/null
@@ -0,0 +1,154 @@
+<?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;
+    }
+
+
+}
index 0f1ed68f96c6ccbde9c16c3bb65fa44d06273b2d..7370293234df469ea501e9e5002dc87a921f0b8c 100644 (file)
@@ -4,7 +4,6 @@
 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;
@@ -157,27 +156,4 @@ class FluidbookTranslate extends Translate
         return $res;
     }
 
-    /**
-     * @param $key string
-     * @return string
-     */
-    public static function keyToStr($key)
-    {
-        if (self::isKey($key)) {
-            return base64_decode(substr($key, 2));
-        }
-        return $key;
-    }
-
-    /**
-     * @param $key string
-     * @return bool
-     */
-    public static function isKey($key)
-    {
-        if (!$key) {
-            return false;
-        }
-        return (bool)preg_match("/^t_[a-zA-Z0-9\/\+]*={0,2}$/", $key);
-    }
 }