diff --git a/inc/mask.php b/inc/mask.php index 3b01433..24313de 100755 --- a/inc/mask.php +++ b/inc/mask.php @@ -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('.$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