]> _ Git - fluidbook-toolbox.git/commitdiff
#7850 @1
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Wed, 26 Nov 2025 14:58:20 +0000 (15:58 +0100)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Wed, 26 Nov 2025 14:58:20 +0000 (15:58 +0100)
app/Jobs/AuditLinkRegister.php
app/Models/FluidbookCollection.php

index cd8acce3cba1474f679fc64e1e149937d7ac5529..a94b45d59c40848036bbd8392e53c62e12d34c96 100644 (file)
@@ -21,12 +21,11 @@ class AuditLinkRegister extends Base
 
     public function handle()
     {
-        $publications = Arr::flatten(FluidbookCollection::where('links_audit', 1)->pluck('publications')->toArray(), 1);
-
-        $publications = array_map(function ($n) {
-            return $n['fluidbook'];
-        }, $publications);
-
+        $collections = FluidbookCollection::where('links_audit', 1)->get();
+        $publications = [];
+        foreach ($collections as $collection) {
+            $publications = array_merge($publications, $collection->getFluidbooksID());
+        }
         // Nécessaire pour vérifier si la liste des fluidbooks fourni par les collections
         // existent vraiment ou s'ils ont été supprimé sans être supprimé dans la collection
         $publications = FluidbookPublication::whereIn('id', $publications)->pluck('id');
@@ -37,6 +36,7 @@ class AuditLinkRegister extends Base
             $key = $item->fluidbook_id . '_' . $item->link_id;
             $existing[$key] = ['fluidbook_id' => $item->fluidbook_id, 'link_id' => $item->link_id, 'page' => $item->page, 'url' => $item->url];
         }
+        $seen = [];
 
         foreach ($publications as $publication) {
             $publication = (int)$publication;
@@ -55,6 +55,7 @@ class AuditLinkRegister extends Base
             });
 
             foreach ($links as $link) {
+                $seen[] = $publication . '_' . $link['uid'];
                 $link['to'] = trim($link['to']);
                 if (Arr::exists($link, 'video_service')) {
                     if ($link['type'] == LinkAlias::WEBVIDEO && $link['video_service'] === "youtube") {
@@ -76,6 +77,8 @@ class AuditLinkRegister extends Base
                     'page' => $link['page'],
                     'url' => $link['to'],
                 ];
+
+
             }
 
             if (count($externalLinks) > 0) {
@@ -84,6 +87,15 @@ class AuditLinkRegister extends Base
             Log::info('Parsed fluidbook ' . $publication . ' : found ' . count($externalLinks) . ' links');
         }
 
+        // Delete links that are not anymore in the fluidbooks
+        $missing = array_diff(array_keys($existing), $seen);
+        foreach ($missing as $m) {
+            $e = explode('_', $m, 2);
+            FluidbookAuditLink::where('fluidbook_id', $e[0])->where('link_id', $e[1])->delete();
+
+        }
+        Log::info('Deleted ' . count($missing) . ' links');
+
 
         Log::info('Job exécuté avec succès');
     }
index 4bc3127ba2b60e4c2524e5f10c2915df2919ffab..993f44be4bbb316eceffa95f6f3821ba41fbf125 100644 (file)
@@ -216,6 +216,18 @@ class FluidbookCollection extends ToolboxStatusModel
         }
     }
 
+    public function getFluidbooksID(){
+        $res=[];
+        $fluidbooks=$this->publications;
+        if(!is_array($fluidbooks)){
+            $fluidbooks=json_decode($fluidbooks,true);
+        }
+        foreach ($fluidbooks as $fluidbook) {
+            $res[]=$fluidbook['fluidbook'];
+        }
+        return array_unique($res);
+    }
+
     public function setStatus($newStatus)
     {
         parent::setStatus($newStatus);