Skip to content

Commit a3a05a9

Browse files
committed
fix: document type export include content even set as skip
1 parent c207599 commit a3a05a9

6 files changed

Lines changed: 153 additions & 135 deletions

File tree

src/Exports/Exporters/BaseExporter.php

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

55
use Illuminate\Database\Eloquent\Model;
6-
use Illuminate\Support\Str;
76
use SolutionForest\InspireCms\Exports\ExportResult;
87
use SolutionForest\InspireCms\Helpers\FileHelper;
9-
use SolutionForest\InspireCms\Helpers\TemplateHelper;
10-
use SolutionForest\InspireCms\ImportData\Entities as ImportDataEntities;
11-
use SolutionForest\InspireCms\Models\Contracts\Content;
12-
use SolutionForest\InspireCms\Models\Contracts\DocumentType;
138
use SolutionForest\InspireCms\Models\Contracts\Export;
14-
use SolutionForest\InspireCms\Models\Contracts\FieldGroup;
15-
use SolutionForest\InspireCms\Models\Contracts\Template;
169

1710
abstract class BaseExporter
1811
{
@@ -103,70 +96,6 @@ protected function ensureTempFolderForExport(string $folderPrefix, array $subFol
10396
return array_merge([$folderName], $tmpFolderData);
10497
}
10598

106-
/**
107-
* @return string | array
108-
*/
109-
protected function generateImportFileName(Model $record)
110-
{
111-
switch (true) {
112-
113-
case $record instanceof DocumentType:
114-
case $record instanceof Content:
115-
return $record->slug . '.json';
116-
117-
case $record instanceof FieldGroup:
118-
return Str::replace('_', '-', $record->name) . '.json';
119-
120-
case $record instanceof Template:
121-
if (is_array($record->content)) {
122-
$themes = array_keys($record->content);
123-
} else {
124-
$themes = [inspirecms_templates()->getCurrentTheme()];
125-
}
126-
127-
return collect($themes)
128-
->filter()
129-
->unique()
130-
->mapWithKeys(fn ($theme) => [$theme => $record->slug . '/' . TemplateHelper::ensureViewFileNameForTemplate($theme)])
131-
->toArray();
132-
}
133-
134-
return $record->getKey() . '.json';
135-
}
136-
137-
/**
138-
* @return array|bool|string
139-
*/
140-
protected function prepareImportContentFromModel(Model $record)
141-
{
142-
switch (true) {
143-
144-
case $record instanceof DocumentType:
145-
$array = ImportDataEntities\DocumentType::fromRecord($record)->toExportArray();
146-
147-
return json_encode($array, JSON_PRETTY_PRINT);
148-
149-
case $record instanceof FieldGroup:
150-
$array = ImportDataEntities\FieldGroup::fromRecord($record)->toExportArray();
151-
152-
return json_encode($array, JSON_PRETTY_PRINT);
153-
154-
// case $record instanceof Template:
155-
// $themeContent = $record->content;
156-
// if (! is_array($themeContent)) {
157-
// $themeContent = [inspirecms_templates()->getCurrentTheme() => $themeContent];
158-
// }
159-
// return $themeContent;
160-
161-
case $record instanceof Content:
162-
$array = ImportDataEntities\Content::fromRecord($record)->toExportArray();
163-
164-
return json_encode($array, JSON_PRETTY_PRINT);
165-
}
166-
167-
return '';
168-
}
169-
17099
protected static function isProcessCompleted(int $currentPage, int $totalPages, array $processingData)
171100
{
172101
return $currentPage >= $totalPages;
@@ -195,45 +124,4 @@ protected function handleExportCompletion(string $folderName, $processingErrors)
195124

196125
return ExportResult::completed($zippedFile, $completedMessage);
197126
}
198-
199-
protected function processRecordForImportUsed(Model $record, $fs, ?string $dir, array &$errors)
200-
{
201-
try {
202-
203-
$filename = $this->generateImportFileName($record);
204-
205-
if ($record instanceof Template && is_array($filename)) {
206-
207-
foreach ($filename as $theme => $templateFilePath) {
208-
209-
$templateContent = $record->getContent($theme);
210-
211-
$path = $dir . '/' . trim($templateFilePath, '/');
212-
213-
$fs->put($path, $templateContent);
214-
}
215-
216-
} elseif (! is_string($filename)) {
217-
$errors[] = [
218-
'record' => $record->getKey(),
219-
'model' => get_class($record),
220-
'message' => 'Invalid filename',
221-
];
222-
} else {
223-
224-
$content = $this->prepareImportContentFromModel($record);
225-
226-
$path = $dir . '/' . $filename;
227-
$fs->put($path, $content);
228-
229-
}
230-
231-
} catch (\Throwable $th) {
232-
$errors[] = [
233-
'record' => $record->getKey(),
234-
'model' => get_class($record),
235-
'message' => $th->getMessage(),
236-
];
237-
}
238-
}
239127
}
Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
<?php
2+
3+
namespace SolutionForest\InspireCms\Exports\Exporters;
4+
5+
use Illuminate\Database\Eloquent\Model;
6+
use Illuminate\Support\Str;
7+
use SolutionForest\InspireCms\Helpers\TemplateHelper;
8+
use SolutionForest\InspireCms\ImportData\Entities as ImportDataEntities;
9+
use SolutionForest\InspireCms\Models\Contracts\Content;
10+
use SolutionForest\InspireCms\Models\Contracts\DocumentType;
11+
use SolutionForest\InspireCms\Models\Contracts\FieldGroup;
12+
use SolutionForest\InspireCms\Models\Contracts\Template;
13+
14+
abstract class BaseImportUsedDataExporter extends BaseExporter
15+
{
16+
/**
17+
* @return string | array
18+
*/
19+
protected function generateImportFileName(Model $record)
20+
{
21+
switch (true) {
22+
23+
case $record instanceof DocumentType:
24+
case $record instanceof Content:
25+
return $record->slug . '.json';
26+
27+
case $record instanceof FieldGroup:
28+
return Str::replace('_', '-', $record->name) . '.json';
29+
30+
case $record instanceof Template:
31+
if (is_array($record->content)) {
32+
$themes = array_keys($record->content);
33+
} else {
34+
$themes = [inspirecms_templates()->getCurrentTheme()];
35+
}
36+
37+
return collect($themes)
38+
->filter()
39+
->unique()
40+
->mapWithKeys(fn ($theme) => [$theme => $record->slug . '/' . TemplateHelper::ensureViewFileNameForTemplate($theme)])
41+
->toArray();
42+
}
43+
44+
return $record->getKey() . '.json';
45+
}
46+
47+
/**
48+
* @return array|bool|string
49+
*/
50+
protected function prepareImportContentFromModel(Model $record)
51+
{
52+
switch (true) {
53+
54+
case $record instanceof DocumentType:
55+
$array = ImportDataEntities\DocumentType::fromRecord($record)->toExportArray();
56+
57+
return json_encode($array, JSON_PRETTY_PRINT);
58+
59+
case $record instanceof FieldGroup:
60+
$array = ImportDataEntities\FieldGroup::fromRecord($record)->toExportArray();
61+
62+
return json_encode($array, JSON_PRETTY_PRINT);
63+
64+
// case $record instanceof Template:
65+
// $themeContent = $record->content;
66+
// if (! is_array($themeContent)) {
67+
// $themeContent = [inspirecms_templates()->getCurrentTheme() => $themeContent];
68+
// }
69+
// return $themeContent;
70+
71+
case $record instanceof Content:
72+
$array = ImportDataEntities\Content::fromRecord($record)->toExportArray();
73+
74+
return json_encode($array, JSON_PRETTY_PRINT);
75+
}
76+
77+
return '';
78+
}
79+
80+
protected function processRecordForImportUsed(Model $record, $fs, ?string $dir, array &$errors)
81+
{
82+
try {
83+
84+
$filename = $this->generateImportFileName($record);
85+
86+
if ($record instanceof Template && is_array($filename)) {
87+
88+
foreach ($filename as $theme => $templateFilePath) {
89+
90+
$templateContent = $record->getContent($theme);
91+
92+
$path = $dir . '/' . trim($templateFilePath, '/');
93+
94+
$fs->put($path, $templateContent);
95+
}
96+
97+
} elseif (! is_string($filename)) {
98+
$errors[] = [
99+
'record' => $record->getKey(),
100+
'model' => get_class($record),
101+
'message' => 'Invalid filename',
102+
];
103+
} else {
104+
105+
$content = $this->prepareImportContentFromModel($record);
106+
107+
$path = $dir . '/' . $filename;
108+
$fs->put($path, $content);
109+
110+
}
111+
112+
} catch (\Throwable $th) {
113+
$errors[] = [
114+
'record' => $record->getKey(),
115+
'model' => get_class($record),
116+
'message' => $th->getMessage(),
117+
];
118+
}
119+
}
120+
}

