Skip to content

Commit 2f27521

Browse files
committed
update config
1 parent 3918b79 commit 2f27521

7 files changed

Lines changed: 151 additions & 46 deletions

File tree

config/inspirecms.php

Lines changed: 39 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -104,9 +104,9 @@
104104
'enable_cluster_navigation' => true,
105105
'panel_id' => 'cms',
106106
'path' => 'cms',
107-
'brand' => [
107+
'brand' => [ // More info https://filamentphp.com/docs/3.x/panels/themes#adding-a-logo
108108
'name' => 'InspireCMS',
109-
'logo' => fn () => view('inspirecms::logo'),
109+
'logo' => fn () => view('inspirecms::logo'),
110110
'favicon' => fn () => asset('images/favicon.png'),
111111
],
112112
'database_notification' => [
@@ -140,19 +140,44 @@
140140
],
141141
],
142142

143-
'imports' => [
144-
'disk' => 'local',
145-
'temp_disk' => 'local',
146-
'temp_directory' => 'temp/imports',
147-
],
143+
'import_export' => [
144+
145+
'imports' => [
148146

149-
'exports' => [
150-
'disk' => 'local',
151-
'exporters' => [
152-
\SolutionForest\InspireCms\Exports\Exporters\ImportUsedExporter::class,
153-
\SolutionForest\InspireCms\Exports\Exporters\DocumentTypeExporter::class,
154-
\SolutionForest\InspireCms\Exports\Exporters\FieldGroupExporter::class,
155-
\SolutionForest\InspireCms\Exports\Exporters\TemplateExporter::class,
147+
'disk' => 'local',
148+
'directory' => 'imports',
149+
150+
'temporary' => [
151+
'disk' => 'local',
152+
'directory' => 'temp/imports',
153+
],
154+
155+
'allowed_mime_types' => [
156+
'application/zip',
157+
'application/octet-stream',
158+
'application/x-zip-compressed',
159+
'multipart/x-zip',
160+
],
161+
162+
'max_file_size' => 10 * 1024,
163+
],
164+
165+
'exports' => [
166+
167+
'disk' => 'local',
168+
'directory' => 'exports',
169+
170+
'temporary' => [
171+
'disk' => 'local',
172+
'directory' => 'temp/exports',
173+
],
174+
175+
'exporters' => [
176+
\SolutionForest\InspireCms\Exports\Exporters\ImportUsedExporter::class,
177+
\SolutionForest\InspireCms\Exports\Exporters\DocumentTypeExporter::class,
178+
\SolutionForest\InspireCms\Exports\Exporters\FieldGroupExporter::class,
179+
\SolutionForest\InspireCms\Exports\Exporters\TemplateExporter::class,
180+
],
156181
],
157182
],
158183

src/Exports/Exporters/BaseExporter.php

Lines changed: 49 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
namespace SolutionForest\InspireCms\Exports\Exporters;
44

55
use Illuminate\Database\Eloquent\Model;
6+
use Illuminate\Support\Facades\Storage;
67
use SolutionForest\InspireCms\Exports\ExportResult;
8+
use SolutionForest\InspireCms\Helpers\ExportDataHelper;
79
use SolutionForest\InspireCms\Helpers\FileHelper;
810
use SolutionForest\InspireCms\Models\Contracts\Export;
911

@@ -33,49 +35,85 @@ public static function getLabel(): string
3335
return str(static::class)->classBasename()->snake()->replace('_', ' ')->apa()->toString();
3436
}
3537

38+
protected function getTempFolderPath($folder)
39+
{
40+
return collect([
41+
ExportDataHelper::getTempDirectory(),
42+
$folder,
43+
])->filter(fn ($item) => ! empty($item))->implode(DIRECTORY_SEPARATOR);
44+
}
45+
46+
/**
47+
* @return \Illuminate\Contracts\Filesystem\Filesystem
48+
*/
49+
protected function getTempDisk()
50+
{
51+
return Storage::disk(ExportDataHelper::getTempDiskDriver());
52+
}
53+
3654
/**
3755
* @param string $folderName
3856
*/
3957
protected function generateTempFolder($folderName)
4058
{
41-
$disk = $this->record->getDisk();
59+
$disk = $this->getTempDisk();
60+
$path = $this->getTempFolderPath($folderName);
4261

4362
// Create directory with permissions
44-
if (! $disk->exists($folderName)) {
45-
$disk->makeDirectory($folderName, 0777, true);
63+
if (! $disk->exists($path)) {
64+
$disk->makeDirectory($path, 0777, true);
4665
}
4766

48-
return [$disk, $disk->path($folderName)];
67+
return [$disk, $disk->path($path)];
4968
}
5069

5170
protected function generateTempFolderForImport($folderName, array $importTypes = [])
5271
{
5372
[$fs, $fullPath] = $this->generateTempFolder($folderName);
5473

5574
$subFolders = [];
75+
5676
foreach ($importTypes as $importType) {
57-
$folderPath = $folderName . '/' . $importType;
58-
if (! $fs->exists($folderPath)) {
59-
$fs->makeDirectory($folderPath, 0777, true);
77+
78+
$path = collect([
79+
ExportDataHelper::getTempDirectory(),
80+
$folderName,
81+
$importType,
82+
])->filter(fn ($item) => ! empty($item))->implode(DIRECTORY_SEPARATOR);
83+
84+
if (! $fs->exists($path)) {
85+
$fs->makeDirectory($path, 0777, true);
6086
}
61-
$subFolders[$importType] = $folderPath;
87+
$subFolders[$importType] = $path;
6288
}
6389

6490
return [$fs, $fullPath, $subFolders];
6591
}
6692

6793
protected function zipTempFolder($folderName, bool $deleteFolder = true)
6894
{
95+
$folderDisk = $this->getTempDisk();
96+
$folderPath = $this->getTempFolderPath($folderName);
97+
$folderFullPath = $folderDisk->path($folderPath);
98+
6999
$disk = $this->record->getDisk();
70-
$folderFullPath = $disk->path($folderName);
100+
$zipPath = collect([
101+
ExportDataHelper::getDirectory(),
102+
$folderName . '.zip',
103+
])->filter(fn ($item) => ! empty($item))->implode(DIRECTORY_SEPARATOR);
104+
$zipDir = str($zipPath)->beforeLast('/')->toString();
105+
106+
// Create directory with permissions
107+
if (filled($zipDir) && ! $disk->exists($zipDir)) {
108+
$disk->makeDirectory($zipDir, 0777, true);
109+
}
71110

72-
$zipPath = $folderName . '.zip';
73111
$zipFullPath = $disk->path($zipPath);
74112

75113
FileHelper::buildZipFromFolder($folderFullPath, $zipFullPath);
76114

77115
if ($deleteFolder) {
78-
$disk->deleteDirectory($folderName);
116+
$folderDisk->deleteDirectory($folderPath);
79117
}
80118

81119
return $zipPath;

src/Filament/Resources/ExportResource.php

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
use SolutionForest\InspireCms\Filament\Clusters\Settings;
1919
use SolutionForest\InspireCms\Filament\Concerns\ClusterSectionResourceTrait;
2020
use SolutionForest\InspireCms\Filament\Contracts\ClusterSectionResource;
21+
use SolutionForest\InspireCms\Helpers\ExportDataHelper;
2122
use SolutionForest\InspireCms\Helpers\UIHelper;
2223
use SolutionForest\InspireCms\InspireCmsConfig;
2324
use SolutionForest\InspireCms\Models\Contracts\Export;
@@ -137,15 +138,11 @@ public static function infolist(Infolist $infolist): Infolist
137138

138139
public static function form(Form $form): Form
139140
{
140-
$exporters = collect(InspireCmsConfig::get('exports.exporters', []))
141-
->mapWithKeys(fn ($exporter) => [$exporter => $exporter::getLabel()])
142-
->all();
143-
144141
return $form
145142
->columns(1)
146143
->schema([
147144
Forms\Components\Select::make('exporter')
148-
->options($exporters)
145+
->options(ExportDataHelper::getExporters())
149146
->required()
150147
->live()
151148
->afterStateUpdated(fn (Forms\Components\Select $component) => $component

src/Filament/Resources/ImportResource.php

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -142,15 +142,8 @@ public static function form(Form $form): Form
142142
->validationAttribute(__('inspirecms::resources/import.file_name.validation_attribute'))
143143
->hint(__('inspirecms::resources/import.file_name.hint'))
144144
->disk(ImportDataHelper::getDiskDriver())
145-
->acceptedFileTypes([
146-
// zip
147-
...[
148-
'application/zip',
149-
'application/octet-stream',
150-
'application/x-zip-compressed',
151-
'multipart/x-zip',
152-
],
153-
])
145+
->directory(ImportDataHelper::getDirectory())
146+
->acceptedFileTypes(ImportDataHelper::getAllowedMimeTypes())
154147
->preserveFilenames(false),
155148

156149
Forms\Components\Actions::make([

src/Helpers/ExportDataHelper.php

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,40 @@ class ExportDataHelper
88
{
99
public static function getDiskDriver(): string
1010
{
11-
return strval(InspireCmsConfig::get('exports.disk', 'public'));
11+
return strval(InspireCmsConfig::get('import_export.exports.disk', 'public'));
12+
}
13+
14+
public static function getDirectory(): string
15+
{
16+
return strval(InspireCmsConfig::get('import_export.exports.directory', 'exports'));
17+
}
18+
19+
public static function getTempDiskDriver(): string
20+
{
21+
return strval(InspireCmsConfig::get('import_export.exports.temporary.disk', 'local'));
22+
}
23+
24+
public static function getTempDirectory(): string
25+
{
26+
return strval(InspireCmsConfig::get('import_export.exports.temporary.directory', 'temp/exports'));
1227
}
1328

1429
public static function retrieveClearanceDaysInterval()
1530
{
1631
return InspireCmsConfig::get('models.prunable.export.interval', 5);
1732
}
33+
34+
public static function getExporters(): array
35+
{
36+
$exporters = InspireCmsConfig::get('import_export.exports.exporters', [
37+
\SolutionForest\InspireCms\Exports\Exporters\ImportUsedExporter::class,
38+
\SolutionForest\InspireCms\Exports\Exporters\DocumentTypeExporter::class,
39+
\SolutionForest\InspireCms\Exports\Exporters\FieldGroupExporter::class,
40+
\SolutionForest\InspireCms\Exports\Exporters\TemplateExporter::class,
41+
]);
42+
43+
return collect($exporters)
44+
->mapWithKeys(fn ($exporter) => [$exporter => $exporter::getLabel()])
45+
->all();
46+
}
1847
}

src/Helpers/ImportDataHelper.php

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -361,12 +361,32 @@ public static function generateSampleData()
361361

362362
public static function getDiskDriver(): string
363363
{
364-
return strval(InspireCmsConfig::get('imports.disk', 'local'));
364+
return strval(InspireCmsConfig::get('import_export.imports.disk', 'local'));
365+
}
366+
367+
public static function getDirectory(): string
368+
{
369+
return strval(InspireCmsConfig::get('import_export.imports.directory', 'imports'));
365370
}
366371

367372
public static function getTempDiskDriver(): string
368373
{
369-
return strval(InspireCmsConfig::get('imports.temp_disk', 'local'));
374+
return strval(InspireCmsConfig::get('import_export.imports.temporary.disk', 'local'));
375+
}
376+
377+
public static function getTempDirectory(): string
378+
{
379+
return strval(InspireCmsConfig::get('import_export.imports.temporary.directory', 'temp/imports'));
380+
}
381+
382+
public static function getAllowedMimeTypes(): array
383+
{
384+
return InspireCmsConfig::get('import_export.imports.allowed_mime_types', []);
385+
}
386+
387+
public static function getMaxFileSize(): int
388+
{
389+
return (int) InspireCmsConfig::get('import_export.imports.max_file_size', 2048);
370390
}
371391

372392
/**

src/ImportData/ZipFileReader.php

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
use Illuminate\Support\Facades\Storage;
66
use SolutionForest\InspireCms\Helpers\FileHelper;
7-
use SolutionForest\InspireCms\InspireCmsConfig;
7+
use SolutionForest\InspireCms\Helpers\ImportDataHelper;
88

99
class ZipFileReader
1010
{
@@ -34,7 +34,7 @@ public function extractFromZip(string $zipFilePath)
3434

3535
public function getTempDiskDriver(): string
3636
{
37-
return strval(InspireCmsConfig::get('imports.temp_disk', 'local'));
37+
return ImportDataHelper::getTempDiskDriver();
3838
}
3939

4040
/**
@@ -57,9 +57,12 @@ public function generateFolderForExtraction($folderName)
5757
{
5858
$disk = $this->getTempDisk();
5959

60-
$tempDir = strval(InspireCmsConfig::get('imports.temp_directory', 'temp/imports'));
60+
$tempDir = ImportDataHelper::getTempDirectory();
6161

62-
$path = $tempDir . DIRECTORY_SEPARATOR . $folderName;
62+
$path = collect([
63+
$tempDir,
64+
$folderName,
65+
])->filter(fn ($item) => ! empty($item))->implode(DIRECTORY_SEPARATOR);
6366

6467
// Create directory with permissions
6568
if (! $disk->exists($path)) {

0 commit comments

Comments
 (0)