Files
cattr/app/Enums/ScreenshotsState.php
Noor E Ilahi 7ccf44f7da first commit
2026-01-09 12:54:53 +05:30

76 lines
2.0 KiB
PHP

<?php
namespace App\Enums;
use Settings;
enum ScreenshotsState: int
{
case ANY = -1;
case FORBIDDEN = 0;
case REQUIRED = 1;
case OPTIONAL = 2;
public function title(): string
{
return strtolower($this->name);
}
public function mustBeInherited(): bool
{
return $this === self::FORBIDDEN || $this === self::REQUIRED;
}
public static function tryFromString(string $value): ?ScreenshotsState
{
try {
return constant(__CLASS__ . "::" . strtoupper($value));
} catch (\Throwable $e) {
return null;
}
}
public function toArray(): array
{
return [
'value' => $this->value,
'name' => $this->title(),
];
}
public static function states(): array
{
return array_map(fn ($case) => $case->toArray(), self::cases());
}
public static function createFrom(null|int|string|ScreenshotsState $value): ?ScreenshotsState
{
return match (true) {
!isset($value) => null,
is_numeric($value) => static::tryFrom((int)$value),
is_string($value) => static::tryFromString($value),
$value instanceof ScreenshotsState => static::tryFrom($value->value),
default => static::tryFrom($value),
};
}
public static function withGlobalOverrides(null|int|string|ScreenshotsState $value): ?ScreenshotsState
{
foreach ([
ScreenshotsState::createFrom(config('app.screenshots_state')),
ScreenshotsState::createFrom(Settings::scope('core')->get('screenshots_state')),
] as $globalOverride) {
if (isset($globalOverride) && $globalOverride->mustBeInherited()) {
return $globalOverride;
}
}
return static::createFrom($value);
}
public static function getNormalizedValue(null|int|string|ScreenshotsState $value): ?int
{
return static::createFrom($value)?->value;
}
}