xref: /plugin/combo/ComboStrap/Locale.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
1c3437056SNickeau<?php
2c3437056SNickeau
3c3437056SNickeau
4c3437056SNickeaunamespace ComboStrap;
5c3437056SNickeau
6c3437056SNickeau
7*04fd306cSNickeauuse ComboStrap\Meta\Api\Metadata;
8*04fd306cSNickeauuse ComboStrap\Meta\Api\MetadataText;
9*04fd306cSNickeau
10c3437056SNickeauclass Locale extends MetadataText
11c3437056SNickeau{
12c3437056SNickeau
13c3437056SNickeau    const PROPERTY_NAME = "locale";
14c3437056SNickeau
15*04fd306cSNickeau    private string $separator = "_";
16*04fd306cSNickeau
17*04fd306cSNickeau    public static function createForPage(MarkupPath $page, string $separator = "_"): Locale
18c3437056SNickeau    {
19c3437056SNickeau        return (new Locale())
20*04fd306cSNickeau            ->setSeparator($separator)
21c3437056SNickeau            ->setResource($page);
22c3437056SNickeau    }
23c3437056SNickeau
24*04fd306cSNickeau    static public function getTab(): string
25c3437056SNickeau    {
26c3437056SNickeau        return MetaManagerForm::TAB_LANGUAGE_VALUE;
27c3437056SNickeau    }
28c3437056SNickeau
29*04fd306cSNickeau    static public function getDescription(): string
30c3437056SNickeau    {
31c3437056SNickeau        return "The locale define the language and the formatting of numbers and time for the page. It's generated from the language and region metadata.";
32c3437056SNickeau    }
33c3437056SNickeau
34*04fd306cSNickeau    static public function getLabel(): string
35c3437056SNickeau    {
36c3437056SNickeau        return "Locale";
37c3437056SNickeau    }
38c3437056SNickeau
39*04fd306cSNickeau    /**
40*04fd306cSNickeau     * @return string
41*04fd306cSNickeau     */
42*04fd306cSNickeau    public function getValue(): string
43c3437056SNickeau    {
44c3437056SNickeau
45*04fd306cSNickeau        $page = $this->getResource();
46*04fd306cSNickeau        if (!($page instanceof MarkupPath)) {
47*04fd306cSNickeau            LogUtility::internalError("The locale is only implemented for page resources");
48*04fd306cSNickeau            return $this->getDefaultValue();
49c3437056SNickeau        }
50*04fd306cSNickeau        $lang = $page->getLangOrDefault();
51*04fd306cSNickeau        $country = $page->getRegionOrDefault();
52c3437056SNickeau
53*04fd306cSNickeau        return $lang . $this->separator . strtoupper($country);
54*04fd306cSNickeau
55*04fd306cSNickeau
56c3437056SNickeau    }
57c3437056SNickeau
58c3437056SNickeau
59c3437056SNickeau    public static function getName(): string
60c3437056SNickeau    {
61c3437056SNickeau        return self::PROPERTY_NAME;
62c3437056SNickeau    }
63c3437056SNickeau
64*04fd306cSNickeau    static public function getPersistenceType(): string
65c3437056SNickeau    {
66c3437056SNickeau        return Metadata::DERIVED_METADATA;
67c3437056SNickeau    }
68c3437056SNickeau
69*04fd306cSNickeau    static public function isMutable(): bool
70c3437056SNickeau    {
71c3437056SNickeau        return false;
72c3437056SNickeau    }
73c3437056SNickeau
74*04fd306cSNickeau    /**
75*04fd306cSNickeau     * @return string
76*04fd306cSNickeau     */
77*04fd306cSNickeau    public function getDefaultValue(): string
78c3437056SNickeau    {
79c3437056SNickeau        /**
80c3437056SNickeau         * The value of {@link locale_get_default()} is with an underscore
81c3437056SNickeau         * We follow this lead
82c3437056SNickeau         */
83*04fd306cSNickeau        return Site::getLocale($this->separator);
84c3437056SNickeau    }
85c3437056SNickeau
86*04fd306cSNickeau    static public function getCanonical(): string
87c3437056SNickeau    {
88c3437056SNickeau        return "locale";
89c3437056SNickeau    }
90c3437056SNickeau
91*04fd306cSNickeau    /**
92*04fd306cSNickeau     * @return string
93*04fd306cSNickeau     */
94*04fd306cSNickeau    public function getValueOrDefault(): string
95*04fd306cSNickeau    {
96*04fd306cSNickeau        return $this->getValue();
97*04fd306cSNickeau    }
98c3437056SNickeau
99*04fd306cSNickeau    public function setSeparator(string $separator): Locale
100*04fd306cSNickeau    {
101*04fd306cSNickeau        $this->separator = $separator;
102*04fd306cSNickeau        return $this;
103*04fd306cSNickeau    }
104*04fd306cSNickeau
105*04fd306cSNickeau
106*04fd306cSNickeau    static public function isOnForm(): bool
107*04fd306cSNickeau    {
108*04fd306cSNickeau        return true;
109*04fd306cSNickeau    }
110c3437056SNickeau}
111