]> _ Git - fluidbook-toolbox.git/commitdiff
wip #7868 @1
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Tue, 20 Jan 2026 17:23:22 +0000 (18:23 +0100)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Tue, 20 Jan 2026 17:23:22 +0000 (18:23 +0100)
app/Fluidbook/Compiler/Links.php
app/Fluidbook/LinkShortener.php
app/Http/Controllers/Admin/FluidbookAuditLinkCrudController.php [new file with mode: 0644]
app/Http/Controllers/Admin/FluidbookCollectionCrudController.php
app/Http/Controllers/Admin/FluidbookPublicationCrudController.php
app/Models/Traits/PublicationSettings.php

index d256e9fc1d86e61cc76885ad4a9bc35fc3ef1972..e7e323c94d1363740377d27b6bc8466024414911 100644 (file)
@@ -529,5 +529,12 @@ trait Links
         $this->config->push('triggersLinks', ['page' => $page, 'link' => $link, 'delay' => $delay]);
     }
 
+    public function shortenURL($url)
+    {
+        if ($this->config->linkShortener === 'none' || !Url::isDistant($url)) {
+            return $url;
+        }
+        return $url;
+    }
 
 }
index 3d89617bbd4b180cc5840b3b52b64a44448d3e81..65102b52adad213910587b34bde4161e185484c2 100644 (file)
@@ -2,10 +2,42 @@
 
 namespace App\Fluidbook;
 
+use GuzzleHttp\Client;
+
 class LinkShortener
 {
+    protected static $shorteners = ['l.fluidbook.com' => '324507fb8d'];
+
     public static function getAvaiableShorteners()
     {
-        return ['l.fluidbook.com'];
+        return array_keys(self::$shorteners);
+    }
+
+    public static function shorturl($url, $shortener)
+    {
+        return cache()->remember('shorturl_' . $shortener . '_' . $url, 3600, function () use ($url, $shortener) {
+            $res = self::_request('shorturl', ['url' => $url], $shortener);
+            if ($res->shorturl) {
+                return $res->shorturl;
+            }
+        });
+    }
+
+    protected static function _request($action, $data, $shortener, $format = 'json')
+    {
+        if (!isset(self::$shorteners[$shortener])) {
+            throw new \Exception("shortener " . $shortener . " not available");
+        }
+
+        $apiURL = 'https://' . $shortener . '/yourls-api.php';
+        $data['action'] = $action;
+        $data['format'] = $format;
+        $data['hash'] = 'sha512';
+        $data['timestamp'] = time();
+        $data['signature'] = hash($data['hash'], $data['timestamp'] . self::$shorteners[$shortener]);
+
+        $client = new Client();
+        $response = $client->request('POST', $apiURL, ['form_params' => $data, 'http_errors' => false]);
+        return json_decode($response->getBody());
     }
 }
diff --git a/app/Http/Controllers/Admin/FluidbookAuditLinkCrudController.php b/app/Http/Controllers/Admin/FluidbookAuditLinkCrudController.php
new file mode 100644 (file)
index 0000000..b3f13e1
--- /dev/null
@@ -0,0 +1,28 @@
+<?php
+
+namespace App\Http\Controllers\Admin;
+
+class FluidbookAuditLinkCrudController extends \Cubist\Backpack\Magic\Controllers\CubistMagicController
+{
+    use \Cubist\Backpack\Magic\Operations\CreateOperation;
+       use \Cubist\Backpack\Http\Controllers\Operations\CloneEditOperation;
+       use \Backpack\CRUD\app\Http\Controllers\Operations\UpdateOperation;
+       use \Cubist\Backpack\Http\Controllers\Operations\BulkPublishOperation;
+       use \Backpack\CRUD\app\Http\Controllers\Operations\CloneOperation;
+       use \Backpack\CRUD\app\Http\Controllers\Operations\BulkCloneOperation;
+       use \Backpack\CRUD\app\Http\Controllers\Operations\DeleteOperation;
+       use \Backpack\CRUD\app\Http\Controllers\Operations\BulkDeleteOperation;
+       
+
+
+    /*
+       __('auditlink')
+       __('auditlinks')
+       */
+
+    protected $_modelNamespace = 'App\Models\FluidbookAuditLink';
+    protected $_routeURL = 'fluidbook-audit_link';
+    protected $_singular = 'auditlink';
+    protected $_plural = 'auditlinks';
+    protected $_oneInstance= false;
+}
index 5a68c6bb8791fc5d20771fe250193e62070d0e58..c02fd543b7c785c6fae8c6d2a661e0d8d0946544 100644 (file)
@@ -18,6 +18,7 @@ class FluidbookCollectionCrudController extends \Cubist\Backpack\Magic\Controlle
        use \App\Http\Controllers\Admin\Operations\ChangestatusOperation;
        use \App\Http\Controllers\Admin\Operations\FluidbookCollection\SettingsExportOperation;
        use \App\Http\Controllers\Admin\Operations\FluidbookCollection\AuditLinksOperation;
+       
 
 
     /*
index 5f428c757c28d6441a9ba2374abf22bd16d216e5..fc06cf547c908a00ca28a590c3d9ffeea661cf4b 100644 (file)
@@ -24,6 +24,7 @@ class FluidbookPublicationCrudController extends \Cubist\Backpack\Magic\Controll
        use \App\Http\Controllers\Admin\Operations\FluidbookPublication\Services\ExportPdfOperation;
        use \App\Http\Controllers\Admin\Operations\FluidbookPublication\Services\GetPageFromWebsiteOperation;
        use \App\Http\Controllers\Admin\Operations\FluidbookPublication\Services\FormOperation;
+       use \App\Http\Controllers\Admin\Operations\FluidbookPublication\Services\PDFFormOperation;
        use \App\Http\Controllers\Admin\Operations\FluidbookPublication\Services\BastideOperation;
        use \App\Http\Controllers\Admin\Operations\FluidbookPublication\Services\PumaOperation;
        use \App\Http\Controllers\Admin\Operations\FluidbookPublication\Services\KimplayOperation;
index a5d3893f5ae065dac21a56c2c5e6947ef988fb7d..ed795592ff27fcfc7c3819c959087165bf89a3ad 100644 (file)
@@ -1093,9 +1093,8 @@ trait PublicationSettings
         $this->_addSettingField('', FormSeparator::class);
         $this->_addSettingField('autolinkRule', SelectFromArray::class, $this->__('Règle pour l\'ajout des liens via excel'), ["default" => "web", 'options' => ['web' => 'Lien web', 'cart' => __('Lien panier'), 'steelite' => 'Steelite']]);
         $this->_addSettingField('', FormSeparator::class);
-        $shorteners = LinkShortener::getAvaiableShorteners();
         $options = ['none' => $this->__('Aucun')];
-        foreach ($shorteners as $shortener) {
+        foreach (LinkShortener::getAvaiableShorteners() as $shortener) {
             $options[$shortener] = $shortener;
         }
         $this->_addSettingField('linkShortener', SelectFromArray::class, $this->__('Raccourcisseur de liens'), ['default' => 'none', 'options' => $options]);