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

# Calendar Groups

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

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

sub perform {
    my $self = shift;

    my ($addDelete, $newGroupName, $saveCalsEachGroup, $saveGroupsEachCal,
        $displayByGroup, $cancel) =
            $self->getParams (qw (AddDelete NewGroupName
                                  SaveCalsEachGroup SaveGroupsEachCal
                                  DisplayByGroup Cancel));
    my $i18n  = $self->I18N;
    my $prefs = $self->prefs;
    my $message;

    if ($cancel or $self->calendarName) {
        print redirect ($self->makeURL ({Op => 'SysAdminPage'}));
        return;
    }

    my @calendars = sort {lc($a) cmp lc($b)} MasterDB->getAllCalendars;

    if ($addDelete) {
        $self->{audit_formsaved}++;
        my $needToSave;
        if (defined $newGroupName and $newGroupName ne '') {
            $message = $self->_checkName ($newGroupName);
            unless ($message) {
                $prefs->addGroup ($newGroupName) if defined $newGroupName;
                $needToSave++;
            }
        }
        foreach (keys %{$self->{params}}) {
            next unless /^Delete-(.*)/;
            my $group = $1;
            $prefs->deleteGroup ($group);
            $needToSave++;

            # need to go through each calendar, remove this group!
            foreach my $calName (@calendars) {
                my $db = Database->new ($calName);
                my $prefs = $db->getPreferences;
                $prefs->deleteGroup ($group);
                $db->setPreferences ($prefs);
            }
        }
        $self->db->setPreferences ($prefs) if $needToSave;
    }

    if ($saveGroupsEachCal) {
        $self->{audit_formsaved}++;
        foreach (keys %{$self->{params}}) {
            next unless /^GroupsForCal-(.*)/;
            my $calName = $1;
            my @groups = param ($_);
            my $db = Database->new ($calName);
            my $prefs = $db->getPreferences;
            $prefs->setGroups (@groups);
            $db->setPreferences ($prefs);
        }
    } elsif ($saveCalsEachGroup) {
        $self->{audit_formsaved}++;
        # get cals for each group
        my %groupsForCal;
        foreach (keys %{$self->{params}}) {
            next unless /^CalsForGroup-(.*)/;
            my $groupName = $1;
            my @cals = param ($_);
            foreach (@cals) {
                $groupsForCal{$_} ||= [];
                push @{$groupsForCal{$_}}, $groupName;
            }
        }
        # and save groups for each calendar
        foreach (keys %groupsForCal) {
            my $db = Database->new ($_);
            my $prefs = $db->getPreferences;
            $prefs->setGroups (@{$groupsForCal{$_}});
            $db->setPreferences ($prefs);
        }
    }


    # And display (or re-display) the form
    print header;
    print start_html ('-title'   => $i18n->get ('Calendar Groups'),
                            '-bgcolor' => 'white');

    print GetHTML->SysAdminHeader ($i18n, 'Calendar Groups', 1);

    my ($rowBGcolor, $rowBG2);
    $rowBGcolor = '#cccccc';
    $rowBG2     = '#eeeeee';

    # get all groups
    my @groups = sort {lc($a) cmp lc($b)} $prefs->getGroups;
    my @rows;
    foreach (@groups) {
        ($rowBGcolor, $rowBG2) = ($rowBG2, $rowBGcolor);
        push @rows, Tr ({-bgcolor => $rowBGcolor},
                        td ({-align       => 'center',
                             -border      => 1,
                             -cellpadding => 3},
                            checkbox (-name    => "Delete-$_",
                                      -checked => undef,
                                      -label   => '')),
                        td ("   $_"));
    }

    unless (@rows) {
        push @rows, Tr (td ({-colspan => 2,
                             -align   => 'center'},
                            $i18n->get ('No Groups Exist Yet')));
    }

    print startform;

    print h3 ($message) if $message;

    print '<center>';
    print table ({-border      => 2,
                  -cellpadding => 2,
                  -cellspacing => 2},
                 Tr (th ({-colspan => 2, -bgcolor => '#ccccff'},
                         font ({-size => '+1'},
                                $i18n->get ('Add/Delete Groups')))),
                 Tr (th {-bgcolor => "#aaaaaa"},
                     [map {$i18n->get ($_)} ('Delete?', 'Group Name')]),
                 @rows,
                 Tr (td ({-bgcolor => "#eeeeee"},
                         [font ({-size => '-1'},
                                $i18n->get ('Add New Group:')),
                          textfield (-name     => 'NewGroupName',
                                     -size     => 20,
                                     -override => 1,
                                     -default  => '')])));
    print '<br>';
    print submit (-name  => 'AddDelete',
                  -value => $i18n->get ('Add/Delete'));

    print '</center>';
    print "<br><hr width='80%'>";

    # Display list of all Calendars, each a link to another form to set
    # groups for that cal, and List of all Groups, each a similar link.
    print '<blockquote>';
    print h3 ($i18n->get ('Click on a Group to View/Edit member Calendars:'));
    print '<ul>';
    foreach (@groups) {
        print li (a ({-href => $self->makeURL ({Op => 'SysGroupsOneGroup',
                                                GroupName => $_})},
                     $_));
    }
    print '</ul>';
    print '<br>';

    print h3 ($i18n->get ('Or, click on a Calendar to View/Edit ' .
                          'Groups it is in:'));
    print '<ul>';
    foreach (@calendars) {
        print li (a ({-href => $self->makeURL ({Op => 'SysGroupsOneCal',
                                                CalForGroups => $_})},
                     $_));
    }
    print '</ul>';
    print '</blockquote>';

    print '<hr>';
    print submit (-name  => 'Cancel',
                  -value => $i18n->get ('Done'));
    print hidden (-name => 'Op', -value => 'SysGroups');

    print endform;
    print end_html;
}


sub _checkName {
    my $self = shift;
    my $name = shift;

    my $i18n = $self->I18N;
    my $message;

    # Strip leading, trailing whitespace
    $name =~ s/^\s+//;
    $name =~ s/\s+$//;

    if ($name =~ /\W/) {
        $message = $i18n->get ('<font color="red">Error:</font> only '.
                               'letters, digits, and the underscore ' .
                               'are allowed in Group names.');
    } elsif ($name eq '') {
        $message = $i18n->get ('Error: cannot have blank Group name');
    }
    return $message;
}

sub auditString {
    my ($self, $short) = @_;
    return unless $self->{audit_formsaved};
    my $summary =  $self->SUPER::auditString ($short);


    my $message = '-';

    return unless $message;     # don't report if nothing changed

    if ($short) {
        return $summary . " $message";
    } else {
        return $summary . "\n\n$message";
    }
}

1;

Anon7 - 2021