From: soufiane Date: Mon, 3 Nov 2025 18:18:41 +0000 (+0100) Subject: wip #7828 @5:00 X-Git-Url: http://git.cubedesigners.com/?a=commitdiff_plain;h=72ee224c3b218685902fcb922abe7032bd30b93c;p=fluidbook-toolbox.git wip #7828 @5:00 --- diff --git a/app/Http/Controllers/Admin/FluidbookCollectionCrudController.php b/app/Http/Controllers/Admin/FluidbookCollectionCrudController.php index 9acf005b3..5a68c6bb8 100644 --- a/app/Http/Controllers/Admin/FluidbookCollectionCrudController.php +++ b/app/Http/Controllers/Admin/FluidbookCollectionCrudController.php @@ -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 index 000000000..eedc60b43 --- /dev/null +++ b/app/Http/Controllers/Admin/Operations/FluidbookCollection/AuditLinksOperation.php @@ -0,0 +1,100 @@ +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(); + } +} diff --git a/app/Models/FluidbookAuditLink.php b/app/Models/FluidbookAuditLink.php index 1f6173cde..c9d856b1f 100644 --- a/app/Models/FluidbookAuditLink.php +++ b/app/Models/FluidbookAuditLink.php @@ -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() { diff --git a/app/Models/FluidbookCollection.php b/app/Models/FluidbookCollection.php index f4a353a62..1738afeea 100644 --- a/app/Models/FluidbookCollection.php +++ b/app/Models/FluidbookCollection.php @@ -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*/ - } }