190 lines
5.1 KiB
PHP
Executable File
190 lines
5.1 KiB
PHP
Executable File
<?php
|
|
|
|
use Kirby\Toolkit\A;
|
|
use Kirby\Toolkit\I18n;
|
|
|
|
return [
|
|
'mixins' => ['min'],
|
|
'props' => [
|
|
/**
|
|
* Unset inherited props
|
|
*/
|
|
'after' => null,
|
|
'autofocus' => null,
|
|
'before' => null,
|
|
'icon' => null,
|
|
'placeholder' => null,
|
|
|
|
/**
|
|
* Default selected page(s) when a new page/file/user is created
|
|
*/
|
|
'default' => function ($default = null) {
|
|
return $this->toPages($default);
|
|
},
|
|
|
|
/**
|
|
* The placeholder text if no pages have been selected yet
|
|
*/
|
|
'empty' => function ($empty = null) {
|
|
return I18n::translate($empty, $empty);
|
|
},
|
|
|
|
/**
|
|
* Image settings for each item
|
|
*/
|
|
'image' => function (array $image = null) {
|
|
return $image ?? [];
|
|
},
|
|
|
|
/**
|
|
* Info text
|
|
*/
|
|
'info' => function (string $info = null) {
|
|
return $info;
|
|
},
|
|
|
|
/**
|
|
* Changes the layout of the selected files. Available layouts: `list`, `cards`
|
|
*/
|
|
'layout' => function (string $layout = 'list') {
|
|
return $layout;
|
|
},
|
|
|
|
/**
|
|
* The minimum number of required selected pages
|
|
*/
|
|
'min' => function (int $min = null) {
|
|
return $min;
|
|
},
|
|
|
|
/**
|
|
* The maximum number of allowed selected pages
|
|
*/
|
|
'max' => function (int $max = null) {
|
|
return $max;
|
|
},
|
|
|
|
/**
|
|
* If `false`, only a single page can be selected
|
|
*/
|
|
'multiple' => function (bool $multiple = true) {
|
|
return $multiple;
|
|
},
|
|
|
|
/**
|
|
* Optional query to select a specific set of pages
|
|
*/
|
|
'query' => function (string $query = null) {
|
|
return $query;
|
|
},
|
|
|
|
/**
|
|
* Layout size for cards: `tiny`, `small`, `medium`, `large` or `huge`
|
|
*/
|
|
'size' => function (string $size = null) {
|
|
return $size;
|
|
},
|
|
|
|
/**
|
|
* Main text
|
|
*/
|
|
'text' => function (string $text = null) {
|
|
return $text;
|
|
},
|
|
|
|
'value' => function ($value = null) {
|
|
return $this->toPages($value);
|
|
},
|
|
],
|
|
'methods' => [
|
|
'pageResponse' => function ($page) {
|
|
if ($this->layout === 'list') {
|
|
$thumb = [
|
|
'width' => 100,
|
|
'height' => 100
|
|
];
|
|
} else {
|
|
$thumb = [
|
|
'width' => 400,
|
|
'height' => 400
|
|
];
|
|
}
|
|
|
|
$image = $page->panelImage($this->image, $thumb);
|
|
$model = $this->model();
|
|
|
|
return [
|
|
'text' => $page->toString($this->text ?? '{{ page.title }}'),
|
|
'link' => $page->panelUrl(true),
|
|
'id' => $page->id(),
|
|
'info' => $page->toString($this->info ?? false),
|
|
'image' => $image,
|
|
'icon' => $page->panelIcon($image),
|
|
'hasChildren' => $page->hasChildren(),
|
|
];
|
|
},
|
|
'toPages' => function ($value = null) {
|
|
$pages = [];
|
|
$kirby = kirby();
|
|
|
|
foreach (Yaml::decode($value) as $id) {
|
|
if (is_array($id) === true) {
|
|
$id = $id['id'] ?? null;
|
|
}
|
|
|
|
if ($id !== null && ($page = $kirby->page($id))) {
|
|
$pages[] = $this->pageResponse($page);
|
|
}
|
|
}
|
|
|
|
return $pages;
|
|
}
|
|
],
|
|
'api' => function () {
|
|
return [
|
|
[
|
|
'pattern' => '/',
|
|
'action' => function () {
|
|
$field = $this->field();
|
|
$query = $field->query();
|
|
|
|
if ($query) {
|
|
$pages = $field->model()->query($query, 'Kirby\Cms\Pages');
|
|
$model = null;
|
|
} else {
|
|
if (!$parent = $this->site()->find($this->requestQuery('parent'))) {
|
|
$parent = $this->site();
|
|
}
|
|
|
|
$pages = $parent->children();
|
|
$model = [
|
|
'id' => $parent->id() == '' ? null : $parent->id(),
|
|
'title' => $parent->title()->value()
|
|
];
|
|
}
|
|
|
|
$children = [];
|
|
|
|
foreach ($pages as $index => $page) {
|
|
if ($page->isReadable() === true) {
|
|
$children[] = $field->pageResponse($page);
|
|
}
|
|
}
|
|
|
|
return [
|
|
'model' => $model,
|
|
'pages' => $children
|
|
];
|
|
}
|
|
]
|
|
];
|
|
},
|
|
'save' => function ($value = null) {
|
|
return A::pluck($value, 'id');
|
|
},
|
|
'validations' => [
|
|
'max',
|
|
'min'
|
|
]
|
|
];
|