Index: branches/5.1.x/core/kernel/db/db_tag_processor.php =================================================================== diff -u -N -r13188 -r13451 --- branches/5.1.x/core/kernel/db/db_tag_processor.php (.../db_tag_processor.php) (revision 13188) +++ branches/5.1.x/core/kernel/db/db_tag_processor.php (.../db_tag_processor.php) (revision 13451) @@ -1,6 +1,6 @@ SelectParam($params, 'name,field'); + + if ($field) { + $object =& $this->getObject($params); + /* @var $object kDBItem */ + + $timestamp = $object->GetDBField($field); + } + else { + $timestamp = $params['value']; + } + + // apply timezone adjustment manually (because we are not using kDateFormatter) + $date = $timestamp + $this->Application->TimeZoneAdjustment(); + + // prepare phrase replacements + $replacements = Array ( + 'l' => 'la_WeekDay', + 'D' => 'la_WeekDay', + 'M' => 'la_Month', + 'F' => 'la_Month', + ); + + // cases allow to append phrase suffix based on requested case (e.g. Genitive) + $case_suffixes = array_key_exists('case_suffixes', $params) ? $params['case_suffixes'] : false; + + if ($case_suffixes) { + // apply case suffixes (for russian language only) + $case_suffixes = explode(',', $case_suffixes); + + foreach ($case_suffixes as $case_suffux) { + list ($replacement_name, $case_suffix_value) = explode('=', $case_suffux, 2); + $replacements[$replacement_name] .= $case_suffix_value; + } + } + + $format = array_key_exists('format', $params) ? $params['format'] : false; + + if (preg_match('/_regional_(.*)/', $format, $regs)) { + $language =& $this->Application->recallObject('lang.current'); + /* @var $language kDBItem */ + + $format = $language->GetDBField($regs[1]); + } + elseif (!$format) { + $format = null; + } + + // escape formats, that are resolved to words by adodb_date + foreach ($replacements as $format_char => $phrase_prefix) { + if (strpos($format, $format_char) === false) { + unset($replacements[$format_char]); + continue; + } + + $replacements[$format_char] = $this->Application->Phrase($phrase_prefix . adodb_date($format_char, $date)); + $format = str_replace($format_char, '#' . ord($format_char) . '#', $format); + } + + $date_formatted = adodb_date($format, $date); + + // unescape formats, that are resolved to words by adodb_date + foreach ($replacements as $format_char => $format_replacement) { + $date_formatted = str_replace('#' . ord($format_char) . '#', $format_replacement, $date_formatted); + } + + return $date_formatted; + } + function SetField($params) { //