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/Operation/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /domains/compasssysweb/calendar/CalciumDir39/Operation/PopupWindow.pm
# Copyright 1999-2003, Fred Steinberg, Brown Bear Software

# Popup Window

package PopupWindow;
use strict;
use CGI (':standard');

use Calendar::Date;
use Calendar::Javascript;

use vars ('@ISA');
@ISA = ('Operation');

sub perform {
    my $self = shift;
    my ($date, $id, $source, $doneURL) = $self->getParams (qw (Date ID Source
                                                               DoneURL));

    # DoneURL used if no JS

    unless (defined ($date) && defined ($id)) {
        warn "Bad Params to Popup Window";
        return;
    }

    my $cgi  = CGI->new;
    my $name  = $self->calendarName();
    my $i18n  = $self->I18N;
    my $prefs = $self->prefs;

    # Get the colors
    my $bg = $prefs->color ('PopupBG') || 'white';
    my $fg = $prefs->color ('PopupFG') || 'black';
    my $dateFG = $prefs->color ('PopupDateFG') || 'black';
    my $dateBG = $prefs->color ('PopupDateBG') || 'white';

    # Get the Event; if no source, not an included event
    # Some browswers (Opera) set source to ' ' instead of ''
    undef $source if ($source =~ /^\s+$/);
    my ($db, $sourceName, $addInName);
    if (!$source) {
        $db         = $self->db;
        $sourceName = $name;
    } else {
        $sourceName = $source;
        if ($source !~ /^ADDIN /) {
            $db = Database->new ($source);
        } else {
            $sourceName =~ s/^ADDIN //;
            $addInName = $sourceName;
            $sourceName = $name;
            $db = AddIn->new ($addInName, $self->db);
        }
    }

    my $event = $db->getEvent ($date, $id);

    # If TZ offset, might not have right date.
    unless ($event) {
        ($event, $date) = $db->getEventById ($id);
    }

    $date = Date->new ($date);

    $self->{audit_date} = $date;
    $self->{audit_eventtext} = $event ? $event->text : 'event not found';

    # And display everything
    print $cgi->header;
    print $cgi->start_html (-Title   => "$sourceName",
                            -bgcolor => $bg,
                            -text    => $fg);

    my ($face, $size) = $prefs->font ('PopupDate');

    my %fontHash = (-color => $dateFG);
    $fontHash{-face} = $face if $face;
    $fontHash{-size} = $size if $size;

    my $offset = $prefs->Timezone || 0;
    my $displayDate = $date;
    if ($event and $offset) {
        $displayDate = $event->getDisplayDate ($date, $offset);
    }

    my $theDate = $cgi->font (\%fontHash, $displayDate->pretty ($i18n));

    if ($event and $event->isRepeating and $event->repeatInfo->bannerize) {
        my $start = $event->getDisplayDate ($event->repeatInfo->startDate);
        my $end   = $event->getDisplayDate ($event->repeatInfo->endDate);
        $theDate = $cgi->font (\%fontHash,
                               $start->pretty ($i18n) . ' - ' .
                               $end->pretty ($i18n));
        $date = $start;
    }

    if ($event && $event->hasTime) {
        my $text;
        if (!$offset) {
            $text = $event->getTimeString ('both', $prefs) || '';
        } else {
            my $milTime = $prefs->MilitaryTime;
            my ($start, $end) = $event->getDisplayTime ($offset);
            $text = Event->getTimeString ($start, $milTime) || '';
            if (defined $end) {
                $text .= ' - ' . Event->getTimeString ($end, $milTime);
            }
        }
        if ($event->timePeriod) {
            my ($name, $s, $e, $which) =
                                $prefs->getTimePeriod ($event->timePeriod);
            if ($name) {
                $text = $name . ": $text";
            }
        }
        $theDate .= '<br>' . $cgi->font (\%fontHash, $text);
    }

    print $cgi->table ({-bgcolor => $dateBG}, Tr (td ($theDate)));
    print '<p>';

    my $messageFace = '';

    if ($event) {
        my $escapeIt = $prefs->EventHTML =~ /none/;
        my $text = $event->escapedText ($escapeIt, 'newWindow');
        ($face, $size) = $prefs->font ('PopupEvent');
        undef %fontHash;
        $fontHash{-face} = $face if $face;
        $fontHash{-size} = $size if $size;
        print $cgi->font (\%fontHash, $text);

        print '<p>';
        $text = $event->escapedPopup ($escapeIt, 'newWindow');
        ($face, $size) = $prefs->font ('PopupText');
        undef %fontHash;
        $fontHash{-face} = $face if $face;
        $fontHash{-size} = $size if $size;
        print $cgi->font (\%fontHash, $text);
        print '</p>';

        $messageFace = $face || '';

        my $today = Date->new;
        if (Defines->mailEnabled and $prefs->RemindersOn and $date > $today) {
            print '<hr width="50%">';

            my ($email, $doIt) = $self->getParams (qw (EmailAddress
                                                       SubscribeMe));
            if ($doIt) {
                SUBSCRIBE: {
                    if (!$email or $email =~ /[\s,]/) {
                        print $cgi->font ({-face => $messageFace},
                          $i18n->get ("Please enter a single email address."));
                        last SUBSCRIBE;
                    }

                    my @all = $prefs->getRemindAllAddresses;
                    if (grep {lc($email) eq lc ($_)} @all) {
                        print $cgi->font ({-face => $messageFace},
                                          "'$email' " .
                            $i18n->get ('is already signed up to receive ' .
                                        'mail for all events in this ' .
                                        'calendar.'));
                        last SUBSCRIBE;
                    }

                    if (defined $event->category) {
                        my $cats = $prefs->getRemindByCategory;
                        my $addrs = $cats->{$event->category};
                        if ($addrs and grep {lc($email) eq lc ($_)} @$addrs) {
                            print $cgi->font ({-face => $messageFace},
                                              "'$email' " .
                                $i18n->get ('is already signed up to ' .
                                            'receive mail for all events in ' .
                                            'this category.'));
                            last SUBSCRIBE;
                        }
                    }

                    if ($event->isSubscribed ($email, $name)) {
                        print $cgi->font ({-face => $messageFace},
                                          "'$email' " .
                            $i18n->get ('is already signed up to receive' .
                                        ' mail for this event.'));
                        last SUBSCRIBE;
                    }

                    $event->addSubscriber ($email, $name);
                    $db->replaceEvent ($event, $date);
                    print $cgi->font ({-face => $messageFace},
                                      $i18n->get ("Email will be sent to") .
                                      "'$email'" . '.');

                    $self->{audit_subscribed} = $email;
                }
            }

            print '<center>';

            print $cgi->startform;
            my $user = User->getUser ($self->getUsername); # must re-get DB
            my $userEmail = $user ? $user->email : '';
            print '<b>';
            print $cgi->font ({-face => $messageFace},
                              $i18n->get ('Email Address:') . ' ');
            print '</b>';
            print $cgi->textfield (-name      => 'EmailAddress',
                                   -default   => $userEmail,
                                   -size      => 20,
                                   -maxlength => 100);
            print '&nbsp;';
            print $cgi->submit (-name  => 'SubscribeMe',
                                -value => $i18n->get ('Remind Me'));
            print '<br>&nbsp;&nbsp;&nbsp;';
            print $cgi->font ({-size => "-1", -face => $messageFace},
                              $i18n->get ('Sign up to be notified by email ' .
                                          'before this event takes place.'));

            print $cgi->hidden (-name => 'Op',          -value => __PACKAGE__);
            print $cgi->hidden (-name => 'CalendarName',-value => $name);
            print $cgi->hidden (-name => 'Date',-value => "$date");
            print $cgi->hidden (-name => 'ID',-value => $id);
            print $cgi->hidden (-name => 'Source',-value => $source);
            print $cgi->hidden (-name => 'DoneURL', -value => $doneURL)
                if ($doneURL);
            print $cgi->endform;
            print '</center>';
        }

        if ($prefs->PopupExportOn) {
            print '<hr width="50%">';
            my $url = $self->makeURL ({Op           => 'vCalEventExport',
                                       CalendarName => $sourceName,
                                       Date         => $date,
                                       ID           => $id,
                                       AddInName    => $addInName,
                                       FullURL      => 1});
            print '<center>';
            print $cgi->a ({-href => $url},
                           "<font color='$fg' face='$messageFace'>" .
                           $i18n->get ('Download as iCalendar') . '</font>');
            print '</center><br/>';
        }

    } else {
        print $i18n->get ('Warning! This Event has been Deleted.');
    }

    print '</p>';

    if ($doneURL) {
        my $font = "<font color='$fg' face='$messageFace' size='+1'>";
        print $cgi->a ({-href => $doneURL},
                       $font . $i18n->get ('Done') . '</font>');
    } else {
        print $cgi->startform;
        print $cgi->button ({-value   => $i18n->get ('Close'),
                             -onClick => 'window.close()'});
        print $cgi->endform;
    }

    print $cgi->end_html;
}

# if it was a subscription request, override the 'View' default
sub auditType {
    if (shift->{audit_subscribed}) {
        return 'Subscribe';
    }
    return 'View';
}

sub auditString {
    my ($self, $short) = @_;
    my $line =  $self->SUPER::auditString ($short);
    $self->{audit_eventtext} =~ s/\n/\\n/g;
    $line .= ' ' . $self->{audit_date} . ' ' . $self->{audit_eventtext};

    $line .= "\nSubscribed: $self->{audit_subscribed}"
        if ($self->{audit_subscribed});
    return $line;
}

1;

Anon7 - 2021