|
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/Operation/ |
Upload File : |
# Copyright 1999-2003, Fred Steinberg, Brown Bear Software
# Display a days events, with form for adding a new event.
package ShowDay;
use strict;
use CGI (':standard');
use Calendar::Date;
use Calendar::Event;
use Calendar::EventSorter;
use Calendar::GetHTML;
use Calendar::EventEditForm;
use Calendar::Javascript;
use vars ('@ISA');
@ISA = ('Operation');
sub perform {
my $self = shift;
my ($date, $viewCal) = $self->getParams ('Date', 'ViewCal');
$date = Date->new ($date);
$self->{view_cal} = $viewCal;
$self->{audit_date} = $date;
# Open the database, and get the prefs hash.
my $name = $self->calendarName();
my $db = $self->db;
my $preferences = $self->prefs;
my $i18n = $self->I18N;
my $addPerm = $self->permission->permitted ($self->getUsername, 'Add');
my $editPerm = $self->permission->permitted ($self->getUsername, 'Edit');
my $onLoad = '';
if ($addPerm) {
$onLoad = 'document.EventEditForm.EventText.focus()';
}
my $cgi = new CGI;
print $cgi->header;
print $cgi->start_html ('-title' => $i18n->get ('Create, Edit, or ' .
'Delete Events:') .
" $name",
'-onLoad' => $onLoad,
# commented out - causes error > '-onUnload' => 'cleanUpPopups()',
'-bgcolor' => 'white');
# Stick in the javascript code we'll need
print Javascript->PopupWindow ($self);
# First, spit out the links for every day of this month across the top
my $dayURL = $self->makeURL ({Op => 'ShowDay',
Date => undef,
ViewCal => $viewCal});
my $viewURL = $self->makeURL ({Op => 'ShowIt',
Date => $date,
CalendarName => $viewCal || $name});
print $self->_linearMonth ($date, $dayURL, $viewURL, $i18n);
print '<br>';
print GetHTML->dateHeader ($i18n, $preferences->Title, $date);
my @events = $db->getApplicableEvents ($date, $preferences);
# Don't display tentative events that we shouldn't see
my @keepers;
my %canEdit = ($name => $editPerm);
foreach my $event (@events) {
if ($event->isTentative) {
my $cal = $event->includedFrom;
if (!defined $cal) {
$cal = $name;
} elsif (!exists $canEdit{$cal}) {
my $perm = Permissions->new ($cal);
$canEdit{$cal} = $perm->permitted ($self->getUsername, 'Edit');
}
next unless $canEdit{$cal};
}
push @keepers, $event;
}
@events = @keepers;
if (@events) {
print GetHTML->SectionHeader ($i18n->get ('Existing Events'));
# And print them out, with "Delete, Edit, etc. buttons"
print $self->_eventTable ($date, \@events);
print '<br>';
}
# Print message if it's tentative.
if ($preferences->TentativeSubmit and
!$self->permission->permitted ($self->getUsername, 'Edit')) {
print '<p><center><i>';
print $i18n->get ('Note: new events will not appear on the ' .
'calendar until they are approved.');
print '</i></center></p>';
}
# And finally, print out the event editing widgets, if we've got permission
if ($addPerm) {
my %params;
$params{'date'} = $date;
$params{'allOrOne'} = 'all'; # so repeat stuff shows; fix this
$params{'noCancel'} = 1; # don't show the Cancel button
$params{'mainHeader'} = $i18n->get ('Add New Event');
$params{'newOrEdit'} = 'new';
$params{'viewCal'} = $viewCal;
# edit a *new* event
print EventEditForm->eventEdit ($self, \%params);
}
print $cgi->end_html;
}
# Pass:
# date
# a ref to a list of events
sub _eventTable {
my $self = shift;
my ($date, $eventListRef) = @_;
my $prefs = $self->prefs;
my $i18n = $self->I18N;
my $calName = $self->calendarName;
my ($html, $eventID, $owner);
my ($bgcolor, $bg2);
$bgcolor = '"#cccccc"';
$bg2 = '"#eeeeee"';
$html = '<center>';
$html .= '<TABLE width="100%" cellspacing=0 cellpadding=0 ' .
'bgcolor="#aaaaaa">';
$html .= '<tr><td><TABLE width="100%" border=0 cellpadding=2 ' .
'cellspacing=0>';
my $editDeleteURL = $self->makeURL ({Op => 'EventEditDelete',
CalendarName => undef});
my $allOrOne = $prefs->RepeatEditWhich;
# sort events, based on sort pref
my @sortedEvents = Event->sort ($eventListRef, $prefs->EventSorting);
foreach (@sortedEvents) {
next unless defined;
# Get date right, if it actually starts on different date
my $theDate = Date->new ($date);
if ($_->TZoffset) {
$_->TZoffset > 0 ? $theDate-- : $theDate++;
}
($bgcolor, $bg2) = ($bg2, $bgcolor);
$eventID = $_->id;
$owner = $_->owner || '';
$html .= "<TR bgcolor=$bgcolor>";
$html .= '<TD>';
$html .= $_->getHTML ({calName => $calName,
date => $theDate,
prefs => $prefs,
i18n => $i18n,
timeFace => undef,
timeSize => -1,
categoryFace => undef,
categorySize => -1});
$html .= '</TD>';
$html .= '<TD>';
my $notes;
$notes = '<font size="-2" color="darkred">' . $i18n->get ('Repeating')
if $_->isRepeating;
if (!$_->includedFrom || $_->includedFrom eq $calName) {
my $theNote = $_->displayString ($i18n); # private, unavail., etc.
if ($theNote) {
$notes .= '<br>' if $notes;
$notes .= font ({size => "-2", color => "darkred"}, $theNote);
}
}
# add owner, if there is one
if ($owner) {
$notes .= '<br>' if ($notes);
$notes .= font ({size => "-2", color => "darkred"},
$i18n->get ('Created by') . ": $owner");
}
# category, if there is one
my $category = $_->category;
if ($category) {
$notes .= '<br>' if ($notes);
$notes .= font ({size => "-2", color => "darkred"},
$i18n->get ('Category') . ": $category");
}
# "tentative", if tentative
if ($_->isTentative) {
$notes .= '<br>' if $notes;
$notes .= font ({size => "-2", color => "darkred"},
$i18n->get ('Pending Approval'));
}
$html .= $notes || ' ';
$html .= '</TD>';
my $incFrom = $_->includedFrom;
# "Included from" column.
$html .= '<TD align="center" HEIGHT=40>';
if ($incFrom) {
my $incName;
($incName = $incFrom) =~ s/^ADDIN //;
$html .= '<font size="-2" color="darkred">'
. $i18n->get('Included from')
. " '" . $incName . "'";
$html .= '</font></td>';
} else {
$html .= ' </td>';
}
# Edit/Delete buttons. Don't display if we don't have permission
# for whatever calendar this event lives in, or if we're not the
# owner and the "only owner can edit" pref is in force
my $weCanDoIt;
if ($incFrom) {
if ($incFrom !~ /^ADDIN /) {
my $db = Database->new ($incFrom);
my $perm = Permissions->new ($db);
$weCanDoIt++
if $perm->permitted ($self->getUsername, 'Edit');
}
} else {
$weCanDoIt++
if $self->permission->permitted ($self->getUsername, 'Edit');
}
if ($weCanDoIt and
$prefs->EventOwnerOnly and
$owner and
($self->getUsername || '') ne $owner and
!$self->permission->permitted ($self->getUsername, 'Admin')) {
undef $weCanDoIt;
};
if ($weCanDoIt) {
my $whichCal = $incFrom || $calName;
$html .= '<td>';
$html .= startform ({-action => $editDeleteURL});
$html .= submit (-name => 'Edit', -value => $i18n->get('Edit'));
$html .= submit (-name => 'Delete',-value => $i18n->get('Delete'));
$html .= hidden (-name => 'Op',
-override => 1,
-value =>'EventEditDelete');
$html .= hidden (-name => 'CalendarName',
-override => 1,
-value => $whichCal);
$html .= hidden (-name => 'DisplayCal',
-override => 1,
-value => $calName);
$html .= hidden (-name => 'ViewCal',
-override => 1,
-value => $self->{view_cal})
if defined $self->{view_cal};
$html .= hidden (-name => 'Date',
-override => 1,
-value => "$theDate");
$html .= hidden (-name => 'EventID',
-override => 1,
-value => $eventID);
$html .= $self->hiddenDisplaySpecs;
$html .= '</td><td align="left">';
if ($_->isRepeating()) {
$html .= $i18n->get ('Which instances') . ': ';
$html .= popup_menu (-name => 'AllOrOne',
-default => $allOrOne,
# -style => 'text-align: left',
-values => ['All', 'Only', 'Past',
'Future'],
-labels =>
{'All' => $i18n->get ('All'),
'Only' => $i18n->get ('Only this date'),
'Past' => $i18n->get ('This date, and all ' .
'before'),
'Future' => $i18n->get ('This date, and all ' .
'after')});
} else {
$html .= ' ';
}
$html .= "</td>";
$html .= endform();
} else {
$html .= '<td colspan=2> </td>';
}
$html .= "</TR>\n";
}
$html .= "</TABLE>\n";
$html .= "</td></tr></TABLE></center>\n";
$html;
}
# Looks something like this:
# t f s s m t w ... w t f (in current language, of course)
# 1 2 3 4 5 6 7 ... 28 29 30
sub _linearMonth {
my $self = shift;
my ($date, $url, $viewURL, $i18n) = (@_);
my ($html, $numDays, $firstDay, @dayList, @dowList,
$normalD, $todayD, @fnord);
$html = '<center>';
$numDays = $date->daysInMonth;
$firstDay = $date->firstOfMonth->dayOfWeek;
@dayList = (1..$numDays);
@dowList = map {($_ + $firstDay - 2) % 7 + 1} @dayList;
$normalD = {-align => 'center'};
$todayD = {-align => 'center', -bgcolor => 'blue', -fgcolor => 'white'};
@dayList = map {td ((($_ == $date->day) ? $todayD : $normalD),
"<a href=\"$url&Date=" .
Date->new ($date->year, $date->month, $_) .
'"><font size=-2 color=' .
(($_ == $date->day) ? '"white"' : '"black"') .
">$_</font>")}
@dayList;
@fnord = map {td ({-align => 'center'},
'<font size=-2 color=' .
(($_ == 6 || $_ == 7) ? '"red"' : '"black"') . '>' .
(lc substr ($i18n->get(Date->dayName($_, 'abbreviated')),
0, 1)) .
'</font>')}
@dowList;
my $lastMonth = $date->firstOfMonth->addMonths(-1);
my $nextMonth = $date->firstOfMonth->addMonths(1);
$html .= table ({-width => '100%',
-border => 0,
-bgcolor => "#cccccc",
-cellspacing => 0,
-cellpadding => 2},
Tr (td ({-rowspan => 2,
-bgcolor => 'yellow',
-align => 'center'},
a ({-href => $viewURL},
font ({-size => -1},
b ($i18n->get ('View<br>Calendar'))))),
@fnord,
td (' '),
td (a ({-href => "$url&Date=$lastMonth"},
font ({-size => -2},
$i18n->get ($lastMonth->monthName))))),
Tr (@dayList,
td (' '),
td (a ({-href => "$url&Date=$nextMonth"},
font ({-size => -2},
$i18n->get ($nextMonth->monthName))))));
$html .= '</center>';
$html;
}
sub auditString {
my ($self, $short) = @_;
my $line = $self->SUPER::auditString ($short);
$line .= ' ' . $self->{audit_date};
}
1;