src/Exports/Exporters/DocumentTypeExporter.php

Lines changed: 30 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,14 @@
33
namespace SolutionForest\InspireCms\Exports\Exporters;
44

55
use Filament\Forms\Components\CheckboxList;
6+
use Filament\Forms\Components\Section;
67
use Filament\Forms\Components\Toggle;
78
use Illuminate\Support\Arr;
89
use SolutionForest\InspireCms\Exports\ExportResult;
910
use SolutionForest\InspireCms\Helpers\ImportDataHelper;
1011
use SolutionForest\InspireCms\InspireCmsConfig;
1112

12-
class DocumentTypeExporter extends BaseExporter
13+
class DocumentTypeExporter extends BaseImportUsedDataExporter
1314
{
1415
public static function getArgsFormFields(): array
1516
{
@@ -22,14 +23,20 @@ public static function getArgsFormFields(): array
2223
->label('With Content')
2324
->hint('Export content records along with document types')
2425
->default(true),
25-
CheckboxList::make('filter_record')
26-
->label('Filter Records')
27-
->hint('Keep empty to export all records.')
28-
->gridDirection('row')
29-
->columns(3)
30-
->searchable()
31-
->options($options)
32-
->descriptions($descriptions),
26+
Section::make('Filter Records')
27+
->collapsible()
28+
->statePath('filter_records')
29+
->compact()
30+
->schema([
31+
CheckboxList::make('document_type')
32+
->label(__('inspirecms::inspirecms.document_type'))
33+
->hint('Keep empty to export all records.')
34+
->gridDirection('row')
35+
->columns(3)
36+
->searchable()
37+
->options($options)
38+
->descriptions($descriptions),
39+
]),
3340
];
3441
}
3542

