Fix for bug #420708. Also, restructured the holiday support. I think this will be the final structure. This gives the most flexibility, a single file to handle all future years. This does not care about previous years rules.

This commit is contained in:
skeeter
2001-05-02 23:23:48 +00:00
parent 3d3163faaa
commit f1ac28bc71
9 changed files with 128 additions and 31 deletions

View File

@@ -101,7 +101,6 @@ class calendar extends calendar_
$this->users_timeformat = 'H:i'; $this->users_timeformat = 'H:i';
} }
$this->holidays = CreateObject('calendar.calendar_holiday',$this->owner); $this->holidays = CreateObject('calendar.calendar_holiday',$this->owner);
$this->holidays->read_holiday();
} }
// Generic functions that are derived from mcal functions. // Generic functions that are derived from mcal functions.
@@ -403,8 +402,8 @@ class calendar extends calendar_
$full_event_date = date('Ymd',$event_beg_day); $full_event_date = date('Ymd',$event_beg_day);
// only repeat after the beginning, and if there is an rpt_end before the end date // only repeat after the beginning, and if there is an rpt_end before the end date
if (($rep_events->rpt_end_use && ($search_date_full > $end_recur_date)) || if ((($rep_events->recur_enddate->month && $rep_events->recur_enddate->mday && $rep_events->recur_enddate->year) &&
($search_date_full < $full_event_date)) ($search_date_full > $end_recur_date)) || ($search_date_full < $full_event_date))
{ {
continue; continue;
} }
@@ -695,7 +694,6 @@ class calendar extends calendar_
$p->set_var('dayname','<b>' . substr(lang($this->days[$i]),0,2) . '</b>'); $p->set_var('dayname','<b>' . substr(lang($this->days[$i]),0,2) . '</b>');
$p->parse('daynames','mini_day',True); $p->parse('daynames','mini_day',True);
} }
for($i=$weekstarttime;date('Ymd',$i)<=$monthend;$i += (24 * 3600 * 7)) for($i=$weekstarttime;date('Ymd',$i)<=$monthend;$i += (24 * 3600 * 7))
{ {
for($j=0;$j<7;$j++) for($j=0;$j<7;$j++)
@@ -910,7 +908,6 @@ class calendar extends calendar_
$str = ''; $str = '';
$gr_events = CreateObject('calendar.calendar_item'); $gr_events = CreateObject('calendar.calendar_item');
$lr_events = CreateObject('calendar.calendar_item'); $lr_events = CreateObject('calendar.calendar_item');
$p = CreateObject('phpgwapi.Template',$this->template_dir); $p = CreateObject('phpgwapi.Template',$this->template_dir);
$p->set_unknowns('keep'); $p->set_unknowns('keep');
@@ -934,7 +931,6 @@ class calendar extends calendar_
$p->parse('column_header','month_column',True); $p->parse('column_header','month_column',True);
$p->set_var('col_width','12'); $p->set_var('col_width','12');
} }
for ($j=0;$j<7;$j++) for ($j=0;$j<7;$j++)
{ {
$date = $this->gmtdate($startdate + ($j * 86400)); $date = $this->gmtdate($startdate + ($j * 86400));
@@ -947,8 +943,8 @@ class calendar extends calendar_
$day = $phpgw->common->show_date($date['raw'],'d'); $day = $phpgw->common->show_date($date['raw'],'d');
$month = $phpgw->common->show_date($date['raw'],'m'); $month = $phpgw->common->show_date($date['raw'],'m');
$year = $phpgw->common->show_date($date['raw'],'Y'); $year = $phpgw->common->show_date($date['raw'],'Y');
$date = $this->gmtdate(mktime(0,0,0,$month,$day,$year)); $date = $this->gmtdate(mktime(0,0,0,$date['month'],$date['day'],$date['year']));
if ($weekly || ($date['full'] >= $monthstart && $date['full'] <= $monthend)) if ($weekly || ($date['full'] >= $monthstart && $date['full'] <= $monthend))
{ {
if($weekly) if($weekly)
@@ -956,6 +952,7 @@ class calendar extends calendar_
$cellcolor = $phpgw->nextmatchs->alternate_row_color($cellcolor); $cellcolor = $phpgw->nextmatchs->alternate_row_color($cellcolor);
} }
// echo 'Date = '.$date['raw'].' '.date('Y.m.d H:i:s',$date['raw'])."<br>\n";
if ($date['full'] != $this->today['full']) if ($date['full'] != $this->today['full'])
{ {
$extra = ' bgcolor="'.$cellcolor.'"'; $extra = ' bgcolor="'.$cellcolor.'"';
@@ -963,7 +960,6 @@ class calendar extends calendar_
else else
{ {
$extra = ' bgcolor="'.$phpgw_info['theme']['cal_today'].'"'; $extra = ' bgcolor="'.$phpgw_info['theme']['cal_today'].'"';
// echo 'Today = '.$date['raw'].' '.$phpgw->common->show_date($date['raw'])."<br>\n";
} }
$holiday_found = $this->holidays->find_date($date['raw']); $holiday_found = $this->holidays->find_date($date['raw']);
@@ -1326,7 +1322,6 @@ class calendar extends calendar_
$this->end_repeat_day = intval(date('Ymd',$date['raw'])); $this->end_repeat_day = intval(date('Ymd',$date['raw']));
$this->read_repeated_events($this->owner); $this->read_repeated_events($this->owner);
$p = CreateObject('phpgwapi.Template',$this->template_dir); $p = CreateObject('phpgwapi.Template',$this->template_dir);
$p->set_unknowns('keep'); $p->set_unknowns('keep');

View File

@@ -15,14 +15,18 @@
class calendar_holiday class calendar_holiday
{ {
var $db; var $db;
var $year;
var $tz_offset;
var $holidays; var $holidays;
var $users; var $users;
// var $cal;
function calendar_holiday($owner='') function calendar_holiday($owner='')
{ {
global $phpgw, $phpgw_info; global $phpgw, $phpgw_info;
$this->db = $phpgw->db; $this->db = $phpgw->db;
// $this->cal = CreateObject('calendar.calendar');
// $phpgw_info['user']['preferences']['calendar']['locale'] = 'US'; // $phpgw_info['user']['preferences']['calendar']['locale'] = 'US';
$this->users['user'] = $phpgw_info['user']['preferences']['calendar']['locale']; $this->users['user'] = $phpgw_info['user']['preferences']['calendar']['locale'];
$owner_id = get_account_id($owner); $owner_id = get_account_id($owner);
@@ -92,23 +96,56 @@ class calendar_holiday
// echo 'Loading from: '.$load_from.'/holidays.'.strtoupper($locale)."<br>\n"; // echo 'Loading from: '.$load_from.'/holidays.'.strtoupper($locale)."<br>\n";
$lines = $network->gethttpsocketfile($load_from.'/holidays.'.strtoupper($locale)); $lines = $network->gethttpsocketfile($load_from.'/holidays.'.strtoupper($locale));
if (!$lines) return false; if (!$lines) return false;
$c_lines = count($lines); $c_lines = count($lines) - 4;
for($i=10;$i<$c_lines;$i++) for($i=10;$i=$c_lines;$i++)
{ {
// echo 'Line #'.$i.' : '.$lines[$i]."<br>\n"; // echo 'Line #'.$i.' : '.$lines[$i]."<br>\n";
$holiday = explode("\t",$lines[$i]); $holiday = explode("\t",$lines[$i]);
$loc = $holiday[0]; $loc = $holiday[0];
$name = addslashes($holiday[1]); $name = addslashes($holiday[1]);
$date = $holiday[2]; $day = intval($holiday[2]);
$month = intval($holiday[3]);
$occurence = intval($holiday[4]);
$dow = intval($holiday[5]);
// echo "Inserting LOCALE='".$loc."' NAME='".$name."' DATE='".$date."'<br>\n"; // echo "Inserting LOCALE='".$loc."' NAME='".$name."' DATE='".$date."'<br>\n";
$sql = "INSERT INTO phpgw_cal_holidays(locale,name,date_time) VALUES('$loc','$name',$date)"; $sql = "INSERT INTO phpgw_cal_holidays(locale,name,mday,month_num,occurence,dow) VALUES('$loc','$name',$day,$month,$occurence,$dow)";
$this->db->query($sql,__LINE__,__FILE__); $this->db->query($sql,__LINE__,__FILE__);
} }
} }
function calculate_date($holiday)
{
global $phpgw;
if($holiday['mday'] == 0 && $holiday['dow'] != 0 && $holiday['occurence'] != 0)
{
if($holiday['occurence'] != 99)
{
$dow = $phpgw->calendar->day_of_week($this->year,$holiday['month'],1);
$day = (7 * $holiday['occurence'] - 6 + ($holiday['dow'] - $dow) % 7);
}
else
{
$ld = $phpgw->calendar->days_in_month($holiday['month'],$this->year);
$dow = $phpgw->calendar->day_of_week($this->year,$holiday['month'],$ld);
$day = $ld - ($dow - $holiday['dow']) % 7 ;
}
}
else
{
$day = $holiday['day'];
}
$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).')<br>'."\n";
return $datetime;
}
function read_holiday() function read_holiday()
{ {
global $phpgw; global $phpgw;
$this->year = intval($phpgw->calendar->today['year']);
$this->tz_offset = intval($phpgw->calendar->tz_offset);
$sql = $this->build_holiday_query(); $sql = $this->build_holiday_query();
$this->holidays = Null; $this->holidays = Null;
@@ -120,7 +157,11 @@ class calendar_holiday
$i++; $i++;
$this->holidays[$i]['locale'] = $this->db->f('locale'); $this->holidays[$i]['locale'] = $this->db->f('locale');
$this->holidays[$i]['name'] = $phpgw->strip_html($this->db->f('name')); $this->holidays[$i]['name'] = $phpgw->strip_html($this->db->f('name'));
$this->holidays[$i]['date'] = $this->db->f('date_time'); $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(count($find_locale) == 2 && $find_locale[0] != $find_locale[1])
{ {
if($this->holidays[$i]['locale'] == $find_locale[1]) if($this->holidays[$i]['locale'] == $find_locale[1])
@@ -161,7 +202,7 @@ class calendar_holiday
function sort_by_date($holidays) function sort_by_date($holidays)
{ {
$c_holidays = count($this->holidays); $c_holidays = count($holidays);
for($outer_loop=0;$outer_loop<($c_holidays - 1);$outer_loop++) for($outer_loop=0;$outer_loop<($c_holidays - 1);$outer_loop++)
{ {
$outer_date = $holidays[$outer_loop]['date']; $outer_date = $holidays[$outer_loop]['date'];

View File

@@ -606,10 +606,6 @@ class calendar_ extends calendar__
{ {
global $phpgw_info; global $phpgw_info;
$cat = CreateObject('phpgwapi.categories');
$categ = $cat->return_single($event->category);
$category = $categ[0]['name'];
$locks = Array( $locks = Array(
'phpgw_cal', 'phpgw_cal',
'phpgw_cal_user', 'phpgw_cal_user',
@@ -619,8 +615,8 @@ class calendar_ extends calendar__
if($event->id == 0) if($event->id == 0)
{ {
$temp_name = tempnam($phpgw_info['server']['temp_dir'],'cal'); $temp_name = tempnam($phpgw_info['server']['temp_dir'],'cal');
$this->stream->query('INSERT INTO phpgw_cal(title,owner,category,priority,is_public) ' $this->stream->query('INSERT INTO phpgw_cal(title,owner,priority,is_public) '
. "values('".$temp_name."',".$event->owner.",'".$category."',".$event->priority.",".$event->public.")"); . "values('".$temp_name."',".$event->owner.",".$event->priority.",".$event->public.")");
$this->stream->query("SELECT cal_id FROM phpgw_cal WHERE title='".$temp_name."'"); $this->stream->query("SELECT cal_id FROM phpgw_cal WHERE title='".$temp_name."'");
$this->stream->next_record(); $this->stream->next_record();
$event->id = $this->stream->f('cal_id'); $event->id = $this->stream->f('cal_id');
@@ -640,13 +636,19 @@ class calendar_ extends calendar__
$type = 'E'; $type = 'E';
} }
$cat = '';
if($event->category != 0)
{
$cat = 'category='.$event->category.', ';
}
$sql = 'UPDATE phpgw_cal SET ' $sql = 'UPDATE phpgw_cal SET '
. 'owner='.$event->owner.', ' . 'owner='.$event->owner.', '
. 'datetime='.$date.', ' . 'datetime='.$date.', '
. 'mdatetime='.$today.', ' . 'mdatetime='.$today.', '
. 'edatetime='.$enddate.', ' . 'edatetime='.$enddate.', '
. 'priority='.$event->priority.', ' . 'priority='.$event->priority.', '
. 'category='.$event->category.', ' . $cat
. "cal_type='".$type."', " . "cal_type='".$type."', "
. 'is_public='.$event->public.', ' . 'is_public='.$event->public.', '
. "title='".addslashes($event->title)."', " . "title='".addslashes($event->title)."', "

View File

@@ -68,14 +68,15 @@
'rights' => intval($rights) 'rights' => intval($rights)
); );
$phpgw->calendar = CreateObject('calendar.calendar',$parameters);
if(!isset($phpgw_info['user']['preferences']['calendar']['weekdaystarts'])) if(!isset($phpgw_info['user']['preferences']['calendar']['weekdaystarts']))
{ {
$phpgw_info['user']['preferences']['calendar']['weekdaystarts'] = 'Sunday'; $phpgw_info['user']['preferences']['calendar']['weekdaystarts'] = 'Sunday';
$phpgw->preferences->save_repository(); $phpgw->preferences->save_repository();
} }
$phpgw->calendar = CreateObject('calendar.calendar',$parameters);
$phpgw->calendar->holidays->read_holiday();
if (isset($date) && strlen($date) > 0) if (isset($date) && strlen($date) > 0)
{ {
$thisyear = intval(substr($date, 0, 4)); $thisyear = intval(substr($date, 0, 4));

View File

@@ -1,2 +1,13 @@
US Presidents Day 988628400 US New Years 1 1 0 0
US Memorial Day 988714800 US Martin Luther King's Birthday 0 1 3 1
US Inaugeration Day 20 1 0 0
US Armed Forces Day 0 5 3 6
US Memorial Day 0 5 99 1
US Flag Day 14 6 0 0
US Independence Day 4 7 0 0
US Labor Day 0 9 1 1
US Columbus Day 0 10 2 1
US Veterans Day 11 11 0 0
US Thanksgiving Day 0 11 4 4
US Christmas Day 25 12 0 0

View File

@@ -250,8 +250,11 @@
$sql = "CREATE TABLE phpgw_cal_holidays ( $sql = "CREATE TABLE phpgw_cal_holidays (
hol_id int(11) NOT NULL auto_increment, hol_id int(11) NOT NULL auto_increment,
locale char(2) NOT NULL, locale char(2) NOT NULL,
name varchar(50) NOT NULL, name varchar(50) NOT NULL,
date_time int(11) DEFAULT '0' NOT NULL, mday int DEFAULT '0' NOT NULL,
month_num int DEFAULT '0' NOT NULL,
occurence int DEFAULT '0' NOT NULL,
dow int DEFAULT '0' NOT NULL,
PRIMARY KEY (hol_id) PRIMARY KEY (hol_id)
)"; )";
$phpgw_setup->db->query($sql); $phpgw_setup->db->query($sql);

View File

@@ -1629,6 +1629,27 @@
$phpgw_info['setup']['currentver']['phpgwapi'] = '0.9.11.007'; $phpgw_info['setup']['currentver']['phpgwapi'] = '0.9.11.007';
} }
$test[] = '0.9.11.007';
function upgrade0_9_11_007()
{
global $phpgw_info,$phpgw_setup;
$phpgw_setup->db->query("drop table phpgw_cal_holidays",__LINE__,__FILE__);
$sql = "CREATE TABLE phpgw_cal_holidays (
hol_id int(11) NOT NULL auto_increment,
locale char(2) NOT NULL,
name varchar(50) NOT NULL,
mday int DEFAULT '0' NOT NULL,
month_num int DEFAULT '0' NOT NULL,
occurence int DEFAULT '0' NOT NULL,
dow int DEFAULT '0' NOT NULL,
PRIMARY KEY (hol_id)
)";
$phpgw_setup->db->query($sql);
$phpgw_info['setup']['currentver']['phpgwapi'] = '0.9.11.008';
}
reset ($test); reset ($test);
while (list ($key, $value) = each ($test)){ while (list ($key, $value) = each ($test)){
if ($phpgw_info["setup"]["currentver"]["phpgwapi"] == $value) { if ($phpgw_info["setup"]["currentver"]["phpgwapi"] == $value) {

View File

@@ -221,10 +221,13 @@
$phpgw_setup->db->query($sql); $phpgw_setup->db->query($sql);
$sql = "CREATE TABLE phpgw_cal_holidays ( $sql = "CREATE TABLE phpgw_cal_holidays (
hol_id serial, hol_id serial,
locale char(2) NOT NULL, locale char(2) NOT NULL,
name varchar(50) NOT NULL, name varchar(50) NOT NULL,
date_time int4 DEFAULT 0 NOT NULL mday int DEFAULT 0,
month_num int DEFAULT 0,
occurence int DEFAULT 0,
dow int DEFAULT 0
)"; )";
$phpgw_setup->db->query($sql); $phpgw_setup->db->query($sql);

View File

@@ -2144,6 +2144,26 @@
$phpgw_info['setup']['currentver']['phpgwapi'] = '0.9.11.007'; $phpgw_info['setup']['currentver']['phpgwapi'] = '0.9.11.007';
} }
$test[] = '0.9.11.007';
function upgrade0_9_11_007()
{
global $phpgw_info, $phpgw_setup;
$phpgw_setup->db->query("drop table phpgw_cal_holidays",__LINE__,__FILE__);
$sql = "CREATE TABLE phpgw_cal_holidays (
hol_id serial,
locale char(2) NOT NULL,
name varchar(50) NOT NULL,
mday int DEFAULT 0,
month_num int DEFAULT 0,
occurence int DEFAULT 0,
dow int DEFAULT 0
)";
$phpgw_setup->db->query($sql);
$phpgw_info['setup']['currentver']['phpgwapi'] = '0.9.11.008';
}
reset ($test); reset ($test);
while (list ($key, $value) = each ($test)){ while (list ($key, $value) = each ($test)){
if ($phpgw_info["setup"]["currentver"]["phpgwapi"] == $value) { if ($phpgw_info["setup"]["currentver"]["phpgwapi"] == $value) {