From a1214ffd08ff9bcf06e79d34315604003f26bc3f Mon Sep 17 00:00:00 2001 From: Michael M Slusarz Date: Mon, 13 Jul 2009 16:40:19 -0600 Subject: [PATCH] Work around broken DateTime serialization in PHP 5.2.x. --- .../Imap_Client/lib/Horde/Imap/Client/Cclient.php | 2 +- .../Imap_Client/lib/Horde/Imap/Client/DateTime.php | 75 ++++++++++++++++++++++ .../Imap_Client/lib/Horde/Imap/Client/Socket.php | 2 +- .../lib/Horde/Imap/Client/Socket/Pop3.php | 2 +- framework/Imap_Client/package.xml | 2 + 5 files changed, 80 insertions(+), 3 deletions(-) create mode 100644 framework/Imap_Client/lib/Horde/Imap/Client/DateTime.php diff --git a/framework/Imap_Client/lib/Horde/Imap/Client/Cclient.php b/framework/Imap_Client/lib/Horde/Imap/Client/Cclient.php index 542dbf830..9b4fdd50b 100644 --- a/framework/Imap_Client/lib/Horde/Imap/Client/Cclient.php +++ b/framework/Imap_Client/lib/Horde/Imap/Client/Cclient.php @@ -1212,7 +1212,7 @@ class Horde_Imap_Client_Cclient extends Horde_Imap_Client_Base } foreach ($options['ids'] as $id) { - $ret[$id]['date'] = new DateTime($hdrinfo[$id]->MailDate); + $ret[$id]['date'] = new Horde_Imap_Client_DateTime($hdrinfo[$id]->MailDate); } break; diff --git a/framework/Imap_Client/lib/Horde/Imap/Client/DateTime.php b/framework/Imap_Client/lib/Horde/Imap/Client/DateTime.php new file mode 100644 index 000000000..89139872c --- /dev/null +++ b/framework/Imap_Client/lib/Horde/Imap/Client/DateTime.php @@ -0,0 +1,75 @@ + + * @category Horde + * @package Horde_Imap_Client + */ +class Horde_Imap_Client_DateTime +{ + /** + * The datetime string. + * + * @var string + */ + private $_string; + + /** + * The timezone string. + * + * @var string + */ + private $_tz = null; + + /** + * The DateTime object to use for function calls. + * + * @var DateTime + */ + private $_datetime = null; + + /** + * Constructor. + * + * @param string $time String in a format accepted by strtotime(). + * @param DateTimeZone $tz Time zone of the time. + */ + public function __construct($time, $tz = null) + { + $this->_string = $time; + if (!is_null($tz)) { + $this->_tz = $tz->getName(); + } + } + + /** + * Called on serialize(). + */ + public function __sleep() + { + return array('_string', '_tz'); + } + + /** + * Called on a function call. + */ + public function __call($name, $arguments) + { + if (is_null($this->_datetime)) { + $this->_datetime = is_null($this->_tz) + ? new DateTime($this->_string) + : new DateTime($this->_string, $this->_tz); + } + + call_user_func_array(array($this->_datetime, $name), $arguments); + } + +} diff --git a/framework/Imap_Client/lib/Horde/Imap/Client/Socket.php b/framework/Imap_Client/lib/Horde/Imap/Client/Socket.php index 24b2ce1a4..62ec5b8c5 100644 --- a/framework/Imap_Client/lib/Horde/Imap/Client/Socket.php +++ b/framework/Imap_Client/lib/Horde/Imap/Client/Socket.php @@ -2328,7 +2328,7 @@ class Horde_Imap_Client_Socket extends Horde_Imap_Client_Base break; case 'INTERNALDATE': - $tmp['date'] = new DateTime($data[++$i]); + $tmp['date'] = new Horde_Imap_Client_DateTime($data[++$i]); break; case 'RFC822.SIZE': diff --git a/framework/Imap_Client/lib/Horde/Imap/Client/Socket/Pop3.php b/framework/Imap_Client/lib/Horde/Imap/Client/Socket/Pop3.php index b241b7429..1c16f7ecf 100644 --- a/framework/Imap_Client/lib/Horde/Imap/Client/Socket/Pop3.php +++ b/framework/Imap_Client/lib/Horde/Imap/Client/Socket/Pop3.php @@ -932,7 +932,7 @@ class Horde_Imap_Client_Socket_Pop3 extends Horde_Imap_Client_Base case Horde_Imap_Client::FETCH_DATE: foreach ($seq_ids as $id) { $tmp = $this->_pop3Cache('hdrob', $id); - $ret[$id]['date'] = new DateTime($tmp->getValue('date')); + $ret[$id]['date'] = new Horde_Imap_Client_DateTime($tmp->getValue('date')); } break; diff --git a/framework/Imap_Client/package.xml b/framework/Imap_Client/package.xml index 21fa966e1..9ecf67312 100644 --- a/framework/Imap_Client/package.xml +++ b/framework/Imap_Client/package.xml @@ -53,6 +53,7 @@ http://pear.php.net/dtd/package-2.0.xsd"> + @@ -113,6 +114,7 @@ http://pear.php.net/dtd/package-2.0.xsd"> + -- 2.11.0