]> _ Git - fluidbook-toolbox.git/commitdiff
wip #5940 @0.5
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Tue, 23 May 2023 15:12:10 +0000 (17:12 +0200)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Tue, 23 May 2023 15:12:10 +0000 (17:12 +0200)
app/Fluidbook/Compiler/Links.php

index e5c5d1331a369f81d0ed280bf9abafc859f28c27..49f74d7b7a668c9137dceb96a275d711b037a550 100644 (file)
@@ -4,6 +4,7 @@ namespace App\Fluidbook\Compiler;
 
 use App\Fluidbook\Link\Link;
 use App\Fluidbook\Link\LinksData;
+use App\SubForms\Link\Base;
 use Cubist\Util\Files\Files;
 use Cubist\Util\Text;
 use Fluidbook\Tools\Links\AnchorLink;
@@ -280,6 +281,9 @@ trait Links
         $allLinksData = [];
         $gamifyCoins = [];
 
+        $canContainLinksTypes = Base::typesCanContainLinks();
+        $assetsDimensions = $this->getFluidbook()->getLinksAssetsDimensions();
+
         usort($links, array($this, '_sortLinks'));
 
         foreach ($links as $linkData) {
@@ -309,6 +313,10 @@ trait Links
                 $linksToAdd[] = $link->getRightClone();
             }
 
+            if (isset($canContainLinksTypes[$linkData['type']])) {
+                $this->addLinkLinks($linkData, $links, $assetsDimensions, $linksToAdd);
+            }
+
             foreach ($linksToAdd as $lta) {
                 try {
                     /** @var $lta Link */
@@ -391,4 +399,31 @@ trait Links
 
         return $css;
     }
+
+    protected function addLinkLinks($link, $links, $assetsDimensions, &$linksToAdd)
+    {
+
+        foreach ($links as $llink) {
+            if ($llink['page'] !== 'link_uid_' . $link['uid']) {
+                continue;
+            }
+            if (!isset($dim)) {
+                $dim = $assetsDimensions['uid_' . $link['uid']]['dim'];
+                $scaleX = $link['width'] / $dim[0];
+                $scaleY = $link['height'] / $dim[1];
+            }
+            $llink['page'] = $link['page'];
+            $llink['attached'] = $link['uid'];
+            $llink['left'] = $link['left'] + ($llink['left'] * $scaleX);
+            $llink['top'] = $link['top'] + ($llink['top'] * $scaleY);
+            $llink['width'] *= $scaleX;
+            $llink['height'] *= $scaleY;
+            $instance = Link::getInstance($this->base62(count($linksToAdd)), $llink, $this);
+            if (is_null($instance) || $instance->ignore()) {
+                continue;
+            }
+            $linksToAdd[] = $instance;
+        }
+
+    }
 }