convert all timestamps from DB returned as string to integers, to avoid missinterpretation from egw_time as Ymd string

This commit is contained in:
Ralf Becker 2010-11-04 13:30:11 +00:00
parent 9d8ee08a50
commit 9dfe1a55f4

View File

@ -70,7 +70,7 @@ class calendar_bo
* @var int $now timestamp in server-time * @var int $now timestamp in server-time
*/ */
var $now; var $now;
/** /**
* @var int $now_su timestamp of actual user-time * @var int $now_su timestamp of actual user-time
*/ */
@ -740,7 +740,10 @@ class calendar_bo
} }
/** /**
* convert data read from the db, eg. convert server to user-time * Convert data read from the db, eg. convert server to user-time
*
* Also make sure all timestamps comming from DB as string are converted to integer,
* to avoid misinterpretation by egw_time as Ymd string.
* *
* @param array &$events array of event-arrays (reference) * @param array &$events array of event-arrays (reference)
* @param $date_format='ts' date-formats: 'ts'=timestamp, 'server'=timestamp in server-time, 'array'=array or string with date-format * @param $date_format='ts' date-formats: 'ts'=timestamp, 'server'=timestamp in server-time, 'array'=array or string with date-format
@ -755,26 +758,31 @@ class calendar_bo
{ {
$event['tzid'] = egw_time::$server_timezone->getName(); $event['tzid'] = egw_time::$server_timezone->getName();
} }
// database returns timestamps as string, convert them to integer
// to avoid misinterpretation by egw_time as Ymd string
// (this will fail on 32bit systems for times > 2038!)
$event['start'] = (int)$event['start']; // this is for isWholeDay(), which also calls egw_time
$event['end'] = (int)$event['end'];
$event['whole_day'] = $this->isWholeDay($event); $event['whole_day'] = $this->isWholeDay($event);
if ($event['whole_day'] && $date_format != 'server') if ($event['whole_day'] && $date_format != 'server')
{ {
// Adjust dates to user TZ // Adjust dates to user TZ
$time = new egw_time($event['start'], egw_time::$server_timezone); $time = new egw_time((int)$event['start'], egw_time::$server_timezone);
$time =& $this->so->startOfDay($time, $event['tzid']); $time =& $this->so->startOfDay($time, $event['tzid']);
$event['start'] = egw_time::to($time, $date_format); $event['start'] = egw_time::to($time, $date_format);
$time = new egw_time($event['end'], egw_time::$server_timezone); $time = new egw_time((int)$event['end'], egw_time::$server_timezone);
$time =& $this->so->startOfDay($time, $event['tzid']); $time =& $this->so->startOfDay($time, $event['tzid']);
$time->setTime(23, 59, 59); $time->setTime(23, 59, 59);
$event['end'] = egw_time::to($time, $date_format); $event['end'] = egw_time::to($time, $date_format);
if (!empty($event['recurrence'])) if (!empty($event['recurrence']))
{ {
$time = new egw_time($event['recurrence'], egw_time::$server_timezone); $time = new egw_time((int)$event['recurrence'], egw_time::$server_timezone);
$time =& $this->so->startOfDay($time, $event['tzid']); $time =& $this->so->startOfDay($time, $event['tzid']);
$event['recurrence'] = egw_time::to($time, $date_format); $event['recurrence'] = egw_time::to($time, $date_format);
} }
if (!empty($event['recur_enddate'])) if (!empty($event['recur_enddate']))
{ {
$time = new egw_time($event['recur_enddate'], egw_time::$server_timezone); $time = new egw_time((int)$event['recur_enddate'], egw_time::$server_timezone);
$time =& $this->so->startOfDay($time, $event['tzid']); $time =& $this->so->startOfDay($time, $event['tzid']);
$time->setTime(23, 59, 59); $time->setTime(23, 59, 59);
$event['recur_enddate'] = egw_time::to($time, $date_format); $event['recur_enddate'] = egw_time::to($time, $date_format);
@ -790,7 +798,7 @@ class calendar_bo
{ {
if (!empty($event[$ts])) if (!empty($event[$ts]))
{ {
$event[$ts] = $this->date2usertime($event[$ts],$date_format); $event[$ts] = $this->date2usertime((int)$event[$ts],$date_format);
} }
} }
// same with the recur exceptions // same with the recur exceptions
@ -801,13 +809,13 @@ class calendar_bo
if ($event['whole_day'] && $date_format != 'server') if ($event['whole_day'] && $date_format != 'server')
{ {
// Adjust dates to user TZ // Adjust dates to user TZ
$time = new egw_time($date, egw_time::$server_timezone); $time = new egw_time((int)$date, egw_time::$server_timezone);
$time =& $this->so->startOfDay($time, $event['tzid']); $time =& $this->so->startOfDay($time, $event['tzid']);
$date = egw_time::to($time, $date_format); $date = egw_time::to($time, $date_format);
} }
else else
{ {
$date = $this->date2usertime($date,$date_format); $date = $this->date2usertime((int)$date,$date_format);
} }
} }
} }
@ -816,7 +824,7 @@ class calendar_bo
{ {
foreach($event['alarm'] as &$alarm) foreach($event['alarm'] as &$alarm)
{ {
$alarm['time'] = $this->date2usertime($alarm['time'],$date_format); $alarm['time'] = $this->date2usertime((int)$alarm['time'],$date_format);
} }
} }
} }
@ -1083,10 +1091,10 @@ class calendar_bo
$private = !$event['public']; $private = !$event['public'];
} }
$grants = $this->grants[$owner]; $grants = $this->grants[$owner];
// now any ACL rights implicate FREEBUSY rights (at least READ has to include FREEBUSY) // now any ACL rights implicate FREEBUSY rights (at least READ has to include FREEBUSY)
if ($grants) $grants |= EGW_ACL_FREEBUSY; if ($grants) $grants |= EGW_ACL_FREEBUSY;
if (is_array($event) && ($needed == EGW_ACL_READ || $needed == EGW_ACL_FREEBUSY)) if (is_array($event) && ($needed == EGW_ACL_READ || $needed == EGW_ACL_FREEBUSY))
{ {
// Check if the $user is one of the participants or has a read-grant from one of them // Check if the $user is one of the participants or has a read-grant from one of them
@ -1657,7 +1665,7 @@ class calendar_bo
$pers['contact_bday']=null; $pers['contact_bday']=null;
} }
if (empty($pers['bday']) && !empty($pers['contact_bday'])) $pers['bday'] = $pers['contact_bday']; if (empty($pers['bday']) && !empty($pers['contact_bday'])) $pers['bday'] = $pers['contact_bday'];
if (empty($pers['bday'])) if (empty($pers['bday']))
{ {
//error_log(__METHOD__.__LINE__.' Skipping entry for invalid birthday:'.array2string($pers)); //error_log(__METHOD__.__LINE__.' Skipping entry for invalid birthday:'.array2string($pers));
continue; continue;
@ -1700,7 +1708,7 @@ class calendar_bo
{ {
list($id, $recur) = explode('-', $event, 2); list($id, $recur) = explode('-', $event, 2);
$event = $this->read($id, $recur); $event = $this->read($id, $recur);
} }
else if (!is_array($event) && (int) $event > 0) else if (!is_array($event) && (int) $event > 0)
{ {
$event = $this->read($event); $event = $this->read($event);
@ -1810,9 +1818,9 @@ class calendar_bo
static function freebusy_url($user='',$pw=null) static function freebusy_url($user='',$pw=null)
{ {
if (is_numeric($user)) $user = $GLOBALS['egw']->accounts->id2name($user); if (is_numeric($user)) $user = $GLOBALS['egw']->accounts->id2name($user);
$credentials = ''; $credentials = '';
if ($pw) if ($pw)
{ {
$credentials = '&password='.urlencode($pw); $credentials = '&password='.urlencode($pw);