Add time zone conversion

This commit is contained in:
2020-04-17 13:16:43 +02:00
parent a6fa2fe627
commit 2228b94d93

View File

@@ -3,7 +3,7 @@
/** /**
* Mask Reader * Mask Reader
* @author franzz * @author franzz
* @version 1.1 * @version 1.2
*/ */
class Mask extends PhpObject class Mask extends PhpObject
{ {
@@ -16,6 +16,7 @@ class Mask extends PhpObject
private $aoInstances; private $aoInstances;
private $oLang; private $oLang;
private $sTimezone;
const MASK_FOLDER = 'masks/'; const MASK_FOLDER = 'masks/';
const MASK_EXT = '.html'; const MASK_EXT = '.html';
@@ -23,8 +24,9 @@ class Mask extends PhpObject
const END_TAG = 'END'; const END_TAG = 'END';
const TAG_MARK = '[#]'; const TAG_MARK = '[#]';
const LANG_PREFIX = 'lang:'; const LANG_PREFIX = 'lang:';
const TIME_PREFIX = 'time:';
public function __construct($sFileName='', Translator $oLang=null) public function __construct($sFileName='', Translator $oLang=null, $sTimezone = '')
{ {
//init //init
parent::__construct(__FILE__, Settings::DEBUG); parent::__construct(__FILE__, Settings::DEBUG);
@@ -37,6 +39,7 @@ class Mask extends PhpObject
$this->aoInstances = array(); $this->aoInstances = array();
$this->sFilePath = ''; $this->sFilePath = '';
$this->setTranslator($oLang); $this->setTranslator($oLang);
$this->setTimezone($sTimezone);
//load file //load file
if($sFileName!='') $this->initFile($sFileName); if($sFileName!='') $this->initFile($sFileName);
@@ -52,6 +55,10 @@ class Mask extends PhpObject
} }
} }
public function setTimezone($sTimezone) {
$this->sTimezone = ($sTimezone=='')?Settings::TIMEZONE:$sTimezone;
}
private function setTranslator($oLang) { private function setTranslator($oLang) {
$this->oLang = $oLang; $this->oLang = $oLang;
foreach($this->aoInstances as &$aoPartInstance) { foreach($this->aoInstances as &$aoPartInstance) {
@@ -168,12 +175,12 @@ class Mask extends PhpObject
$oMask->aoInstances[$sPartName][] = $oInstance; $oMask->aoInstances[$sPartName][] = $oInstance;
} }
public function setInstanceTag($sPartName, $sTagName, $sTagValue, $asLangParams=array()) public function setInstanceTag($sPartName, $sTagName, $sTagValue, $asTagParams=array())
{ {
$oMask = $this->findPart($this, $sPartName); $oMask = $this->findPart($this, $sPartName);
if(!$oMask) $this->addError('No part found : '.$sPartName); if(!$oMask) $this->addError('No part found : '.$sPartName);
$oMask->getCurrentInstance($sPartName)->setTag($sTagName, $sTagValue, $asLangParams); $oMask->getCurrentInstance($sPartName)->setTag($sTagName, $sTagValue, $asTagParams);
} }
private function findPart($oMask, $sPartName) private function findPart($oMask, $sPartName)
@@ -197,6 +204,11 @@ class Mask extends PhpObject
return false; return false;
} }
/**
* returns latest instance
* @param String $sPartName
* @return Mask
*/
private function getCurrentInstance($sPartName) private function getCurrentInstance($sPartName)
{ {
if(!empty($this->aoInstances[$sPartName])) if(!empty($this->aoInstances[$sPartName]))
@@ -220,6 +232,7 @@ class Mask extends PhpObject
public function getTags() public function getTags()
{ {
$asMatches = array('tag'=>array());
$sSafeTagMark = preg_quote(self::TAG_MARK); $sSafeTagMark = preg_quote(self::TAG_MARK);
$sSafeLangMark = preg_quote(self::LANG_PREFIX); $sSafeLangMark = preg_quote(self::LANG_PREFIX);
$sPattern = '/'.$sSafeTagMark.'(?P<tag>('.$sSafeLangMark.'|)\w+)'.$sSafeTagMark.'/u'; $sPattern = '/'.$sSafeTagMark.'(?P<tag>('.$sSafeLangMark.'|)\w+)'.$sSafeTagMark.'/u';
@@ -227,10 +240,10 @@ class Mask extends PhpObject
return array_unique(array_filter($asMatches['tag'])); return array_unique(array_filter($asMatches['tag']));
} }
public function setTag($sTagName, $sTagValue, $asLangParams=array()) public function setTag($sTagName, $sTagValue, $asTagParams=array())
{ {
$this->asTags[$sTagName] = $sTagValue; $this->asTags[$sTagName] = $sTagValue;
$this->asTagsParams[$sTagName] = $asLangParams; $this->asTagsParams[$sTagName] = $asTagParams;
} }
public function setTags($asTags) public function setTags($asTags)
@@ -242,6 +255,10 @@ class Mask extends PhpObject
return (mb_substr($sTag, 0, 5) == self::LANG_PREFIX); return (mb_substr($sTag, 0, 5) == self::LANG_PREFIX);
} }
private static function isTimeTag($sTag) {
return (mb_substr($sTag, 0, 5) == self::TIME_PREFIX);
}
public function getMask() public function getMask()
{ {
$sCompletedMask = $this->sMask; $sCompletedMask = $this->sMask;
@@ -257,12 +274,16 @@ class Mask extends PhpObject
$this->setTag($this->getPartTagPattern($sPart, false), $sTagValue); $this->setTag($this->getPartTagPattern($sPart, false), $sTagValue);
} }
//Translate Tags //Special Tags
$asTags = $this->asTags; $asTags = $this->asTags;
if(!is_null($this->oLang)) { foreach($asTags as $sTagName=>&$sTagValue) {
foreach($asTags as $sTagName=>&$sTagValue) { $sTagActValue = mb_substr($sTagValue, 5);
if(self::isLangTag($sTagValue)) $sTagValue = $this->oLang->getTranslation(mb_substr($sTagValue, 5), $this->asTagsParams[$sTagName]);
} //Translate Tag
if(!is_null($this->oLang) && self::isLangTag($sTagValue)) $sTagValue = $this->oLang->getTranslation($sTagActValue, $this->asTagsParams[$sTagName]);
//Convert Value to Mask Time Zone
if(self::isTimeTag($sTagValue)) $sTagValue = (new DateTime('@'.$sTagActValue))->setTimeZone(new DateTimeZone($this->sTimezone))->format($this->asTagsParams[$sTagName]);;
} }
//Replace Tags //Replace Tags