]> _ Git - fluidbook-toolbox.git/commitdiff
wait #7158 @1.5
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Mon, 28 Oct 2024 12:18:21 +0000 (13:18 +0100)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Mon, 28 Oct 2024 12:18:21 +0000 (13:18 +0100)
app/Fluidbook/Compiler/Compiler.php
app/Fluidbook/Farm.php
app/Models/FluidbookHealthIssues.php

index 3dbdcdf9b54e2d4e2d55f74101c8eb7028bf2319..dd9e11d8ad791084f36d7ae0c044fb9d94507d4d 100644 (file)
@@ -8,6 +8,7 @@ use App\Fluidbook\SocialImage;
 use App\Http\Controllers\Admin\Operations\Tools\Favicon;
 use App\Jobs\Base;
 use App\Jobs\FluidbookImagesPreprocess;
+use App\Models\File;
 use App\Models\FluidbookHealthIssues;
 use App\Models\FluidbookPublication;
 use App\Models\FluidbookTheme;
@@ -2423,6 +2424,16 @@ class Compiler extends Base implements CompilerInterface, IVirtualDirectoryError
         if (!file_exists($dir)) {
             Files::mkdir($dir);
             Zip::extract($zipPath, $dir, $junkPaths);
+
+            $l = Files::listFilesAndDirectories($dir);
+
+            if (count($l['directories']) === 1 && count($l['files']) === 0) {
+                $d = $l['directories'][0];
+                `mv $dir/$d/* $dir`;
+                rmdir($dir . '/' . $d);
+            }
+
+
             if ($moveAssets) {
                 `mv $dir/Assets/* $dir`;
                 rmdir($dir . '/Assets');
@@ -2432,9 +2443,15 @@ class Compiler extends Base implements CompilerInterface, IVirtualDirectoryError
         return array('dir' => $dir, 'fdir' => $fdir);
     }
 
-    public function getConfigZIP($d)
+    public function getConfigZIP($d,$file=null, $uid = null, $page = null)
     {
         $res = array('type' => 'zip', 'width' => 0, 'height' => 0);
+        if (!file_exists($d . '/index.html') && !file_exists($d . '/init.js')) {
+            FluidbookHealthIssues::addIssue($this->book_id, FluidbookHealthIssues::TYPE_INVALID_MULTIMEDIA_ASSET, ['uid' => $uid, 'page' => $page,'file'=>$file]);
+            return null;
+        }
+
+
         if (file_exists($d . '/index.html')) {
             $doc = new DOMDocument();
             @$doc->loadHTMLFile($d . '/index.html');
index 5fc32e23bbbbc6370700e455a52689ebc69fe576..dc89a9d4c62ab9f87838c47b10361d39c21def81 100644 (file)
@@ -25,7 +25,7 @@ class Farm
         ['name' => 'dracula', 'host' => 'dracula.cubedesigners.com', 'weight' => 1, 'region' => Region::EUROPE, 'local' => true],
         ['name' => 'dobermann', 'host' => 'dobermann.cubedesigners.com', 'weight' => 6, 'region' => Region::EUROPE, 'local' => false],
         ['name' => 'elephantman', 'host' => 'paris.cubedesigners.com', 'weight' => 2, 'region' => Region::EUROPE, 'local' => false],
-        ['name' => 'fastandfurious', 'host' => 'fastandfurious.cubedesigners.com', 'weight' => 2, 'region' => Region::EUROPE, 'local' => false],
+        ['name' => 'fastandfurious', 'host' => 'fastandfurious.cubedesigners.com', 'port' => 9460, 'weight' => 2, 'region' => Region::EUROPE, 'local' => false],
         //['name' => 'godzilla', 'host' => 'godzilla.cubedesigners.com', 'weight' => 1, 'region' => Region::EUROPE,'local'=>false],
         ['name' => 'isleofdogs', 'host' => 'paris.cubedesigners.com', 'port' => 9458, 'weight' => 2, 'region' => Region::EUROPE, 'local' => false],
         ['name' => 'jumanji', 'host' => 'paris.cubedesigners.com', 'port' => 9459, 'weight' => 2, 'region' => Region::EUROPE, 'local' => false],
@@ -73,7 +73,7 @@ class Farm
         return self::$_farmServers;
     }
 
-    public static function pickOneServer($preferLocal,$params)
+    public static function pickOneServer($preferLocal, $params)
     {
         $hat = [];
         $pingCache = self::_pingCache();
index a10fda2ca415a4ce6b6900bbc5ffe7eb14be0f4e..8ed325811e7cb57cce0ede5ada47154f56a56505 100644 (file)
@@ -22,8 +22,9 @@ class FluidbookHealthIssues extends ToolboxModel
     const TYPE_TIMEOUT_MAKE_SVG = 9;
     const TYPE_NOT_VALID_IMAGE_IN_LINK = 10;
     const TYPE_TABS_INVALID_SVG = 11;
-    const TYPE_MISSING_JS=12;
-    const TYPE_MISSING_CSS=13;
+    const TYPE_MISSING_JS = 12;
+    const TYPE_MISSING_CSS = 13;
+    const TYPE_INVALID_MULTIMEDIA_ASSET = 14;
 
     const CRIT_ERROR = 5;
     const CRIT_WARNING = 3;
@@ -53,6 +54,20 @@ class FluidbookHealthIssues extends ToolboxModel
             $data = json_encode($data);
         }
         $d = static::getTypeData($fluidbookId);
+
+        if (isset($d['ignore']) && is_array($d['ignore'])) {
+            foreach ($d['ignore'] as $k => $ig) {
+                if (!isset($data[$k])) {
+                    continue;
+                }
+                foreach ($ig as $i) {
+                    if (stristr($data[$k], $i) !== false) {
+                        return;
+                    }
+                }
+            }
+        }
+
         $issue = self::withoutGlobalScopes()->where('fluidbook', $fluidbookId)->where('type', $type)->where('data', $data)->first();
         $crit = $d[$type]['criticality'];
         if (!$issue) {
@@ -172,13 +187,22 @@ class FluidbookHealthIssues extends ToolboxModel
                     'summary' => __('Bibliothèque JS introuvable'),
                     'criticality' => self::CRIT_WARNING,
                     'text' => 'Fichier JS indisponible : :file. Certaines fonctionnalités peuvent ne pas fonctionner.',
+                    'ignore' => ['file' => ['fluidbook.links.animations.js']],
+                ],
+            static::TYPE_MISSING_CSS =>
+                [
+                    'summary' => __('Feuille de style introuvable'),
+                    'criticality' => self::CRIT_WARNING,
+                    'text' => 'Feuille de style introuvable : :file. Certaines fonctionnalités peuvent ne pas fonctionner.',
+                ],
+            static::TYPE_INVALID_MULTIMEDIA_ASSET =>
+                [
+                    'summary' => __('Contenu de lien multimedia invalide'),
+                    'criticality' => self::CRIT_ERROR,
+                    'text' => 'Le fichier :file chargé dans le lien :uid (page :page) est invalide. Il devrait contenir à la racine un des fichiers suivants (index.html ou init.js)',
+                    'fixText' => __('Aller sur l\'éditeur de liens'),
+                    'fixURL' => $linkeditorURL,
                 ],
-            static::TYPE_MISSING_CSS=>
-            [
-                'summary' => __('Feuille de style introuvable'),
-                'criticality' => self::CRIT_WARNING,
-                'text' => 'Feuille de style introuvable : :file. Certaines fonctionnalités peuvent ne pas fonctionner.',
-            ],
         ];
     }