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
* @author franzz
* @version 1.1
* @version 1.2
*/
class Mask extends PhpObject
{
@@ -16,6 +16,7 @@ class Mask extends PhpObject
private $aoInstances;
private $oLang;
private $sTimezone;
const MASK_FOLDER = 'masks/';
const MASK_EXT = '.html';
@@ -23,8 +24,9 @@ class Mask extends PhpObject
const END_TAG = 'END';
const TAG_MARK = '[#]';
const LANG_PREFIX = 'lang:';
const TIME_PREFIX = 'time:';
public function __construct($sFileName='', Translator $oLang=null)
public function __construct($sFileName='', Translator $oLang=null, $sTimezone = '')
{
//init
parent::__construct(__FILE__, Settings::DEBUG);
@@ -37,6 +39,7 @@ class Mask extends PhpObject
$this->aoInstances = array();
$this->sFilePath = '';
$this->setTranslator($oLang);
$this->setTimezone($sTimezone);
//load file
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) {
$this->oLang = $oLang;
foreach($this->aoInstances as &$aoPartInstance) {
@@ -168,12 +175,12 @@ class Mask extends PhpObject
$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);
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)
@@ -197,6 +204,11 @@ class Mask extends PhpObject
return false;
}
/**
* returns latest instance
* @param String $sPartName
* @return Mask
*/
private function getCurrentInstance($sPartName)
{
if(!empty($this->aoInstances[$sPartName]))
@@ -220,6 +232,7 @@ class Mask extends PhpObject
public function getTags()
{
$asMatches = array('tag'=>array());
$sSafeTagMark = preg_quote(self::TAG_MARK);
$sSafeLangMark = preg_quote(self::LANG_PREFIX);
$sPattern = '/'.$sSafeTagMark.'(?P<tag>('.$sSafeLangMark.'|)\w+)'.$sSafeTagMark.'/u';
@@ -227,10 +240,10 @@ class Mask extends PhpObject
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->asTagsParams[$sTagName] = $asLangParams;
$this->asTagsParams[$sTagName] = $asTagParams;
}
public function setTags($asTags)
@@ -241,6 +254,10 @@ class Mask extends PhpObject
private static function isLangTag($sTag) {
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()
{
@@ -257,12 +274,16 @@ class Mask extends PhpObject
$this->setTag($this->getPartTagPattern($sPart, false), $sTagValue);
}
//Translate Tags
//Special Tags
$asTags = $this->asTags;
if(!is_null($this->oLang)) {
foreach($asTags as $sTagName=>&$sTagValue) {
if(self::isLangTag($sTagValue)) $sTagValue = $this->oLang->getTranslation(mb_substr($sTagValue, 5), $this->asTagsParams[$sTagName]);
}
foreach($asTags as $sTagName=>&$sTagValue) {
$sTagActValue = mb_substr($sTagValue, 5);
//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