/** * Convert variable format * * @param string $varName Name of the variable * @param array $parameter Array contains format parameters * @param array $pool Data that may needed for compile * @param DataContainer $dataContainer Parser data container * * @throws Exception\VariableDateMustSet * @throws Exception\VariableDateFormatNotFound * * @return string Compiled PHP code */ public static function convert($varName, array $parameter, array $pool, DataContainer $dataContainer) { $phpCode = ''; if (!isset($parameter[0]) || !$parameter[0]) { throw new Exception\VariableDateMustSet($varName); } if (!isset($pool['LanguageMap']['FORMAT_DATE_' . $parameter[0]])) { throw new Exception\VariableDateFormatNotFound($parameter[0], $varName); } if (!$dataContainer->hasDefineBlock('Header', 'Variable:InitDateTime')) { $dataContainer->setDefineBlock('Header', 'Variable:InitDateTime', '<?php $____dateTimeZones_____ = ' . var_export(static::$timeZones, true) . '; $____dateTime_____ = new DateTime(); ?>'); $dataContainer->setDefineBlock('Footer', 'Variable:DeInitDateTime', '<?php unset($____dateTimeZones_____); unset($____dateTime_____); ?>'); $dataContainer->setMutex('Overwrite!$____dateTimeZones_____'); $dataContainer->setMutex('Overwrite!$____dateTime_____'); } $phpCode .= '<?php '; if (isset($parameter[1]) && $parameter[1]) { $parameters = new Parameters('var="' . $parameter[1] . '"', array('var' => 'variable')); $phpCode .= 'if (isset(' . $parameters->get('var') . ', $____dateTimeZones_____[' . $parameters->get('var') . '])) {'; $phpCode .= '$____dateTime_____->setTimezone(new DateTimeZone('; $phpCode .= '$____dateTimeZones_____[' . $parameters->get('var') . '])'; $phpCode .= '); }'; } $phpCode .= '$____dateTime_____->setTimestamp((int)' . $varName . '); ' . 'echo($____dateTime_____->format(\'' . str_replace('\'', '\\\'', $pool['LanguageMap']['FORMAT_DATE_' . $parameter[0]]) . '\')); ?>'; return $phpCode; }
/** * Convert variable format * * @param string $varName Name of the variable * @param array $parameter Array contains format parameters * @param array $pool Data that may needed for compile * @param DataContainer $dataContainer Parser data container * * @throws Exception\VariableFriendlyTimeFormatMissed * * @return string Compiled PHP code */ public static function convert($varName, array $parameter, array $pool, DataContainer $dataContainer) { $phpCode = ''; if (!isset($pool['LanguageMap']['FORMAT_TIME_BEFORE_DAY'], $pool['LanguageMap']['FORMAT_TIME_BEFORE_HR'], $pool['LanguageMap']['FORMAT_TIME_BEFORE_MIN'], $pool['LanguageMap']['FORMAT_TIME_BEFORE_SND'], $pool['LanguageMap']['FORMAT_TIME_AFTER_SND'], $pool['LanguageMap']['FORMAT_TIME_AFTER_MIN'], $pool['LanguageMap']['FORMAT_TIME_AFTER_HR'], $pool['LanguageMap']['FORMAT_TIME_AFTER_DAY'])) { throw new Exception\VariableFriendlyTimeFormatMissed($varName, implode(', ', array('FORMAT_TIME_BEFORE_DAY', 'FORMAT_TIME_BEFORE_HR', 'FORMAT_TIME_BEFORE_MIN', 'FORMAT_TIME_BEFORE_SND', 'FORMAT_TIME_AFTER_SND', 'FORMAT_TIME_AFTER_MIN', 'FORMAT_TIME_AFTER_HR', 'FORMAT_TIME_AFTER_DAY'))); } if (!$dataContainer->hasDefineBlock('Header', 'Variable:InitDateTime')) { $dataContainer->setDefineBlock('Header', 'Variable:InitDateTime', '<?php $____dateTimeZones_____ = ' . var_export(static::$timeZones, true) . '; $____dateTime_____ = new DateTime(); ?>'); $dataContainer->setDefineBlock('Footer', 'Variable:DeInitDateTime', '<?php unset($____dateTimeZones_____); unset($____dateTime_____); ?>'); $dataContainer->setMutex('Overwrite!$____dateTimeZones_____'); $dataContainer->setMutex('Overwrite!$____dateTime_____'); } if (!$dataContainer->hasDefineBlock('Header', 'Variable:InitFriendlyTime')) { $dataContainer->setDefineBlock('Header', 'Variable:InitFriendlyTime', '<?php $____tempFriendlyTime_____ = 0; ?>'); $dataContainer->setDefineBlock('Footer', 'Variable:DeInitFriendlyTime', '<?php unset($____tempFriendlyTime_____); ?>'); $dataContainer->setMutex('Overwrite!$____tempFriendlyTime_____'); } $phpCode .= '<?php ' . '$____tempFriendlyTime_____ = $Time - (int)(' . $varName . ');' . 'if ($____tempFriendlyTime_____ < 0) { ' . '$____tempFriendlyTime_____ = abs($____tempFriendlyTime_____); ' . 'if ($____tempFriendlyTime_____ < 60) { printf(\'' . str_replace('\'', '\\\'', $pool['LanguageMap']['FORMAT_TIME_AFTER_SND']) . '\', $____tempFriendlyTime_____); ' . '} elseif ($____tempFriendlyTime_____ < 3600) { printf(\'' . str_replace('\'', '\\\'', $pool['LanguageMap']['FORMAT_TIME_AFTER_MIN']) . '\', (int)($____tempFriendlyTime_____ / 60)); ' . '} elseif ($____tempFriendlyTime_____ < 86400) { printf(\'' . str_replace('\'', '\\\'', $pool['LanguageMap']['FORMAT_TIME_AFTER_HR']) . '\', (int)($____tempFriendlyTime_____ / 3600)); ' . '} elseif ($____tempFriendlyTime_____ < 604800) { printf(\'' . str_replace('\'', '\\\'', $pool['LanguageMap']['FORMAT_TIME_AFTER_DAY']) . '\', (int)($____tempFriendlyTime_____ / 86400)); ' . '} elseif ($____tempFriendlyTime_____) {'; $phpCode .= static::getTimeCode($varName, $parameter, $pool); $phpCode .= '}} else {' . 'if ($____tempFriendlyTime_____ < 60) { printf(\'' . str_replace('\'', '\\\'', $pool['LanguageMap']['FORMAT_TIME_BEFORE_SND']) . '\', $____tempFriendlyTime_____); ' . '} elseif ($____tempFriendlyTime_____ < 3600) { printf(\'' . str_replace('\'', '\\\'', $pool['LanguageMap']['FORMAT_TIME_BEFORE_MIN']) . '\', (int)($____tempFriendlyTime_____ / 60)); ' . '} elseif ($____tempFriendlyTime_____ < 86400) { printf(\'' . str_replace('\'', '\\\'', $pool['LanguageMap']['FORMAT_TIME_BEFORE_HR']) . '\', (int)($____tempFriendlyTime_____ / 3600)); ' . '} elseif ($____tempFriendlyTime_____ < 604800) { printf(\'' . str_replace('\'', '\\\'', $pool['LanguageMap']['FORMAT_TIME_BEFORE_DAY']) . '\', (int)($____tempFriendlyTime_____ / 86400)); ' . '} elseif ($____tempFriendlyTime_____) {'; $phpCode .= static::getTimeCode($varName, $parameter, $pool); $phpCode .= '}} ?>'; return $phpCode; }