]> _ Git - fluidbook-toolbox.git/commitdiff
wip #5990 @0.5
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Fri, 17 Nov 2023 09:33:37 +0000 (10:33 +0100)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Fri, 17 Nov 2023 09:33:37 +0000 (10:33 +0100)
app/Fluidbook/Farm.php
app/Http/Controllers/Admin/Operations/FluidbookPublication/AuditOperation.php
app/Jobs/FluidbookAuditRefresh.php [new file with mode: 0644]
app/Models/FluidbookHealthIssues.php
public/packages/fluidbook/toolbox/css/audit.css
public/packages/fluidbook/toolbox/css/audit.css.map
public/packages/fluidbook/toolbox/css/audit.less
resources/views/fluidbook_publication/audit.blade.php

index f348806c76abea8daa480b5ba34a103b800ff6ee..233f63af483d0787ffe551ceb6b0eb589395c6ec 100644 (file)
@@ -30,7 +30,7 @@ class Farm
         ['name' => 'isleofdogs', 'host' => 'paris.cubedesigners.com', 'port' => 9458, 'weight' => 2, 'region' => 'UE'],
         ['name' => 'jumanji', 'host' => 'paris.cubedesigners.com', 'port' => 9459, 'weight' => 2, 'region' => 'UE'],
         ['name' => 'kingkong', 'host' => 'kingkong.cubedesigners.com', 'weight' => 6, 'region' => 'US'],
-        ['name' => 'nakedgun', 'host' => 'nakedgun.cubedesigners.com', 'weight' => 4, 'region' => 'UE'],
+        //['name' => 'nakedgun', 'host' => 'nakedgun.cubedesigners.com', 'weight' => 4, 'region' => 'UE'],
     ];
 
     public static function forceServer($server)
index b65ce9b0fa202bd40db3b1fb75f0c6582ec869dd..6fa37bf78905693c289a2f546711ee0dbc80154a 100644 (file)
@@ -5,12 +5,14 @@ namespace App\Http\Controllers\Admin\Operations\FluidbookPublication;
 use App\Fluidbook\Compiler\Compiler;
 use App\Http\Controllers\Admin\Operations\FluidbookPreviewOperation;
 use App\Http\Middleware\CheckIfAdmin;
+use App\Jobs\FluidbookAuditRefresh;
 use App\Models\FluidbookHealthIssues;
 use App\Models\FluidbookPublication;
 use App\Models\FluidbookTheme;
 use Cubist\Backpack\Http\Controllers\Base\XSendFileController;
 use Cubist\Util\PHP;
 use Illuminate\Support\Facades\Auth;
+use Illuminate\Support\Facades\Cache;
 use Illuminate\Support\Facades\Route;
 
 // __('!!Paramètres des fluidbooks')
@@ -18,7 +20,9 @@ trait AuditOperation
 {
     protected function setupAuditRoutes($segment, $routeName, $controller)
     {
-        Route::match(['get'], $segment . '/{id}/audit', $controller . '@audit');
+        Route::match(['get'], $segment . '/{id}/audit', $controller . '@audit')->name('fluidbook_audit');
+        Route::match(['get'], $segment . '/{id}/audit/refresh', $controller . '@auditRefresh')->name('fluidbook_audit_refresh');
+        Route::match(['get'], $segment . '/{id}/audit/reset', $controller . '@auditReset')->name('fluidbook_audit_reset');
 
     }
 
@@ -35,4 +39,23 @@ trait AuditOperation
         $fluidbook = FluidbookPublication::withoutGlobalScopes()->find($id);
         return view('fluidbook_publication.audit', ['id' => $id, 'fluidbook' => $fluidbook, 'issues' => FluidbookHealthIssues::getIssues($id)]);
     }
