From d1ca62c4a01ae8340f0644f9bad053583ab3adf3 Mon Sep 17 00:00:00 2001 From: Alexis Saettler Date: Wed, 8 Aug 2018 12:22:40 +0200 Subject: [PATCH 01/14] Render timezone listbox dynamically --- app/Helpers/TimezoneHelper.php | 96 +++++++++++++++ resources/views/settings/index.blade.php | 148 +---------------------- 2 files changed, 97 insertions(+), 147 deletions(-) create mode 100644 app/Helpers/TimezoneHelper.php diff --git a/app/Helpers/TimezoneHelper.php b/app/Helpers/TimezoneHelper.php new file mode 100644 index 00000000000..ff587b8f54c --- /dev/null +++ b/app/Helpers/TimezoneHelper.php @@ -0,0 +1,96 @@ + $tz, + 'timezone' => $timezone, + 'name' => $name + ]); + } + + return array_values(array_sort($list, function ($value) { + return $value['id']; + })); + } + + private static function formatTimezone($timezone) : array + { + $time = now($timezone); + + $offset = $time->format('P'); + + if ($timezone == 'UTC') { + $formatted = '(UTC) Universal Time Coordinated'; + } else { + $i = strstr($time->tzName, '/'); + if ($i > 0) { + $timezone = substr(strstr($time->tzName, '/'), 1); + } + $timezone = str_replace('St_', 'St. ', $timezone); + $timezone = str_replace('_', ' ', $timezone); + + $formatted = '(UTC ' . $offset . ') ' . $timezone; + } + + $tz = str_replace(':', '', $offset); + $tz = intval($tz); + + return [$tz, $formatted]; + } + + /** + * Render listbox of timezones. + * + * @param string $name + * @param string $selected + * @param mixed $attr + * @return string + **/ + public static function list($name, $selected='', $attr='') : string + { + // Attributes for select element + $attrSet = null; + if (!empty($attr)) { + if (is_array($attr)) { + foreach ($attr as $attr_name => $attr_value) { + $attrSet .= ' ' .$attr_name. '="' .$attr_value. '"'; + } + } else { + $attrSet = ' ' .$attr; + } + } + + $listbox = ''; + + return $listbox; + } +} diff --git a/resources/views/settings/index.blade.php b/resources/views/settings/index.blade.php index ab612f7bef4..b489b52f46f 100644 --- a/resources/views/settings/index.blade.php +++ b/resources/views/settings/index.blade.php @@ -92,153 +92,7 @@ {{-- Timezone --}}
- + {!! \App\Helpers\TimezoneHelper::list('timezone', \App\Helpers\DateHelper::getTimezone(), ['id' => 'timezone', 'class' => 'form-control']) !!}
{{-- Layout --}} From a9966ea9acda626e3d3ea5941cdc428786b7e3c2 Mon Sep 17 00:00:00 2001 From: Alexis Saettler Date: Wed, 8 Aug 2018 10:24:07 +0000 Subject: [PATCH 02/14] Apply fixes from StyleCI --- app/Helpers/TimezoneHelper.php | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/app/Helpers/TimezoneHelper.php b/app/Helpers/TimezoneHelper.php index ff587b8f54c..5c989640e78 100644 --- a/app/Helpers/TimezoneHelper.php +++ b/app/Helpers/TimezoneHelper.php @@ -7,8 +7,8 @@ class TimezoneHelper { /** - * Get a list of all timezones - * + * Get a list of all timezones. + * * @return array */ public static function listTimezones() : array @@ -21,14 +21,14 @@ public static function listTimezones() : array array_push($list, [ 'id' => $tz, 'timezone' => $timezone, - 'name' => $name + 'name' => $name, ]); } return array_values(array_sort($list, function ($value) { return $value['id']; })); - } + } private static function formatTimezone($timezone) : array { @@ -46,7 +46,7 @@ private static function formatTimezone($timezone) : array $timezone = str_replace('St_', 'St. ', $timezone); $timezone = str_replace('_', ' ', $timezone); - $formatted = '(UTC ' . $offset . ') ' . $timezone; + $formatted = '(UTC '.$offset.') '.$timezone; } $tz = str_replace(':', '', $offset); @@ -63,28 +63,28 @@ private static function formatTimezone($timezone) : array * @param mixed $attr * @return string **/ - public static function list($name, $selected='', $attr='') : string + public static function list($name, $selected = '', $attr = '') : string { // Attributes for select element $attrSet = null; - if (!empty($attr)) { + if (! empty($attr)) { if (is_array($attr)) { foreach ($attr as $attr_name => $attr_value) { - $attrSet .= ' ' .$attr_name. '="' .$attr_value. '"'; + $attrSet .= ' '.$attr_name.'="'.$attr_value.'"'; } } else { - $attrSet = ' ' .$attr; + $attrSet = ' '.$attr; } } - $listbox = ''; $list = self::listTimezones(); foreach ($list as $key => $timezone) { $selected_attr = ($selected == $timezone['timezone']) ? ' selected="selected"' : ''; - $listbox .= ''; } From 1815e6ba281953fc305ee07552f36e8457ba3121 Mon Sep 17 00:00:00 2001 From: Alexis Saettler Date: Thu, 9 Aug 2018 01:10:12 +0200 Subject: [PATCH 03/14] Fixes and test --- app/Helpers/TimezoneHelper.php | 77 +++++++++-- resources/views/settings/index.blade.php | 2 +- tests/Helper/DateHelperTest.php | 165 +++++++++++++++++++++++ 3 files changed, 232 insertions(+), 12 deletions(-) diff --git a/app/Helpers/TimezoneHelper.php b/app/Helpers/TimezoneHelper.php index 5c989640e78..d3e9e81aee2 100644 --- a/app/Helpers/TimezoneHelper.php +++ b/app/Helpers/TimezoneHelper.php @@ -25,9 +25,21 @@ public static function listTimezones() : array ]); } - return array_values(array_sort($list, function ($value) { - return $value['id']; - })); + $collect = collect($list) + ->groupBy('id') + ->sortKeys(); + + $result = []; + foreach($collect as $item) { + $values = array_values(array_sort($item, function ($value) { + return $value['name']; + })); + foreach ($values as $val) { + array_push($result, $val); + } + } + + return $result; } private static function formatTimezone($timezone) : array @@ -39,14 +51,15 @@ private static function formatTimezone($timezone) : array if ($timezone == 'UTC') { $formatted = '(UTC) Universal Time Coordinated'; } else { - $i = strstr($time->tzName, '/'); + $name = $time->tzName; + $i = strpos($name, '/'); if ($i > 0) { - $timezone = substr(strstr($time->tzName, '/'), 1); + $name = substr($name, $i + 1); } - $timezone = str_replace('St_', 'St. ', $timezone); - $timezone = str_replace('_', ' ', $timezone); + $name = str_replace('St_', 'St. ', $name); + $name = str_replace('_', ' ', $name); - $formatted = '(UTC '.$offset.') '.$timezone; + $formatted = '(UTC '.$offset.') '.$name; } $tz = str_replace(':', '', $offset); @@ -63,9 +76,8 @@ private static function formatTimezone($timezone) : array * @param mixed $attr * @return string **/ - public static function list($name, $selected = '', $attr = '') : string + public static function listbox($name, $selected = '', $attr = '') : string { - // Attributes for select element $attrSet = null; if (! empty($attr)) { if (is_array($attr)) { @@ -82,7 +94,7 @@ public static function list($name, $selected = '', $attr = '') : string $list = self::listTimezones(); foreach ($list as $key => $timezone) { - $selected_attr = ($selected == $timezone['timezone']) ? ' selected="selected"' : ''; + $selected_attr = adjustEquivalentTimezone($selected) == $timezone['timezone'] ? ' selected="selected"' : ''; $listbox .= '