]> _ Git - fluidbook-toolbox.git/commitdiff
wip #5798 @1
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Fri, 10 Mar 2023 08:43:51 +0000 (09:43 +0100)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Fri, 10 Mar 2023 08:43:51 +0000 (09:43 +0100)
app/Fluidbook/Links.php
resources/views/layouts/linkeditor.blade.php

index 3d134fe26c954b441eba3b3f1f9e2f0e4737f6e5..5089daba334e2349da734ddb01d6d4b95a130b56 100644 (file)
@@ -144,6 +144,7 @@ class Links
         $dir = self::getLinksDir($book_id);
 
         $file = Files::firstThatExists($dir . '/' . $time . '.links3.gz', $dir . '/' . $time . '.links.gz');
+        $metafile = Files::firstThatExists($dir . '/' . $time . '.meta3.gz', $dir . '/' . $time . '.meta.gz');
         if ($time === 'latest' && !file_exists($file)) {
             $versions = self::getLinksVersions($book_id);
             foreach ($versions as $version => $m) {
@@ -163,7 +164,14 @@ class Links
             return;
         }
 
-        $r = json_decode(gzdecode(file_get_contents($file)), true);
+        $r = self::_decodegzfile($file);
+        $meta = array_merge(['version' => 2, 'onepage' => false], self::_decodegzfile($metafile));
+
+        /** @var FluidbookPublication $fluidbook */
+        $fluidbook = FluidbookPublication::find($book_id);
+        if ($fluidbook->isOnePage() && !$meta['onepage']) {
+            self::_moveToOnePageLinks($r['links'], $r['rulers'], $fluidbook);
+        }
 
         $links = self::_UID($r['links']);
         $rulers = self::_UID($r['rulers']);
@@ -177,6 +185,46 @@ class Links
         self::_fixLinks($links);
     }
 
+    protected static function _decodegzfile($file)
+    {
+        return json_decode(gzdecode(file_get_contents($file)), true);
+    }
+
+    /**
+     * @param $links array[]
+     * @param $rulers array[]
+     * @param $fluidbook FluidbookPublication
+     * @return void
+     */
+    public static function _moveToOnePageLinks(&$links, &$rulers, $fluidbook)
+    {
+        $w = $fluidbook->getPageWidth();
+        foreach ($links as $k => $link) {
+            // Si le lien est totalement hors de la page à droite, on le déplace à la page suivante
+            if ($link['left'] > $w) {
+                $link['left'] -= $w;
+                $link['page']++;
+            }
+            // Si le lien est totalement hors de la page à gauche, on le déplace à la page précédente
+            if ($link['left'] + $link['width'] < 0) {
+                $link['left'] += $w;
+                $link['page']--;
+            }
+            // Si le lien dépasse à droite, on le déplace à la page suivante si la surface qui dépasse est supérieure à 50% de la surface du lien
+            if ($link['left'] < $w && $link['left'] + $link['width'] > $w && ($w - $link['left']) < ($link['width'] / 2)) {
+                $link['left'] -= $w;
+                $link['page']++;
+            }
+            // Si le lien dépasse à gauche, on le déplace à la page précédente si la surface qui dépasse est supérieure à 50% de la surface du lien
+            if ($link['left'] < 0 && $link['left'] < ($link['width'] / -2)) {
+                $link['left'] += $w;
+                $link['page']--;
+            }
+
+            $links[$k] = $link;
+        }
+    }
+
     protected static function _UID($items)
     {
         $res = [];
@@ -337,8 +385,11 @@ class Links
 
     public static function saveLinksInFile($book_id, $user_id, $comments, $links, $rulers = [], $specialLinks = [], $specialRulers = [])
     {
+        /** @var FluidbookPublication $fluidbook */
+        $fluidbook = FluidbookPublication::find($book_id);
+
         $lr = self::mergeLinksAndRulers($links, $rulers, $specialLinks, $specialRulers);
-        $meta = ['links' => count($lr['links']), 'rulers' => count($lr['rulers']), 'comments' => $comments, 'user' => $user_id];
+        $meta = ['links' => count($lr['links']), 'rulers' => count($lr['rulers']), 'comments' => $comments, 'user' => $user_id, 'version' => 3, 'onepage' => $fluidbook->isOnePage()];
         $base = self::getLinksDir($book_id) . '/' . time();
         $latestLinks = self::getLinksDir($book_id) . '/latest.links3.gz';
         $latestMeta = self::getLinksDir($book_id) . '/latest.meta3.gz';
index 2e78ac56edde8bca873c6d509e2cb4e01a26a70b..1a16f99153cbca0ef48170b7d67d6d9f537ef306 100644 (file)
@@ -1,5 +1,5 @@
 {{-- __('!! Editeur de liens') --}}
-<!DOCTYPE html>
+    <!DOCTYPE html>
 <html lang="{{ app()->getLocale() }}" dir="{{ config('backpack.base.html_direction') }}">
 <head>
     <meta charset="utf-8">