+
+    protected function auditRefresh($id)
+    {
+        if (!FluidbookPublication::hasPermission($id, 'admin')) {
+            abort(401);
+        }
+        FluidbookAuditRefresh::dispatch($id);
+        sleep(1);
+        return redirect(route('fluidbook_audit', ['id' => $id]));
+    }
+
+    protected function auditReset($id)
+    {
+        if (!FluidbookPublication::hasPermission($id, 'admin')) {
+            abort(401);
+        }
+        FluidbookHealthIssues::deleteIssues($id);
+        return $this->auditRefresh($id);
+    }
 }
diff --git a/app/Jobs/FluidbookAuditRefresh.php b/app/Jobs/FluidbookAuditRefresh.php
new file mode 100644 (file)
index 0000000..171ce5f
--- /dev/null
@@ -0,0 +1,26 @@
+<?php
+
+namespace App\Jobs;
+
+use App\Models\FluidbookPublication;
+use Illuminate\Support\Facades\Artisan;
+use Illuminate\Support\Facades\Cache;
+
+class FluidbookAuditRefresh extends Base
+{
+    protected $book_id;
+
+    public function __construct($book_id)
+    {
+        $this->onQueue('fluidbookprocess');
+        $this->book_id = $book_id;
+        parent::__construct();
+    }
+
+    public function handle()
+    {
+        Cache::set('fluidbook_auditing_' . $this->book_id, true);
+        Artisan::call('fluidbook:compile ' . $this->book_id);
+        Cache::forget('fluidbook_auditing_' . $this->book_id);
+    }
+}
index 8ba729ba937c1b0b49825a87b3320f746459a2c2..83a5775ac463e2c2942f7beebe06b0051422e758 100644 (file)
@@ -83,10 +83,10 @@ class FluidbookHealthIssues extends ToolboxModel
                 $replace[$k] = '<strong>' . $r . '</strong>';
             }
 
-            if(!isset($data['fixText'])){
-                $fix='';
-            }else{
-                $fix='<a class="btn-link" href="' . __($data['fixURL'], $replaceRaw) . '">' . $data['fixText'] . '</a>';
+            if (!isset($data['fixText'])) {
+                $fix = '';
+            } else {
+                $fix = '<a class="btn-link" target="_blank" href="' . __($data['fixURL'], $replaceRaw) . '">' . $data['fixText'] . '</a>';
             }
 
             $line = ['type' => $issue->type, 'criticality' => $data['criticality'], 'summary' => $data['summary'], 'text' => __($data['text'], $replace), 'count' => $issue->count, 'last' => $issue->updated_at, 'fix' => $fix];
@@ -94,4 +94,9 @@ class FluidbookHealthIssues extends ToolboxModel
         }
         return $res;
     }
+
+    public static function deleteIssues($fluidbookId)
+    {
+        static::withoutGlobalScopes()->where('fluidbook', $fluidbookId)->forceDelete();
+    }
 }
