|
Server : Apache/2.4.62 System : FreeBSD fbsdweb2.web.rcn.net 14.1-RELEASE FreeBSD 14.1-RELEASE releng/14.1-n267679-10e31f0946d8 GENERIC amd64 User : www ( 80) PHP Version : 8.3.8 Disable Function : NONE Directory : /domains/compasssysweb/calendar/CalciumDir39/Calendar/ |
Upload File : |
# Copyright 2001-2003, Fred Steinberg, Brown Bear Software
# Display one or more days worth of events, with vertical time blocks
package TimePlanView;
use strict;
use CGI;
use Calendar::Date;
use Calendar::TimeBlock;
sub new {
my $class = shift;
my ($op, $startDate, $endDate) = @_;
my $self = {};
bless $self, $class;
my $db = $op->db;
my $i18n = $op->I18N;
my $prefs = $op->prefs;
my $calName = $op->calendarName;
my $addPerm = $op->permission->permitted ($op->getUsername, 'Add');
my ($bg, $fg) = ($prefs->color ('DayHeaderBG') || '',
$prefs->color ('DayHeaderFG') || '');
my ($face, $size) = $prefs->font ('BlockDayDate');
$face = $face ? " face='$face'" : '';
$size = $size ? " size=$size" : '';
my $showWeekend = $prefs->ShowWeekend || ($startDate == $endDate);
my $today = Date->todayForTimezone ($prefs->Timezone);
# Use filter specs for each day
($self->{_filterCategories},
$self->{_filterText},
$self->{_filterIn}) = $op->ParseFilterSpecs;
# Column for each day
my (@dates, %dayNames, %events);
for (my $date = Date->new ($startDate); $date <= $endDate; $date++){
next if (!$showWeekend and $date->isWeekend);
push @dates, $date;
my ($fore, $back) = ($fg, $bg);
if ($date == $today) {
$fore = $prefs->color ('TodayFG') || '';
$back = $prefs->color ('TodayBG') || '';
}
my $text = $date->day;
$text = qq (<font$face$size color="$fore">$text</font>)
if (defined $fore);
if ($addPerm and !$prefs->PrintPrefs) {
my $url = $op->makeURL ({Op => 'ShowDay',
Date => $date});
$text = "<a href='$url'>$text</a>";
}
my $dayName = $date->dayName ('abbrev');
$dayName = qq (<font$face$size color="$fore">$dayName</font>)
if (defined $fore);
my $url = $op->makeURL ({Op => $op->opName,
Date => $date,
Amount => 'Day'});
$dayName = "<a href='$url'>$dayName</a>";
my $weekNum = '';
if ($prefs->ShowWeekNums and
($date->dayOfWeek == $prefs->StartWeekOn)) {
$weekNum = $date->weekNumber ($prefs->WhichWeekNums,
$prefs->StartWeekOn);
$weekNum = "<font$face$size color=$fore> " .
"<small><small>[$weekNum]</small></small></font>";
my $url = $op->makeURL ({Op => $op->opName,
Date => $date,
Amount => 'Week'});
$weekNum = "<a href='$url'>$weekNum</a>";
}
$dayNames{$date} = "<table width=\"100%\" bgcolor=\"$back\"><tr>" .
'<td align="center">' .
"<nobr>$dayName $text $weekNum</nobr></td>" .
'</tr></table>';
# '<td>' . ($weekNum || ' ') . '</td>' .
# "<td>$dayName</td>" .
# "<td>$text</td>" .
# Get events for this day
$events{"$date"} = $self->_eventsForToday ($date, $op, $prefs);
}
my $tblock = TimeBlock->new (op => $op,
dates => \@dates,
headers => \%dayNames,
events => \%events
);
$self->{html} = Javascript->PopupWindow ($op);
$self->{html} .= $tblock->render;
$self->{html} .= '<br>' . $tblock->hourControls;
$self;
}
sub _eventsForToday {
my ($self, $date, $op) = @_;
my @events = $op->db->getApplicableEvents ($date, $op->prefs, 'yesterday');
# First, eliminate Tentative events we don't have Edit perm for
@events = $op->removeTentatives (\@events); # op is a ShowIt
# Filter out events we don't want, maybe
if ($self->{_filterCategories} or defined $self->{_filterText}) {
my @keepers;
foreach my $event (@events) {
next unless defined $event;
next if ($self->{_filterCategories} and
!$event->inCategory ($self->{_filterCategories}));
next if (defined $self->{_filterText} and
!$event->matchesText ($self->{_filterText},
$self->{_filterIn}));
push @keepers, $event;
}
@events = @keepers;
}
# Make copy of any repeating events, since we need to keep
# track of instance date for each one (for possible timezone
# shifts.)
@events = map {$_->isRepeating? $_->copy : $_} @events; # shallow copy
return \@events;
}
sub getHTML {
my $self = shift;
$self->{html};
}
1;