From 77153b255da293819975ab51ff40c84e5c1ff3cf Mon Sep 17 00:00:00 2001 From: alecpl Date: Fri, 4 Nov 2011 11:01:54 +0000 Subject: [PATCH] - Fix handling of dates (birthday/anniversary) in contact data - don't convert them to users timezone (#1488147) --- CHANGELOG | 1 + program/include/main.inc | 38 +++++++++++++++++------------- program/steps/addressbook/func.inc | 4 ++-- 3 files changed, 25 insertions(+), 18 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 5e3b017dc..d218710b3 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,7 @@ CHANGELOG Roundcube Webmail =========================== +- Fix handling of dates (birthday/anniversary) in contact data (#1488147) - Fix error on opening searched LDAP contact (#1488144) - Fix redundant line break in flowed format (#1488146) - TinyMCE: diff --git a/program/include/main.inc b/program/include/main.inc index 3980794eb..7e31c012f 100644 --- a/program/include/main.inc +++ b/program/include/main.inc @@ -1018,15 +1018,15 @@ function rcube_strtotime($date) * Convert the given date to a human readable form * This uses the date formatting properties from config * - * @param mixed Date representation (string or timestamp) + * @param mixed Date representation (string or timestamp) * @param string Date format to use + * @param bool Enables date convertion according to user timezone + * * @return string Formatted date string */ -function format_date($date, $format=NULL) +function format_date($date, $format=NULL, $convert=true) { global $RCMAIL, $CONFIG; - - $ts = NULL; if (!empty($date)) $ts = rcube_strtotime($date); @@ -1034,23 +1034,29 @@ function format_date($date, $format=NULL) if (empty($ts)) return ''; - // get user's timezone offset - $tz = $RCMAIL->config->get_timezone(); - - // convert time to user's timezone - $timestamp = $ts - date('Z', $ts) + ($tz * 3600); + if ($convert) { + // get user's timezone offset + $tz = $RCMAIL->config->get_timezone(); - // get current timestamp in user's timezone - $now = time(); // local time - $now -= (int)date('Z'); // make GMT time - $now += ($tz * 3600); // user's time - $now_date = getdate($now); + // convert time to user's timezone + $timestamp = $ts - date('Z', $ts) + ($tz * 3600); - $today_limit = mktime(0, 0, 0, $now_date['mon'], $now_date['mday'], $now_date['year']); - $week_limit = mktime(0, 0, 0, $now_date['mon'], $now_date['mday']-6, $now_date['year']); + // get current timestamp in user's timezone + $now = time(); // local time + $now -= (int)date('Z'); // make GMT time + $now += ($tz * 3600); // user's time + } + else { + $now = time(); + $timestamp = $ts; + } // define date format depending on current time if (!$format) { + $now_date = getdate($now); + $today_limit = mktime(0, 0, 0, $now_date['mon'], $now_date['mday'], $now_date['year']); + $week_limit = mktime(0, 0, 0, $now_date['mon'], $now_date['mday']-6, $now_date['year']); + if ($CONFIG['prettydate'] && $timestamp > $today_limit && $timestamp < $now) { $format = $RCMAIL->config->get('date_today', $RCMAIL->config->get('time_format', 'H:i')); $today = true; diff --git a/program/steps/addressbook/func.inc b/program/steps/addressbook/func.inc index 79a0babb8..52819c0df 100644 --- a/program/steps/addressbook/func.inc +++ b/program/steps/addressbook/func.inc @@ -624,7 +624,7 @@ function rcmail_contact_form($form, $record, $attrib = null) $RCMAIL->output->set_env('month_names', $month_names); } $colprop['class'] .= ($colprop['class'] ? ' ' : '') . 'datepicker'; - $val = format_date($val, $RCMAIL->config->get('date_format', 'Y-m-d')); + $val = format_date($val, $RCMAIL->config->get('date_format', 'Y-m-d'), false); } $val = rcmail_get_edit_field($col, $val, $colprop, $colprop['type']); @@ -733,7 +733,7 @@ function rcmail_contact_photo($attrib) function rcmail_format_date_col($val) { global $RCMAIL; - return format_date($val, $RCMAIL->config->get('date_format', 'Y-m-d')); + return format_date($val, $RCMAIL->config->get('date_format', 'Y-m-d'), false); }