sync
[Pman.Core] / TimeZone.php
index 68e7a52..e69d856 100644 (file)
@@ -16,29 +16,26 @@ class Pman_Core_TimeZone extends Pman
 
     function get($base, $opts=array())
     {
-        self::getOffsets();
+        self::getTimezones();
 
         $data = array();
 
-        foreach(self::$offsets as $tz => $o) {
-            $arr = explode('/', $tz);
-
-            if(!empty($_REQUEST['region']) && $_REQUEST['region'] != $arr[0]) {
+        foreach(self::$timezones as $tz => $o) {
+            if(!empty($_REQUEST['region']) && $_REQUEST['region'] != $o['region']) {
                 continue;
             }
 
             if(
                 !empty($_REQUEST['query']['area_start']) 
                 && 
-                substr(strtolower($arr[1]), 0, strlen($_REQUEST['query']['area_start'])) != strtolower($_REQUEST['query']['area_start'])
+                substr(strtolower($o['area']), 0, strlen($_REQUEST['query']['area_start'])) != strtolower($_REQUEST['query']['area_start'])
             ){
                 continue;
             }
             $data[] = array(
-                'region' => $arr[0],
-                'area' => $arr[1],
-                'offset' => $o,
-                'displayArea' => self::getDisplayArea($tz)
+                'region' => $o['region'],
+                'area' => $o['area'],
+                'displayArea' => $o['displayArea']
             );
         }
 
@@ -51,7 +48,6 @@ class Pman_Core_TimeZone extends Pman
                 'fields' => array(
                     'region',
                     'area',
-                    'offset',
                     'displayArea'
                 )
             ),
@@ -75,53 +71,43 @@ class Pman_Core_TimeZone extends Pman
         }
 
         $ce = DB_DataObject::factory('core_enum');
-        $ce->query('
+        $ce->query("
             SELECT
-                *, TIME_FORMAT(TIMEDIFF(NOW(), CONVERT_TZ(NOW(), Name, "UTC")), "%H:%i") as timeOffset
+                *, TIME_FORMAT(TIMEDIFF(NOW(), CONVERT_TZ(NOW(), Name, 'UTC')), '%H:%i') as timeOffset
             FROM
                 mysql.time_zone_name
+            WHERE
+                Name LIKE '%/%'
+                AND
+                NAME NOT LIKE 'Etc%'
             ORDER BY
-                offset DESC,
+                timeoffset DESC,
                 Name DESC
-        ');
+        ");
 
         while($ce->fetch()) {
             // ignroe timezone such as 'CET' and 'America/Argentina/Buenos_Aires'
-            if(substr_count($ce->Name, '/') != 1) {
-                continue;
-            }
+           
 
             $ar = explode('/', $ce->Name);
             // ignore timezone such as 'Etc/GMT+8'
-            if($ar[0] == 'Etc') {
-                continue;
-            }
-
-            $timezones[$ce->Name] = array(
-                'region' => $ar[0],
-                'area' => $ar[1],
-                'timeOffset' => $ce->offset
-            )
+           
 
-            self::$offsets[$ce->Name] = substr($ce->offset, 0, 1) == '-' ? $ce->offset : '+' . $ce->offset;
-        }
-
-        return self::$offsets;
-    }
+            $displayArea = str_replace('_', ' ', $ar[1]);
 
-    static function getDisplayArea($timezone)
-    {
-        self::getOffsets();
+            $timeOffset = ((substr($ce->timeOffset, 0, 1) == '-') ? '' : '+') . $ce->timeOffset;
+            $displayOffset = '(GMT ' . $timeOffset . ')';
 
-        // invalid timezone
-        if(!isset(self::$offsets[$timezone])) {
-            return '';
+            self::$timezones[$ce->Name] = array(
+                'region' => $ar[0],
+                'area' => $ar[1],
+                'displayName' => $ar[0] . '/' . $displayArea . ' ' . $displayOffset,
+                'displayArea' => $displayArea . ' ' . $displayOffset,
+                'timeOffset' => $timeOffset
+            );
         }
 
-        $ar = explode('/', $timezone);
-
-        // e.g. 'Hong_Kong (GMT +08:00)'
-        return $ar[1] . ' (GMT ' . self::$offsets[$timezone] . ')';
+        return self::$timezones;
     }