Add time zone conversion
This commit is contained in:
41
inc/mask.php
41
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<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)
|
||||
@@ -242,6 +255,10 @@ class Mask extends PhpObject
|
||||
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()
|
||||
{
|
||||
$sCompletedMask = $this->sMask;
|
||||
@@ -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]);
|
||||
}
|
||||
$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
|
||||
|
||||
Reference in New Issue
Block a user