Upgrade to 4.0.0

This commit is contained in:
Bastian Allgeier
2023-11-28 09:33:56 +01:00
parent f96b96af76
commit 3b0b6546ca
480 changed files with 21371 additions and 13327 deletions

View File

@@ -2,12 +2,10 @@
namespace Kirby\Panel;
use Closure;
use Kirby\Cms\App;
use Kirby\Exception\Exception;
use Kirby\Http\Response;
use Kirby\Toolkit\A;
use Kirby\Toolkit\I18n;
use Kirby\Toolkit\Str;
use Throwable;
@@ -40,7 +38,9 @@ class View
return static::applyOnly($data, $only);
}
$globals = $request->header('X-Fiber-Globals') ?? $request->get('_globals');
$globals =
$request->header('X-Fiber-Globals') ??
$request->get('_globals');
if (empty($globals) === false) {
return static::applyGlobals($data, $globals);
@@ -56,8 +56,10 @@ class View
* A global request can be activated with the `X-Fiber-Globals` header or the
* `_globals` query parameter.
*/
public static function applyGlobals(array $data, string|null $globals = null): array
{
public static function applyGlobals(
array $data,
string|null $globals = null
): array {
// split globals string into an array of fields
$globalKeys = Str::split($globals, ',');
@@ -86,8 +88,10 @@ class View
* Such requests can fetch shared data or globals.
* Globals will be loaded on demand.
*/
public static function applyOnly(array $data, string|null $only = null): array
{
public static function applyOnly(
array $data,
string|null $only = null
): array {
// split include string into an array of fields
$onlyKeys = Str::split($only, ',');
@@ -115,9 +119,7 @@ class View
}
// Nest dotted keys in array but ignore $translation
return A::nest($result, [
'$translation'
]);
return A::nest($result, ['$translation']);
}
/**
@@ -146,14 +148,18 @@ class View
return [
'$direction' => function () use ($kirby, $multilang, $language, $user) {
if ($multilang === true && $language && $user) {
$isDefault = $language->direction() === $kirby->defaultLanguage()->direction();
$isFromUser = $language->code() === $user->language();
$default = $kirby->defaultLanguage();
if ($isDefault === false && $isFromUser === false) {
if (
$language->direction() !== $default->direction() &&
$language->code() !== $user->language()
) {
return $language->direction();
}
}
},
'$dialog' => null,
'$drawer' => null,
'$language' => function () use ($kirby, $multilang, $language) {
if ($multilang === true && $language) {
return [
@@ -178,15 +184,20 @@ class View
return [];
},
'$menu' => function () use ($options, $permissions) {
return static::menu($options['areas'] ?? [], $permissions, $options['area']['id'] ?? null);
'$menu' => function () use ($options, $permissions) {
$menu = new Menu(
$options['areas'] ?? [],
$permissions,
$options['area']['id'] ?? null
);
return $menu->entries();
},
'$permissions' => $permissions,
'$license' => (bool)$kirby->system()->license(),
'$multilang' => $multilang,
'$searches' => static::searches($options['areas'] ?? [], $permissions),
'$url' => $kirby->request()->url()->toString(),
'$user' => function () use ($user) {
'$license' => $kirby->system()->license()->status()->value(),
'$multilang' => $multilang,
'$searches' => static::searches($options['areas'] ?? [], $permissions),
'$url' => $kirby->request()->url()->toString(),
'$user' => function () use ($user) {
if ($user) {
return [
'email' => $user->email(),
@@ -204,17 +215,25 @@ class View
'breadcrumb' => [],
'code' => 200,
'path' => Str::after($kirby->path(), '/'),
'timestamp' => (int)(microtime(true) * 1000),
'props' => [],
'search' => $kirby->option('panel.search.type', 'pages')
'query' => App::instance()->request()->query()->toArray(),
'referrer' => Panel::referrer(),
'search' => $kirby->option('panel.search.type', 'pages'),
'timestamp' => (int)(microtime(true) * 1000),
];
$view = array_replace_recursive($defaults, $options['area'] ?? [], $view);
$view = array_replace_recursive(
$defaults,
$options['area'] ?? [],
$view
);
// make sure that views and dialogs are gone
unset(
$view['dialogs'],
$view['drawers'],
$view['dropdowns'],
$view['requests'],
$view['searches'],
$view['views']
);
@@ -255,17 +274,11 @@ class View
$kirby = App::instance();
return [
'$config' => function () use ($kirby) {
return [
'debug' => $kirby->option('debug', false),
'kirbytext' => $kirby->option('panel.kirbytext', true),
'search' => [
'limit' => $kirby->option('panel.search.limit', 10),
'type' => $kirby->option('panel.search.type', 'pages')
],
'translation' => $kirby->option('panel.language', 'en'),
];
},
'$config' => fn () => [
'debug' => $kirby->option('debug', false),
'kirbytext' => $kirby->option('panel.kirbytext', true),
'translation' => $kirby->option('panel.language', 'en'),
],
'$system' => function () use ($kirby) {
$locales = [];
@@ -303,67 +316,6 @@ class View
];
}
/**
* Creates the menu for the topbar
*/
public static function menu(array|null $areas = [], array|null $permissions = [], string|null $current = null): array
{
$menu = [];
// areas
foreach ($areas as $areaId => $area) {
$access = $permissions['access'][$areaId] ?? true;
// areas without access permissions get skipped entirely
if ($access === false) {
continue;
}
// fetch custom menu settings from the area definition
$menuSetting = $area['menu'] ?? false;
// menu settings can be a callback that can return true, false or disabled
if ($menuSetting instanceof Closure) {
$menuSetting = $menuSetting($areas, $permissions, $current);
}
// false will remove the area entirely just like with
// disabled permissions
if ($menuSetting === false) {
continue;
}
$menu[] = [
'current' => $areaId === $current,
'disabled' => $menuSetting === 'disabled',
'icon' => $area['icon'],
'id' => $areaId,
'link' => $area['link'],
'text' => $area['label'],
];
}
$menu[] = '-';
$menu[] = [
'current' => $current === 'account',
'icon' => 'account',
'id' => 'account',
'link' => 'account',
'disabled' => ($permissions['access']['account'] ?? false) === false,
'text' => I18n::translate('view.account'),
];
$menu[] = '-';
// logout
$menu[] = [
'icon' => 'logout',
'id' => 'logout',
'link' => 'logout',
'text' => I18n::translate('logout')
];
return $menu;
}
/**
* Renders the main panel view either as
* JSON response or full HTML document based
@@ -414,13 +366,17 @@ class View
{
$searches = [];
foreach ($areas as $area) {
foreach ($area['searches'] ?? [] as $id => $params) {
$searches[$id] = [
'icon' => $params['icon'] ?? 'search',
'label' => $params['label'] ?? Str::ucfirst($id),
'id' => $id
];
foreach ($areas as $areaId => $area) {
// by default, all areas are accessible unless
// the permissions are explicitly set to false
if (($permissions['access'][$areaId] ?? true) !== false) {
foreach ($area['searches'] ?? [] as $id => $params) {
$searches[$id] = [
'icon' => $params['icon'] ?? 'search',
'label' => $params['label'] ?? Str::ucfirst($id),
'id' => $id
];
}
}
}
return $searches;