KGRKJGETMRETU895U-589TY5MIGM5JGB5SDFESFREWTGR54TY
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 :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /domains/compasssysweb/calendar/CalciumDir39/Calendar/TimePlanView.pm
# 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 || '&nbsp;') . '</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;

Anon7 - 2021