summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoralecpl <alec@alec.pl>2011-11-04 11:01:54 +0000
committeralecpl <alec@alec.pl>2011-11-04 11:01:54 +0000
commit77153b255da293819975ab51ff40c84e5c1ff3cf (patch)
tree6c563205bd0595dfba6d420335296b63c2a85d2f
parent179b39d22a68db1f31947aca4d31eb1e53d193a7 (diff)
- Fix handling of dates (birthday/anniversary) in contact data - don't convert them to users timezone (#1488147)
-rw-r--r--CHANGELOG1
-rw-r--r--program/include/main.inc38
-rw-r--r--program/steps/addressbook/func.inc4
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);
}