Compare commits

..

3 Commits

Author SHA1 Message Date
lexx 9d5d4dd930 csv relations 2024-12-14 18:56:04 +02:00
lexx c507dc6031 upload fix 2024-10-23 19:34:41 +03:00
lexx 843f560710 new build 2024-09-27 17:42:49 +03:00
6 changed files with 43 additions and 9 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+2 -2
View File
@@ -1,11 +1,11 @@
{ {
"main.js": { "main.js": {
"file": "assets/main-BLsQ9H2G.js", "file": "assets/main-BJyanQ7P.js",
"name": "main", "name": "main",
"src": "main.js", "src": "main.js",
"isEntry": true, "isEntry": true,
"css": [ "css": [
"assets/main-BH4PSFwy.css" "assets/main-Dk7njt4m.css"
] ]
} }
} }
+3
View File
@@ -79,7 +79,10 @@ class FileService
throw new LucentException("File $filename not uploaded"); throw new LucentException("File $filename not uploaded");
} }
if($this->isImage($mimetype)){
$this->createTemplates($disk, $path, $file); $this->createTemplates($disk, $path, $file);
}
list($width, $height) = $this->isImage($mimetype) ? getimagesize($file) : [0, 0]; list($width, $height) = $this->isImage($mimetype) ? getimagesize($file) : [0, 0];
$recordFile = new RecordFile( $recordFile = new RecordFile(
+33 -2
View File
@@ -17,6 +17,7 @@ use Lucent\Record\QueryRecord;
use Lucent\Record\RecordService; use Lucent\Record\RecordService;
use Lucent\Record\Status; use Lucent\Record\Status;
use Lucent\Schema\System; use Lucent\Schema\System;
use Lucent\Schema\Ui\Reference;
use Lucent\Schema\Validator\ValidatorException; use Lucent\Schema\Validator\ValidatorException;
use Lucent\Svelte\Svelte; use Lucent\Svelte\Svelte;
use function Lucent\Response\fail; use function Lucent\Response\fail;
@@ -134,18 +135,22 @@ class RecordController extends Controller
->filter($arguments) ->filter($arguments)
->limit(-1) ->limit(-1)
->status(explode(",", $arguments["status_in"])) ->status(explode(",", $arguments["status_in"]))
->childrenDepth(1)
// ->skip($skip) // ->skip($skip)
->sort($sort) ->sort($sort)
->run() ->run()
->records; ->tree();
header('Content-Type: application/csv'); header('Content-Type: application/csv');
header('Content-Disposition: attachment; filename="' . $schemaName . '.csv";'); header('Content-Disposition: attachment; filename="' . $schemaName . '.csv";');
$handle = fopen('php://output', 'w'); $handle = fopen('php://output', 'w');
$csvRow = ["id", ...array_keys($records[0]->data->toArray())]; $relationColumns = $this->makeCsvRelationColumns($schema);
$csvRow = ["id", ...array_keys($records[0]->data->toArray()),...$relationColumns];
fputcsv($handle, $csvRow, ','); fputcsv($handle, $csvRow, ',');
foreach ($records as $record) { foreach ($records as $record) {
$csvRow = [$record->id, ...$record->data->toArray()]; $csvRow = [$record->id, ...$record->data->toArray()];
$csvRow = array_merge($csvRow,$this->makeCsvRelationColumnValues($schema,$record->_children));
$csvRow = array_values($csvRow); $csvRow = array_values($csvRow);
fputcsv($handle, $csvRow, ','); fputcsv($handle, $csvRow, ',');
} }
@@ -154,6 +159,32 @@ class RecordController extends Controller
exit; exit;
} }
private function makeCsvRelationColumns($schema):array{
return $schema->fields->filter(fn($f) => get_class($f) === Reference::class)->reduce(function($c,$f){
$c[] = $f->name." id";
$c[] = $f->name." name";
return $c;
},[]);
}
private function makeCsvRelationColumnValues($schema, $children):array{
return $schema->fields->filter(fn($f) => get_class($f) === Reference::class)->reduce(function($c,$f) use($children){
$fieldRecords = data_get($children,$f->name);
if(empty($fieldRecords)){
$c[] = "";
$c[] = "";
}elseif (count($fieldRecords) === 1){
$c[] = data_get($fieldRecords,"0.id");
$c[] = data_get($fieldRecords,"0.data.name");
}else{
$c[] = collect($fieldRecords)->pluck("id")->join("::");
$c[] = collect($fieldRecords)->pluck("data.name")->join("::");
}
return $c;
},[]);
}
public function new(Request $request) public function new(Request $request)
{ {
if (!in_array($request->input("schema"), $this->accountService->currentWritableSchemas())) { if (!in_array($request->input("schema"), $this->accountService->currentWritableSchemas())) {