From d6e11dd04ab2923d3c0ab4877985bf06ce704516 Mon Sep 17 00:00:00 2001 From: skeeter Date: Thu, 3 May 2001 02:28:26 +0000 Subject: [PATCH] This now allows for following observance rules. --- calendar/inc/class.calendar_holiday.inc.php | 44 +++++++++++++++++---- calendar/inc/functions.inc.php | 9 +++-- calendar/setup/holidays.CA | 6 +++ calendar/setup/holidays.US | 1 + 4 files changed, 48 insertions(+), 12 deletions(-) create mode 100755 calendar/setup/holidays.CA diff --git a/calendar/inc/class.calendar_holiday.inc.php b/calendar/inc/class.calendar_holiday.inc.php index 105318f756..11fcbaca5e 100755 --- a/calendar/inc/class.calendar_holiday.inc.php +++ b/calendar/inc/class.calendar_holiday.inc.php @@ -26,15 +26,12 @@ class calendar_holiday global $phpgw, $phpgw_info; $this->db = $phpgw->db; -// $this->cal = CreateObject('calendar.calendar'); -// $phpgw_info['user']['preferences']['calendar']['locale'] = 'US'; $this->users['user'] = $phpgw_info['user']['preferences']['calendar']['locale']; $owner_id = get_account_id($owner); if($owner_id != $phpgw_info['user']['account_id']) { $owner_pref = CreateObject('phpgwapi.preferences',$owner_id); $owner_prefs = $owner_pref->read_repository(); -// $owner_prefs['calendar']['locale'] = 'UK'; $this->users['owner'] = $owner_prefs['calendar']['locale']; } if($phpgw_info['server']['auto_load_holidays'] == True) @@ -113,7 +110,7 @@ class calendar_holiday } } - function calculate_date($holiday) + function calculate_date($holiday,&$i) { global $phpgw; @@ -134,6 +131,32 @@ class calendar_holiday else { $day = $holiday['day']; + $dow = $phpgw->calendar->day_of_week($this->year,$holiday['month'],$day); + // This now calulates Observed holidays and creates a new entry for them. + if($dow == 0) + { + $i++; + $this->holidays[$i]['locale'] = $holiday['locale'].' (Observed)'; + $this->holidays[$i]['name'] = $holiday['name']; + $this->holidays[$i]['day'] = $holiday['day'] + 1; + $this->holidays[$i]['month'] = $holiday['month']; + $this->holidays[$i]['occurence'] = $holiday['occurence']; + $this->holidays[$i]['dow'] = $holiday['dow']; + $this->holidays[$i]['date'] = mktime(0,0,0,$holiday['month'],$day+1,$this->year) - $this->tz_offset; +// echo 'Calculating for year('.$this->year.') month('.$this->holidays[$i]['month'].') dow('.$this->holidays[$i]['dow'].') occurence('.$this->holidays[$i]['occurence'].') datetime('.$this->holidays[$i]['date'].') DATE('.date('Y.m.d H:i:s',$this->holidays[$i]['date']).')
'."\n"; + } + elseif($dow == 6) + { + $i++; + $this->holidays[$i]['locale'] = $holiday['locale'].' (Observed)'; + $this->holidays[$i]['name'] = $holiday['name']; + $this->holidays[$i]['day'] = $holiday['day'] - 1; + $this->holidays[$i]['month'] = $holiday['month']; + $this->holidays[$i]['occurence'] = $holiday['occurence']; + $this->holidays[$i]['dow'] = $holiday['dow']; + $this->holidays[$i]['date'] = mktime(0,0,0,$holiday['month'],$day-1,$this->year) - $this->tz_offset; +// echo 'Calculating for year('.$this->year.') month('.$this->holidays[$i]['month'].') dow('.$this->holidays[$i]['dow'].') occurence('.$this->holidays[$i]['occurence'].') datetime('.$this->holidays[$i]['date'].') DATE('.date('Y.m.d H:i:s',$this->holidays[$i]['date']).')
'."\n"; + } } $datetime = mktime(0,0,0,$holiday['month'],$day,$this->year) - $this->tz_offset; // echo 'Calculating for year('.$this->year.') month('.$holiday['month'].') dow('.$holiday['dow'].') occurence('.$holiday['occurence'].') datetime('.$datetime.') DATE('.date('Y.m.d H:i:s',$datetime).')
'."\n"; @@ -144,24 +167,22 @@ class calendar_holiday { global $phpgw; - $this->year = intval($phpgw->calendar->today['year']); + $this->year = intval($phpgw->calendar->tempyear); $this->tz_offset = intval($phpgw->calendar->tz_offset); $sql = $this->build_holiday_query(); $this->holidays = Null; $this->db->query($sql,__LINE__,__FILE__); - $i = -1; + $i = 0; while($this->db->next_record()) { - $i++; $this->holidays[$i]['locale'] = $this->db->f('locale'); $this->holidays[$i]['name'] = $phpgw->strip_html($this->db->f('name')); $this->holidays[$i]['day'] = intval($this->db->f('mday')); $this->holidays[$i]['month'] = intval($this->db->f('month_num')); $this->holidays[$i]['occurence'] = intval($this->db->f('occurence')); $this->holidays[$i]['dow'] = intval($this->db->f('dow')); - $this->holidays[$i]['date'] = $this->calculate_date($this->holidays[$i]); if(count($find_locale) == 2 && $find_locale[0] != $find_locale[1]) { if($this->holidays[$i]['locale'] == $find_locale[1]) @@ -177,6 +198,13 @@ class calendar_holiday { $this->holidays[$i]['owner'] = 'user'; } + $c = $i; + $this->holidays[$i]['date'] = $this->calculate_date($this->holidays[$i],$c); + if($c != $i) + { + $i = $c; + } + $i++; } $this->holidays = $this->sort_by_date($this->holidays); return $this->holidays; diff --git a/calendar/inc/functions.inc.php b/calendar/inc/functions.inc.php index 1e2249c472..1d128541ab 100755 --- a/calendar/inc/functions.inc.php +++ b/calendar/inc/functions.inc.php @@ -75,7 +75,6 @@ } $phpgw->calendar = CreateObject('calendar.calendar',$parameters); - $phpgw->calendar->holidays->read_holiday(); if (isset($date) && strlen($date) > 0) { @@ -114,7 +113,9 @@ } - $phpgw->calendar->tempyear = $thisyear; - $phpgw->calendar->tempmonth = $thismonth; - $phpgw->calendar->tempday = $thisday; + $phpgw->calendar->tempyear = $thisyear; + $phpgw->calendar->tempmonth = $thismonth; + $phpgw->calendar->tempday = $thisday; + + $phpgw->calendar->holidays->read_holiday(); ?> diff --git a/calendar/setup/holidays.CA b/calendar/setup/holidays.CA new file mode 100755 index 0000000000..f807ce2458 --- /dev/null +++ b/calendar/setup/holidays.CA @@ -0,0 +1,6 @@ +CA Quebec Civic Holiday 3 1 0 0 +CA Canadian Civic Holiday 0 8 1 1 +CA Rememberence Day 11 11 0 0 +CA Christmas Day 25 12 0 0 +CA Boxing Day 26 12 0 0 + diff --git a/calendar/setup/holidays.US b/calendar/setup/holidays.US index 51abdfac27..10bb423942 100755 --- a/calendar/setup/holidays.US +++ b/calendar/setup/holidays.US @@ -1,6 +1,7 @@ US New Years 1 1 0 0 US Martin Luther King's Birthday 0 1 3 1 US Inaugeration Day 20 1 0 0 +US Presidents Day 0 2 3 1 US Armed Forces Day 0 5 3 6 US Memorial Day 0 5 99 1 US Flag Day 14 6 0 0