You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
130 lines
3.8 KiB
130 lines
3.8 KiB
<?php
|
|
|
|
namespace App\Domains\System\Enums;
|
|
|
|
use App\UI\Enums\FileType;
|
|
use App\UI\Enums\InputType;
|
|
|
|
enum SystemSettingKey: string
|
|
{
|
|
case WEB_NAME = 'web-name';
|
|
case WEB_DESCRIPTION = 'web-description';
|
|
case WEB_LOGO = 'web-logo';
|
|
case WEB_FAVICON = 'web-favicon';
|
|
case WEB_PHONE = 'web-phone';
|
|
case WEB_EMAIL = 'web-email';
|
|
case WEB_ADDRESS = 'web-address';
|
|
|
|
case DEFAULT_LANGUAGE = 'default_language';
|
|
case TIMEZONE = 'timezone';
|
|
|
|
case GOOGLE_TAG_MANAGER_ID = 'google-tag_manager_id';
|
|
case GOOGLE_WEBMASTER_ID = 'google-webmaster_id';
|
|
|
|
public function label(): string
|
|
{
|
|
return __('domains/system/field.settings.'.str_replace('-', '.', $this->value));
|
|
}
|
|
|
|
public static function section(): array
|
|
{
|
|
return [
|
|
[
|
|
__('domains/system/pages.settings.sections.web') => [
|
|
self::WEB_NAME,
|
|
self::WEB_DESCRIPTION,
|
|
self::WEB_ADDRESS,
|
|
self::WEB_PHONE,
|
|
self::WEB_EMAIL,
|
|
self::WEB_LOGO,
|
|
self::WEB_FAVICON,
|
|
],
|
|
],
|
|
[
|
|
__('domains/system/pages.settings.sections.general') => [
|
|
self::DEFAULT_LANGUAGE,
|
|
self::TIMEZONE,
|
|
],
|
|
__('domains/system/pages.settings.sections.webmaster') => [
|
|
self::GOOGLE_TAG_MANAGER_ID,
|
|
self::GOOGLE_WEBMASTER_ID,
|
|
],
|
|
],
|
|
];
|
|
}
|
|
|
|
public function inputType(): InputType
|
|
{
|
|
return match ($this) {
|
|
self::WEB_LOGO, self::WEB_FAVICON => InputType::FILE,
|
|
self::DEFAULT_LANGUAGE, self::TIMEZONE => InputType::SELECT,
|
|
self::WEB_DESCRIPTION => InputType::TEXTAREA,
|
|
default => InputType::TEXTLINE
|
|
};
|
|
}
|
|
|
|
public function inputAttributes(): array
|
|
{
|
|
$options = match ($this) {
|
|
self::WEB_LOGO, self::WEB_FAVICON => [
|
|
'allow-image-crop' => true,
|
|
'allow-image-resize' => true,
|
|
'allow-image-transform' => true,
|
|
'image-crop-aspect-ratio' => '1:1',
|
|
'image-resize-target-width' => '500',
|
|
'image-resize-target-height' => '500',
|
|
],
|
|
self::TIMEZONE, self::DEFAULT_LANGUAGE => ['options' => $this->options()],
|
|
default => [],
|
|
};
|
|
$options['label'] = $this->label();
|
|
|
|
return $options;
|
|
}
|
|
|
|
public function validation(): array
|
|
{
|
|
return match ($this) {
|
|
self::WEB_LOGO, self::WEB_FAVICON => ['required', 'file', 'mimetypes:'.implode(',', FileType::IMAGE->mimeType()), 'max:1024'],
|
|
default => ['required', 'string'],
|
|
};
|
|
}
|
|
|
|
public function default(): ?string
|
|
{
|
|
return match ($this) {
|
|
self::DEFAULT_LANGUAGE => 'en',
|
|
self::TIMEZONE => 'UTC',
|
|
self::WEB_NAME => 'Acme Inc',
|
|
self::WEB_ADDRESS => '123 Main St, Anytown, USA',
|
|
self::WEB_PHONE => '+1234567890',
|
|
self::WEB_EMAIL => 'acme@web.io',
|
|
default => null
|
|
};
|
|
}
|
|
|
|
public function options(): array
|
|
{
|
|
return match ($this) {
|
|
self::DEFAULT_LANGUAGE => [
|
|
'en' => 'English',
|
|
'id' => 'Indonesian',
|
|
],
|
|
self::TIMEZONE => [
|
|
'UTC' => 'UTC',
|
|
'Asia/Jakarta' => 'Asia/Jakarta',
|
|
'Asia/Makassar' => 'Asia/Makassar',
|
|
'Asia/Jayapura' => 'Asia/Jayapura',
|
|
],
|
|
default => [],
|
|
};
|
|
}
|
|
|
|
public function isImage(): bool
|
|
{
|
|
return in_array($this, [
|
|
self::WEB_LOGO,
|
|
self::WEB_FAVICON,
|
|
]);
|
|
}
|
|
}
|
|
|