* @link https://getkirby.com * @copyright Bastian Allgeier * @license https://opensource.org/licenses/MIT * * @deprecated 3.8.0 Use `Kirby\Option\Options` instead */ class Options { /** * Returns the classes of predefined Kirby objects * * @return array */ protected static function aliases(): array { return [ 'Kirby\Cms\File' => 'file', 'Kirby\Toolkit\Obj' => 'arrayItem', 'Kirby\Cms\Block' => 'block', 'Kirby\Cms\Page' => 'page', 'Kirby\Cms\StructureObject' => 'structureItem', 'Kirby\Cms\User' => 'user', ]; } /** * Brings options through api * * @param $api * @param \Kirby\Cms\Model|null $model * @return array */ public static function api($api, $model = null): array { $model ??= App::instance()->site(); $fetch = null; $text = null; $value = null; if (is_array($api) === true) { $fetch = $api['fetch'] ?? null; $text = $api['text'] ?? null; $value = $api['value'] ?? null; $url = $api['url'] ?? null; } else { $url = $api; } $optionsApi = new OptionsApi([ 'data' => static::data($model), 'fetch' => $fetch, 'url' => $url, 'text' => $text, 'value' => $value ]); return $optionsApi->options(); } /** * @param \Kirby\Cms\Model $model * @return array */ protected static function data($model): array { $kirby = $model->kirby(); // default data setup $data = [ 'kirby' => $kirby, 'site' => $kirby->site(), 'users' => $kirby->users(), ]; // add the model by the proper alias foreach (static::aliases() as $className => $alias) { if ($model instanceof $className) { $data[$alias] = $model; } } return $data; } /** * Brings options by supporting both api and query * * @param $options * @param array $props * @param \Kirby\Cms\Model|null $model * @return array */ public static function factory($options, array $props = [], $model = null): array { $options = match ($options) { 'api' => static::api($props['api'], $model), 'query' => static::query($props['query'], $model), 'pages' => static::query('site.index', $model), 'children', 'grandChildren', 'siblings', 'index', 'files', 'images', 'documents', 'videos', 'audio', 'code', 'archives' => static::query('page.' . $options, $model), default => $options }; if (is_array($options) === false) { return []; } $result = []; foreach ($options as $key => $option) { if (is_array($option) === false || isset($option['value']) === false) { $option = [ 'value' => is_int($key) ? $option : $key, 'text' => $option ]; } // fallback for the text $option['text'] ??= $option['value']; // translate the option text if (is_array($option['text']) === true) { $option['text'] = I18n::translate($option['text'], $option['text']); } // add the option to the list $result[] = $option; } return $result; } /** * Brings options with query * * @param $query * @param \Kirby\Cms\Model|null $model * @return array */ public static function query($query, $model = null): array { $model ??= App::instance()->site(); // default text setup $text = [ 'arrayItem' => '{{ arrayItem.value }}', 'block' => '{{ block.type }}: {{ block.id }}', 'file' => '{{ file.filename }}', 'page' => '{{ page.title }}', 'structureItem' => '{{ structureItem.title }}', 'user' => '{{ user.username }}', ]; // default value setup $value = [ 'arrayItem' => '{{ arrayItem.value }}', 'block' => '{{ block.id }}', 'file' => '{{ file.id }}', 'page' => '{{ page.id }}', 'structureItem' => '{{ structureItem.id }}', 'user' => '{{ user.email }}', ]; // resolve array query setup if (is_array($query) === true) { $text = $query['text'] ?? $text; $value = $query['value'] ?? $value; $query = $query['fetch'] ?? null; } $optionsQuery = new OptionsQuery([ 'aliases' => static::aliases(), 'data' => static::data($model), 'query' => $query, 'text' => $text, 'value' => $value ]); return $optionsQuery->options(); } }