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