]> _ Git - fluidbook-toolbox.git/commitdiff
wip #7828 @5:00
authorsoufiane <soufiane@cubedesigners.com>
Mon, 3 Nov 2025 18:18:41 +0000 (19:18 +0100)
committersoufiane <soufiane@cubedesigners.com>
Mon, 3 Nov 2025 18:18:41 +0000 (19:18 +0100)
app/Http/Controllers/Admin/FluidbookCollectionCrudController.php
app/Http/Controllers/Admin/Operations/FluidbookCollection/AuditLinksOperation.php [new file with mode: 0644]
app/Models/FluidbookAuditLink.php
app/Models/FluidbookCollection.php

index 9acf005b38c9a37bad7364bed75410c35ed3707e..5a68c6bb8791fc5d20771fe250193e62070d0e58 100644 (file)
@@ -17,7 +17,7 @@ class FluidbookCollectionCrudController extends \Cubist\Backpack\Magic\Controlle
        use \App\Http\Controllers\Admin\Operations\ChangeownerOperation;
        use \App\Http\Controllers\Admin\Operations\ChangestatusOperation;
        use \App\Http\Controllers\Admin\Operations\FluidbookCollection\SettingsExportOperation;
-       
+       use \App\Http\Controllers\Admin\Operations\FluidbookCollection\AuditLinksOperation;
 
 
     /*
diff --git a/app/Http/Controllers/Admin/Operations/FluidbookCollection/AuditLinksOperation.php b/app/Http/Controllers/Admin/Operations/FluidbookCollection/AuditLinksOperation.php
new file mode 100644 (file)
index 0000000..eedc60b
--- /dev/null
@@ -0,0 +1,100 @@
+<?php
+
+namespace App\Http\Controllers\Admin\Operations\FluidbookCollection;
+
+
+use App\Models\FluidbookAuditLink;
+use Cubist\Util\Files\Files;
+use Illuminate\Support\Facades\Route;
+use PhpOffice\PhpSpreadsheet\Spreadsheet;
+use PhpOffice\PhpSpreadsheet\Style\Alignment;
+use PhpOffice\PhpSpreadsheet\Style\Fill;
+use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
+use PhpOffice\PhpSpreadsheet\Style\Protection;
+use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
+
+trait AuditLinksOperation
+{
+    protected function setupAuditLinksRoutes($segment, $routeName, $controller)
+    {
+        Route::match(['get','post'],$segment . '/{id}/export_excel', $controller . '@exportExcel')->name("download_audit_links");
+    }
+
+    public function exportExcel() {
+        $errorlinks = FluidbookAuditLink::whereNotNull('error_code')->get()->toArray();
+        //$redirectionlinks = FluidbookAuditLink::whereNull('redirection_code')->get()->toArray();
+
+        $errorKeys = array_keys($errorlinks[0]);
+
+        $excel = new Spreadsheet();
+
+        $excel->getDefaultStyle()
+            ->getNumberFormat()
+            ->setFormatCode(
+                NumberFormat::FORMAT_TEXT
+            );
+        $sheet = $excel->getActiveSheet();
+        $sheetname_error = "Erreurs";
+        $sheet->setTitle($sheetname_error);
+
+        $excel->getActiveSheet()->getProtection()->setSheet(true);
+        $excel->getDefaultStyle()->getProtection()->setLocked(false);
+
+        $line = 1;
+        $columns = 0;
+        $c = 0;
+
+        for ($i = 1; $i < sizeof($errorKeys); $i++) {
+            $c++;
+            $columns = max($columns, $c);
+            $cell = $sheet->getCellByColumnAndRow($c, $line);
+            $cell->setValue($errorKeys[$i]);
+            $style = $sheet->getStyleByColumnAndRow($c, $line);
+            $style->getFont()->setBold(true);
+            $style->getAlignment()->setVertical(Alignment::VERTICAL_CENTER);
+        }
+
+        $maxColSize = [];
+
+        for ($i = 0; $i < sizeof($errorlinks); $i++) {
+            $c = 1;
+            $line++;
+            foreach ($errorlinks[$i] as $k => $value) {
+                if($k === "id") {
+                    continue;
+                }
+                $columns = max($columns, $c);
+                $maxColSize[$c][] = strlen($value);
+                $sheet->getCellByColumnAndRow($c, $line)->setValue($value);
+                $style = $sheet->getStyleByColumnAndRow($c, $line);
+                if ($k !== "new_url") {
+                    $style->getProtection()->setLocked(Protection::PROTECTION_PROTECTED);
+                }
+                $style->getAlignment()->setVertical(Alignment::VERTICAL_CENTER);
+                $style->getAlignment()->setWrapText(false);
+                $c++;
+            }
+        }
+
+        $j = 1;
+        for ($i = 0; $i <= $columns; $i++) {
+            if (array_key_exists($j, $maxColSize)) {
+                if (max($maxColSize[$j]) > 50) {
+                    $sheet->getColumnDimensionByColumn($j)->setWidth(100);
+                } else {
+                    $sheet->getColumnDimensionByColumn($j)->setAutoSize(true);
+                }
+            } else {
+                $sheet->getColumnDimensionByColumn($j)->setAutoSize(true);
+            }
+            $j++;
+        }
+
+        // Direct download
+        $tmpfile = Files::tempnam() . '.xlsx';
+        $writer = new Xlsx($excel);
+        $writer->save($tmpfile);
+
+        return  response()->download($tmpfile, 'erreurs.xlsx')->deleteFileAfterSend();
+    }
+}
index 1f6173cde5acd27be2f49b4e008835880760e5bc..c9d856b1f3866cdc9107d90677fc20c2cb63ce9e 100644 (file)
@@ -7,6 +7,8 @@ use App\Models\Base\ToolboxModel;
 use App\Models\Traits\CheckHash;
 use Cubist\Backpack\Magic\Fields\Integer;
 use Cubist\Backpack\Magic\Fields\Text;
+use App\Http\Controllers\Admin\Operations\ChangeownerOperation;
+use App\Http\Controllers\Admin\Operations\ChangestatusOperation;
 
 class FluidbookAuditLink extends ToolboxModel
 {
@@ -14,11 +16,11 @@ class FluidbookAuditLink extends ToolboxModel
     use ToolboxDownloadable;
 
     protected $table = 'fluidbook_audit_link';
-    protected $_options = ['name' => 'fluidbook_audit_link',
-        'singular' => 'audit_link',
-        'plural' => 'audit_links'];
+    protected $_options = ['name' => 'fluidbook-audit_link',
+        'singular' => 'auditlink',
+        'plural' => 'auditlinks'];
 
-    protected static $_permissionBase = 'fluidbook_audit_link';
+    protected static $_permissionBase = 'fluidbook-collection';
 
     public function setFields()
     {
index f4a353a62b60d04958b60218802705f14a065d77..1738afeea845dfdf05d4536a70cdf8d77766b630 100644 (file)
@@ -7,6 +7,7 @@ use App\Fields\FluidbookStatus;
 use App\Fluidbook\Compiler\Links;
 use App\Http\Controllers\Admin\Operations\ChangeownerOperation;
 use App\Http\Controllers\Admin\Operations\ChangestatusOperation;
+use App\Http\Controllers\Admin\Operations\FluidbookCollection\AuditLinksOperation;
 use App\Http\Controllers\Admin\Operations\FluidbookCollection\DownloadOperation;
 use App\Http\Controllers\Admin\Operations\FluidbookCollection\PreviewOperation;
 use App\Http\Controllers\Admin\Operations\FluidbookCollection\SettingsExportOperation;
@@ -39,7 +40,10 @@ use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Http\UploadedFile;
 use Illuminate\Support\Facades\Auth;
 use PhpOffice\PhpSpreadsheet\Spreadsheet;
+use PhpOffice\PhpSpreadsheet\Style\Alignment;
+use PhpOffice\PhpSpreadsheet\Style\Fill;
 use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
+use PhpOffice\PhpSpreadsheet\Style\Protection;
 use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
 use Typesense\Client;
 use Typesense\Exceptions\ConfigError;
@@ -62,7 +66,8 @@ class FluidbookCollection extends ToolboxStatusModel
         DownloadOperation::class,
         ChangeownerOperation::class,
         ChangestatusOperation::class,
-        SettingsExportOperation::class
+        SettingsExportOperation::class,
+        AuditLinksOperation::class
     ];
 
     protected static $_permissionBase = 'fluidbook-collection';
@@ -113,7 +118,7 @@ class FluidbookCollection extends ToolboxStatusModel
         $this->addField('enable_audit', Checkbox::class, __('Activer l’audit des liens'), ['default' => false]);
         $this->addField('download_audit', LinkButton::class, __('Télécharger l\'audit'), [
             'when' => ["enable_audit" => 1],
-            'value' => backpack_url('/'),
+            'value' => './export_excel',
             'translatable' => false,
             'attributes' => [ 'class' => 'form-control some-class'],
         ]);
@@ -124,7 +129,6 @@ class FluidbookCollection extends ToolboxStatusModel
         );
     }
 
-
     public function uploadFreeFile($uploadedFile, $attribute, $operation = 'move')
     {
         $field = $this->getField($attribute);
@@ -311,23 +315,4 @@ class FluidbookCollection extends ToolboxStatusModel
             $c->update(['publications' => json_encode($publications)]);
         }
     }
-
-    public function exportExcel() {
-        $excel = new Spreadsheet();
-
-        $excel->getDefaultStyle()
-            ->getNumberFormat()
-            ->setFormatCode(
-                NumberFormat::FORMAT_TEXT
-            );
-        $sheet = $excel->getActiveSheet();
-        $sheetname = "Export";
-        $sheet->setTitle($sheetname);
-
-        // Direct download
-        /*$tmpfile = Files::tempnam() . '.xlsx';
-        $writer = new Xlsx($excel);
-        $writer->save($tmpfile);
-        return $tmpfile*/
-    }
 }