From 64120e723cff4ec63626c78af8e4038d8b370629 Mon Sep 17 00:00:00 2001 From: Carsten Wolff Date: Thu, 30 Jun 2005 19:01:19 +0000 Subject: [PATCH] another shot at datetime.iso8601: - accept both simple and extended format from input - output simple format, if the client sends a HTTP-header "isoDate: simple". This should maybe extended by another possibility, where the information is stored in the session on login. Then there is a good way for all clients, regardless of the use of any combination of Auth-headers, login/cookies and webservers. --- phpgwapi/inc/class.xmlrpc_server.inc.php | 28 +++++++++++++++++++----- xmlrpc.php | 3 +++ 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/phpgwapi/inc/class.xmlrpc_server.inc.php b/phpgwapi/inc/class.xmlrpc_server.inc.php index 67b4bccee1..318322711d 100644 --- a/phpgwapi/inc/class.xmlrpc_server.inc.php +++ b/phpgwapi/inc/class.xmlrpc_server.inc.php @@ -23,12 +23,14 @@ // contains useful functions for xmlrpc methods class xmlrpc_server_shared { + var $simpledate = False; + // convert a date-array or timestamp into a datetime.iso8601 string function date2iso8601($date) { if (!is_array($date)) { - if(strstr($_SERVER['HTTP_USER_AGENT'],"vbXMLRPC")) + if($this->simpledate) { return date('Ymd\TH:i:s',$date); } @@ -36,7 +38,7 @@ } $formatstring = "%04d-%02d-%02dT%02d:%02d:%02d"; - if(strstr($_SERVER['HTTP_USER_AGENT'],"vbXMLRPC")) + if($this->simpledate) { $formatstring = "%04d%02d%02dT%02d:%02d:%02d"; } @@ -48,8 +50,22 @@ // convert a datetime.iso8601 string into a datearray or timestamp function iso86012date($isodate,$timestamp=False) { - if (($arr = split('[-:T]',$isodate)) && count($arr) == 6) + $arr = array(); + + if (ereg('^([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})$',$isodate,$arr)) { + // $isodate is simple ISO8601, remove the difference between split and ereg + array_shift($arr); + } + elseif (($arr = split('[-:T]',$isodate)) && count($arr) == 6) + { + // $isodate is extended ISO8601, do nothing + } + else + { + return False; + } + foreach(array('year','month','mday','hour','min','sec') as $n => $name) { $date[$name] = (int)$arr[$n]; @@ -57,8 +73,6 @@ return $timestamp ? mktime($date['hour'],$date['min'],$date['sec'], $date['month'],$date['mday'],$date['year']) : $date; } - return False; - } // translate cat-ids to array with id-name pairs function cats2xmlrpc($cats) @@ -143,6 +157,10 @@ } return $cats; } + + function setSimpleDate($enable=True) { + $this->simpledate = $enable; + } } if(empty($GLOBALS['phpgw_info']['server']['xmlrpc_type'])) diff --git a/xmlrpc.php b/xmlrpc.php index 82b57f8b2a..cba595e046 100644 --- a/xmlrpc.php +++ b/xmlrpc.php @@ -34,6 +34,9 @@ /* Note: this command only available under Apache */ $headers = getallheaders(); //print_r($headers); + $isodate = $headers['isoDate'] ? $headers['isoDate'] : $headers['isodate']; + $isodate = ($isodate == 'simple') ? True : False; + $server->setSimpleDate($isodate); $auth_header = $headers['Authorization'] ? $headers['Authorization'] : $headers['authorization']; if(eregi('Basic *([^ ]*)',$auth_header,$auth))