From 31278471d3f2b882e28e01184814f3edc69973bf Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Fri, 21 Jan 2011 11:50:07 -0500
Subject: [PATCH] Use improved strtotime() function + reduce duplicated code

---
 program/include/main.inc               |   49 ++++++++++++++++--------
 program/include/rcube_imap_generic.php |   16 -------
 2 files changed, 34 insertions(+), 31 deletions(-)

diff --git a/program/include/main.inc b/program/include/main.inc
index 0815c25..8e8de03 100644
--- a/program/include/main.inc
+++ b/program/include/main.inc
@@ -978,6 +978,37 @@
 
 
 /**
+ * Improved equivalent to strtotime()
+ *
+ * @param string Date string
+ * @return int 
+ */
+function rcube_strtotime($date)
+{
+  // check for MS Outlook vCard date format YYYYMMDD
+  if (preg_match('/^([12][90]\d\d)([01]\d)(\d\d)$/', trim($date), $matches)) {
+    return mktime(0,0,0, intval($matches[2]), intval($matches[3]), intval($matches[1]));
+  }
+  else if (is_numeric($date))
+    return $date;
+
+  // support non-standard "GMTXXXX" literal
+  $date = preg_replace('/GMT\s*([+-][0-9]+)/', '\\1', $date);
+
+  // if date parsing fails, we have a date in non-rfc format.
+  // remove token from the end and try again
+  while ((($ts = @strtotime($date)) === false) || ($ts < 0)) {
+    $d = explode(' ', $date);
+    array_pop($d);
+    if (!$d) break;
+    $date = implode(' ', $d);
+  }
+
+  return $ts;
+}
+
+
+/**
  * Convert the given date to a human readable form
  * This uses the date formatting properties from config
  *
@@ -991,22 +1022,8 @@
   
   $ts = NULL;
 
-  if (is_numeric($date))
-    $ts = $date;
-  else if (!empty($date))
-    {
-    // support non-standard "GMTXXXX" literal
-    $date = preg_replace('/GMT\s*([+-][0-9]+)/', '\\1', $date);
-    // if date parsing fails, we have a date in non-rfc format.
-    // remove token from the end and try again
-    while ((($ts = @strtotime($date))===false) || ($ts < 0))
-      {
-        $d = explode(' ', $date);
-        array_pop($d);
-        if (!$d) break;
-        $date = implode(' ', $d);
-      }
-    }
+  if (!empty($date))
+    $ts = rcube_strtotime($date);
 
   if (empty($ts))
     return '';
diff --git a/program/include/rcube_imap_generic.php b/program/include/rcube_imap_generic.php
index 6bebd8c..b4f01a9 100644
--- a/program/include/rcube_imap_generic.php
+++ b/program/include/rcube_imap_generic.php
@@ -3223,21 +3223,7 @@
      */
     private function strToTime($date)
     {
-        // support non-standard "GMTXXXX" literal
-        $date = preg_replace('/GMT\s*([+-][0-9]+)/', '\\1', $date);
-        // if date parsing fails, we have a date in non-rfc format.
-        // remove token from the end and try again
-        while ((($ts = @strtotime($date))===false) || ($ts < 0)) {
-            $d = explode(' ', $date);
-            array_pop($d);
-            if (!$d) {
-                break;
-            }
-            $date = implode(' ', $d);
-        }
-
-        $ts = (int) $ts;
-
+        $ts = (int) rcube_strtotime($date);
         return $ts < 0 ? 0 : $ts;
     }
 

--
Gitblit v1.9.1