Skip to content

Commit 8006161

Browse files
Merge pull request #8084 from getkirby/release/5.4.0
5.4.0
2 parents e3721bb + 20bc959 commit 8006161

145 files changed

Lines changed: 5619 additions & 1215 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

composer.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"description": "The Kirby core",
44
"license": "proprietary",
55
"type": "kirby-cms",
6-
"version": "5.3.3",
6+
"version": "5.4.0",
77
"keywords": [
88
"kirby",
99
"cms",
@@ -44,9 +44,9 @@
4444
"laminas/laminas-escaper": "2.18.0",
4545
"michelf/php-smartypants": "1.8.1",
4646
"phpmailer/phpmailer": "7.0.2",
47-
"symfony/polyfill-intl-idn": "1.33.0",
48-
"symfony/polyfill-mbstring": "1.33.0",
49-
"symfony/yaml": "7.4.6"
47+
"symfony/polyfill-intl-idn": "1.36.0",
48+
"symfony/polyfill-mbstring": "1.36.0",
49+
"symfony/yaml": "7.4.8"
5050
},
5151
"replace": {
5252
"symfony/polyfill-php72": "*"

composer.lock

Lines changed: 23 additions & 23 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

config/api/models/File.php

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
return [
1010
'fields' => [
1111
'blueprint' => fn (File $file) => $file->blueprint(),
12-
'content' => fn (File $file) => Form::for($file)->values(),
12+
'content' => fn (File $file) => Form::for($file)->toFormValues(),
1313
'dimensions' => fn (File $file) => $file->dimensions()->toArray(),
1414
'dragText' => fn (File $file) => $file->panel()->dragText(),
1515
'exists' => fn (File $file) => $file->exists(),
@@ -20,9 +20,17 @@
2020
'mime' => fn (File $file) => $file->mime(),
2121
'modified' => fn (File $file) => $file->modified('c'),
2222
'name' => fn (File $file) => $file->name(),
23-
'next' => fn (File $file) => $file->next(),
23+
'next' => function (File $file) {
24+
$next = $file->next();
25+
26+
if ($next === null || $next->isListable() === false) {
27+
return null;
28+
}
29+
30+
return $next;
31+
},
2432
'nextWithTemplate' => function (File $file) {
25-
$files = $file->templateSiblings()->sorted();
33+
$files = $file->templateSiblings()->sorted()->filter('isListable', true);
2634
$index = $files->indexOf($file);
2735

2836
return $files->nth($index + 1);
@@ -31,15 +39,31 @@
3139
'options' => fn (File $file) => $file->panel()->options(),
3240
'panelImage' => fn (File $file) => $file->panel()->image(),
3341
'panelUrl' => fn (File $file) => $file->panel()->url(true),
34-
'prev' => fn (File $file) => $file->prev(),
42+
'prev' => function (File $file) {
43+
$prev = $file->prev();
44+
45+
if ($prev === null || $prev->isListable() === false) {
46+
return null;
47+
}
48+
49+
return $prev;
50+
},
3551
'prevWithTemplate' => function (File $file) {
36-
$files = $file->templateSiblings()->sorted();
52+
$files = $file->templateSiblings()->sorted()->filter('isListable', true);
3753
$index = $files->indexOf($file);
3854

3955
return $files->nth($index - 1);
4056
},
41-
'parent' => fn (File $file) => $file->parent(),
42-
'parents' => fn (File $file) => $file->parents()->flip(),
57+
'parent' => function (File $file) {
58+
$parent = $file->parent();
59+
60+
if ($parent === null || $parent->isListable() === false) {
61+
return null;
62+
}
63+
64+
return $parent;
65+
},
66+
'parents' => fn (File $file) => $file->parents()->flip()->filter('isListable', true),
4367
'size' => fn (File $file) => $file->size(),
4468
'template' => fn (File $file) => $file->template(),
4569
'thumbs' => function ($file) {

config/api/models/License.php

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,37 @@
11
<?php
22

33
use Kirby\Cms\License;
4+
use Kirby\Exception\PermissionException;
45

56
/**
67
* Page
78
*/
89
return [
910
'fields' => [
10-
'status' => fn (License $license) => $license->status()->value(),
11-
'code' => function (License $license) {
12-
return $this->kirby()->user()->isAdmin() ? $license->code() : $license->code(true);
11+
'status' => function (License $license) {
12+
try {
13+
$this->validateAreaAccess('system');
14+
return $license->status()->value();
15+
} catch (PermissionException) {
16+
return null;
17+
}
1318
},
14-
'type' => fn (License $license) => $license->type()->label(),
19+
'code' => function (License $license) {
20+
try {
21+
$this->validateAreaAccess('system');
22+
return $this->kirby()->user()->isAdmin() ? $license->code() : $license->code(true);
23+
} catch (PermissionException) {
24+
return null;
25+
}
26+
},
27+
'type' => function (License $license) {
28+
try {
29+
$this->validateAreaAccess('system');
30+
return $license->type()->label();
31+
} catch (PermissionException) {
32+
return null;
33+
}
34+
}
1535
],
1636
'type' => License::class,
1737
];

config/api/models/Page.php

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@
1010
'fields' => [
1111
'blueprint' => fn (Page $page) => $page->blueprint(),
1212
'blueprints' => fn (Page $page) => $page->blueprints(),
13-
'children' => fn (Page $page) => $page->children(),
14-
'content' => fn (Page $page) => Form::for($page)->values(),
15-
'drafts' => fn (Page $page) => $page->drafts(),
13+
'children' => fn (Page $page) => $page->children()->filter('isListable', true),
14+
'content' => fn (Page $page) => Form::for($page)->toFormValues(),
15+
'drafts' => fn (Page $page) => $page->drafts()->filter('isListable', true),
1616
'errors' => fn (Page $page) => $page->errors(),
17-
'files' => fn (Page $page) => $page->files()->sorted(),
17+
'files' => fn (Page $page) => $page->files()->sorted()->filter('isListable', true),
1818
'hasChildren' => fn (Page $page) => $page->hasChildren(),
1919
'hasDrafts' => fn (Page $page) => $page->hasDrafts(),
2020
'hasFiles' => fn (Page $page) => $page->hasFiles(),
@@ -23,15 +23,25 @@
2323
'num' => fn (Page $page) => $page->num(),
2424
'options' => fn (Page $page) => $page->panel()->options(['preview']),
2525
'panelImage' => fn (Page $page) => $page->panel()->image(),
26-
'parent' => fn (Page $page) => $page->parent(),
27-
'parents' => fn (Page $page) => $page->parents()->flip(),
26+
'parent' => function (Page $page) {
27+
$parent = $page->parent();
28+
29+
if ($parent === null || $parent->isListable() === false) {
30+
return null;
31+
}
32+
33+
return $parent;
34+
},
35+
'parents' => fn (Page $page) => $page->parents()->flip()->filter('isListable', true),
2836
'previewUrl' => fn (Page $page) => $page->previewUrl(),
2937
'siblings' => function (Page $page) {
3038
if ($page->isDraft() === true) {
31-
return $page->parentModel()->children()->not($page);
39+
$siblings = $page->parentModel()->children()->not($page);
40+
} else {
41+
$siblings = $page->siblings();
3242
}
3343

34-
return $page->siblings();
44+
return $siblings->filter('isListable', true);
3545
},
3646
'slug' => fn (Page $page) => $page->slug(),
3747
'status' => fn (Page $page) => $page->status(),
@@ -68,9 +78,7 @@
6878
'content',
6979
'status',
7080
'options',
71-
'next' => ['id', 'slug', 'title'],
7281
'parents' => ['id', 'slug', 'title'],
73-
'prev' => ['id', 'slug', 'title'],
7482
'previewUrl',
7583
'slug',
7684
'title',

config/api/models/Site.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@
1010
'default' => fn () => $this->site(),
1111
'fields' => [
1212
'blueprint' => fn (Site $site) => $site->blueprint(),
13-
'children' => fn (Site $site) => $site->children(),
14-
'content' => fn (Site $site) => Form::for($site)->values(),
15-
'drafts' => fn (Site $site) => $site->drafts(),
16-
'files' => fn (Site $site) => $site->files()->sorted(),
13+
'children' => fn (Site $site) => $site->children()->filter('isListable', true),
14+
'content' => fn (Site $site) => Form::for($site)->toFormValues(),
15+
'drafts' => fn (Site $site) => $site->drafts()->filter('isListable', true),
16+
'files' => fn (Site $site) => $site->files()->sorted()->filter('isListable', true),
1717
'options' => fn (Site $site) => $site->permissions()->toArray(),
1818
'previewUrl' => fn (Site $site) => $site->previewUrl(),
1919
'title' => fn (Site $site) => $site->title()->value(),

config/api/models/System.php

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<?php
22

33
use Kirby\Cms\System;
4+
use Kirby\Exception\PermissionException;
45
use Kirby\Toolkit\Str;
56

67
/**
@@ -30,23 +31,26 @@
3031
'requirements' => fn (System $system) => $system->toArray(),
3132
'site' => fn (System $system) => $system->title(),
3233
'slugs' => fn () => Str::$language,
33-
'title' => fn () => $this->site()->title()->value(),
34+
// provide the value even if `site.access` permission is disabled
35+
'title' => fn () => $this->kirby()->site()->title()->value(),
3436
'translation' => function () {
35-
$code = $this->user()?->language() ??
36-
$this->kirby()->panelLanguage();
37+
$kirby = $this->kirby();
38+
$code = $kirby->user()?->language() ??
39+
$kirby->panelLanguage();
3740

3841
return
39-
$this->kirby()->translation($code) ??
40-
$this->kirby()->translation('en');
42+
$kirby->translation($code) ??
43+
$kirby->translation('en');
4144
},
4245
'kirbytext' => fn () => $this->kirby()->option('panel.kirbytext') ?? true,
43-
'user' => fn () => $this->user(),
44-
'version' => function () {
45-
if ($this->user()?->role()->permissions()->for('access', 'system') === true) {
46+
'user' => fn () => $this->user(),
47+
'version' => function () {
48+
try {
49+
$this->validateAreaAccess('system');
4650
return $this->kirby()->version();
51+
} catch (PermissionException) {
52+
return null;
4753
}
48-
49-
return null;
5054
}
5155
],
5256
'type' => System::class,

0 commit comments

Comments
 (0)