xref: /plugin/combo/ComboStrap/Meta/Field/Region.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
1*04fd306cSNickeau<?php
2*04fd306cSNickeau
3*04fd306cSNickeau
4*04fd306cSNickeaunamespace ComboStrap\Meta\Field;
5*04fd306cSNickeau
6*04fd306cSNickeau
7*04fd306cSNickeauuse ComboStrap\ExceptionCompile;
8*04fd306cSNickeauuse ComboStrap\MarkupPath;
9*04fd306cSNickeauuse ComboStrap\Meta\Api\Metadata;
10*04fd306cSNickeauuse ComboStrap\Meta\Api\MetadataText;
11*04fd306cSNickeauuse ComboStrap\MetaManagerForm;
12*04fd306cSNickeauuse ComboStrap\Site;
13*04fd306cSNickeauuse ComboStrap\StringUtility;
14*04fd306cSNickeau
15*04fd306cSNickeauclass Region extends MetadataText
16*04fd306cSNickeau{
17*04fd306cSNickeau
18*04fd306cSNickeau
19*04fd306cSNickeau    public const PROPERTY_NAME = "region";
20*04fd306cSNickeau    public const OLD_REGION_PROPERTY = "country";
21*04fd306cSNickeau    public const CONF_SITE_LANGUAGE_REGION = "siteLanguageRegion";
22*04fd306cSNickeau
23*04fd306cSNickeau    public static function createForPage(MarkupPath $page)
24*04fd306cSNickeau    {
25*04fd306cSNickeau        return (new Region())
26*04fd306cSNickeau            ->setResource($page);
27*04fd306cSNickeau    }
28*04fd306cSNickeau
29*04fd306cSNickeau    static public function getTab(): ?string
30*04fd306cSNickeau    {
31*04fd306cSNickeau        return MetaManagerForm::TAB_LANGUAGE_VALUE;
32*04fd306cSNickeau    }
33*04fd306cSNickeau
34*04fd306cSNickeau    /**
35*04fd306cSNickeau     * @throws ExceptionCompile
36*04fd306cSNickeau     */
37*04fd306cSNickeau    public function setFromStoreValue($value): Metadata
38*04fd306cSNickeau    {
39*04fd306cSNickeau
40*04fd306cSNickeau        $this->validityCheck($value);
41*04fd306cSNickeau        return parent::setFromStoreValue($value);
42*04fd306cSNickeau
43*04fd306cSNickeau    }
44*04fd306cSNickeau
45*04fd306cSNickeau    /**
46*04fd306cSNickeau     * @param string|null $value
47*04fd306cSNickeau     * @return Metadata
48*04fd306cSNickeau     * @throws ExceptionCompile
49*04fd306cSNickeau     */
50*04fd306cSNickeau    public function setValue($value): Metadata
51*04fd306cSNickeau    {
52*04fd306cSNickeau        $this->validityCheck($value);
53*04fd306cSNickeau        return parent::setValue($value);
54*04fd306cSNickeau    }
55*04fd306cSNickeau
56*04fd306cSNickeau
57*04fd306cSNickeau    static public function getDescription(): string
58*04fd306cSNickeau    {
59*04fd306cSNickeau        return "The region of the language";
60*04fd306cSNickeau    }
61*04fd306cSNickeau
62*04fd306cSNickeau    static public function getLabel(): string
63*04fd306cSNickeau    {
64*04fd306cSNickeau        return "Region";
65*04fd306cSNickeau    }
66*04fd306cSNickeau
67*04fd306cSNickeau    static public function getName(): string
68*04fd306cSNickeau    {
69*04fd306cSNickeau        return self::PROPERTY_NAME;
70*04fd306cSNickeau    }
71*04fd306cSNickeau
72*04fd306cSNickeau    static public function getPersistenceType(): string
73*04fd306cSNickeau    {
74*04fd306cSNickeau        return Metadata::PERSISTENT_METADATA;
75*04fd306cSNickeau    }
76*04fd306cSNickeau
77*04fd306cSNickeau    static public function isMutable(): bool
78*04fd306cSNickeau    {
79*04fd306cSNickeau        return true;
80*04fd306cSNickeau    }
81*04fd306cSNickeau
82*04fd306cSNickeau    public function getDefaultValue()
83*04fd306cSNickeau    {
84*04fd306cSNickeau        return Site::getLanguageRegion();
85*04fd306cSNickeau    }
86*04fd306cSNickeau
87*04fd306cSNickeau    /**
88*04fd306cSNickeau     * @throws ExceptionCompile
89*04fd306cSNickeau     */
90*04fd306cSNickeau    private function validityCheck($value)
91*04fd306cSNickeau    {
92*04fd306cSNickeau        if ($value === "" || $value === null) {
93*04fd306cSNickeau            return;
94*04fd306cSNickeau        }
95*04fd306cSNickeau        if (!StringUtility::match($value, "^[a-zA-Z]{2}$")) {
96*04fd306cSNickeau            throw new ExceptionCompile("The region value ($value) for the page ({$this->getResource()}) does not have two letters (ISO 3166 alpha-2 region code)", $this->getCanonical());
97*04fd306cSNickeau        }
98*04fd306cSNickeau    }
99*04fd306cSNickeau
100*04fd306cSNickeau    static public function getCanonical(): string
101*04fd306cSNickeau    {
102*04fd306cSNickeau        return "region";
103*04fd306cSNickeau    }
104*04fd306cSNickeau
105*04fd306cSNickeau
106*04fd306cSNickeau    static public function isOnForm(): bool
107*04fd306cSNickeau    {
108*04fd306cSNickeau        return true;
109*04fd306cSNickeau    }
110*04fd306cSNickeau
111*04fd306cSNickeau}
112