Update to Kirby 4.7.0

This commit is contained in:
Paul Nicoué 2025-04-21 18:57:21 +02:00
parent 02a9ab387c
commit ba25a9a198
509 changed files with 26604 additions and 14872 deletions

View file

@ -1,6 +1,7 @@
<?php
use Kirby\Cms\File;
use Kirby\Cms\Files;
use Kirby\Toolkit\I18n;
return [
@ -18,10 +19,16 @@ return [
'sort'
],
'props' => [
/**
* Filters pages by a query. Sorting will be disabled
*/
'query' => function (string|null $query = null) {
return $query;
},
/**
* Filters all files by template and also sets the template, which will be used for all uploads
*/
'template' => function (string $template = null) {
'template' => function (string|null $template = null) {
return $template;
},
/**
@ -40,7 +47,7 @@ return [
'template' => $this->template
]);
return $file->blueprint()->acceptMime();
return $file->blueprint()->acceptAttribute();
}
return null;
@ -48,11 +55,18 @@ return [
'parent' => function () {
return $this->parentModel();
},
'files' => function () {
$files = $this->parent->files()->template($this->template);
'models' => function () {
if ($this->query !== null) {
$files = $this->parent->query($this->query, Files::class) ?? new Files([]);
} else {
$files = $this->parent->files();
}
// filter out all protected files
$files = $files->filter('isReadable', true);
// filter files by template
$files = $files->template($this->template);
// filter out all protected and hidden files
$files = $files->filter('isListable', true);
// search
if ($this->search === true && empty($this->searchterm()) === false) {
@ -85,6 +99,9 @@ return [
return $files;
},
'files' => function () {
return $this->models;
},
'data' => function () {
$data = [];
@ -92,7 +109,7 @@ return [
// a different parent model
$dragTextAbsolute = $this->model->is($this->parent) === false;
foreach ($this->files as $file) {
foreach ($this->models as $file) {
$panel = $file->panel();
$item = [
@ -123,7 +140,7 @@ return [
return $data;
},
'total' => function () {
return $this->files->pagination()->total();
return $this->models->pagination()->total();
},
'errors' => function () {
$errors = [];
@ -177,24 +194,44 @@ return [
'multiple' => $multiple,
'max' => $max,
'api' => $this->parent->apiUrl(true) . '/files',
'attributes' => array_filter([
'preview' => $this->image,
'attributes' => [
// TODO: an edge issue that needs to be solved:
// if multiple users load the same section at the same time
// and upload a file, uploaded files have the same sort number
// if multiple users load the same section
// at the same time and upload a file,
// uploaded files have the same sort number
'sort' => $this->sortable === true ? $this->total + 1 : null,
'template' => $template
])
]
];
}
],
// @codeCoverageIgnoreStart
'api' => function () {
return [
[
'pattern' => 'sort',
'method' => 'PATCH',
'action' => function () {
$this->section()->model()->files()->changeSort(
$this->requestBody('files'),
$this->requestBody('index')
);
return true;
}
]
];
},
// @codeCoverageIgnoreEnd
'toArray' => function () {
return [
'data' => $this->data,
'errors' => $this->errors,
'options' => [
'accept' => $this->accept,
'apiUrl' => $this->parent->apiUrl(true),
'columns' => $this->columns,
'apiUrl' => $this->parent->apiUrl(true) . '/sections/' . $this->name,
'columns' => $this->columnsWithTypes(),
'empty' => $this->empty,
'headline' => $this->headline,
'help' => $this->help,