|
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 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;