@@ -42,7 +49,7 @@ public function export()
4249
ImportDataHelper::FOLDER_IDENTIFIER_CONTENT,
4350
]);
4451

45-
[$records, $perPage, $page] = $this->getDocumentTypeRecords();
52+
[$records, $perPage, $page] = $this->getRecordsToExport();
4653
$errors = [];
4754

4855
foreach ($records->items() as $record) {
@@ -74,14 +81,17 @@ public function export()
7481
);
7582
}
7683

77-
foreach ($record->content as $content) {
84+
if ($this->record->getArgsForExporter()['with_content'] ?? false) {
7885

79-
$this->processRecordForImportUsed(
80-
$content,
81-
$fs,
82-
(Arr::get($subFolders, ImportDataHelper::FOLDER_IDENTIFIER_CONTENT) ?? $folderName),
83-
$errors,
84-
);
86+
foreach ($record->content as $content) {
87+
88+
$this->processRecordForImportUsed(
89+
$content,
90+
$fs,
91+
(Arr::get($subFolders, ImportDataHelper::FOLDER_IDENTIFIER_CONTENT) ?? $folderName),
92+
$errors,
93+
);
94+
}
8595
}
8696

8797
}
@@ -103,7 +113,7 @@ public function export()
103113
/**
104114
* @return array{0: \Illuminate\Pagination\LengthAwarePaginator, 1: int, 2: int}
105115
*/
106-
private function getDocumentTypeRecords()
116+
private function getRecordsToExport()
107117
{
108118
$processingData = $this->record->getProcessingMessages();
109119
$perPage = $processingData['perPage'] ?? 100;
@@ -127,8 +137,8 @@ private function getDocumentTypeRecords()
127137

128138
$query = static::getModel()::query()->with($relations);
129139

130-
if (! empty($args['filter_record'])) {
131-
$query->whereKey($args['filter_record']);
140+
if (isset($args['filter_records']['document_type']) && ! empty($args['filter_records']['document_type'])) {
141+
$query->whereKey($args['filter_records']['document_type']);
132142
}
133143

134144
$records = $query->paginate(perPage: $perPage, page: $page);

src/Exports/Exporters/FieldGroupExporter.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
use SolutionForest\InspireCms\Helpers\ImportDataHelper;
99
use SolutionForest\InspireCms\InspireCmsConfig;
1010

11-
class FieldGroupExporter extends BaseExporter
11+
class FieldGroupExporter extends BaseImportUsedDataExporter
1212
{
1313
public static function getArgsFormFields(): array
1414
{

src/Exports/Exporters/TemplateExporter.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
use SolutionForest\InspireCms\Helpers\ImportDataHelper;
88
use SolutionForest\InspireCms\InspireCmsConfig;
99

10-
class TemplateExporter extends BaseExporter
10+
class TemplateExporter extends BaseImportUsedDataExporter
1111
{
1212
public static function getArgsFormFields(): array
1313
{

src/Filament/Resources/ExportResource.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ public static function table(Table $table): Table
204204
->headerActions([
205205
Tables\Actions\CreateAction::make()
206206
->createAnother(false)
207-
->modalWidth('lg')
207+
->modalWidth('5xl')
208208
->stickyModalHeader()->stickyModalHeader()
209209
->slideOver()
210210
->form(fn (Form $form) => static::form($form))

0 commit comments

Comments
 (0)