index 161d1991ad8ee7d26578315065a97282f364391d..8ca7e2876f82a95dbf7719824377ee56c4a3e9e7 100644 (file)
@@ -11,4 +11,9 @@ h2 {
 .la-exclamation-triangle {
   color: #F74D07;
 }
+.message {
+  text-align: center;
+  font-size: 130%;
+  margin-top: 60px;
+}
 /*# sourceMappingURL=audit.css.map */
\ No newline at end of file
index c6026795a1823bf2f9cac221c3ecc72c122e8925..2a0b656b1933ff23c72b4957f7e17fba05285fec 100644 (file)
@@ -1 +1 @@
-{"version":3,"sources":["audit.less"],"names":[],"mappings":"AAAA;EACI,gBAAA;;AAGJ;AAAwB;EACpB,eAAA;;AAGJ;EACI,WAAA;;AAGJ;EACI,cAAA","file":"audit.css"}
\ No newline at end of file
+{"version":3,"sources":["audit.less"],"names":[],"mappings":"AAAA;EACI,gBAAA;;AAGJ;AAAwB;EACpB,eAAA;;AAGJ;EACI,WAAA;;AAGJ;EACI,cAAA;;AAGJ;EACI,kBAAA;EACA,eAAA;EACA,gBAAA","file":"audit.css"}
\ No newline at end of file
index 2351407641133d691a4e74c8eab4fdf9f992b2a2..6b0dd0ee7ad03e8c56d914a7764d6d0b759cc851 100644 (file)
@@ -13,3 +13,9 @@ h2 {
 .la-exclamation-triangle {
     color: #F74D07;
 }
+
+.message{
+    text-align: center;
+    font-size: 130%;
+    margin-top: 60px;
+}
index 9b6fa07821e575545d160f72bcc026ba0877f4d4..28a9be948c4f463d861b9c40536d2dc94a3c8a8d 100644 (file)
 
 @section('content')
     <h2>{{__('Audit du fluidbook :title - #:id',['title'=>$fluidbook->title,'id'=>$id])}}</h2>
-    <table
-        class="sortable bg-white table table-striped table-hover nowrap rounded shadow-xs border-xs mt-2 dataTable dtr-inline">
-        <thead>
-        <tr>
-            <th>{{__('Criticité')}}</th>
-            <th>{{__('Type')}}</th>
-            <th>{{__('Détails')}}</th>
-            <th>{{__('Nombre')}}</th>
-            <th>{{__('Date')}}</th>
-            <th>{{__('Corriger le problème')}}</th>
-        </tr>
-        </thead>
-        <tbody>
-
-        @foreach($issues as $issue)
+
+    @if(\Illuminate\Support\Facades\Cache::get('fluidbook_auditing_'.$id))
+        <p class="message">{{__('Audit en cours... Veuillez patienter quelques instants')}}</p>
+        <script>setTimeout(function () {
+                //window.location.reload();
+            }, 5000)</script>
+    @else
+
+        <a href="{{route('fluidbook_audit_refresh',['id'=>$id])}}" class="btn btn-primary" data-style="zoom-in"><span
+                class="ladda-label">
+            <i class="las la-redo-alt"></i> {{__('Relancer l\'audit')}}</span></a>
+        &nbsp; <a href="{{route('fluidbook_audit_reset',['id'=>$id])}}" class="btn btn-primary"
+                  data-style="zoom-in"><span class="ladda-label">
+            <i class="las la-sync"></i> {{__('Effacer les erreurs et relancer l\'audit')}}</span></a>
+
+        <table
+            class="sortable bg-white table table-striped table-hover nowrap rounded shadow-xs border-xs mt-2 dataTable dtr-inline">
+            <thead>
             <tr>
-                <td sorttable_customkey="{{$issue['criticality']}}">{!! $icons[$issue['criticality']] !!}</td>
-                <td sorttable_customkey="{{$issue['type']}}">{{$issue['summary']}}</td>
-                <td>{!! $issue['text'] !!}</td>
-                <td>{{$issue['count']}}</td>
-                <td>{{$issue['last']}}</td>
-                <td>{!! $issue['fix'] !!}</td>
+                <th>{{__('Criticité')}}</th>
+                <th>{{__('Type')}}</th>
+                <th>{{__('Détails')}}</th>
+                <th>{{__('Nombre')}}</th>
+                <th>{{__('Date')}}</th>
+                <th>{{__('Corriger le problème')}}</th>
             </tr>
-        @endforeach
-        </tbody>
-    </table>
+            </thead>
+            <tbody>
+
+            @foreach($issues as $issue)
+                <tr>
+                    <td sorttable_customkey="{{$issue['criticality']}}">{!! $icons[$issue['criticality']] !!}</td>
+                    <td sorttable_customkey="{{$issue['type']}}">{{$issue['summary']}}</td>
+                    <td>{!! $issue['text'] !!}</td>
+                    <td>{{$issue['count']}}</td>
+                    <td>{{$issue['last']}}</td>
+                    <td>{!! $issue['fix'] !!}</td>
+                </tr>
+            @endforeach
+            </tbody>
+        </table>
+
+    @endif
 @endsection