calculate_date($holiday, $holidays, $this->year);
+ }
+ unset($holidaycalc);
+ $this->holidays = $this->sort_holidays_by_date($holidays);
+ $this->cached_holidays = $this->set_holidays_to_date($this->holidays);
+ $GLOBALS['phpgw_info']['user']['preferences']['common']['country'] = $temp_locale;
+ return $this->cached_holidays;
+ }
+ /* End Calendar functions */
+
+ function check_admin()
+ {
+ if(!@$GLOBALS['phpgw_info']['user']['apps']['admin'])
+ {
+ Header('Location: ' . $GLOBALS['phpgw']->link('/index.php'));
+ }
+ }
+
+ function rule_string($holiday)
+ {
+ if (!is_array($holiday))
+ {
+ return false;
+ }
+ $sbox = CreateObject('phpgwapi.sbox');
+ $month = $holiday['month'] ? lang($sbox->monthnames[$holiday['month']]) : '';
+ unset($sbox);
+
+ if (!$holiday['day'])
+ {
+ $occ = $holiday['occurence'] == 99 ? lang('last') : $holiday['occurence'].'.';
+
+ $dow_str = Array(lang('Sun'),lang('Mon'),lang('Tue'),lang('Wed'),lang('Thu'),lang('Fri'),lang('Sat'));
+ $dow = $dow_str[$holiday['dow']];
+
+ $str = lang('%1 %2 in %3',$occ,$dow,$month);
+ }
+ else
+ {
+ $str = $GLOBALS['phpgw']->common->dateformatorder($holiday['occurence']>1900?$holiday['occurence']:'',$month,$holiday[day]);
+ }
+ if ($holiday['observance_rule'])
+ {
+ $str .= ' ('.lang('Observance Rule').')';
+ }
+ return $str;
+ }
+ }
+?>
diff --git a/calendar/inc/class.holidaycalc_JP.inc.php b/calendar/inc/class.holidaycalc_JP.inc.php
new file mode 100755
index 0000000000..07f4e7feb7
--- /dev/null
+++ b/calendar/inc/class.holidaycalc_JP.inc.php
@@ -0,0 +1,153 @@
+ *
+ * http://www.itheart.com *
+ * -------------------------------------------- *
+ * This program is free software; you can redistribute it and/or modify it *
+ * under the terms of the GNU General Public License as published by the *
+ * Free Software Foundation; either version 2 of the License, or (at your *
+ * option) any later version. *
+ \**************************************************************************/
+
+ /* $Id$ */
+
+ class holidaycalc
+ {
+ function calculate_date($holiday, &$holidays, $year)
+ {
+ static $cached_month;
+ static $cached_day;
+ static $cached_observance_rule;
+
+ if ($holiday['day'] == 0 && $holiday['dow'] != 0 && $holiday['occurence'] != 0)
+ {
+ $dow = $GLOBALS['phpgw']->datetime->day_of_week($year, $holiday['month'], 1);
+ $dayshift = (($holiday['dow'] + 7) - $dow) % 7;
+ $day = ($holiday['occurence'] - 1) * 7 + $dayshift + 1;
+
+ // Happy monday law.
+ if ($holiday['month'] == 1)
+ {
+ if ($year < 2000)
+ {
+ $day = 15;
+ }
+ }
+ elseif ($holiday['month'] == 7)
+ {
+ if ($year < 2003)
+ {
+ $day = 20;
+ }
+ }
+ elseif ($holiday['month'] == 9)
+ {
+ if ($year < 2003)
+ {
+ $day = 15;
+ }
+ }
+ elseif ($holiday['month'] == 10)
+ {
+ if ($year < 2000)
+ {
+ $day = 10;
+ }
+ }
+ }
+ elseif ($holiday['day'] == 0 && $holiday['dow'] == 0 && $holiday['occurence'] == 0)
+ {
+ // For the next generation.
+ // over 2151, please set $factor...
+ if ($holiday['month'] == 3)
+ {
+ // for Vernal Equinox
+ if ($year >= 1980 && $year <= 2099)
+ {
+ $factor = 20.8431;
+ }
+ elseif ($year >= 2100 && $year <= 2150)
+ {
+ $factor = 21.851;
+ }
+ }
+ elseif ($holiday['month'] == 9)
+ {
+ // for Autumnal Equinox
+ if ($year >= 1980 && $year <= 2099)
+ {
+ $factor = 23.2488;
+ }
+ elseif ($year >= 2100 && $year <= 2150)
+ {
+ $factor = 24.2488;
+ }
+ }
+
+ $day = (int)($factor + 0.242194 * ($year - 1980)
+ - (int)(($year - 1980) / 4));
+ }
+ else
+ {
+ // normal holiday
+ $day = $holiday['day'];
+ }
+
+ if ($year >= 1985 && $holiday['month'] == $cached_month && $day == $cached_day + 2 && $cached_observance_rule == True && $holiday['observance_rule'] == True)
+ {
+ $pdow = $GLOBALS['phpgw']->datetime->day_of_week($year,$holiday['month'],$day-1);
+ if ($pdow != 0)
+ {
+ $addcnt = count($holidays) + 1;
+ $holidays[$addcnt]['locale'] = $holiday['locale'];
+ if ($pdow == 1)
+ {
+ $holidays[$addcnt]['name'] = lang('overlap holiday');
+ }
+ else
+ {
+ $holidays[$addcnt]['name'] = lang('people holiday');
+ }
+ $holidays[$addcnt]['day'] = $day - 1;
+ $holidays[$addcnt]['month'] = $holiday['month'];
+ $holidays[$addcnt]['occurence'] = 0;
+ $holidays[$addcnt]['dow'] = 0;
+ $holidays[$addcnt]['date'] = mktime(0,0,0,$holiday['month'],$day-1,$year);
+ $holidays[$addcnt]['observance_rule'] = 0;
+ }
+ }
+
+ $cached_month = $holiday['month'];
+ $cached_day = $day;
+ $cached_observance_rule = $holiday['observance_rule'];
+
+ if ($year >= 1985 && $holiday['month'] == 5 && $day == 3)
+ {
+ ;
+ }
+ elseif ($holiday['observance_rule'] == True)
+ {
+ $dow = $GLOBALS['phpgw']->datetime->day_of_week($year,$holiday['month'],$day);
+ // This now calulates Observed holidays and creates a new entry for them.
+ if($dow == 0)
+ {
+ $addcnt = count($holidays) + 1;
+ $holidays[$addcnt]['locale'] = $holiday['locale'];
+ $holidays[$addcnt]['name'] = lang('overlap holiday');
+ $holidays[$addcnt]['day'] = $day + 1;
+ $holidays[$addcnt]['month'] = $holiday['month'];
+ $holidays[$addcnt]['occurence'] = $holiday['occurence'];
+ $holidays[$addcnt]['dow'] = $holiday['dow'];
+ $holidays[$addcnt]['date'] = mktime(0,0,0,$holiday['month'],$day+1,$year);
+ $holidays[$addcnt]['observance_rule'] = 0;
+ }
+ }
+
+ $date = mktime(0,0,0,$holiday['month'],$day,$year);
+
+ return $date;
+ }
+ }
+?>
diff --git a/calendar/inc/class.holidaycalc_US.inc.php b/calendar/inc/class.holidaycalc_US.inc.php
index 434b76e13f..4994a3dc6f 100755
--- a/calendar/inc/class.holidaycalc_US.inc.php
+++ b/calendar/inc/class.holidaycalc_US.inc.php
@@ -15,25 +15,25 @@
class holidaycalc
{
- function add($holiday,&$holidays,$year,&$i,$day_offset=0)
+ function add($holiday,&$holidays,$year,$day_offset=0)
{
- $i++;
- $holidays[$i]= $holiday;
if ($day_offset)
{
- $holidays[$i]['name'] .= ' (Observed)';
+ $holiday['name'] .= ' (Observed)';
}
- $holidays[$i]['date'] = mktime(0,0,0,$holiday['month'],$holiday['day']+$day_offset,$year);
+ $holiday['date'] = mktime(0,0,0,$holiday['month'],$holiday['day']+$day_offset,$year);
foreach(array('day'=>'d','month'=>'m','occurence'=>'Y') as $key => $frmt)
{
- $holidays[$i][$key] = date($frmt,$holidays[$i]['date']);
+ $holiday[$key] = date($frmt,$holiday['date']);
}
- $holidays[$i]['obervance_rule'] = 0;
+ $holiday['obervance_rule'] = 0;
- //echo "holidaycalc::add(".print_r($holiday,True).",,$year,,$day_offset)=".print_r($holidays[$i],True)."
";
+ $holidays[]= $holiday;
+
+ //echo "holidaycalc::add(,,$year,,$day_offset)=".print_r($holiday,True)."
";
}
- function calculate_date($holiday, &$holidays, $year, &$i)
+ function calculate_date($holiday, &$holidays, $year)
{
//echo "holidaycalc::calculate_date(".print_r($holiday,True).",,$year,)
";
@@ -71,7 +71,7 @@
// 0 = sundays are observed on monday (+1), 6 = saturdays are observed on fridays (-1)
if($dow == 0 || $dow == 6)
{
- $this->add($holiday,$holidays,$year,$i,$dow == 0 ? 1 : -1);
+ $this->add($holiday,$holidays,$year,$dow == 0 ? 1 : -1);
}
if ($holiday['month'] == 1 && $day == 1)
{
@@ -79,10 +79,10 @@
// checking if next year's newyear might be observed in this year
if ($dow == 6)
{
- $this->add($holiday,$holidays,$year+1,$i,-1);
+ $this->add($holiday,$holidays,$year+1,-1);
}
// add the next years newyear, to show it in a week- or month-view
- $this->add($holiday,$holidays,$year+1,$i);
+ $this->add($holiday,$holidays,$year+1);
}
// checking if last year's new year's eve might be observed in this year
if ($holiday['month'] == 12 && $day == 31)
@@ -90,10 +90,10 @@
$dow = $GLOBALS['phpgw']->datetime->day_of_week($year-1,$holiday['month'],$day);
if ($dow == 0)
{
- $this->add($holiday,$holidays,$year-1,$i,1);
+ $this->add($holiday,$holidays,$year-1,1);
}
// add the last years new year's eve, to show it in a week- or month-view
- $this->add($holiday,$holidays,$year-1,$i);
+ $this->add($holiday,$holidays,$year-1);
}
}
}