version 1.5, 2006/02/18 01:27:07
|
version 1.19, 2006/05/18 18:35:13
|
Line 30 use Apache::loncommon;
|
Line 30 use Apache::loncommon;
|
use Apache::lonhtmlcommon; |
use Apache::lonhtmlcommon; |
use Apache::lonlocal; |
use Apache::lonlocal; |
use Apache::lonnavmaps; |
use Apache::lonnavmaps; |
|
use Apache::longroup; |
use Apache::Constants qw(:common :http); |
use Apache::Constants qw(:common :http); |
|
|
sub handler { |
sub handler { |
Line 37 sub handler {
|
Line 38 sub handler {
|
|
|
&Apache::loncommon::content_type($r,'text/html'); |
&Apache::loncommon::content_type($r,'text/html'); |
$r->send_http_header; |
$r->send_http_header; |
|
|
if ($r->header_only) { |
if ($r->header_only) { |
return OK; |
return OK; |
} |
} |
Line 88 sub handler {
|
Line 89 sub handler {
|
\%functions,\%idx,$view_permission, |
\%functions,\%idx,$view_permission, |
$manage_permission,$rowColor1,$rowColor2); |
$manage_permission,$rowColor1,$rowColor2); |
} else { |
} else { |
$r->print('You do not have group administration '. |
$r->print(&mt('You do not have group administration '. |
'privileges in this course'); |
'privileges in this course')); |
} |
} |
} else { |
} else { |
&print_main_menu($r,$cdom,$cnum,$function,$tabcol,\%functions,\%idx, |
&print_main_menu($r,$cdom,$cnum,$function,$tabcol,\%functions,\%idx, |
Line 102 sub handler {
|
Line 103 sub handler {
|
sub print_main_menu { |
sub print_main_menu { |
my ($r,$cdom,$cnum,$function,$tabcol,$functions,$idx,$view_permission, |
my ($r,$cdom,$cnum,$function,$tabcol,$functions,$idx,$view_permission, |
$manage_permission,$action,$rowColor1,$rowColor2) = @_; |
$manage_permission,$action,$rowColor1,$rowColor2) = @_; |
$r->print(&header('Course Groups',&mt('LON-CAPA Course Groups'), |
$r->print(&header('Course Groups',undef,undef,undef,undef,$function)); |
undef,undef,undef,undef,$function)); |
|
&Apache::lonhtmlcommon::add_breadcrumb |
&Apache::lonhtmlcommon::add_breadcrumb |
({href=>"/adm/coursegroups", |
({href=>"/adm/coursegroups", |
text=>"Course Groups",}); |
text=>"Course Groups",}); |
$r->print(&Apache::lonhtmlcommon::breadcrumbs |
$r->print(&Apache::lonhtmlcommon::breadcrumbs('Course Groups')); |
(undef,'Course Groups')); |
|
&display_groups($r,$cdom,$cnum,$function,$tabcol,$functions,$idx, |
&display_groups($r,$cdom,$cnum,$function,$tabcol,$functions,$idx, |
$view_permission,$manage_permission,$action,$rowColor1, |
$view_permission,$manage_permission,$action,$rowColor1, |
$rowColor2); |
$rowColor2); |
Line 129 sub display_groups {
|
Line 128 sub display_groups {
|
delete => '<a href="/adm/coursegroups?action=delete&refpage='. |
delete => '<a href="/adm/coursegroups?action=delete&refpage='. |
$env{'form.refpage'}.'&groupname=', |
$env{'form.refpage'}.'&groupname=', |
); |
); |
my %actiontext = &Apache::lonlocal::texthash( |
my %lt = &Apache::lonlocal::texthash( |
modify => 'Modify', |
modify => 'Modify', |
view => 'View', |
view => 'View', |
delete => 'Delete', |
delete => 'Delete', |
); |
act => 'Action', |
$r->print('<br /><br />'); |
gname => 'Group Name', |
|
desc => 'Description', |
|
crea => 'Creator', |
|
crtd => 'Created', |
|
last => 'Last Modified', |
|
func => 'Functionality', |
|
quot => 'Quota (Mb)', |
|
memb => 'Members', |
|
file => 'Files', |
|
dibd => 'Discussion Boards', |
|
dius => 'Disk Use', |
|
nogr => 'No groups exist.', |
|
crng => 'Create a new group', |
|
alth => 'Although your current role has privileges'. |
|
' to view any existing groups in this course,'. |
|
' you do not have privileges to create new'. |
|
' groups.', |
|
); |
if ($view_permission) { |
if ($view_permission) { |
if (!defined($action)) { |
if (!defined($action)) { |
$action = 'view'; |
$action = 'view'; |
} |
} |
my %curr_groups; |
my %curr_groups = &Apache::longroup::coursegroups($cdom,$cnum); |
if (&Apache::loncommon::coursegroups(\%curr_groups,$cdom,$cnum)) { |
if (%curr_groups) { |
|
$r->print('<br /><br />'); |
$r->print(&Apache::lonhtmlcommon::start_pick_box()); |
$r->print(&Apache::lonhtmlcommon::start_pick_box()); |
$r->print(<<"END"); |
$r->print(<<"END"); |
<table border="0" cellpadding="4" cellspacing="1"> |
<table border="0" cellpadding="4" cellspacing="1"> |
<tr bgcolor="$tabcol" align="center"> |
<tr bgcolor="$tabcol" align="center"> |
<td><b>Action</b></td> |
<td><b>$lt{'act'}</b></td> |
<td><b><a href="javascript:changeSort('groupname')">Group Name</a></b></td> |
<td><b><a href="javascript:changeSort('groupname')">$lt{'gname'}</a></b></td> |
<td><b><a href="javascript:changeSort('description')">Description</a></b></td> |
<td><b><a href="javascript:changeSort('description')">$lt{'desc'}</a></b></td> |
<td><b><a href="javascript:changeSort('creator')">Creator</a></b> |
<td><b><a href="javascript:changeSort('creator')">$lt{'crea'}</a></b> |
</td> |
</td> |
<td><b><a href="javascript:changeSort('creation')">Created</a></b> |
<td><b><a href="javascript:changeSort('creation')">$lt{'crtd'}</a></b> |
</td> |
</td> |
<td><b><a href="javascript:changeSort('modified')">Last Modified</a></b> |
<td><b><a href="javascript:changeSort('modified')">$lt{'last'}</a></b> |
</td> |
</td> |
<td><b>Functionality</b> |
<td><b>$lt{'func'}</b> |
</td> |
</td> |
<td><b><a href="javascript:changeSort('quota')">Quota (Mb)</a></b></td> |
<td><b><a href="javascript:changeSort('quota')">$lt{'quot'}</a></b></td> |
<td><b><a href="javascript:changeSort('totalmembers)">Members</a></b></td> |
<td><b><a href="javascript:changeSort('totalmembers)">$lt{'memb'}</a></b></td> |
<td><b><a href="javascript:changeSort('totalfiles')">Files</a></b></td> |
<td><b><a href="javascript:changeSort('totalfiles')">$lt{'file'}</a></b></td> |
<td><b><a href="javascript:changeSort('boards')">Discussion boards</a></b></td> |
<td><b><a href="javascript:changeSort('boards')">$lt{'dibd'}</a></b></td> |
<td><b><a href="javascript:changeSort('diskuse')">Disk use</a></b></td> |
<td><b><a href="javascript:changeSort('diskuse')">$lt{'dius'}</a></b></td> |
</tr> |
</tr> |
END |
END |
my %Sortby = (); |
my %Sortby = (); |
foreach my $group (sort(keys(%curr_groups))) { |
foreach my $group (sort(keys(%curr_groups))) { |
%{$grp_info{$group}} = |
%{$grp_info{$group}} = |
&Apache::loncommon::get_group_settings( |
&Apache::longroup::get_group_settings( |
$curr_groups{$group}); |
$curr_groups{$group}); |
my $members_result = &group_members($cdom,$cnum,$group, |
my $members_result = &group_members($cdom,$cnum,$group, |
\%grp_info); |
\%grp_info); |
Line 218 END
|
Line 235 END
|
my $diskuse = $grp_info{$group}{'diskuse'}; |
my $diskuse = $grp_info{$group}{'diskuse'}; |
my $functionality; |
my $functionality; |
foreach my $tool (sort(keys(%{$functions}))) { |
foreach my $tool (sort(keys(%{$functions}))) { |
if (defined($grp_info{$group}{functions}{$tool})) { |
if ($grp_info{$group}{functions}{$tool} eq 'on') { |
$functionality .= ' '.$tool; |
$functionality .= ' '.$tool; |
} |
} |
} |
} |
if (!$functionality) { |
if (!$functionality) { |
$functionality = 'None available'; |
$functionality = &mt('None available'); |
} |
} |
my $link = $actionlinks{$action}; |
my $link = $actionlinks{$action}; |
if ($action eq 'modify' || $action eq 'delete') { |
if ($action eq 'modify' || $action eq 'delete') { |
$link .= $group; |
$link .= $group; |
} else { |
} else { |
$link .= $group.'/grppg?register=1'; |
$link .= $group.'/grppg'; |
} |
} |
$link .= '">'.$actiontext{$action}.'</a>'; |
$link .= '">'.$lt{$action}.'</a>'; |
$r->print('<tr bgcolor="'.$rowColor.'"><td><small>'.$link.'</small></td><td><small>'.$group.'</small></td><td><small>'.$description.'</small></td><td><small>'.$creator.'</small></td><td><small>'. &Apache::lonnavmaps::timeToHumanString($creation).'</small></td><td><small>'. &Apache::lonnavmaps::timeToHumanString($modified).'</small></td><td><small>'.$functionality.'</small></td><td><small>'.$quota.'</small></td><td><small>'.$totalmembers.'</small></td><td><small>'.$totalfiles.'</small></td><td><small>'.$boards.'</small></td><td><small>'.$diskuse.'</small></td></tr>'); |
$r->print('<tr bgcolor="'.$rowColor.'"><td><small>'.$link.'</small></td><td><small>'.$group.'</small></td><td><small>'.$description.'</small></td><td><small>'.$creator.'</small></td><td><small>'. &Apache::lonnavmaps::timeToHumanString($creation).'</small></td><td><small>'. &Apache::lonnavmaps::timeToHumanString($modified).'</small></td><td><small>'.$functionality.'</small></td><td><small>'.$quota.'</small></td><td><small>'.$totalmembers.'</small></td><td><small>'.$totalfiles.'</small></td><td><small>'.$boards.'</small></td><td><small>'.$diskuse.'</small></td></tr>'); |
$rowNum ++; |
$rowNum ++; |
} |
} |
Line 239 END
|
Line 256 END
|
$r->print('</table>'); |
$r->print('</table>'); |
$r->print(&Apache::lonhtmlcommon::end_pick_box()); |
$r->print(&Apache::lonhtmlcommon::end_pick_box()); |
} else { |
} else { |
$r->print('No groups exist'); |
$r->print($lt{'nogr'}); |
|
if ($manage_permission) { |
|
$r->print('<br /><br /><a href="/adm/coursegroups?action=create&refpage='.$env{'form.refpage'}.'">'.$lt{'crng'}.'</a>'); |
|
} else { |
|
$r->print('<br /><br />'.$lt{'crng'}); |
|
|
|
} |
} |
} |
} else { |
} else { |
my @coursegroups = split(/:/,$env{'request.course.groups'}); |
my @coursegroups = split(/:/,$env{'request.course.groups'}); |
if (@coursegroups > 0) { |
if (@coursegroups > 0) { |
my %curr_groups; |
$r->print('<br /><br />'); |
if (&Apache::loncommon::coursegroups(\%curr_groups,$cdom,$cnum)) { |
my %curr_groups = &Apache::longroup::coursegroups($cdom,$cnum); |
|
if (%curr_groups) { |
foreach my $group (@coursegroups) { |
foreach my $group (@coursegroups) { |
my %group_info = &Apache::loncommon::get_group_settings( |
my %group_info = &Apache::longroup::get_group_settings( |
$curr_groups{$group}); |
$curr_groups{$group}); |
my $description = &Apache::lonnet::unescape( |
my $description = &Apache::lonnet::unescape( |
$group_info{description}); |
$group_info{description}); |
my ($uname,$udom) = split(/:/,$group_info{creator}); |
my ($uname,$udom) = split(/:/,$group_info{creator}); |
$r->print('<font size="+1"><a href="/adm/'.$udom.'/'.$uname.'/'.$group.'/grppg?register=1">'.$group,'</a><font><br /><small>'.$description.'</small><br /><br />'); |
$r->print('<font size="+1"><a href="/adm/'.$udom.'/'.$uname.'/'.$group.'/grppg">'.$group,'</a><font><br /><small>'.$description.'</small><br /><br />'); |
} |
} |
} |
} |
} else { |
} else { |
$r->print('You are not currently a member of any active groups in this course'); |
$r->print(&mt('You are not currently a member of any '. |
|
'active groups in this course')); |
} |
} |
} |
} |
return; |
return; |
Line 276 sub group_administration {
|
Line 301 sub group_administration {
|
my %usertools = (); |
my %usertools = (); |
my %stored = (); |
my %stored = (); |
my %memchg; |
my %memchg; |
my @member_changes = ('delete','expire','activate','reenable', |
my @member_changes = ('deletion','expire','activate','reenable', |
'changefunc','changepriv'); |
'changefunc','changepriv'); |
my $state = $env{'form.state'}; |
my $state = $env{'form.state'}; |
my ($groupname,$description,$startdate,$enddate,$granularity,$specificity); |
my ($groupname,$description,$startdate,$enddate,$granularity,$specificity); |
Line 315 sub group_administration {
|
Line 340 sub group_administration {
|
} |
} |
} |
} |
|
|
if (($action eq 'modify') && (($state eq 'change_privs') || ($state eq 'memresult'))) { |
|
foreach my $chg (@member_changes) { |
|
if (defined($env{'form.'.$chg})) { |
|
@{$memchg{$chg}} = &Apache::loncommon::get_env_multiple('form.'.$chg); |
|
} |
|
} |
|
&check_changes(\@member_changes,\%memchg); |
|
foreach my $change (@member_changes) { |
|
if (($change eq 'delete') || ($change eq 'expire')) { |
|
next; |
|
} |
|
foreach my $user (@{$memchg{$change}}) { |
|
%{$usertools{$user}} = (); |
|
} |
|
} |
|
} |
|
|
|
if ($action eq 'modify') { |
if ($action eq 'modify') { |
if ($state eq '') { |
if ($state eq '') { |
$state = 'pick_group'; |
$state = 'pick_group'; |
Line 426 sub group_administration {
|
Line 434 sub group_administration {
|
); |
); |
if (ref($stored{'autorole'}) eq 'ARRAY') { |
if (ref($stored{'autorole'}) eq 'ARRAY') { |
foreach my $role (@{$stored{'autorole'}}) { |
foreach my $role (@{$stored{'autorole'}}) { |
$elements{'modify'}{'change_settings'}{'sec_'.$role} = 'selectbox'; |
unless ($role eq 'cc') { |
|
$elements{'modify'}{'change_settings'}{'sec_'.$role} = |
|
'selectbox'; |
|
} |
} |
} |
} |
} |
%{$elements{'create'}{'pick_members'}} = ( |
%{$elements{'create'}{'pick_members'}} = ( |
Line 447 sub group_administration {
|
Line 458 sub group_administration {
|
(($state eq 'pick_name') || ($state eq 'pick_privs'))) || |
(($state eq 'pick_name') || ($state eq 'pick_privs'))) || |
(($action eq 'modify') && (($state eq 'change_settings') || |
(($action eq 'modify') && (($state eq 'change_settings') || |
($state eq 'add_members')))) { |
($state eq 'add_members')))) { |
my $numsections = &Apache::loncommon::get_sections($cdom,$cnum, |
%sectioncount = &Apache::loncommon::get_sections($cdom,$cnum); |
\%sectioncount); |
if (%sectioncount) { |
if ($numsections > 0) { |
|
$elements{'create'}{'pick_name'}{'sectionpick'} = 'selectbox'; |
$elements{'create'}{'pick_name'}{'sectionpick'} = 'selectbox'; |
$elements{'modify'}{'change_mapping'}{'sectionpick'} = 'selectbox'; |
$elements{'modify'}{'change_mapping'}{'sectionpick'} = 'selectbox'; |
$elements{'modify'}{'add_members'}{'sectionpick'} = 'selectbox'; |
$elements{'modify'}{'add_members'}{'sectionpick'} = 'selectbox'; |
} |
} |
} |
} |
|
|
if ($action eq 'create') { |
if (($action eq 'create') || |
|
($action eq 'modify' && $state eq 'pick_members')) { |
if (defined($env{'form.types'})) { |
if (defined($env{'form.types'})) { |
@types=&Apache::loncommon::get_env_multiple('form.types'); |
@types=&Apache::loncommon::get_env_multiple('form.types'); |
} |
} |
Line 471 sub group_administration {
|
Line 482 sub group_administration {
|
} |
} |
} |
} |
|
|
if (($state eq 'pick_members') || ($state eq 'pick_privs')) { |
if (($state eq 'pick_members') || ($state eq 'pick_privs') || ($state eq 'change_privs')) { |
&build_members_list($cdom,$cnum,\@types,\@roles, |
&build_members_list($cdom,$cnum,\@types,\@roles,\@sections,\%users, |
\@sections,\%users,\%userdata); |
\%userdata); |
|
} |
|
if ($state eq 'pick_members') { |
if ((keys(%users) > 0) && (@tools > 0)) { |
if ((keys(%users) > 0) && (@tools > 0)) { |
|
if ($granularity eq 'Yes') { |
|
$elements{$action}{'pick_members'}{'togglefunc'} = 'checkbox'; |
|
} |
foreach my $tool (@tools) { |
foreach my $tool (@tools) { |
if ($granularity eq 'Yes') { |
if ($granularity eq 'Yes') { |
$elements{$action}{'pick_members'}{'user_'.$tool} = 'checkbox'; |
$elements{$action}{'pick_members'}{'user_'.$tool} = 'checkbox'; |
Line 483 sub group_administration {
|
Line 499 sub group_administration {
|
$elements{$action}{'pick_members'}{'specificity'} = 'radio'; |
$elements{$action}{'pick_members'}{'specificity'} = 'radio'; |
} |
} |
} |
} |
|
if ($state eq 'change_members') { |
|
my %membership = &Apache::lonnet::get_group_membership($cdom,$cnum, |
|
$groupname); |
|
my $now = time; |
|
my $num_expire = 0; |
|
my $num_activate = 0; |
|
my $num_reenable = 0; |
|
my $num_deletion = 0; |
|
my $numusers = 0; |
|
foreach my $key (sort(keys(%membership))) { |
|
if ($key =~ /^\Q$groupname\E:([^:]+:[^:]+)$/) { |
|
my $user = $1; |
|
my($end,$start,@userprivs) = split(/:/,$membership{$key}); |
|
unless ($start == -1) { |
|
$numusers ++; |
|
$num_deletion ++; |
|
if (($end > 0) && ($end < $now)) { |
|
$num_reenable ++; |
|
next; |
|
} elsif (($start > $now)) { |
|
$num_activate = 1; |
|
next; |
|
} else { |
|
$num_expire ++; |
|
next; |
|
} |
|
next; |
|
} |
|
if ($num_reenable && $num_activate && $num_expire) { |
|
last; |
|
} |
|
} |
|
} |
|
if ($num_deletion) { |
|
$elements{$action}{'change_members'}{'deletion'} = 'checkbox'; |
|
} |
|
if ($num_expire) { |
|
$elements{$action}{'change_members'}{'expire'} = 'checkbox'; |
|
} |
|
if ($num_activate) { |
|
$elements{$action}{'change_members'}{'activate'} = 'checkbox'; |
|
} |
|
if ($num_reenable) { |
|
$elements{$action}{'change_members'}{'reenable'} = 'checkbox'; |
|
} |
|
if ($numusers) { |
|
if ($granularity eq 'Yes') { |
|
$elements{$action}{'change_members'}{'togglefunc'} = 'checkbox'; |
|
} |
|
foreach my $tool (@tools) { |
|
if ($granularity eq 'Yes') { |
|
$elements{$action}{'change_members'}{'user_'.$tool} = 'checkbox'; |
|
} |
|
} |
|
if ($specificity eq 'Yes') { |
|
$elements{$action}{'change_members'}{'changepriv'} = 'checkbox'; |
|
} |
|
} |
|
} |
|
|
if (($state eq 'pick_privs') || ($state eq 'change_privs') || |
if (($state eq 'pick_privs') || ($state eq 'change_privs') || |
(($specificity eq 'No') && |
(($specificity eq 'No') && |
Line 495 sub group_administration {
|
Line 570 sub group_administration {
|
} |
} |
} |
} |
} |
} |
if ((($state eq 'pick_privs') || ($state eq 'change_privs')) |
} |
&& ($specificity eq 'Yes')) { |
|
foreach my $user (sort(keys(%usertools))) { |
if (($action eq 'modify') && (($state eq 'change_privs') || ($state eq 'memresult'))) { |
foreach my $tool (keys(%{$usertools{$user}})) { |
foreach my $chg (@member_changes) { |
foreach my $priv (keys(%{$toolprivs{$tool}})) { |
if (defined($env{'form.'.$chg})) { |
unless (exists($fixedprivs{$tool}{$priv})) { |
@{$memchg{$chg}} = &Apache::loncommon::get_env_multiple('form.'.$chg); |
$elements{$action}{$state}{'userpriv_'.$priv} = 'checkbox'; |
} |
|
} |
|
|
|
if ($state eq 'change_privs') { |
|
my %membership = &Apache::lonnet::get_group_membership($cdom,$cnum, |
|
$groupname); |
|
my $now = time; |
|
foreach my $key (sort(keys(%membership))) { |
|
if ($key =~ /^\Q$groupname\E:([^:]+:[^:]+)$/) { |
|
my $user = $1; |
|
my $changefunc = 0; |
|
my ($end,$start,@userprivs) = split(/:/,$membership{$key}); |
|
unless ($start == -1) { |
|
if (($end > 0) && ($end < $now)) { |
|
unless (grep/^$user$/,$memchg{'reenable'}) { |
|
next; |
|
} |
|
} |
|
my @currtools = (); |
|
if (@userprivs > 0) { |
|
foreach my $tool (sort(keys(%fixedprivs))) { |
|
foreach my $priv (keys(%{$fixedprivs{$tool}})) { |
|
if (grep/^$priv$/,@userprivs) { |
|
push(@currtools,$tool); |
|
last; |
|
} |
|
} |
|
} |
|
} |
|
foreach my $tool (@currtools) { |
|
if (keys(%{$usertools{$user}}) > 0) { |
|
if (!$usertools{$user}{$tool}) { |
|
push(@{$memchg{'changefunc'}},$user); |
|
$changefunc = 1; |
|
last; |
|
} |
|
} else { |
|
push(@{$memchg{'changefunc'}},$user); |
|
$changefunc = 1; |
|
} |
|
} |
|
if ($changefunc) { |
|
next; |
|
} |
|
if (keys(%{$usertools{$user}}) > 0) { |
|
foreach my $tool (keys(%{$usertools{$user}})) { |
|
if (!grep/^$tool$/,@currtools) { |
|
push(@{$memchg{'changefunc'}},$user); |
|
$changefunc = 1; |
|
last; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
&check_changes(\@member_changes,\%memchg); |
|
my %temptools; |
|
foreach my $change (@member_changes) { |
|
if (($change eq 'deletion') || ($change eq 'expire')) { |
|
next; |
|
} |
|
foreach my $user (@{$memchg{$change}}) { |
|
unless (exists($usertools{$user})) { |
|
%{$usertools{$user}} = (); |
|
} |
|
%{$temptools{$user}} = %{$usertools{$user}}; |
|
} |
|
} |
|
%usertools = %temptools; |
|
} elsif ($state eq 'memresult') { |
|
foreach my $change (@member_changes) { |
|
if ($change eq 'expire' || $change eq 'deletion') { |
|
next; |
|
} |
|
if (ref($memchg{$change}) eq 'ARRAY') { |
|
my @users = @{$memchg{$change}}; |
|
foreach my $user (@users) { |
|
unless (exists($usertools{$user})) { |
|
%{$usertools{$user}} = (); |
} |
} |
} |
} |
} |
} |
} |
} |
} |
} |
} |
} |
|
|
|
if ((($state eq 'pick_privs') || ($state eq 'change_privs')) |
|
&& ($specificity eq 'Yes')) { |
|
foreach my $user (sort(keys(%usertools))) { |
|
foreach my $tool (keys(%{$usertools{$user}})) { |
|
foreach my $priv (keys(%{$toolprivs{$tool}})) { |
|
unless (exists($fixedprivs{$tool}{$priv})) { |
|
$elements{$action}{$state}{'userpriv_'.$priv} = 'checkbox'; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
|
my $jscript = &Apache::loncommon::check_uncheck_jscript(); |
my $jscript = &Apache::loncommon::check_uncheck_jscript(); |
$jscript .= qq| |
$jscript .= qq| |
Line 519 function backPage(formname,prevstate) {
|
Line 686 function backPage(formname,prevstate) {
|
formname.state.value = prevstate; |
formname.state.value = prevstate; |
formname.submit(); |
formname.submit(); |
} |
} |
|
function changeSort(caller) { |
|
document.$state.state.value = '$state'; |
|
document.$state.sortby.value = caller; |
|
document.$state.submit(); |
|
} |
|
|
|; |
|; |
$jscript .= &Apache::lonhtmlcommon::set_form_elements( |
$jscript .= &Apache::lonhtmlcommon::set_form_elements( |
\%{$elements{$action}{$state}},\%stored); |
\%{$elements{$action}{$state}},\%stored); |
Line 551 function backPage(formname,prevstate) {
|
Line 723 function backPage(formname,prevstate) {
|
} |
} |
|
|
my $loaditems = &onload_action($action,$state); |
my $loaditems = &onload_action($action,$state); |
$r->print(&header('Course Groups Manager',&mt('LON-CAPA Groups Manager'), |
$r->print(&header('Course Groups Manager', |
$jscript,$action,$state,$page,$function,$loaditems)); |
$jscript,$action,$state,$page,$function,$loaditems)); |
|
|
if ($env{'form.refpage'} eq 'enrl') { |
if ($env{'form.refpage'} eq 'enrl') { |
&Apache::lonhtmlcommon::add_breadcrumb |
&Apache::lonhtmlcommon::add_breadcrumb |
Line 602 function backPage(formname,prevstate) {
|
Line 774 function backPage(formname,prevstate) {
|
&Apache::lonhtmlcommon::add_breadcrumb( |
&Apache::lonhtmlcommon::add_breadcrumb( |
{text=>"$trail{$action}{$state}"}); |
{text=>"$trail{$action}{$state}"}); |
$r->print(&Apache::lonhtmlcommon::breadcrumbs |
$r->print(&Apache::lonhtmlcommon::breadcrumbs |
(undef,'Course Groups Manager')); |
('Course Groups Manager')); |
&display_control($r,$cdom,$cnum,$tabcol,$action,$state,$page, |
&display_control($r,$cdom,$cnum,$tabcol,$action,$state,$page, |
\%sectioncount,$groupname,$description,$functions, |
\%sectioncount,$groupname,$description,$functions, |
\@tools,\%toolprivs,\%fixedprivs,$startdate,$enddate, |
\@tools,\%toolprivs,\%fixedprivs,$startdate,$enddate, |
Line 612 function backPage(formname,prevstate) {
|
Line 784 function backPage(formname,prevstate) {
|
\@sections,\%states,\%navbuttons,$rowColor1,$rowColor2); |
\@sections,\%states,\%navbuttons,$rowColor1,$rowColor2); |
last; |
last; |
} else { |
} else { |
if (($state =~ /^\w+result$/) && ($i > 0)) { |
if (($state eq 'result') && ($i > 0)) { |
&Apache::lonhtmlcommon::add_breadcrumb( |
&Apache::lonhtmlcommon::add_breadcrumb( |
{href=>"javascript:backPage(document.$state,'$states{$action}[0]')", |
{href=>"javascript:backPage(document.$state,'$states{$action}[0]')", |
text=>"$trail{$action}{$states{$action}[$i]}"}); |
text=>"$trail{$action}{$states{$action}[$i]}"}); |
Line 627 function backPage(formname,prevstate) {
|
Line 799 function backPage(formname,prevstate) {
|
&Apache::lonhtmlcommon::add_breadcrumb( |
&Apache::lonhtmlcommon::add_breadcrumb( |
{text=>"View groups"}); |
{text=>"View groups"}); |
$r->print(&Apache::lonhtmlcommon::breadcrumbs |
$r->print(&Apache::lonhtmlcommon::breadcrumbs |
(undef,'Course Groups Manager')); |
('Course Groups Manager')); |
&display_groups($r,$cdom,$cnum,$function,$tabcol,$functions,$idx, |
&display_groups($r,$cdom,$cnum,$function,$tabcol,$functions,$idx, |
$view_permission,$manage_permission,$action, |
$view_permission,$manage_permission,$action, |
$rowColor1,$rowColor2); |
$rowColor1,$rowColor2); |
Line 639 function backPage(formname,prevstate) {
|
Line 811 function backPage(formname,prevstate) {
|
|
|
sub retrieve_settings { |
sub retrieve_settings { |
my ($cdom,$cnum,$groupname) = @_; |
my ($cdom,$cnum,$groupname) = @_; |
my %groupinfo; |
my %curr_groups = &Apache::longroup::coursegroups($cdom,$cnum,$groupname); |
|
|
|
return if (!%curr_groups); |
|
|
|
my %groupinfo = |
|
&Apache::longroup::get_group_settings($curr_groups{$groupname}); |
|
|
my %stored; |
my %stored; |
my %curr_groups; |
|
my $numgroups = &Apache::loncommon::coursegroups(\%curr_groups,$cdom, |
$stored{'description'} = |
$cnum,$groupname); |
&Apache::lonnet::unescape($groupinfo{'description'}); |
if ($numgroups > 0) { |
$stored{'startdate'} = $groupinfo{'startdate'}; |
%groupinfo = &Apache::loncommon::get_group_settings( |
$stored{'enddate'} = $groupinfo{'enddate'}; |
$curr_groups{$groupname}); |
if ($stored{'enddate'} == 0) { |
$stored{'description'} = &Apache::lonnet::unescape( |
$stored{'no_end_date'} = 1; |
$groupinfo{'description'}); |
} |
$stored{'startdate'} = $groupinfo{'startdate'}; |
$stored{'granularity'} = $groupinfo{'granularity'}; |
$stored{'enddate'} = $groupinfo{'enddate'}; |
$stored{'specificity'} = $groupinfo{'specificity'}; |
if ($stored{'enddate'} == 0) { |
$stored{'creation'} = $groupinfo{'creation'}; |
$stored{'no_end_date'} = 1; |
$stored{'creator'} = $groupinfo{'creator'}; |
} |
|
$stored{'granularity'} = $groupinfo{'granularity'}; |
foreach my $tool (sort(keys(%{$groupinfo{'functions'}}))) { |
$stored{'specificity'} = $groupinfo{'specificity'}; |
if ($groupinfo{functions}{$tool} eq 'on') { |
$stored{'creation'} = $groupinfo{'creation'}; |
push(@{$stored{tool}},$tool); |
$stored{'creator'} = $groupinfo{'creator'}; |
} |
|
} |
foreach my $tool (sort(keys(%{$groupinfo{'functions'}}))) { |
foreach my $role (@{$groupinfo{'roles'}}) { |
if ($groupinfo{functions}{$tool} eq 'on') { |
push(@{$stored{roles}},$role); |
push(@{$stored{tool}},$tool); |
} |
} |
foreach my $type (@{$groupinfo{'types'}}) { |
} |
push(@{$stored{types}},$type); |
foreach my $role (@{$groupinfo{'roles'}}) { |
} |
push(@{$stored{roles}},$role); |
foreach my $section (@{$groupinfo{'sectionpick'}}) { |
} |
push(@{$stored{sectionpick}},$section); |
foreach my $type (@{$groupinfo{'types'}}) { |
} |
push(@{$stored{types}},$type); |
foreach my $defpriv (@{$groupinfo{'defpriv'}}) { |
} |
push(@{$stored{defpriv}},$defpriv); |
foreach my $section (@{$groupinfo{'sectionpick'}}) { |
} |
push(@{$stored{sectionpick}},$section); |
$stored{'autoadd'} = $groupinfo{'autoadd'}; |
} |
$stored{'autodrop'} = $groupinfo{'autodrop'}; |
foreach my $defpriv (@{$groupinfo{'defpriv'}}) { |
if (exists($groupinfo{'autosec'})) { |
push(@{$stored{defpriv}},$defpriv); |
foreach my $role (sort(keys(%{$groupinfo{'autosec'}}))) { |
} |
if (ref($groupinfo{'autosec'}{$role}) eq 'ARRAY') { |
$stored{'autoadd'} = $groupinfo{'autoadd'}; |
foreach my $section (@{$groupinfo{'autosec'}{$role}}) { |
$stored{'autodrop'} = $groupinfo{'autodrop'}; |
push (@{$stored{'sec_'.$role}},$section); |
if (exists($groupinfo{'autosec'})) { |
} |
foreach my $role (sort(keys(%{$groupinfo{'autosec'}}))) { |
if (@{$groupinfo{'autosec'}{$role}} > 0) { |
foreach my $section (@{$groupinfo{'autosec'}{$role}}) { |
push(@{$stored{'autorole'}},$role); |
push (@{$stored{'sec_'.$role}},$section); |
} |
} |
|
if (@{$groupinfo{'autosec'}{$role}} > 0) { |
|
push(@{$stored{'autorole'}},$role); |
|
} |
|
} |
} |
} |
} |
} |
} |
return %stored; |
return %stored; |
} |
} |
Line 767 sub display_control {
|
Line 941 sub display_control {
|
$startdate,$enddate,$tools,$functions, |
$startdate,$enddate,$tools,$functions, |
$toolprivs,$fixedprivs,$userdata,$usertools, |
$toolprivs,$fixedprivs,$userdata,$usertools, |
$memchg,$idx,$states,$stored,$sectioncount, |
$memchg,$idx,$states,$stored,$sectioncount, |
$navbuttons,$rowColor1,$rowColor2) = @_; |
$navbuttons,$rowColor1,$rowColor2); |
} elsif ($state eq 'chgresult' || $state eq 'memresult' || |
} elsif ($state eq 'chgresult' || $state eq 'memresult' || |
$state eq 'addresult') { |
$state eq 'addresult') { |
&process_request($r,$cdom,$cnum,$tabcol,$action,$state,$page, |
&process_request($r,$cdom,$cnum,$tabcol,$action,$state,$page, |
Line 781 sub display_control {
|
Line 955 sub display_control {
|
} |
} |
|
|
sub header { |
sub header { |
my ($bodytitle,$title,$jscript,$action,$state,$page,$function,$loaditems) = @_; |
my ($bodytitle,$jscript,$action,$state,$page,$function,$loaditems) = @_; |
my $html=&Apache::lonxml::xmlbegin(); |
my $start_page= |
my $bodytag=&Apache::loncommon::bodytag($bodytitle,$function,$loaditems); |
&Apache::loncommon::start_page($bodytitle, |
|
'<script type="text/javascript">'. |
|
$jscript.'</script>', |
|
{'function' => $function, |
|
'add_entries' => $loaditems,}); |
my $output = <<"END"; |
my $output = <<"END"; |
$html |
$start_page |
<head> |
<form method="POST" name="$state"> |
<title>$title</title> |
|
<script type="text/javascript"> |
|
$jscript |
|
</script> |
|
</head> |
|
$bodytag |
|
<form method="post" name="$state"> |
|
|
|
END |
END |
if ($action eq 'create' || $action eq 'modify') { |
if ($action eq 'create' || $action eq 'modify') { |
Line 809 END
|
Line 980 END
|
|
|
sub onload_action { |
sub onload_action { |
my ($action,$state) = @_; |
my ($action,$state) = @_; |
my $loaditems; |
my %loaditems; |
if ((defined($env{'form.origin'})) && ($action eq 'create') && |
if ((defined($env{'form.origin'})) && ($action eq 'create') && |
($state eq 'pick_name' || $state eq 'pick_members' || |
($state eq 'pick_name' || $state eq 'pick_members' || |
$state eq 'pick_privs')) { |
$state eq 'pick_privs')) { |
unless ($env{'form.origin'} eq '') { |
unless ($env{'form.origin'} eq '') { |
$loaditems = |
$loaditems{'onload'} = |
'onload="javascript:setFormElements(document.'.$state.')"'; |
'javascript:setFormElements(document.'.$state.')'; |
} |
} |
} |
} |
if (($action eq 'modify') && |
if (($action eq 'modify') && |
($state eq 'change_settings' || $state eq 'change_members' || |
($state eq 'change_settings' || $state eq 'change_members' || |
$state eq 'change_privs') || $state eq 'add_members') { |
$state eq 'change_privs' || $state eq 'add_members' || |
$loaditems = |
$state eq 'pick_members')) { |
'onload="javascript:setFormElements(document.'.$state.')"'; |
$loaditems{'onload'} = |
|
'javascript:setFormElements(document.'.$state.')'; |
} |
} |
return $loaditems; |
return \%loaditems; |
} |
} |
|
|
sub footer { |
sub footer { |
|
my $end_page = &Apache::loncommon::end_page(); |
return(<<ENDFOOT); |
return(<<ENDFOOT); |
|
<input type="hidden" name="sortby" value="$env{'form.sortby'}" /> |
</form> |
</form> |
</body> |
$end_page |
</html> |
|
ENDFOOT |
ENDFOOT |
} |
} |
|
|
Line 870 sub group_members {
|
Line 1043 sub group_members {
|
foreach my $member (keys %memberhash) { |
foreach my $member (keys %memberhash) { |
$totalmembers ++; |
$totalmembers ++; |
my ($end,$start) = split(/:/,$memberhash{$member}); |
my ($end,$start) = split(/:/,$memberhash{$member}); |
if (($end!=0) && ($end<$now)) { |
unless ($start == -1) { |
$previous ++; |
if (($end!=0) && ($end<$now)) { |
} elsif (($start!=0) && ($start>$now)) { |
$previous ++; |
$future ++; |
} elsif (($start!=0) && ($start>$now)) { |
} else { |
$future ++; |
$active ++; |
} else { |
|
$active ++; |
|
} |
} |
} |
} |
} |
if ($totalmembers == 0) { |
if ($totalmembers == 0) { |
Line 982 END
|
Line 1157 END
|
} |
} |
my @allfunctions = sort(keys (%{$functions})); |
my @allfunctions = sort(keys (%{$functions})); |
for (my $i=0; $i<$halfnum; $i++) { |
for (my $i=0; $i<$halfnum; $i++) { |
$r->print('<td><input type="checkbox" name="tool" value="'. |
$r->print('<td><label><input type="checkbox" name="tool" value="'. |
$allfunctions[$i].'" /> '. |
$allfunctions[$i].'" /> '. |
$$functions{$allfunctions[$i]}.'</td> |
$$functions{$allfunctions[$i]}.'</label></td> |
<td> </td><td> </td>'); |
<td> </td><td> </td>'); |
} |
} |
$r->print('<td><input type="button" value="check all" '. |
$r->print('<td><input type="button" value="check all" '. |
'onclick="javascript:checkAll(document.'.$formname.'.tool)" />'. |
'onclick="javascript:checkAll(document.'.$formname.'.tool)" />'. |
'</td></tr><tr><td> </td>'); |
'</td></tr><tr><td> </td>'); |
for (my $j=$halfnum; $j<@allfunctions; $j++) { |
for (my $j=$halfnum; $j<@allfunctions; $j++) { |
$r->print('<td><input type="checkbox" name="tool" value="'. |
$r->print('<td><label><input type="checkbox" name="tool" value="'. |
$allfunctions[$j].'" /> '. |
$allfunctions[$j].'" /> '. |
$$functions{$allfunctions[$j]}.'</td> |
$$functions{$allfunctions[$j]}.'</label></td> |
<td> </td><td> </td>'); |
<td> </td><td> </td>'); |
} |
} |
if ($remnum) { |
if ($remnum) { |
Line 1007 END
|
Line 1182 END
|
</tr> |
</tr> |
<tr> |
<tr> |
<td><b>Granularity:</b></td> |
<td><b>Granularity:</b></td> |
<td colspan="9">'.$lt{'doyo'}.' <input type="radio" name="granularity" value="Yes" />'.&mt('Yes').' <input type="radio" name="granularity" value="No" checked="checked" />'.&mt('No')); |
<td colspan="9">'.$lt{'doyo'}.' <label><input type="radio" name="granularity" value="Yes" />'.&mt('Yes').'</label> <label><input type="radio" name="granularity" value="No" checked="checked" />'.&mt('No').'</label>'); |
if ($action eq 'modify') { |
if ($action eq 'modify') { |
$r->print(' ('.&mt('Currently set to "[_1]"', |
$r->print(' ('.&mt('Currently set to "[_1]"', |
$$stored{'granularity'}).')'); |
$$stored{'granularity'}).')'); |
Line 1030 sub membership_options {
|
Line 1205 sub membership_options {
|
'picr' => 'Pick the criteria to use to build a list of '. |
'picr' => 'Pick the criteria to use to build a list of '. |
'course users from which you will select ', |
'course users from which you will select ', |
'meof' => 'members of the new group.', |
'meof' => 'members of the new group.', |
'adme' => 'additional members of the group.', |
'admg' => 'additional members of the group.', |
'ifno' => 'If you do not wish to add members when you first '. |
'ifno' => 'If you do not wish to add members when you first '. |
'create the group, do not make any selections', |
'create the group, do not make any selections', |
'acty' => 'Access types', |
'acty' => 'Access types', |
Line 1042 sub membership_options {
|
Line 1217 sub membership_options {
|
previous => &mt('Previously had access'), |
previous => &mt('Previously had access'), |
future => &mt('Will have future access'), |
future => &mt('Will have future access'), |
); |
); |
|
|
my @roles = ('st','cc','in','ta','ep','cr'); |
my @roles = ('st','cc','in','ta','ep','cr'); |
|
|
my @sections = keys(%{$sectioncount}); |
my @sections = keys(%{$sectioncount}); |
Line 1056 sub membership_options {
|
Line 1231 sub membership_options {
|
if ($action eq 'create') { |
if ($action eq 'create') { |
$r->print($lt{'meof'}.'<br />'.$lt{'ifno'}); |
$r->print($lt{'meof'}.'<br />'.$lt{'ifno'}); |
} else { |
} else { |
$r->print($lt{'adme'}); |
$r->print($lt{'admg'}); |
} |
} |
$r->print(' |
$r->print(' |
<br /> |
<br /> |
Line 1078 sub membership_options {
|
Line 1253 sub membership_options {
|
$r->print(&Apache::lonhtmlcommon::role_select_row(\@roles)); |
$r->print(&Apache::lonhtmlcommon::role_select_row(\@roles)); |
if (@sections > 0) { |
if (@sections > 0) { |
@sections = sort {$a cmp $b} @sections; |
@sections = sort {$a cmp $b} @sections; |
unshift(@sections,'_all'); # Put 'all' at the front of the list |
unshift(@sections,'all'); # Put 'all' at the front of the list |
unshift(@sections,'_nosec'); # Put 'no sections' next |
unshift(@sections,'none'); # Put 'no sections' next |
$r->print('<td> </td> |
$r->print('<td> </td> |
<td colspan="3" align="center" valign="top">'. |
<td colspan="3" align="center" valign="top">'. |
§ions_selection(\@sections,'sectionpick').'</td>'); |
§ions_selection(\@sections,'sectionpick').'</td>'); |
Line 1100 sub sections_selection {
|
Line 1275 sub sections_selection {
|
$numvisible = @{$sections}; |
$numvisible = @{$sections}; |
} |
} |
foreach my $sec (@{$sections}) { |
foreach my $sec (@{$sections}) { |
if ($sec eq '_all') { |
if ($sec eq 'all') { |
$section_sel .= ' <option value="'.$sec.'" />all sections'."\n"; |
$section_sel .= ' <option value="'.$sec.'" />all sections'."\n"; |
} elsif ($sec eq '_nosec') { |
} elsif ($sec eq 'none') { |
$section_sel .= ' <option value="'.$sec.'" />no section'."\n"; |
$section_sel .= ' <option value="'.$sec.'" />no section'."\n"; |
} else { |
} else { |
$section_sel .= ' <option value="'.$sec.'" />'.$sec."\n"; |
$section_sel .= ' <option value="'.$sec.'" />'.$sec."\n"; |
Line 1155 sub choose_members_form {
|
Line 1330 sub choose_members_form {
|
my %origmembers; |
my %origmembers; |
$r->print(&Apache::lonhtmlcommon::echo_form_input( |
$r->print(&Apache::lonhtmlcommon::echo_form_input( |
['origin','action','state','page','member','specificity','branch', |
['origin','action','state','page','member','specificity','branch', |
'defpriv','autorole','autoadd','autodrop'], |
'defpriv','autorole','autoadd','autodrop','sortby','togglefunc'], |
\@regexps)); |
\@regexps)); |
my $earlyout = &validate_groupname($groupname,$action,$cdom,$cnum); |
my $earlyout = &validate_groupname($groupname,$action,$cdom,$cnum); |
$r->print(' |
$r->print(' |
Line 1189 sub choose_members_form {
|
Line 1364 sub choose_members_form {
|
$groupname); |
$groupname); |
foreach my $key (sort(keys(%membership))) { |
foreach my $key (sort(keys(%membership))) { |
if ($key =~ /^\Q$groupname\E:([^:]+):([^:]+)$/) { |
if ($key =~ /^\Q$groupname\E:([^:]+):([^:]+)$/) { |
my $uname = $1; |
my ($end,$start,@userprivs) = split(/:/,$membership{$key}); |
my $udom = $2; |
unless ($start == -1) { |
my $user = $uname.':'.$udom; |
my $uname = $1; |
$origmembers{$user} = 1; |
my $udom = $2; |
|
my $user = $uname.':'.$udom; |
|
$origmembers{$user} = 1; |
|
} |
} |
} |
} |
} |
} |
} |
Line 1442 sub pick_new_members {
|
Line 1620 sub pick_new_members {
|
if ($granularity eq 'Yes') { |
if ($granularity eq 'Yes') { |
$r->print('<tr bgcolor="#cccccc"> |
$r->print('<tr bgcolor="#cccccc"> |
<td colspan="5"> </td> |
<td colspan="5"> </td> |
<td align="center"><small><nobr><b>All:</b> '); |
<td align="center"><small><nobr><b>'.&mt('All:').'</b> '); |
foreach my $tool (@{$available}) { |
foreach my $tool (@{$available}) { |
$r->print('<input type="checkbox" name="togglefunc" '. |
$r->print('<label><input type="checkbox" name="togglefunc" '. |
'onclick="javascript:toggleTools(document.'.$formname.'.user_'.$tool.',this);">'. |
'onclick="javascript:toggleTools(document.'.$formname.'.user_'.$tool.',this);"'. |
'<b>'.$tool.'</b> '); |
' value="'.$tool.'">'.'<b>'.$tool.'</b></label> '); |
} |
} |
$r->print('</nobr></small></td></tr>'); |
$r->print('</nobr></small></td></tr>'); |
} |
} |
Line 1596 sub privilege_specificity {
|
Line 1774 sub privilege_specificity {
|
} |
} |
if ($totaloptionalprivs) { |
if ($totaloptionalprivs) { |
$r->print(' |
$r->print(' |
<br /><br /><nobr><input type="radio" name="specificity" value="No" '.$specific{'No'}.' /> '.$lt{'algm'}.'</nobr><br/> |
<br /><br /><label><nobr><input type="radio" name="specificity" value="No" '.$specific{'No'}.' /> '.$lt{'algm'}.'</nobr></label><br/> |
<nobr><input type="radio" name="specificity" value="Yes" '.$specific{'Yes'}.' /> '.$lt{'smgp'}.'</nobr> |
<label><nobr><input type="radio" name="specificity" value="Yes" '.$specific{'Yes'}.' /> '.$lt{'smgp'}.'</nobr></label> |
</td> |
</td> |
</tr> |
</tr> |
<tr> |
<tr> |
Line 1719 sub default_privileges {
|
Line 1897 sub default_privileges {
|
$dynamic .= '</tr> |
$dynamic .= '</tr> |
<tr bgcolor="'.$rowColor1.'">'."\n"; |
<tr bgcolor="'.$rowColor1.'">'."\n"; |
} |
} |
$dynamic .= '<td><input type="checkbox" name="defpriv" value="'.$priv.'" />'.$$toolprivs{$tool}{$priv}.'</td>'."\n"; |
$dynamic .= '<td><label><input type="checkbox" name="defpriv" value="'.$priv.'" />'.$$toolprivs{$tool}{$priv}.'</label></td>'."\n"; |
} |
} |
} |
} |
if ($dynamic eq '') { |
if ($dynamic eq '') { |
Line 1824 sub change_members_form {
|
Line 2002 sub change_members_form {
|
); |
); |
my @regexps = ('user_','userpriv_'); |
my @regexps = ('user_','userpriv_'); |
$r->print(&Apache::lonhtmlcommon::echo_form_input( |
$r->print(&Apache::lonhtmlcommon::echo_form_input( |
['origin','action','state','page','expire','delete', |
['origin','action','state','page','expire','deletion', |
'changefunc','changepriv'],\@regexps)); |
'reenable','activate','changepriv','sortby', |
|
'togglefunc'],\@regexps)); |
my $rowimg = 1; |
my $rowimg = 1; |
my @available = (); |
my @available = (); |
my @unavailable = (); |
my @unavailable = (); |
Line 1869 sub current_membership {
|
Line 2048 sub current_membership {
|
my %membership = &Apache::lonnet::get_group_membership($cdom,$cnum, |
my %membership = &Apache::lonnet::get_group_membership($cdom,$cnum, |
$groupname); |
$groupname); |
my %lt = &Apache::lonlocal::texthash( |
my %lt = &Apache::lonlocal::texthash( |
|
'actn' => 'Action?', |
|
'name' => 'Name', |
|
'usnm' => 'Username', |
|
'doma' => 'Domain', |
|
'stda' => 'Start Date', |
|
'enda' => 'End Date', |
'expi' => 'Expire', |
'expi' => 'Expire', |
'reen' => 'Re-enable', |
'reen' => 'Re-enable', |
'acti' => 'Activate', |
'acti' => 'Activate', |
'dele' => 'Delete', |
'dele' => 'Delete', |
'curf' => 'Current Functionality', |
'curf' => 'Current Functionality', |
'chfn' => 'Change Functions', |
|
'chpr' => 'Change Privileges' |
'chpr' => 'Change Privileges' |
); |
); |
if (keys(%membership) > 0) { |
if (keys(%membership) > 0) { |
Line 1976 sub current_membership {
|
Line 2160 sub current_membership {
|
if ($num_activate) { |
if ($num_activate) { |
&check_uncheck_buttons($r,$formname,'activate',$lt{'acti'}); |
&check_uncheck_buttons($r,$formname,'activate',$lt{'acti'}); |
} |
} |
&check_uncheck_buttons($r,$formname,'delete',$lt{'dele'}); |
&check_uncheck_buttons($r,$formname,'deletion',$lt{'dele'}); |
if (@{$available} > 0) { |
if (@{$available} > 0) { |
if ($granularity eq 'Yes') { |
|
&check_uncheck_buttons($r,$formname,'changefunc',$lt{'chfn'}); |
|
} |
|
if ($specificity eq 'Yes') { |
if ($specificity eq 'Yes') { |
&check_uncheck_buttons($r,$formname,'changepriv',$lt{'chpr'}); |
&check_uncheck_buttons($r,$formname,'changepriv',$lt{'chpr'}); |
} |
} |
Line 2018 END
|
Line 2199 END
|
$r->print(<<"END"); |
$r->print(<<"END"); |
<table border="0" cellpadding="4" cellspacing="1"> |
<table border="0" cellpadding="4" cellspacing="1"> |
<tr bgcolor="$tabcol" align="center"> |
<tr bgcolor="$tabcol" align="center"> |
<td><b>Action?</b></td> |
<td><b>$lt{'actn'}</b></td> |
<td><b><a href="javascript:changeSort('fullname')">Name</a></b></td> |
<td><b><a href="javascript:changeSort('fullname')">$lt{'name'}</a></b></td> |
<td><b><a href="javascript:changeSort('username')">Username</a></b> |
<td><b><a href="javascript:changeSort('username')">$lt{'usnm'}</a></b> |
</td> |
</td> |
<td><b><a href="javascript:changeSort('domain')">Domain</a></b></td> |
<td><b><a href="javascript:changeSort('domain')">$lt{'doma'}</a></b></td> |
<td><b><a href="javascript:changeSort('id')">ID</a></b></td> |
<td><b><a href="javascript:changeSort('id')">ID</a></b></td> |
<td><b><a href="javascript:changeSort('start')">Start Date</a></b></td> |
<td><b><a href="javascript:changeSort('start')">$lt{'stda'}</a></b></td> |
<td><b><a href="javascript:changeSort('end')">End Date</a></b></td> |
<td><b><a href="javascript:changeSort('end')">$lt{'enda'}</a></b></td> |
END |
END |
|
my $colspan = 0; |
if ($hastools) { |
if ($hastools) { |
$r->print('<td><b>'.$lt{'curf'}.'</b></td>'); |
$r->print('<td><b>'.$lt{'curf'}.'</b></td>'); |
|
$colspan ++; |
} |
} |
if ($addtools) { |
if ($addtools) { |
$r->print('<td><b>Additional Functionality</b></td>'); |
$r->print('<td><b>Additional Functionality</b></td>'); |
|
$colspan ++; |
} |
} |
$r->print('</tr>'); |
$r->print('</tr>'); |
|
if ($colspan) { |
|
if ($granularity eq 'Yes') { |
|
$r->print('<tr bgcolor="#cccccc"> |
|
<td colspan="7"> </td> |
|
<td colspan="'.$colspan.'" align="center"><small><nobr><b>'.&mt('All:'). |
|
'</b> '); |
|
foreach my $tool (@{$available}) { |
|
$r->print('<label><input type="checkbox" name="togglefunc"'. |
|
' onclick="javascript:toggleTools(document.'.$formname.'.user_'.$tool.',this);"'. |
|
' value="'.$tool.'">'.'<b>'.$tool.'</b></label> '); |
|
} |
|
$r->print('</nobr></small></td></tr>'); |
|
} |
|
} |
my %Sortby = (); |
my %Sortby = (); |
foreach my $user (sort(keys(%current))) { |
foreach my $user (sort(keys(%current))) { |
if ($env{'form.sortby'} eq 'fullname') { |
if ($env{'form.sortby'} eq 'fullname') { |
Line 2066 END
|
Line 2264 END
|
$r->print('<tr bgcolor="'.$rowColor.'"> |
$r->print('<tr bgcolor="'.$rowColor.'"> |
<td><small>'); |
<td><small>'); |
if ($current{$user}{changestate} eq 'reenable') { |
if ($current{$user}{changestate} eq 'reenable') { |
$r->print('<nobr>'. |
$r->print('<nobr><label>'. |
'<input type="checkbox" name="reenable" value="'.$user.'" />'. |
'<input type="checkbox" name="reenable" value="'.$user.'" />'. |
$lt{'reen'}.'</nobr><br />'); |
$lt{'reen'}.'</label></nobr><br />'); |
} elsif ($current{$user}{changestate} eq 'expire') { |
} elsif ($current{$user}{changestate} eq 'expire') { |
$r->print('<nobr>'. |
$r->print('<nobr><label>'. |
'<input type="checkbox" name="expire" value="'.$user.'" />'. |
'<input type="checkbox" name="expire" value="'.$user.'" />'. |
$lt{'expi'}.'</nobr><br />'); |
$lt{'expi'}.'</label></nobr><br />'); |
} elsif ($current{$user}{changestate} eq 'activate') { |
} elsif ($current{$user}{changestate} eq 'activate') { |
$r->print('<nobr>'. |
$r->print('<nobr><label>'. |
'<input type="checkbox" name="activate" value="'.$user.'" />'. |
'<input type="checkbox" name="activate" value="'.$user.'" />'. |
$lt{'acti'}.'</nobr><br />'); |
$lt{'acti'}.'</label></nobr><br />'); |
} |
|
$r->print('<nobr>'. |
|
'<input type="checkbox" name="delete" value="'.$user.'" />'. |
|
$lt{'dele'}.'</nobr>'); |
|
if ($granularity eq 'Yes') { |
|
$r->print('<br /><nobr>'. |
|
'<input type="checkbox" name="changefunc" value="'.$user.'" />'.$lt{'chfn'}. |
|
'</nobr>'); |
|
} |
} |
|
$r->print('<nobr><label>'. |
|
'<input type="checkbox" name="deletion" value="'.$user.'" />'. |
|
$lt{'dele'}.'</label></nobr>'); |
if ($specificity eq 'Yes') { |
if ($specificity eq 'Yes') { |
$r->print('<br /><nobr>'. |
$r->print('<br /><nobr><label>'. |
'<input type="checkbox" name="changepriv" value="'.$user.'" />'.$lt{'chpr'}. |
'<input type="checkbox" name="changepriv" value="'.$user.'" />'.$lt{'chpr'}. |
'</nobr>'); |
'</label></nobr>'); |
} |
} |
$r->print(' |
$r->print(' |
</td> |
</td> |
Line 2098 END
|
Line 2291 END
|
$udom.'</small></td><td><small>'.$id.'</small></td><td><small>'.$start. |
$udom.'</small></td><td><small>'.$id.'</small></td><td><small>'.$start. |
'</small></td><td><small>'.$end.'</small></td>'); |
'</small></td><td><small>'.$end.'</small></td>'); |
if ($hastools) { |
if ($hastools) { |
$r->print('<td align="left"><small><nobr>'); |
$r->print('<td align="left"><small><nobr>'. |
|
' '); |
foreach my $tool (@{$current{$user}{currtools}}) { |
foreach my $tool (@{$current{$user}{currtools}}) { |
if ($granularity eq 'Yes') { |
if ($granularity eq 'Yes') { |
$r->print('<input type="checkbox" |
$r->print('<label><input type="checkbox" '. |
checked="checked" |
'checked="checked" '. |
name="user_'.$tool.'" value="'. |
'name="user_'.$tool.'" value="'. |
$user.'" />'); |
$user.'" />'.$tool.'</label>'); |
} else { |
} else { |
$r->print('<input type="hidden" |
$r->print('<input type="hidden" '. |
checked="checked" |
'checked="checked" '. |
name="user_'.$tool.'" value="'. |
'name="user_'.$tool.'" value="'. |
$user.'" />'); |
$user.'" />'.$tool); |
} |
} |
$r->print($tool.' '); |
$r->print(' '); |
} |
} |
$r->print('</nobr></small></td>'); |
$r->print('</nobr></small></td>'); |
} |
} |
Line 2119 END
|
Line 2313 END
|
$r->print('<td align="left"><small>'); |
$r->print('<td align="left"><small>'); |
if ($granularity eq 'Yes') { |
if ($granularity eq 'Yes') { |
foreach my $tool (@{$current{$user}{newtools}}) { |
foreach my $tool (@{$current{$user}{newtools}}) { |
$r->print('<nobr><input type="checkbox" |
$r->print('<nobr><label><input type="checkbox" |
name="user_'.$tool.'" value="'. |
name="user_'.$tool.'" value="'. |
$user.'" />'.$tool. |
$user.'" />'.$tool. |
'</nobr> '); |
'</label></nobr> '); |
} |
} |
} else { |
} else { |
foreach my $tool (@{$current{$user}{newtools}}) { |
foreach my $tool (@{$current{$user}{newtools}}) { |
Line 2173 sub change_privs_form {
|
Line 2367 sub change_privs_form {
|
$rowColor2) = @_; |
$rowColor2) = @_; |
my @regexps = ('userpriv_'); |
my @regexps = ('userpriv_'); |
my $nexttext; |
my $nexttext; |
|
my %lt = &Apache::lonlocal::texthash( |
|
'tode' => 'To be deleted', |
|
'toex' => 'To be expired', |
|
'nome' => 'No members to be deleted or expired from the group.', |
|
); |
$r->print(&Apache::lonhtmlcommon::echo_form_input( |
$r->print(&Apache::lonhtmlcommon::echo_form_input( |
['origin','action','state','page'],\@regexps)); |
['origin','action','state','page','sortby'],\@regexps)); |
$nexttext = $$navbuttons{'adme'}; |
if ($env{'form.branch'} eq 'adds') { |
|
$nexttext = $$navbuttons{'adme'}; |
|
} else { |
|
$nexttext = $$navbuttons{'mose'}; |
|
} |
$r->print('<br /><table width="100%" cellpadding="0" cellspacing="0" border="0">'); |
$r->print('<br /><table width="100%" cellpadding="0" cellspacing="0" border="0">'); |
|
&topic_bar($r,$tabcol,3,&mt('Members to delete or expire')); |
|
my $exp_or_del = 0; |
|
if (ref($$memchg{'deletion'}) eq 'ARRAY') { |
|
if (@{$$memchg{'deletion'}} > 0) { |
|
$r->print('<tr><td> </td><td colspan="3"><b>'.$lt{'tode'}.':</b><br /><ul>'); |
|
foreach my $user (@{$$memchg{'deletion'}}) { |
|
$r->print('<li>'.$$userdata{$user}[$$idx{fullname}]. |
|
' ('.$user.')</li>'); |
|
} |
|
$r->print('</ul></td><tr><td colspan="4"> </td></tr>'); |
|
$exp_or_del += @{$$memchg{'deletion'}}; |
|
} |
|
} |
|
if (ref($$memchg{'expire'}) eq 'ARRAY') { |
|
if (@{$$memchg{'expire'}} > 0) { |
|
$r->print('<tr><td> </td><td colspan="3"><b>'.$lt{'toex'}.':</b><br /><ul>'); |
|
foreach my $user (@{$$memchg{'expire'}}) { |
|
$r->print('<li>'.$$userdata{$user}[$$idx{fullname}]. |
|
' ('.$user.')</li>'); |
|
} |
|
$r->print('</ul></td><tr><td colspan="4"> </td></tr>'); |
|
$exp_or_del += @{$$memchg{'expire'}}; |
|
} |
|
} |
|
if (!$exp_or_del) { |
|
$r->print('<tr><td> </td><td colspan="3">'.$lt{'nome'}. |
|
'</td></tr><tr><td colspan="4"> </td></tr>'); |
|
} |
|
|
&topic_bar($r,$tabcol,3,&mt('Group member privileges')); |
&topic_bar($r,$tabcol,4,&mt('Group member privileges')); |
|
|
&member_privileges_form($r,$tabcol,$action,$formname,$tools,$toolprivs, |
my $numchgs = &member_privileges_form($r,$tabcol,$action,$formname,$tools, |
$fixedprivs,$userdata,$usertools,$idx,$memchg, |
$toolprivs,$fixedprivs,$userdata, |
$states,$stored,$rowColor1,$rowColor2); |
$usertools,$idx,$memchg,$states, |
|
$stored,$rowColor1,$rowColor2); |
$r->print('</td></tr><tr><td colspan="4"> </td></tr>'); |
$r->print('</td></tr><tr><td colspan="4"> </td></tr>'); |
my $prevtext = $$navbuttons{'gtps'}; |
my $prevtext = $$navbuttons{'gtps'}; |
&display_navbuttons($r,$formname,$$states{$action}[$page-1],$prevtext, |
if ($numchgs || $exp_or_del) { |
$$states{$action}[$page+1],$nexttext); |
&display_navbuttons($r,$formname,$$states{$action}[$page-1],$prevtext, |
|
$$states{$action}[$page+1],$nexttext); |
|
} else { |
|
&display_navbuttons($r,$formname,$$states{$action}[$page-1],$prevtext); |
|
} |
$r->print('</table>'); |
$r->print('</table>'); |
return; |
return; |
} |
} |
Line 2238 sub choose_privs_form {
|
Line 2471 sub choose_privs_form {
|
if ($action eq 'create') { |
if ($action eq 'create') { |
push(@regexps,'sec_'); |
push(@regexps,'sec_'); |
$r->print(&Apache::lonhtmlcommon::echo_form_input( |
$r->print(&Apache::lonhtmlcommon::echo_form_input( |
['origin','action','state','page','autoadd','autodrop'], |
['origin','action','state','page','sortby','autoadd','autodrop'], |
\@regexps)); |
\@regexps)); |
$nexttext = $$navbuttons{'crgr'}; |
$nexttext = $$navbuttons{'crgr'}; |
} else { |
} else { |
$r->print(&Apache::lonhtmlcommon::echo_form_input( |
$r->print(&Apache::lonhtmlcommon::echo_form_input( |
['origin','action','state','page'],\@regexps)); |
['origin','action','state','page','sortby'],\@regexps)); |
$nexttext = $$navbuttons{'adme'}; |
$nexttext = $$navbuttons{'adme'}; |
} |
} |
|
|
Line 2273 sub choose_privs_form {
|
Line 2506 sub choose_privs_form {
|
|
|
sub build_boxes { |
sub build_boxes { |
my ($r,$tools,$usertools,$fixedprivs,$toolprivs,$showtools, |
my ($r,$tools,$usertools,$fixedprivs,$toolprivs,$showtools, |
$showboxes,$prefix,$specificity) = @_; |
$showboxes,$prefix,$specificity,$excluded) = @_; |
my $totalboxes = 0; |
my $totalboxes = 0; |
if (@{$tools} > 0) { |
if (@{$tools} > 0) { |
if ($specificity eq 'Yes') { |
if ($specificity eq 'Yes') { |
foreach my $tool (@{$tools}) { |
foreach my $tool (@{$tools}) { |
@{$$showboxes{$tool}} = (); |
@{$$showboxes{$tool}} = (); |
foreach my $user (sort(keys(%{$usertools}))) { |
foreach my $user (sort(keys(%{$usertools}))) { |
unless (grep/^$tool$/,@{$showtools}) { |
if (ref($excluded) eq 'ARRAY') { |
push(@{$showtools},$tool); |
if (grep/^$user$/,@{$excluded}) { |
|
next; |
|
} |
} |
} |
foreach my $priv (sort(keys(%{$$toolprivs{$tool}}))) { |
if ($$usertools{$user}{$tool}) { |
unless (exists($$fixedprivs{$tool}{$priv})) { |
unless (grep/^$tool$/,@{$showtools}) { |
unless(grep(/^$priv$/,@{$$showboxes{$tool}})) { |
push(@{$showtools},$tool); |
push(@{$$showboxes{$tool}},$priv); |
} |
$totalboxes ++; |
foreach my $priv (sort(keys(%{$$toolprivs{$tool}}))) { |
|
unless (exists($$fixedprivs{$tool}{$priv})) { |
|
unless(grep(/^$priv$/,@{$$showboxes{$tool}})) { |
|
push(@{$$showboxes{$tool}},$priv); |
|
$totalboxes ++; |
|
} |
} |
} |
} |
} |
} |
} |
Line 2338 sub member_privileges_form {
|
Line 2578 sub member_privileges_form {
|
'there are no specific user privileges to set.', |
'there are no specific user privileges to set.', |
'asng' => 'As no group tools will be made available to users, '. |
'asng' => 'As no group tools will be made available to users, '. |
'there are no specific user privileges to set.', |
'there are no specific user privileges to set.', |
|
'nogm' => 'No group member privileges to display or set, '. |
|
'as you have not indicated that you will be activating,'. |
|
' re-enabling, changing privileges, or adding/removing '. |
|
'functionality for any current members ', |
'full' => 'Fullname', |
'full' => 'Fullname', |
'user' => 'Username', |
'user' => 'Username', |
'doma' => 'Domain', |
'doma' => 'Domain', |
Line 2350 sub member_privileges_form {
|
Line 2594 sub member_privileges_form {
|
} |
} |
$specificity = $env{'form.specificity'}; |
$specificity = $env{'form.specificity'}; |
} else { |
} else { |
@defprivs = @{$$stored{'defpriv'}}; |
if (defined($$stored{'defpriv'})) { |
|
@defprivs = @{$$stored{'defpriv'}}; |
|
} |
$specificity = $$stored{'specificity'}; |
$specificity = $$stored{'specificity'}; |
} |
} |
my @showtools; |
my @showtools; |
my %showboxes = (); |
my %showboxes = (); |
my $totalboxes = 0; |
|
my $numtools = 1 + @{$tools}; |
my $numtools = 1 + @{$tools}; |
|
|
$totalboxes = &build_boxes($r,$tools,$usertools,$fixedprivs,$toolprivs, |
my @excluded = (); |
\@showtools,\%showboxes,'userpriv_', |
my $numchgs = 0; |
$specificity); |
if ($formname eq 'change_privs') { |
|
my @currmembers = (); |
|
if (ref($$memchg{'deletion'}) eq 'ARRAY') { |
|
push(@excluded,@{$$memchg{'deletion'}}); |
|
} |
|
if (ref($$memchg{'expire'}) eq 'ARRAY') { |
|
push(@excluded,@{$$memchg{'expire'}}); |
|
} |
|
if (@excluded > 0) { |
|
foreach my $user (sort(keys(%{$usertools}))) { |
|
if (grep/^$user$/,@excluded) { |
|
next; |
|
} |
|
push(@currmembers,$user); |
|
} |
|
} else { |
|
@currmembers = sort(keys(%{$usertools})); |
|
} |
|
$numchgs = @currmembers; |
|
if (!$numchgs) { |
|
$r->print('<tr><td> </td><td colspan="3">'.$lt{'nogm'}); |
|
return $numchgs; |
|
} |
|
} |
|
|
|
my $totalboxes = &build_boxes($r,$tools,$usertools,$fixedprivs, |
|
$toolprivs,\@showtools,\%showboxes, |
|
'userpriv_',$specificity,\@excluded); |
if (@{$tools} > 0) { |
if (@{$tools} > 0) { |
if ($specificity eq 'Yes') { |
if ($specificity eq 'Yes') { |
if ($totalboxes > 0) { |
if ($totalboxes > 0) { |
my $numcells = 2; |
my $numcells = 2; |
my $colspan = $numcells + 1; |
my $colspan = $numcells + 1; |
my %total; |
my %total; |
$r->print(' |
if (keys(%{$usertools}) > 1) { |
|
$r->print(' |
<tr> |
<tr> |
<td> </td> |
<td> </td> |
<td colspan="3"> |
<td colspan="3"> |
<table border="0" cellspacing="2" cellpadding="2" border="0"> |
<table border="0" cellspacing="2" cellpadding="2" border="0"> |
<tr> |
<tr> |
'); |
'); |
foreach my $tool (@{$tools}) { |
foreach my $tool (@{$tools}) { |
if (@{$showboxes{$tool}} > 0) { |
if (@{$showboxes{$tool}} > 0) { |
$r->print('<td valign="top">'); |
$r->print('<td valign="top">'); |
$r->print('<table class="thinborder"><tr bgcolor="'.$tabcol. |
$r->print('<table class="thinborder"><tr bgcolor="'. |
'"><th colspan="'.$colspan.'">'.$tool.'</th></tr><tr>'); |
$tabcol.'"><th colspan="'.$colspan.'">'. |
my $privcount = 0; |
$tool.'</th></tr><tr>'); |
foreach my $priv (@{$showboxes{$tool}}) { |
my $privcount = 0; |
$privcount ++; |
foreach my $priv (@{$showboxes{$tool}}) { |
if (($privcount == @{$showboxes{$tool}}) && ($privcount > 1)) { |
$privcount ++; |
if ($privcount%$numcells) { |
if (($privcount == @{$showboxes{$tool}}) && |
$r->print('<td colspan="'.$colspan.'">'); |
($privcount > 1)) { |
|
if ($privcount%$numcells) { |
|
$r->print('<td colspan="'.$colspan.'">'); |
|
} else { |
|
$r->print('<td>'); |
|
} |
} else { |
} else { |
$r->print('<td>'); |
$r->print('<td>'); |
} |
} |
} else { |
$r->print(qq| |
$r->print('<td>'); |
|
} |
|
$r->print(qq| |
|
<fieldset><legend><b>$$toolprivs{$tool}{$priv}</b></legend> |
<fieldset><legend><b>$$toolprivs{$tool}{$priv}</b></legend> |
<nobr> |
<nobr> |
<input type="button" value="check all" |
<input type="button" value="check all" |
Line 2400 sub member_privileges_form {
|
Line 2675 sub member_privileges_form {
|
<input type="button" value="uncheck all" |
<input type="button" value="uncheck all" |
onclick="javascript:uncheckAll(document.$formname.userpriv_$priv)" /> |
onclick="javascript:uncheckAll(document.$formname.userpriv_$priv)" /> |
</nobr></fieldset><br />|); |
</nobr></fieldset><br />|); |
$r->print('</td>'); |
$r->print('</td>'); |
if ($privcount < @{$showboxes{$tool}}) { |
if ($privcount < @{$showboxes{$tool}}) { |
if (@{$showboxes{$tool}} > 2) { |
if (@{$showboxes{$tool}} > 2) { |
if ($privcount%$numcells == 0) { |
if ($privcount%$numcells == 0) { |
$r->print('</tr><tr>'); |
$r->print('</tr><tr>'); |
|
} |
|
} else { |
|
$r->print('<tr></tr>'); |
} |
} |
} else { |
|
$r->print('<tr></tr>'); |
|
} |
} |
} |
} |
|
$r->print('</tr></table></td><td> </td>'); |
} |
} |
$r->print('</tr></table></td><td> </td>'); |
|
} |
} |
|
$r->print('</tr></table></td></tr>'); |
|
$r->print('<tr><td colspan="4"> </td></tr>'); |
} |
} |
$r->print('</tr></table></td></tr>'); |
$r->print('<tr><td> </td><td colspan="3">'); |
$r->print('<tr><td colspan="4"> </td></tr><tr><td> </td><td colspan="3">'); |
|
$r->print(&Apache::lonhtmlcommon::start_pick_box()); |
$r->print(&Apache::lonhtmlcommon::start_pick_box()); |
$r->print(<<"END"); |
$r->print(<<"END"); |
<tr bgcolor="$tabcol"> |
<tr bgcolor="$tabcol"> |
Line 2427 sub member_privileges_form {
|
Line 2704 sub member_privileges_form {
|
END |
END |
&member_privs_entries($r,$tabcol,$rowColor1,$rowColor2, |
&member_privs_entries($r,$tabcol,$rowColor1,$rowColor2, |
$usertools,$toolprivs,$fixedprivs, |
$usertools,$toolprivs,$fixedprivs, |
$userdata,$idx,\@showtools,\@defprivs); |
$userdata,$idx,\@showtools,\@defprivs, |
|
\@excluded); |
$r->print('</td>'); |
$r->print('</td>'); |
$r->print(&Apache::lonhtmlcommon::end_pick_box()); |
$r->print(&Apache::lonhtmlcommon::end_pick_box()); |
$r->print('</td></tr> |
$r->print('</td></tr> |
Line 2440 END
|
Line 2718 END
|
'<br />'); |
'<br />'); |
&display_defprivs($r,$tabcol,$rowColor1,$rowColor2,$tools, |
&display_defprivs($r,$tabcol,$rowColor1,$rowColor2,$tools, |
$toolprivs,\@defprivs); |
$toolprivs,\@defprivs); |
|
|
} |
} |
} else { |
} else { |
if (keys(%{$usertools}) > 0) { |
if (keys(%{$usertools}) > 0) { |
Line 2456 END
|
Line 2733 END
|
} else { |
} else { |
$r->print('<tr><td> </td><td colspan="3">'.$lt{'asng'}); |
$r->print('<tr><td> </td><td colspan="3">'.$lt{'asng'}); |
} |
} |
return; |
return $numchgs; |
} |
} |
|
|
sub process_request { |
sub process_request { |
Line 2466 sub process_request {
|
Line 2743 sub process_request {
|
$sectioncount,$stored,$rowColor1,$rowColor2) = @_; |
$sectioncount,$stored,$rowColor1,$rowColor2) = @_; |
|
|
$r->print(&Apache::lonhtmlcommon::echo_form_input( |
$r->print(&Apache::lonhtmlcommon::echo_form_input( |
['origin','action','state','page'])); |
['origin','action','state','page','sortby'])); |
|
|
my $earlyout = &validate_groupname($groupname,$action,$cdom,$cnum); |
my $earlyout = &validate_groupname($groupname,$action,$cdom,$cnum); |
if ($earlyout) { |
if ($earlyout) { |
Line 2503 sub process_request {
|
Line 2780 sub process_request {
|
@defprivs = @temp; |
@defprivs = @temp; |
} |
} |
} else { |
} else { |
@defprivs = @{$$stored{'defpriv'}}; |
if (defined($$stored{'defpriv'})) { |
|
@defprivs = @{$$stored{'defpriv'}}; |
|
} |
} |
} |
|
|
my $outcome; |
my $outcome; |
Line 2516 sub process_request {
|
Line 2795 sub process_request {
|
} |
} |
if (($action eq 'create' && $outcome eq 'ok') || (($action eq 'modify') && |
if (($action eq 'create' && $outcome eq 'ok') || (($action eq 'modify') && |
(($state eq 'memresult') || ($state eq 'addresult')))) { |
(($state eq 'memresult') || ($state eq 'addresult')))) { |
&process_membership($r,$cdom,$cnum,$groupname,$tools,$enddate, |
&process_membership($r,$cdom,$cnum,$action,$state,$groupname,$tools, |
$startdate,$userdata,$idx,$toolprivs,$usertools, |
$enddate,$startdate,$userdata,$idx,$toolprivs, |
$specificity,\@defprivs); |
$usertools,$specificity,\@defprivs,$memchg); |
} |
} |
return; |
return; |
} |
} |
Line 2539 sub write_group_data {
|
Line 2818 sub write_group_data {
|
'creation','modified','creator','granularity', |
'creation','modified','creator','granularity', |
'specificity','autoadd','autodrop'); |
'specificity','autoadd','autodrop'); |
my @mult_attributes = ('roles','types','sectionpick','defpriv'); |
my @mult_attributes = ('roles','types','sectionpick','defpriv'); |
|
|
my %groupinfo = ( |
my %groupinfo = ( |
description => $esc_description, |
description => $esc_description, |
startdate => $startdate, |
startdate => $startdate, |
Line 2578 sub write_group_data {
|
Line 2857 sub write_group_data {
|
} |
} |
my $autosec; |
my $autosec; |
my @autorole = &Apache::loncommon::get_env_multiple('form.autorole'); |
my @autorole = &Apache::loncommon::get_env_multiple('form.autorole'); |
|
|
foreach my $role (@autorole) { |
foreach my $role (@autorole) { |
if (defined($env{'form.sec_'.$role})) { |
if (defined($env{'form.sec_'.$role})) { |
my @autosections=&Apache::loncommon::get_env_multiple('form.sec_'. |
my @autosections=&Apache::loncommon::get_env_multiple('form.sec_'. |
$role); |
$role); |
if (grep/^_all$/,@autosections) { |
|
@autosections = sort {$a cmp $b} keys(%{$sectioncount}); |
|
} |
|
$autosec .= '<role id="'.$role.'">'; |
$autosec .= '<role id="'.$role.'">'; |
foreach my $sec (@autosections) { |
foreach my $sec (@autosections) { |
$autosec .= '<section>'.$sec.'</section>'; |
$autosec .= '<section>'.$sec.'</section>'; |
Line 2621 sub write_group_data {
|
Line 2897 sub write_group_data {
|
} |
} |
|
|
sub process_membership { |
sub process_membership { |
my ($r,$cdom,$cnum,$groupname,$tools,$enddate,$startdate,$userdata,$idx, |
my ($r,$cdom,$cnum,$action,$state,$groupname,$tools,$enddate,$startdate, |
$toolprivs,$usertools,$specificity,$defprivs) = @_; |
$userdata,$idx,$toolprivs,$usertools,$specificity,$defprivs,$memchg)=@_; |
my %usersettings = (); |
my %usersettings = (); |
my @added= (); |
my %added= (); |
my @failed = (); |
my %failed = (); |
|
my $num_ok = 0; |
|
my $num_fail = 0; |
my %group_privs = (); |
my %group_privs = (); |
my %tooltype = (); |
my %tooltype = (); |
|
|
Line 2637 sub process_membership {
|
Line 2915 sub process_membership {
|
&Apache::loncommon::get_env_multiple('form.userpriv_'.$priv); |
&Apache::loncommon::get_env_multiple('form.userpriv_'.$priv); |
foreach my $user (@users) { |
foreach my $user (@users) { |
$group_privs{$user} .= $priv.':'; |
$group_privs{$user} .= $priv.':'; |
|
if ($state eq 'memresult') { |
|
unless (exists($$usertools{$user}{$tool})) { |
|
$$usertools{$user}{$tool} = 1; |
|
} |
|
} |
} |
} |
} else { |
} else { |
if (@{$defprivs} > 0) { |
if (@{$defprivs} > 0) { |
Line 2655 sub process_membership {
|
Line 2938 sub process_membership {
|
$group_privs{$user} =~ s/:$//; |
$group_privs{$user} =~ s/:$//; |
} |
} |
|
|
|
my $now = time; |
|
my @activate = (); |
|
my @expire = (); |
|
my @deletion = (); |
|
my @reenable = (); |
|
if ($state eq 'memresult') { |
|
if (ref($$memchg{'activate'}) eq 'ARRAY') { |
|
@activate = @{$$memchg{'activate'}}; |
|
} |
|
if (ref($$memchg{'expire'}) eq 'ARRAY') { |
|
@expire = @{$$memchg{'expire'}}; |
|
} |
|
if (ref($$memchg{'deletion'}) eq 'ARRAY') { |
|
@deletion = @{$$memchg{'deletion'}}; |
|
} |
|
if (ref($$memchg{'reenable'}) eq 'ARRAY') { |
|
@reenable = @{$$memchg{'reenable'}}; |
|
} |
|
if (@expire + @deletion > 0) { |
|
my %membership = &Apache::lonnet::get_group_membership($cdom,$cnum, |
|
$groupname); |
|
foreach my $user (@expire) { |
|
my ($currend,$currstart,@userprivs) = |
|
split(/:/,$membership{$groupname.':'.$user}); |
|
$group_privs{$user} = join(':',@userprivs); |
|
if ($currstart > $now) { |
|
$currstart = $now; |
|
} |
|
$usersettings{$groupname.':'.$user} = $now.':'.$currstart.':'. |
|
$group_privs{$user}; |
|
if (&Apache::lonnet::modify_group_roles($cdom,$cnum,$groupname, |
|
$user,$now,$currstart, |
|
$group_privs{$user}) eq 'ok') { |
|
push(@{$added{'expired'}},$user); |
|
$num_ok ++; |
|
} else { |
|
push(@{$failed{'expired'}},$user); |
|
$num_fail ++; |
|
} |
|
} |
|
foreach my $user (@deletion) { |
|
$usersettings{$groupname.':'.$user} = $now.':-1:'; |
|
if (&Apache::lonnet::modify_group_roles($cdom,$cnum,$groupname, |
|
$user,$now,'-1','') |
|
eq 'ok') { |
|
push(@{$added{'deleted'}},$user); |
|
$num_ok ++; |
|
} else { |
|
push(@{$failed{'deleted'}},$user); |
|
$num_fail ++; |
|
} |
|
} |
|
} |
|
} |
|
|
foreach my $user (sort(keys(%{$usertools}))) { |
foreach my $user (sort(keys(%{$usertools}))) { |
$usersettings{$groupname.':'.$user} = $enddate.':'.$startdate.':'. |
my $type; |
|
my $start = $startdate; |
|
my $end = $enddate; |
|
if ($state eq 'memresult') { |
|
$type = 'modified'; |
|
if (@activate > 0) { |
|
if (grep/^$user$/,@activate) { |
|
$start = $now; |
|
$type = 'activated'; |
|
} |
|
} |
|
if (@reenable > 0) { |
|
if (grep/^$user$/,@reenable) { |
|
$type = 'reenabled'; |
|
} |
|
} |
|
} else { |
|
$type = 'added'; |
|
} |
|
$usersettings{$groupname.':'.$user} = $end.':'.$start.':'. |
$group_privs{$user}; |
$group_privs{$user}; |
if (&Apache::lonnet::modify_group_roles($cdom,$cnum,$groupname, |
if (&Apache::lonnet::modify_group_roles($cdom,$cnum,$groupname, |
$user,$enddate,$startdate, |
$user,$end,$start, |
$group_privs{$user}) eq 'ok') { |
$group_privs{$user}) eq 'ok') { |
push(@added,$user); |
push(@{$added{$type}},$user); |
|
$num_ok ++; |
} else { |
} else { |
push(@failed,$user); |
push(@{$failed{$type}},$user); |
|
$num_fail ++; |
} |
} |
} |
} |
my $roster_result = &Apache::lonnet::modify_coursegroup_membership($cdom, |
my $roster_result = &Apache::lonnet::modify_coursegroup_membership($cdom, |
$cnum,\%usersettings); |
$cnum,\%usersettings); |
if (@added > 0) { |
if ($num_ok) { |
$r->print('Users were added with following privileges:<br />'); |
foreach my $type (sort(keys(%added))) { |
foreach my $user (@added) { |
$r->print(&mt('The following users were successfully [_1]',$type)); |
my @privs = split(/:/,$group_privs{$user}); |
if (!($type eq 'deleted' || $type eq 'expired')) { |
my $privlist= ''; |
$r->print(&mt(' with the following privileges')); |
my $curr_tool = ''; |
} |
foreach my $priv (@privs) { |
$r->print(':<br />'); |
unless ($curr_tool eq $tooltype{$priv}) { |
foreach my $user (@{$added{$type}}) { |
$curr_tool = $tooltype{$priv}; |
my $privlist = ''; |
$privlist .= '<b>'.$curr_tool.'</b>: '; |
if (!($type eq 'deleted' || $type eq 'expired')) { |
} |
$privlist = ': '; |
$privlist .= $$toolprivs{$curr_tool}{$priv}.', '; |
my @privs = split(/:/,$group_privs{$user}); |
} |
my $curr_tool = ''; |
$privlist =~ s/, $//; |
foreach my $priv (@privs) { |
$r->print($$userdata{$user}[$$idx{fullname}].' - '.$user.': '.$privlist.'<br />'); |
unless ($curr_tool eq $tooltype{$priv}) { |
} |
$curr_tool = $tooltype{$priv}; |
} |
$privlist .= '<b>'.$curr_tool.'</b>: '; |
if (@failed > 0) { |
} |
$r->print('Addition of the following users was unsuccessful:<br />'); |
$privlist .= $$toolprivs{$curr_tool}{$priv}.', '; |
foreach my $user (@failed) { |
} |
$r->print($$userdata{$user}[$$idx{fullname}].' - '.$user.'<br />'); |
$privlist =~ s/, $//; |
|
} |
|
$r->print($$userdata{$user}[$$idx{fullname}].' - '.$user.$privlist.'<br />'); |
|
} |
|
} |
|
} |
|
if ($num_fail) { |
|
foreach my $type (sort(keys(%failed))) { |
|
$r->print(&mt('The following users could not be [_1], because an error occurred:<br />',$type)); |
|
foreach my $user (@{$failed{$type}}) { |
|
$r->print($$userdata{$user}[$$idx{fullname}].' - '.$user.'<br />'); |
|
} |
} |
} |
} |
} |
if ($roster_result eq 'ok') { |
if ($roster_result eq 'ok') { |
$r->print('<br />Group membership list updated.'); |
$r->print('<br />'.&mt('Group membership list updated.')); |
} else { |
} else { |
$r->print('<br />An error occurred while updating the group membership list -'.$roster_result.'<br />'); |
$r->print('<br />'.&mt('An error occurred while updating the group membership list -').$roster_result.'<br />'); |
} |
} |
return; |
return; |
} |
} |
Line 2752 sub automapping {
|
Line 3122 sub automapping {
|
<td> </td> |
<td> </td> |
<td colspan="3"> |
<td colspan="3"> |
<nobr>'.$$lt{'auad'}.': |
<nobr>'.$$lt{'auad'}.': |
<input type="radio" name="autoadd" value="on" />on <input type="radio" name="autoadd" value="off" />off'); |
<label><input type="radio" name="autoadd" value="on" />on </label><label><input type="radio" name="autoadd" value="off" checked="checked" />off</label>'); |
if ($action eq 'modify') { |
if ($action eq 'modify') { |
$r->print(' ('.$$lt{'curr'}.' <b>'.$$lt{$add}.'</b>)'); |
$r->print(' ('.$$lt{'curr'}.' <b>'.$$lt{$add}.'</b>)'); |
} |
} |
Line 2764 sub automapping {
|
Line 3134 sub automapping {
|
<td> </td> |
<td> </td> |
<td colspan="3"> |
<td colspan="3"> |
<nobr>'.$$lt{'auex'}.': |
<nobr>'.$$lt{'auex'}.': |
<input type="radio" name="autodrop" value="on" />on <input type="radio" name="autodrop" value="off" />off'); |
<label><input type="radio" name="autodrop" value="on" />on </label><label><input type="radio" name="autodrop" value="off" checked="checked" />off</label>'); |
if ($action eq 'modify') { |
if ($action eq 'modify') { |
$r->print(' ('.$$lt{'curr'}.' <b>'.$$lt{$drop}.'</b>)'); |
$r->print(' ('.$$lt{'curr'}.' <b>'.$$lt{$drop}.'</b>)'); |
} |
} |
Line 2787 sub mapping_settings {
|
Line 3157 sub mapping_settings {
|
my @sections = keys(%{$sectioncount}); |
my @sections = keys(%{$sectioncount}); |
if (@sections > 0) { |
if (@sections > 0) { |
@sections = sort {$a cmp $b} @sections; |
@sections = sort {$a cmp $b} @sections; |
unshift(@sections,'_nosec'); # Put 'no sections' next |
unshift(@sections,'none'); # Put 'no sections' next |
unshift(@sections,'_all'); # Put 'all' at the front of the list |
unshift(@sections,'all'); # Put 'all' at the front of the list |
} |
} |
&topic_bar($r,$tabcol,$image,$$lt{'pirs'}); |
&topic_bar($r,$tabcol,$image,$$lt{'pirs'}); |
$r->print(' |
$r->print(' |
Line 2812 sub mapping_settings {
|
Line 3182 sub mapping_settings {
|
my $plrole=&Apache::lonnet::plaintext($role); |
my $plrole=&Apache::lonnet::plaintext($role); |
my $sections_sel; |
my $sections_sel; |
if (@sections > 0) { |
if (@sections > 0) { |
$sections_sel='<td>'.§ions_selection(\@sections,'sec_'.$role). |
if ($role eq 'cc') { |
'</td>'; |
$sections_sel = '<td align="right">'. |
|
&mt('all sections').'<input type="hidden" '. |
|
'name="sec_cc" value="all" /></td>'; |
|
} else { |
|
$sections_sel='<td align="right">'. |
|
§ions_selection(\@sections,'sec_'.$role). |
|
'</td>'; |
|
} |
} |
} |
if ($rowNum %2 == 1) { |
if ($rowNum %2 == 1) { |
$rowColor = $rowColor1; |
$rowColor = $rowColor1; |
Line 2846 sub mapping_settings {
|
Line 3223 sub mapping_settings {
|
} |
} |
|
|
sub standard_roles { |
sub standard_roles { |
my @roles = ('st','ep','ta','in','cc'); |
my @roles = ('cc','in','ta','ep','st'); |
return @roles; |
return @roles; |
} |
} |
|
|
Line 2870 sub modify_menu {
|
Line 3247 sub modify_menu {
|
state => 'change_settings', |
state => 'change_settings', |
branch => 'settings', |
branch => 'settings', |
}, |
}, |
{ text => 'Modify access, tools and/or privileges for previous,future'. |
{ text => 'Modify access, tools and/or privileges for previous, '. |
'or current members', |
'future, or current members', |
help => 'Course_Modify_Group_Membership', |
help => 'Course_Modify_Group_Membership', |
state => 'change_members', |
state => 'change_members', |
branch => 'members', |
branch => 'members', |
Line 2899 sub modify_menu {
|
Line 3276 sub modify_menu {
|
|
|
sub member_privs_entries { |
sub member_privs_entries { |
my ($r,$tabcol,$rowColor1,$rowColor2,$usertools,$toolprivs, |
my ($r,$tabcol,$rowColor1,$rowColor2,$usertools,$toolprivs, |
$fixedprivs,$userdata,$idx,$showtools,$defprivs) = @_; |
$fixedprivs,$userdata,$idx,$showtools,$defprivs,$excluded) = @_; |
my $rowColor; |
my $rowColor; |
my $rowNum = 0; |
my $rowNum = 0; |
foreach my $user (sort(keys(%{$usertools}))) { |
foreach my $user (sort(keys(%{$usertools}))) { |
|
if (defined($excluded)) { |
|
if (ref($excluded) eq 'ARRAY') { |
|
if (grep/^$user$/,@{$excluded}) { |
|
next; |
|
} |
|
} |
|
} |
my ($uname,$udom) = split(/:/,$user); |
my ($uname,$udom) = split(/:/,$user); |
if ($rowNum %2 == 1) { |
if ($rowNum %2 == 1) { |
$rowColor = $rowColor1; |
$rowColor = $rowColor1; |
Line 2928 sub member_privs_entries {
|
Line 3312 sub member_privs_entries {
|
if ($privcount == 3) { |
if ($privcount == 3) { |
$dynamic .= '</tr><tr>'; |
$dynamic .= '</tr><tr>'; |
} |
} |
$dynamic .='<td><nobr><input type="checkbox" '. |
$dynamic .='<td><nobr><label><input type="checkbox" '. |
'name="userpriv_'.$priv.'" value="'.$user.'"'; |
'name="userpriv_'.$priv.'" value="'.$user.'"'; |
if (grep/^\Q$priv\E$/,@{$defprivs}) { |
if (grep/^\Q$priv\E$/,@{$defprivs}) { |
$dynamic .= ' checked="checked" '; |
$dynamic .= ' checked="checked" '; |
} |
} |
$dynamic .= ' />'.$$toolprivs{$tool}{$priv}. |
$dynamic .= ' />'.$$toolprivs{$tool}{$priv}. |
'</nobr></td>'; |
'</label></nobr></td>'; |
} |
} |
} |
} |
$r->print('<tr><td colspan="2"><nobr>'.$fixed.'</nobr></td></tr><tr>'.$dynamic.'</tr></table></td>'); |
$r->print('<tr><td colspan="2"><nobr>'.$fixed.'</nobr></td></tr><tr>'.$dynamic.'</tr></table></td>'); |
Line 2963 sub date_setting_table {
|
Line 3347 sub date_setting_table {
|
'startdate',$starttime); |
'startdate',$starttime); |
my $endform = &Apache::lonhtmlcommon::date_setter($formname, |
my $endform = &Apache::lonhtmlcommon::date_setter($formname, |
'enddate',$endtime); |
'enddate',$endtime); |
my $perpetual = '<nobr><input type="checkbox" name="no_end_date" /> |
my $perpetual = '<nobr><label><input type="checkbox" name="no_end_date" /> |
no ending date</nobr>'; |
no ending date</label></nobr>'; |
my $start_table = ''; |
my $start_table = ''; |
$start_table .= "<table>\n"; |
$start_table .= "<table>\n"; |
$start_table .= '<tr><td align="right">Default starting date for |
$start_table .= '<tr><td align="right">Default starting date for |
Line 3039 function toggleTools(field,caller) {
|
Line 3423 function toggleTools(field,caller) {
|
|
|
sub validate_groupname { |
sub validate_groupname { |
my ($groupname,$action,$cdom,$cnum) = @_; |
my ($groupname,$action,$cdom,$cnum) = @_; |
my %sectioncount; |
my %sectioncount = &Apache::loncommon::get_sections($cdom,$cnum); |
my $numsec=&Apache::loncommon::get_sections($cdom,$cnum,\%sectioncount); |
my %curr_groups = &Apache::longroup::coursegroups($cdom,$cnum); |
my %curr_groups; |
|
my $numgroups=&Apache::loncommon::coursegroups(\%curr_groups,$cdom,$cnum); |
|
|
|
my %lt = &Apache::lonlocal::texthash ( |
my %lt = &Apache::lonlocal::texthash ( |
igna => 'Invalid group name', |
igna => 'Invalid group name', |
tgne => 'The group name entered ', |
tgne => 'The group name entered ', |
Line 3057 sub validate_groupname {
|
Line 3439 sub validate_groupname {
|
thgr => '- does not correspond to the name of an existing'. |
thgr => '- does not correspond to the name of an existing'. |
' group ', |
' group ', |
); |
); |
|
|
my $exitmsg = '<b>'.$lt{'igna'}.'</b><br /><br />'.$lt{'tgne'}.' "'. |
my $exitmsg = '<b>'.$lt{'igna'}.'</b><br /><br />'.$lt{'tgne'}.' "'. |
$groupname.'" '; |
$groupname.'" '; |
my $dupmsg = $lt{'grna'}; |
my $dupmsg = $lt{'grna'}; |
Line 3066 sub validate_groupname {
|
Line 3448 sub validate_groupname {
|
$earlyout = $exitmsg.$lt{'isno'}.'<br />'.$lt{'gnmo'}; |
$earlyout = $exitmsg.$lt{'isno'}.'<br />'.$lt{'gnmo'}; |
return $earlyout; |
return $earlyout; |
} |
} |
if ($numsec) { |
if (exists($sectioncount{$groupname})) { |
if (exists($sectioncount{$groupname})) { |
return $exitmsg.$lt{'cnnb'}.&mt('a section').$lt{'inth'}. |
$earlyout = $exitmsg.$lt{'cnnb'}.&mt('a section').$lt{'inth'}. |
'<br />'.$lt{'grna'}; |
'<br />'.$lt{'grna'}; |
|
return $earlyout; |
|
} |
|
} |
} |
if ($action eq 'create') { |
if ($action eq 'create' |
if ($numgroups) { |
&& exists($curr_groups{$groupname})) { |
if (exists($curr_groups{$groupname})) { |
|
$earlyout = $exitmsg.$lt{'cnnb'}.&mt('an existing group'). |
return $exitmsg.$lt{'cnnb'}.&mt('an existing group'). |
$lt{'inth'}.'<br />'.$lt{'grna'}; |
$lt{'inth'}.'<br />'.$lt{'grna'}; |
return $earlyout; |
|
} |
|
} |
|
} elsif ($action eq 'modify') { |
} elsif ($action eq 'modify') { |
unless(exists($curr_groups{$groupname})) { |
unless(exists($curr_groups{$groupname})) { |
$earlyout = &mt('Group name:').' '.$groupname.$lt{'thgr'}.$lt{'inth'}; |
$earlyout = &mt('Group name:').' '.$groupname.$lt{'thgr'}.$lt{'inth'}; |
Line 3118 sub check_changes {
|
Line 3495 sub check_changes {
|
@{$exclusions{'changepriv'}} = ('expire','changefunc'); |
@{$exclusions{'changepriv'}} = ('expire','changefunc'); |
|
|
foreach my $change (@{$member_changes}) { |
foreach my $change (@{$member_changes}) { |
if ($change eq 'delete') { |
if ($change eq 'deletion') { |
next; |
next; |
} |
} |
my @checks = ('delete'); |
my @checks = ('deletion'); |
if (exists($exclusions{$change})) { |
if (exists($exclusions{$change})) { |
push(@checks,@{$exclusions{$change}}); |
push(@checks,@{$exclusions{$change}}); |
} |
} |
Line 3129 sub check_changes {
|
Line 3506 sub check_changes {
|
foreach my $item (@{$$memchg{$change}}) { |
foreach my $item (@{$$memchg{$change}}) { |
my $match = 0; |
my $match = 0; |
foreach my $check (@checks) { |
foreach my $check (@checks) { |
if (@{$$memchg{$check}} > 0) { |
if (defined($$memchg{$check})) { |
if (grep/^$item$/,@{$$memchg{$check}}) { |
if (ref(@{$$memchg{$check}}) eq 'ARRAY') { |
$match = 1; |
if (@{$$memchg{$check}} > 0) { |
last; |
if (grep/^$item$/,@{$$memchg{$check}}) { |
|
$match = 1; |
|
last; |
|
} |
|
} |
} |
} |
} |
} |
} |
} |