From fc8a9c7f01badbe12e4849a9250422bccb3640c6 Mon Sep 17 00:00:00 2001 From: Alan Knowles Date: Tue, 10 Nov 2020 15:50:00 +0800 Subject: [PATCH] Fix #6466 - hourly car park cost in mysql --- DataObjects/Core_holiday.php | 93 ++++++++++++++++++++++++++++++++++++ Import/Core_holiday.php | 37 ++++++++++++++ sql/core_holiday.sql | 9 ++++ 3 files changed, 139 insertions(+) create mode 100644 DataObjects/Core_holiday.php create mode 100644 Import/Core_holiday.php create mode 100644 sql/core_holiday.sql diff --git a/DataObjects/Core_holiday.php b/DataObjects/Core_holiday.php new file mode 100644 index 00000000..45ac129e --- /dev/null +++ b/DataObjects/Core_holiday.php @@ -0,0 +1,93 @@ + 'http://www.1823.gov.hk/common/ical/gc/en.ics' + ); + + + function updateHolidays($country) + { + + if (!isset(self::$map[$country])) { + die("invalid country"); + } + + // do we alredy have the data for this year. + $d = DB_DataObject::Factory('core_holiday'); + $d->country = $country; + $d->orderBy('holiday_date DESC'); + $d->limit(1); + if ($d->count() && $d->find(true) && strtotime($d->holiday_date) > strtotime('NOW + 6 MONTHS')) { + // no need to fetch.. + return; + } + + + + $data = file_get_contents("http://www.1823.gov.hk/common/ical/gc/en.ics"); + + $vevents = explode('BEGIN:VEVENT', $data); + + foreach ($vevents as $vevent){ + + $lines = explode("\n", $vevent); + + $start_dt = false; + $end_dt = false; + + foreach ($lines as $line){ + + if(preg_match('/^DTSTART;VALUE=DATE:([0-9]+)/', $line, $matches)){ + $fmt = substr($matches[1], 0, 4) . "-" . substr($matches[1], 4, 2) . "-" . substr($matches[1], 6, 2); + $start_dt = date('Y-m-d', strtotime($fmt)); + } + + if(preg_match('/^DTEND;VALUE=DATE:([0-9]+)/', $line, $matches)){ + $fmt = substr($matches[1], 0, 4) . "-" . substr($matches[1], 4, 2) . "-" . substr($matches[1], 6, 2); + $end_dt = date('Y-m-d', strtotime($fmt)); + } + + } + + if(empty($start_dt) || empty($end_dt)){ + continue; + } + + //var_dump($start_dt); var_dump($end_dt); exit; + + for ($i = strtotime($start_dt); $i < strtotime($end_dt) ; $i += (60 * 60 * 24)) { + + $d = DB_DataObject::Factory('core_holiday'); + $d->country = $country; + $d->holiday_date = date('Y-m-d', $i); + if (!$d->count()) { + $d->insert(); + } + + + } + + } + + } + +} diff --git a/Import/Core_holiday.php b/Import/Core_holiday.php new file mode 100644 index 00000000..71b6aad4 --- /dev/null +++ b/Import/Core_holiday.php @@ -0,0 +1,37 @@ +cli) { + return false; + } + + return true; + + } + + var $defaults = array(); + + function get($v, $opts=array()) + { + DB_DAtaObject::debugLevel(1); + $d = DB_DataObject::factory('core_holiday'); + $d->updateHolidays('hk'); + + } + + function log($str) + { + echo "$str \n"; + } +} \ No newline at end of file diff --git a/sql/core_holiday.sql b/sql/core_holiday.sql new file mode 100644 index 00000000..f0449bb6 --- /dev/null +++ b/sql/core_holiday.sql @@ -0,0 +1,9 @@ +CREATE TABLE core_holiday ( + id int(11) NOT NULL auto_increment, + PRIMARY KEY (id) +); + +ALTER TABLE core_holiday ADD COLUMN holiday_date DATE NOT NULL DEFAULT '0000-00-00'; +ALTER TABLE core_holiday ADD COLUMN country VARCHAR(4) NOT NULL DEFAULT ''; + + -- 2.39.2