3 * Table Definition for core company
5 class_exists('DB_DataObject') ? '' : require_once 'DB/DataObject.php';
7 class Pman_Core_DataObjects_Core_holiday extends DB_DataObject
10 /* the code below is auto generated do not remove the above tag */
12 public $__table = 'core_holiday'; // table name
18 /* the code above is auto generated do not remove the tag below */
23 'hk' => 'http://www.1823.gov.hk/common/ical/gc/en.ics',
24 'cny' => 'https://raw.githubusercontent.com/andrewlkho/cny.ics/master/cny.ics', // CNY
28 function apply_filters($q, $au, $roo)
30 if (isset($q['date_from'])) {
31 $dt = date("Y-m-d",strtotime($q['date_from']));
32 $this->whereAdd("holiday_date > '$dt'");
34 if (isset($q['date_to'])) {
35 $dt = date("Y-m-d",strtotime($q['date_to']));
36 $this->whereAdd("holiday_date < '$dt'");
44 function updateHolidays($country)
47 if (!isset(self::$map[$country])) {
48 die("invalid country");
51 // do we alredy have the data for this year.
52 $d = DB_DataObject::Factory('core_holiday');
53 $d->country = $country;
54 $d->orderBy('holiday_date DESC');
56 if ($d->count() && $d->find(true) && strtotime($d->holiday_date) > strtotime('NOW + 6 MONTHS')) {
63 $data = file_get_contents("https://www.1823.gov.hk/common/ical/gc/en.ics", false,
64 stream_context_create(array(
67 "verify_peer_name"=>false,
72 $vevents = explode('BEGIN:VEVENT', $data);
74 foreach ($vevents as $vevent){
76 $lines = explode("\n", $vevent);
81 foreach ($lines as $line){
83 if(preg_match('/^DTSTART;VALUE=DATE:([0-9]+)/', $line, $matches)){
84 $fmt = substr($matches[1], 0, 4) . "-" . substr($matches[1], 4, 2) . "-" . substr($matches[1], 6, 2);
85 $start_dt = date('Y-m-d', strtotime($fmt));
88 if(preg_match('/^DTEND;VALUE=DATE:([0-9]+)/', $line, $matches)){
89 $fmt = substr($matches[1], 0, 4) . "-" . substr($matches[1], 4, 2) . "-" . substr($matches[1], 6, 2);
90 $end_dt = date('Y-m-d', strtotime($fmt));
92 if(preg_match('/^SUMMARY[^:]*:(.*)/', $line, $matches)){
93 $name = trim($matches[1]);
97 if(empty($start_dt) || empty($end_dt)){
100 //DB_DataObject::DebugLevel(1);
101 //var_dump($start_dt); var_dump($end_dt); exit;
103 for ($i = strtotime($start_dt); $i < strtotime($end_dt) ; $i += (60 * 60 * 24)) {
105 $d = DB_DataObject::Factory('core_holiday');
106 $d->country = $country;
107 $d->holiday_date = date('Y-m-d', $i);
124 function isHoliday($country, $date)
126 $d = DB_DataObject::Factory('core_holiday');
127 $d->country = $country;
128 $d->holiday_date = $date;