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/AdminGeneral.pm
# Copyright 1999-2003, Fred Steinberg, Brown Bear Software

# General Administration Options - conflicts, event owner only, description
package AdminGeneral;
use strict;

use CGI (':standard');

use Calendar::GetHTML;
use Operation::MultiCal;

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

sub perform {
    my $self = shift;

    my ($save, $cancel) = $self->getParams (qw (Save Cancel));

    if ($cancel) {
        my $op = $self->isSystemOp ? 'SysAdminPage' : 'AdminPage';
        print $self->redir ($self->makeURL({Op => $op}));
        return;
    }

    my $cgi  = new CGI;
    my $i18n = $self->I18N;

    my @names = qw (language description EventHTML conflict pastEdit future
                    owner EventSorting multiAdd tentative remindable syncable
                    timezone);

    my %captions = $self->_getCaptions;

    my ($calendars, $preferences) = $self->getCalsAndPrefs;

    my $override = 1;
    my $message = $self->adminChecks;

    # Save if we're saving
    if (!$message and $save) {
        $override = 0;
        my (%newPrefs, %oldValues);
        foreach (qw (Language Description EventHTML IsSyncable
                     TimeConflicts TimeSeparation NoPastEditing
                     FutureLimit FutureLimitAmount FutureLimitUnits
                     EventOwnerOnly MultiAddUsers MultiAddCals
                     TentativeSubmit RemindersOn DefaultTimezone)) {
            my $value = $self->{params}->{$_};
            $value = 0 if !defined ($value);
            $newPrefs{$_} = $value;
            if ($value ne ($preferences->$_() || '')) {
                $oldValues{$_} = $preferences->$_();      # for auditing
            }
        }

        # If Syncability changed, clear LastSyncID
        if ($newPrefs{IsSyncable} ne ($oldValues{IsSyncable} || '')) {
            $newPrefs{LastRMSyncID} = 0;
        }

        # Sorting is a bit special
        my @sortBy = map {$self->{params}->{"EventSorting-$_"}} 1..3;
        my $sortPref = join ',', @sortBy;
        $newPrefs{EventSorting} = $sortPref;
        if ($sortPref ne ($preferences->EventSorting || '')) {
            $oldValues{EventSorting} = $preferences->EventSorting; # auditing
        }

        # If group, remove prefs that were set to 'Ignore'
        my @modified;
        if ($self->isMultiCal) {
            my %prefMap = (language     => [qw /Language/],
                           description  => [qw /Description/],
                           EventHTML    => [qw /EventHTML/],
                           conflict     => [qw /TimeConflicts TimeSeparation/],
                           pastEdit     => [qw /NoPastEditing/],
                           future       => [qw /FutureLimit FutureLimitAmount
                                                FutureLimitUnits/],
                           owner        => [qw /EventOwnerOnly/],
                           EventSorting => [qw /EventSorting/],
                           multiAdd     => [qw /MultiAddUsers MultiAddCals/],
                           tentative    => [qw /TentativeSubmit/],
                           remindable   => [qw /RemindersOn/],
                           syncable     => [qw /IsSyncable/],
                           timezone     => [qw /DefaultTimezone/]);

            @modified = $self->removeIgnoredPrefs (map   => \%prefMap,
                                                   prefs => \%newPrefs);

            $message = $self->getModifyMessage (cals   => $calendars,
                                                mods   => \@modified,
                                                labels => \%captions);
        }

        foreach (@$calendars) {
            $self->saveForAuditing ($_, \%newPrefs);
            $self->dbByName ($_)->setPreferences (\%newPrefs);
        }
        $self->{audit_formsaved}++;
        $preferences = $self->prefs ('force');

        if ($newPrefs{Language}) {
            $self->{I18N} = undef;
            $i18n = $self->I18N;     # note it is *after* setting new language
            %captions = $self->_getCaptions;
        }
    }

    print $cgi->header;
    print $cgi->start_html ('-title'   => $i18n->get ('General Settings'),
                            '-bgcolor' => 'white');

    print '<center>';
    if (!$self->isSystemOp) {
        print GetHTML->AdminHeader (I18N    => $i18n,
                                    cal     => $self->calendarName || '',
                                    goob    => $self->goobLabel    || '',
                                    group   => $self->groupName    || '',
                                    section => 'General Settings');
    } else {
        print GetHTML->SysAdminHeader ($i18n, 'General Settings');
    }
    print "<h3>$message</h3>" if $message;
    print '</center>';
    print '<br>';

    # Get the prefs we've already got
    my $description    = $preferences->Description     || '';
    my $timeConflicts  = $preferences->TimeConflicts   || 'Allow';
    my $timeSeparation = $preferences->TimeSeparation  || 0;
    my $noPastEditing  = $preferences->NoPastEditing   || 0;
    my $futureLimit    = $preferences->FutureLimit;
    my $futureLimitAmount = ($preferences->FutureLimitAmount || 0) + 0;
    my $futureLimitUnits  = $preferences->FutureLimitUnits || 'months';
    my $ownerOnly         = $preferences->EventOwnerOnly || 0; # true/false
    my $eventHTML         = $preferences->EventHTML || 'any';
    my $eventSorting      = $preferences->EventSorting || 'time,text';
    my $multiAddUsers     = $preferences->MultiAddUsers || 'nobody';
    my $multiAddCals      = $preferences->MultiAddCals  || 'permitted';
    my $tentative         = $preferences->TentativeSubmit || 0; # true/false
    my $isSyncable        = $preferences->IsSyncable      || 0;
    my $remindersOn       = $preferences->RemindersOn     || 0;
    my $timezone          = $preferences->DefaultTimezone || 0;

    my @sortBy = split /,/, $eventSorting;

    my $conflictHelp = $i18n->get ('AdminGeneral_ConflictHelp');
    if ($conflictHelp eq 'AdminGeneral_ConflictHelp') {
        ($conflictHelp =<<'        FNORD') =~ s/^ +//gm;
        You can prevent entry of events that have time conflicts\n
        with existing events, or allow them to be entered.\n
        You may also allow entry of conflicting events, but display a\n
        warning.\n\n

        You can also specify a minimum separation time between events.\n
        For instance, if the separation is specified as 20 minutes, two\n
        events would be considered to conflict if one started 15 minutes\n
        after the other ended. (Note that this setting will be ignored if\n
        Conflicting Events are Allowed.)
        FNORD
    }

    my $HTML_Help = $i18n->get ('AdminGeneral_HTMLHelp');
    if ($HTML_Help eq 'AdminGeneral_HTMLHelp') {
        ($HTML_Help =<<'        ENDHTMLHELP') =~ s/^ +//gm;
        You can choose to prevent HTML tags in Event and Popup Text\n
        from being interpreted by browsers. This can be useful to\n
        prevent events with malicious formatting or embedded scripts\n
        from doing any harm.
        ENDHTMLHELP
    }

    my $multiAddHelp = $i18n->get ('AdminGeneral_MultiAddHelp');
    if ($multiAddHelp eq 'AdminGeneral_MultiAddHelp') {
        ($multiAddHelp =<<'        ENDMULTIHELP') =~ s/^ +//gm;
        These settings specify whether or not the `Add to Which Calendars`\n
        control should appear on the Event Edit Form.\n\n
        You can specify which users will see it:\n
            \t\tNobody:         it will never appear\n
            \t\tCalendar Admin: only users with Admin permission in the 
                                calendar\n
            \t\tSystem Admins:  only users with System Admin permission\n
            \t\tAny User:       it will always appear\n\n
        You also specify which of the calendars that the\n
        user has Add permission in should appear in the list:\n
            \t\tIncluded:      only calendars included into this calendar\n
            \t\tIn Group:      only calendars in the current calendars group\n
            \t\tAll Permitted: All calendars for which the user has Add
                               permission\n
        ENDMULTIHELP
    }

    print startform;

    # If group, allow selecting any calendar we have Admin permission for
    my $calSelector;
    my %onChange = ();
    if ($self->isMultiCal) {
        my $mess;
        ($calSelector, $mess) = $self->calendarSelector;
        print $mess if $mess;

        foreach (@names) {
            $onChange{$_} = $self->getOnChange ($_);
        }
    }

    my %rows;

    my %langHash = I18N->getLanguages;
    my $today = Date->new;
    my $example = $i18n->get ('Example') . ': "'
                       . $i18n->get ('Today is') . ': '
                       . $today->pretty ($i18n) . '"';
    my @langValues = sort {$langHash{$a} cmp $langHash{$b}} keys %langHash;
    $rows{language} = table (Tr (td (
                        popup_menu (-name    => 'Language',
                                    -default => $preferences->Language,
                                    -onChange => $onChange{language},
                                    -override => $override,
                                    -Values  => \@langValues,
                                    -labels  => {map {$_, $langHash{$_}}
                                                    sort keys %langHash})),
                                td ($example)));

    $rows{description} = table (Tr (td (table (Tr (
                td (table (Tr (td (textfield (-name     => 'Description',
                                              -default  => $description,
                                           -onChange => $onChange{description},
                                              -override => $override,
                                              -columns  => 40)),
                               td (font ({size => -2},
                                         $i18n->get (
                                              'This is not displayed on the '.
                                              'calendar; it is used to '     .
                                              'describe the calendar in '    .
                                              'administration and calendar ' .
                                              'selection lists')))))))))));

    my %htmlLabels = (any  => $i18n->get ('process HTML tags normally'),
                      none => $i18n->get ('ignore HTML tags'));
    $rows{EventHTML} = table (Tr (td (
                               popup_menu (-name    => 'EventHTML',
                                           -default => $eventHTML,
                                           -onChange => $onChange{EventHTML},
                                           -override => $override,
                                           -Values  => ['any', 'none'],#'safe'
                                           -labels  => \%htmlLabels)),
                               td (a ({href =>
                                       "JavaScript:alert (\'$HTML_Help\')"},
                                      $i18n->get ('What does this mean?')))));

    my %sortLabels = (time     => $i18n->get ('Start Time'),
                      text     => $i18n->get ('Event Text'),
                      incFrom  => $i18n->get ('Included From'),
                      category => $i18n->get ('Category'));
    my @sortVals = qw /time text incFrom category/;
    $rows{EventSorting} = table ( {-cellpadding => 0, -cellspacing => 0},
                           Tr (th [$i18n->get ("Sort first by:"),
                                   $i18n->get ("then by:"),
                                   $i18n->get ("then by:")]),
                           Tr (
                            td (popup_menu (-name    => 'EventSorting-1',
                                            -default => $sortBy[0],
                                          -onChange => $onChange{EventSorting},
                                            -override => $override,
                                            -Values  => \@sortVals,
                                            -labels  => \%sortLabels)),
                            td (popup_menu (-name    => 'EventSorting-2',
                                            -default => $sortBy[1],
                                          -onChange => $onChange{EventSorting},
                                            -override => $override,
                                            -Values  => ['-', @sortVals],
                                            -labels  => \%sortLabels)),
                            td (popup_menu (-name    => 'EventSorting-3',
                                            -default => $sortBy[2],
                                          -onChange => $onChange{EventSorting},
                                            -override => $override,
                                            -Values  => ['-', @sortVals],
                                            -labels  => \%sortLabels))));

    $rows{conflict} = table (
       Tr (td (table (Tr (td (popup_menu ('-name'    => 'TimeConflicts',
                                          '-default' => $timeConflicts,
                                          -onChange => $onChange{conflict},
                                          -override => $override,
                                          '-values'  => ['Allow', 'Prevent',
                                                         'Warn'],
                                          '-labels'  => {'Allow' =>
                                                          $i18n->get ('Allow'),
                                                         'Prevent' =>
                                                         $i18n->get
                                                             ("Don't Allow"),
                                                         'Warn' =>
                                                           $i18n->get ('Warn')}
                                                        )),
                          td ({align => 'right'},
                              b ($i18n->get ("Minimum Event Separation") .
                                 ': ')),
                          td ({align => 'left'},
                              popup_menu (-name    => 'TimeSeparation',
                                          -default => $timeSeparation,
                                          -onChange => $onChange{conflict},
                                          -override => $override,
                                          -Values  => [  0,  5, 10, 15, 20,
                                                        25, 30, 35, 40, 45,
                                                        50, 55, 60, 120,180])),
                          td ({align => 'left'},
                              $i18n->get ('minutes')),
                          td ({align => 'right'},
                              a ({href =>
                                    "JavaScript:alert (\'$conflictHelp\')"},
                                 $i18n->get ('What does this mean?')))),
                      ))));

    $rows{pastEdit} = table (Tr (td (checkbox (-name    => 'NoPastEditing',
                                               -checked => $noPastEditing,
                                              -onChange => $onChange{pastEdit},
                                               -override => $override,
                                               -value   => 1,
                                               -label   => ' ' . $i18n->get (
                     'Prevent editing, deleting, or creating events for ' .
                     'dates before today.')))));

    $rows{future} = table (
       Tr (td (table (Tr (td (popup_menu ('-name'    => 'FutureLimit',
                                          '-default' => $futureLimit,
                                           -onChange => $onChange{future},
                                           -override => $override,
                                          '-values'  => ['Allow', 'Prevent',
                                                         'Warn'],
                                          '-labels'  => {'Allow' =>
                                                       $i18n->get ('No Limit'),
                                                         'Prevent' =>
                                                         $i18n->get
                                                           ('Enforce Limit'),
                                                         'Warn' =>
                                                         $i18n->get
                                                           ('Warn')}
                                                        )),
                          td ($i18n->get ("New events must be within") . ': '),
                          td (textfield (-name      => 'FutureLimitAmount',
                                         -default   => $futureLimitAmount,
                                         -onChange  => $onChange{future},
                                         -override => $override,
                                         -size      => 4,
                                         -maxlength => 3)),
                          td (popup_menu (-name    => 'FutureLimitUnits',
                                          -default => $futureLimitUnits,
                                          -onChange => $onChange{future},
                                          -override => $override,
                                          -Values  => [ 'day', 'week',
                                                        'month', 'year' ],
                                          -labels  => {
                                              day   => $i18n->get ('Day(s)'),
                                              week  => $i18n->get ('Week(s)'),
                                              month => $i18n->get ('Month(s)'),
                                              year  => $i18n->get ('Year(s)') }
                                         )),
                          td ($i18n->get ("of today's date.")))))));
    $rows{owner} = table (Tr (td (checkbox (-name    => 'EventOwnerOnly',
                                            -checked => $ownerOnly,
                                            -onChange => $onChange{owner},
                                            -override => $override,
                                            -value   => 1,
                                            -label   => ' ' . $i18n->get (
                                                 'Permit only the creator ' .
                                                 'of an event to Edit '  .
                                                 'or Delete it')))));
    $rows{multiAdd} = table (Tr (
                          td ({align => 'right'},
                              $i18n->get ('Allow which users') . ':'),
                          td ({align => 'left'},
                              popup_menu ('-name'    => 'MultiAddUsers',
                                          '-default' => $multiAddUsers,
                                           -onChange => $onChange{multiAdd},
                                           -override => $override,
                                          '-values'  => ['nobody',
                                                         'caladmin',
                                                         'sysadmin',
                                                         'anyone'],
                                          '-labels'  => {'sysadmin' =>
                                             $i18n->get ('System Admins'),
                                                         'anyone' =>
                                             $i18n->get ("Any User"),
                                                         'caladmin' =>
                                             $i18n->get ("Calendar Admins"),
                                                         'nobody' =>
                                             $i18n->get ("Nobody")}
                                                        )),
                          td ({align => 'right'},
                              $i18n->get ("List which calendars") . ': '),
                          td ({align => 'left'},
                              popup_menu (-name    => 'MultiAddCals',
                                          -default => $multiAddCals,
                                          -onChange => $onChange{multiAdd},
                                          -override => $override,
                                          -Values  => ['included',
                                                       'ingroup',
                                                       'permitted'],
                                          -labels  => {permitted =>
                                                 $i18n->get ('All Permitted'),
                                                       ingroup   =>
                                                 $i18n->get ('In Group'),
                                                       included  =>
                                                 $i18n->get ('Included')})),
                          td ({align => 'right'},
                              a ({href =>
                                    "JavaScript:alert (\'$multiAddHelp\')"},
                                 $i18n->get ('What does this mean?')))));

    my $tent = 'Events added by unprivileged users will not appear until ' .
               'approved';
    $rows{tentative} = table (Tr (td (checkbox (-name    => 'TentativeSubmit',
                                                -checked => $tentative,
                                             -onChange => $onChange{tentative},
                                                -override => $override,
                                                -value   => 1,
                                                -label   => ' ' .
                                                $i18n->get ($tent)))));

    $rows{syncable} = table (Tr (td (checkbox (-name    => 'IsSyncable',
                                               -checked => $isSyncable,
                                              -onChange => $onChange{syncable},
                                               -override => $override,
                                               -value   => 1,
                                               -label   => ' ' . $i18n->get (
                                                 'Allow Synchronizing with ' .
                                                 'TripleSync and Palm ' .
                                                 'Handhelds')))));
    my $disabled = '';
    if (!Defines->mailEnabled) {
        $disabled = '<i>' . $i18n->get ('Disabled in this version') . '</i>';
        $remindersOn = 0;
    }
    $rows{remindable} = table (Tr (td (checkbox (-name     => 'RemindersOn',
                                                 -checked  => $remindersOn,
                                            -onChange => $onChange{remindable},
                                                 -override => 1,
                                                 -value    => 1,
                                                 -label    => '')),
                                   td ($i18n->get
                                       ('Enable subscriptions for this '    .
                                        'calendar; anyone can sign up for ' .
                                        'event email reminders')),
                                   td ($disabled)));

    my $serverTime = time;
    my %labels;
    foreach (-23..23) {
        my @vals = localtime ($serverTime + $_ * 3600);
        my ($s, $m, $h, $w) = @vals[0,1,2,6];
        $labels{$_} = "$_ hours - " .
                       sprintf "%02d:%02d:%02d %s", $h, $m, $s,
                              '(' . $i18n->get (Date->dayName ($w, 'abbrev')) .
                              ')';
    }
    ($serverTime = $labels{0}) =~ s/^.*hours - //;
    $rows{timezone} = table (Tr (td ($i18n->get ('For Anonymous Users')),
                                 td (
                                     popup_menu (-name    => 'DefaultTimezone',
                                                 -default => $timezone,
                                              -onChange => $onChange{timezone},
                                                 -override => $override,
                                                 -Values  => [-23..23],
                                                 -labels  => \%labels)),
                                 td ('&nbsp;&nbsp;' .
                                     $i18n->get ('Server time:')),
                                 td ($serverTime)));

    my $bgcolor = '#dddddd'; 
    my $bg2     = '#eeeeee';
    my @rows;

    foreach (qw (language description EventHTML conflict pastEdit future
                 owner EventSorting multiAdd tentative remindable syncable
                 timezone)) {
        ($bgcolor, $bg2) = ($bg2, $bgcolor);
        push @rows, Tr ({bgcolor => $bgcolor},
                        $self->groupToggle (name  => $_),
                        td ({align => 'right', width => '22%'},
                            b ($captions{$_} . ': ')),
                        td ($rows{$_}));
    }

    print $calSelector if $calSelector;

    # Javascript for 'set all', 'ignore all'
    my ($setAlljs, $setAllRow) = $self->setAllJavascript;
    print $setAlljs;
    push @rows, Tr (td ({-align => 'center'}, $setAllRow)) if $setAllRow;

    print table ({width       => '100%',
                  cellspacing => 0,
                  border      => 0},
                 @rows);

    print '<hr>';

    print submit (-name => 'Save',   -value => $i18n->get ('Save'));
    print '&nbsp;';
    print submit (-name => 'Cancel', -value => $i18n->get ('Done'));
    print '&nbsp;';
    print reset  (-value => $i18n->get ('Reset'));

    print $self->hiddenParams;

    print endform;
    print $self->helpNotes;
    print $cgi->end_html;
}

sub _getCaptions {
    my $self = shift;
    my $i18n = $self->I18N;
    return (description  => $i18n->get ('Description'),
            language     => $i18n->get ('Language'),
            EventHTML    => $i18n->get ('HTML in Events'),
            EventSorting => $i18n->get ('Event Sorting'),
            conflict     => $i18n->get ('Time Conflicts'),
            pastEdit     => $i18n->get ('Past Event Protection'),
            future       => $i18n->get ('Future Event Limit'),
            owner        => $i18n->get ('Event Ownership'),
            multiAdd     => $i18n->get ('Add to Multiple Calendars'),
            syncable     => $i18n->get ('Synching'),
            remindable   => $i18n->get ('Subscriptions'),
            tentative    => $i18n->get ('Require Approval'),
            timezone     => $i18n->get ('Default Timezone Offset'));
}

1;

Anon7 - 2021