From 016488988c678e196058a772b64b6fd004d534e8 Mon Sep 17 00:00:00 2001 From: Garvin Hicking Date: Tue, 4 Nov 2003 10:24:08 +0000 Subject: [PATCH] Bug #835252 --- ChangeLog | 7 ++- .../text_plain__dateformat.inc.php3 | 60 +++++++++++++------ 2 files changed, 49 insertions(+), 18 deletions(-) diff --git a/ChangeLog b/ChangeLog index 73b055270..24ed8abc7 100755 --- a/ChangeLog +++ b/ChangeLog @@ -5,8 +5,13 @@ phpMyAdmin - Changelog $Id$ $Source$ +2003-11-04 Garvin Hicking + * libraries/transformations/text_plain__dateformat.inc.php3: + Bug #835252: Now allow more timestamps. Minor modification of a patch + submitted by anonymous poster. Thanks! + 2003-11-03 Garvin Hicking - * Documentation.html, tbl_row_delete.php3, + * Documentation.html, tbl_row_delete.php3, libraries/display_tbl.lib.php3: Bug #828290: Fixed "Execute stored bookmark". Also made some minor tweaks to make PHP-Transformations with forms working again. Added diff --git a/libraries/transformations/text_plain__dateformat.inc.php3 b/libraries/transformations/text_plain__dateformat.inc.php3 index d9c9d152b..41eaaddc0 100644 --- a/libraries/transformations/text_plain__dateformat.inc.php3 +++ b/libraries/transformations/text_plain__dateformat.inc.php3 @@ -8,45 +8,71 @@ * * For instructions, read the libraries/transformations/README file. * - * The string ENTER_FILENAME_HERE shall be substituted with the filename without the '.inc.php3' + * The string ENTER_FILENAME_HERE shall be substituted with the filename without the '.inc.php' * extension. For further information regarding naming conventions see the README file. */ if (!defined('PMA_TRANSFORMATION_TEXT_PLAIN__DATEFORMAT')){ define('PMA_TRANSFORMATION_TEXT_PLAIN__DATEFORMAT', 1); - + function PMA_transformation_text_plain__dateformat($buffer, $options = array()) { // possibly use a global transform and feed it with special options: - // include('./libraries/transformations/global.inc.php3'); - + // include('./libraries/transformations/global.inc.php'); + // further operations on $buffer using the $options[] array. if (!isset($options[0]) || $options[0] == '') { $options[0] = 0; } - + if (!isset($options[1]) || $options[1] == '') { $options[1] = $GLOBALS['datefmt']; } - + $timestamp = -1; - if (strstr($buffer, ':')) { - $timestamp = strtotime($buffer); - } elseif (strlen($buffer) == 14 && eregi('^[0-9]*$', $buffer)) { + + // Detect TIMESTAMP(6 | 8 | 10 | 12 | 14), (2 | 4) not supported here. + if (preg_match('/^(\d{2}){3,7}$/', $buffer)) { + + if (strlen($buffer) == 14 || strlen($buffer) == 8) { + $offset = 4; + } else { + $offset = 2; + } + $d = array(); - $d['year'] = substr($buffer, 0, 4); - $d['month'] = substr($buffer, 4, 2); - $d['day'] = substr($buffer, 6, 2); - $d['hour'] = substr($buffer, 8, 2); - $d['minute'] = substr($buffer, 10, 2); - $d['second'] = substr($buffer, 12, 2); - $timestamp = mktime($d['hour'], $d['minute'], $d['second'], $d['month'], $d['day'], $d['year']); + $d['year'] = substr($buffer, 0, $offset); + $d['month'] = substr($buffer, $offset, 2); + $d['day'] = substr($buffer, $offset + 2, 2); + $d['hour'] = substr($buffer, $offset + 4, 2); + $d['minute'] = substr($buffer, $offset + 6, 2); + $d['second'] = substr($buffer, $offset + 8, 2); + + if (checkdate($d['month'], $d['day'], $d['year'])) { + $timestamp = mktime($d['hour'], $d['minute'], $d['second'], $d['month'], $d['day'], $d['year']); + } + // If all fails, assume one of the dozens of valid strtime() syntaxes (http://www.gnu.org/manual/tar-1.12/html_chapter/tar_7.html) + } else { + $timestamp = strtotime($buffer); } + // If all above failed, maybe it's a Unix timestamp already? + if ($timestamp < 0 && preg_match('/^[1-9]\d{1,9}$/', $buffer)) { + $timestamp = $buffer; + } + + // If there are still errors or the timestamp is invalid, mark timestamp invalid + if ($timestamp < 0 || !preg_match('/^[1-9]\d{1,9}$/', $timestamp)) { + $timestamp = -1; + } + + // Reformat a valid timestamp if ($timestamp != -1) { $timestamp -= $options[0] * 60 * 60; $buffer = PMA_localisedDate($timestamp, $options[1]); } - + return $buffer; } } +?> +