]> _ Git - fluidbook-toolbox.git/commitdiff
wip #7868 @1
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Fri, 30 Jan 2026 19:20:41 +0000 (20:20 +0100)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Fri, 30 Jan 2026 19:20:41 +0000 (20:20 +0100)
app/Models/LinkShortener.php
app/Models/ShortLink.php [new file with mode: 0644]

index ce41540f623a69acab4922842974436b2b4e50f8..7a15deef793852363765aef6a29b2bf1d2a472d9 100644 (file)
@@ -29,11 +29,16 @@ class LinkShortener extends ToolboxModel
         $this->addField('api_key', Text::class, __('ClĂ© d\'API'));
     }
 
-    public static function getAvaiableShorteners()
+    public static function getAvaiableShorteners($all = false)
     {
         $res = [];
         foreach (self::all() as $server) {
-            $res[$server->id] = $server->url;
+            if ($all) {
+                $d = ['domain' => $server->url, 'api_key' => $server->api_key, 'owner' => $server->owner];
+            } else {
+                $d = $server->url;
+            }
+            $res[$server->id] = $d;
         }
         return $res;
     }
@@ -61,6 +66,11 @@ class LinkShortener extends ToolboxModel
         });
     }
 
+    public static function listAll($shortener)
+    {
+        return self::_request('list', ['perpage' => 100000000], $shortener);
+    }
+
     protected static function _request($action, $data, $shortener, $format = 'json')
     {
         $s = self::getShortener($shortener);
diff --git a/app/Models/ShortLink.php b/app/Models/ShortLink.php
new file mode 100644 (file)
index 0000000..6abb232
--- /dev/null
@@ -0,0 +1,75 @@
+<?php
+
+namespace App\Models;
+
+use App\Models\Base\ToolboxModel;
+use Cubist\Backpack\Magic\Fields\SelectFromArray;
+use Cubist\Backpack\Magic\Fields\Text;
+use Cubist\Backpack\Magic\Traits\CustomDataSource;
+use DateTime;
+
+class ShortLink extends ToolboxModel
+{
+    use CustomDataSource;
+
+    protected $table = 'short_link';
+    protected $_options = ['name' => 'shortlink',
+        'singular' => 'lien',
+        'plural' => 'liens'];
+
+    protected $_enableEdition = false;
+    protected $_enableClone = false;
+    protected $_enableCreation = false;
+
+    protected $_enableRevisions = false;
+
+    protected $primaryKey = 'shorturl';
+    public $incrementing = false;
+    protected $keyType = 'string';
+
+    protected static $_permissionBase = 'linkshortener';
+
+    public function setFields()
+    {
+        parent::setFields();
+
+        $this->addField('server', SelectFromArray::class, __('Serveur'), ['options' => LinkShortener::getAvaiableShorteners()]);
+        $this->addField('url', Text::class, __('URL'), ['column' => true]);
+        $this->addOwnerField(['column' => false]);
+    }
+
+    /**
+     * @throws \Exception
+     */
+    protected static function _getData()
+    {
+        $data = [];
+        foreach (LinkShortener::getAvaiableShorteners(true) as $id => $s) {
+            try {
+                foreach (LinkShortener::listAll($id)->result as $i) {
+                    $shorturl = 'https://' . $s['domain'] . '/' . $i->keyword;
+                    $time = new DateTime($i->timestamp);
+                    $d = [
+                        'shorturl' => $shorturl,
+                        'url' => $i->url,
+                        'server' => $id,
+                        'created_at' => $time,
+                        'updated_at' => $time,
+                        'deleted_at' => null,
+                        'created_ok' => '1',
+                        'owner' => $s['owner'],
+                    ];
+                    $data[$shorturl] = $d;
+                }
+            } catch (\Exception $e) {
+
+            }
+        }
+        return $data;
+    }
+
+    public static function shouldRefreshDatabase()
+    {
+        return true;
+    }
+}