Enum::getLocalizationKey()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
c 0
b 0
f 0
rs 10
cc 1
nc 1
nop 0
1
<?php
2
3
namespace mindtwo\LaravelEnumerable\ValueObjects;
4
5
use BenSampo\Enum\Contracts\LocalizedEnum;
6
use BenSampo\Enum\Enum as BaseEnum;
7
use Illuminate\Support\Collection;
8
use Illuminate\Support\Facades\Lang;
9
use Illuminate\Support\Str;
10
use mindtwo\LaravelEnumerable\Exceptions\InvalidEnumValueException;
11
use mindtwo\LaravelEnumerable\Interfaces\EnumInterface;
12
13
abstract class Enum extends BaseEnum implements EnumInterface, LocalizedEnum
14
{
15
    /**
16
     * Get the enum as an collection formatted for a select.
17
     *
18
     * @return Collection
19
     */
20
    public static function toSelectCollection(): Collection
21
    {
22
        return collect(self::toArray())->mapWithKeys(function ($value, $text) {
0 ignored issues
show
Unused Code introduced by
The parameter $text is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
23
            return [
24
                $value => [
25
                    'text'  => self::getDescription($value),
26
                    'value' => $value,
27
                ],
28
            ];
29
        });
30
    }
31
32
    /**
33
     * Get the description for an enum value.
34
     *
35
     * @param int|string $value
36
     *
37
     * @return string
38
     */
39
    public static function getDescription($value): string
40
    {
41
        return
42
            static::getLocalizedDescription($value) ??
43
            static::getKey($value);
44
    }
45
46
    /**
47
     * Get the localized description if localization is enabled
48
     * for the enum and if they key exists in the lang file.
49
     *
50
     * @param int|string $value
51
     *
52
     * @return string
53
     */
54
    protected static function getLocalizedDescription($value): ?string
55
    {
56
        $localizedStringKeys = [
57
            static::getLocalizationKey().Str::snake(static::getKey($value)),
58
            static::getLocalizationKey().$value,
59
        ];
60
61
        foreach ($localizedStringKeys as $key) {
62
            if (Lang::has($key)) {
63
                return __($key);
64
            }
65
        }
66
67
        return null;
68
    }
69
70
    /**
71
     * Get the default localization key.
72
     *
73
     * @return string
74
     */
75
    public static function getLocalizationKey(): string
76
    {
77
        return 'base.';
78
    }
79
80
    /**
81
     * @param $value
82
     * @param string $message
83
     *
84
     * @throws InvalidEnumValueException
85
     *
86
     * @return bool
87
     */
88
    public static function hasValueOrFail($value, string $message = '')
89
    {
90
        if (! static::hasValue($value)) {
91
            throw new InvalidEnumValueException($message);
92
        }
93
94
        return true;
95
    }
96
97
    /**
98
     * Check that the enum contains all values of the array.
99
     *
100
     * @param array $values
101
     *
102
     * @return bool
103
     */
104
    public static function containsValues(array $values)
105
    {
106
        foreach ($values as $value) {
107
            if (! static::hasValue($value)) {
108
                return false;
109
            }
110
        }
111
112
        return true;
113
    }
114
115
    /**
116
     * Check that the enum contains all values of the array and throws an exception, if not.
117
     *
118
     * @param array  $values
119
     * @param string $message
120
     *
121
     * @throws InvalidEnumValueException
122
     *
123
     * @return bool
124
     */
125
    public static function containsValuesOrFail(array $values, string $message = '')
126
    {
127
        if (! static::containsValues($values)) {
128
            throw new InvalidEnumValueException($message);
129
        }
130
131
        return true;
132
    }
133
}
134