--- loncom/interface/loncoursegroups.pm 2006/11/20 23:49:49 1.64
+++ loncom/interface/loncoursegroups.pm 2007/12/13 01:08:47 1.71
@@ -1,6 +1,6 @@
# The LearningOnline Network with CAPA
#
-# $Id: loncoursegroups.pm,v 1.64 2006/11/20 23:49:49 raeburn Exp $
+# $Id: loncoursegroups.pm,v 1.71 2007/12/13 01:08:47 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -92,13 +92,13 @@ sub handler {
my $action = $env{'form.action'};
my $state = $env{'form.state'};
- if ((!defined($action)) || ($action eq 'view') || ($action eq 'modify') || ($action eq 'delete')) {
+ if ((!defined($action)) || ($action eq 'view') || ($action eq 'modify') || ($action eq 'delete') || ($action eq 'reenable')) {
if (!defined($state)) {
$state = 'view';
}
}
if ($action eq 'create' || $action eq 'modify' || $action eq 'view' ||
- $action eq 'delete') {
+ $action eq 'delete' || $action eq 'reenable') {
if ($view_permission || $manage_permission) {
if ($state eq 'view') {
&print_main_menu($r,$cdom,$cnum,\%functions,\%idx,
@@ -140,10 +140,10 @@ function openGroupRoster(group,status) {
rosterbrowser.focus();
}\n|;
$r->print(&header('Groups',$jscript,$action,$state));
- if ($env{'form.refpage'} eq 'enrl') {
+ if ($env{'form.refpage'} eq 'cusr') {
&Apache::lonhtmlcommon::add_breadcrumb
- ({href=>"/adm/dropadd",
- text=>"Enrollment Manager"});
+ ({href=>"/adm/createuser",
+ text=>"User Management"});
}
&Apache::lonhtmlcommon::add_breadcrumb
({href=>"/adm/coursegroups",
@@ -167,11 +167,14 @@ sub display_groups {
view => ' ''.$lt{'redg'}.'';
+ }
+ }
+ }
+ my %curr_groups = &Apache::longroup::coursegroups($cdom,$cnum,undef,
+ $status);
+
if (%curr_groups) {
if ($manage_permission) {
- if (!exists($env{'form.refpage'})) {
- $r->print('
'.$lt{'crng'}.'');
+ if ($action ne 'reenable') {
+ $r->print('
'.$lt{'crng'}.'');
+ }
+ if ($reenable_link) {
+ $r->print($reenable_link);
}
}
$r->print('
');
@@ -293,7 +314,8 @@ END
$functionality = &mt('None available');
}
my $link = $actionlinks{$action};
- if ($action eq 'modify' || $action eq 'delete') {
+ if ($action eq 'modify' || $action eq 'delete' ||
+ $action eq 'reenable') {
$link .= $group;
} else {
$link .= $group.'/smppg?ref=grouplist';
@@ -303,8 +325,7 @@ END
}
$link .= '">'.$lt{$action}.'';
if ($action eq 'view') {
- if (($manage_permission) &&
- ($env{'form.refpage'} ne 'enrl')) {
+ if ($manage_permission) {
$link .= ' '.$actionlinks{'modify'}.
$group.'">'.$lt{'modify'}.''.
' '.$actionlinks{'delete'}.
@@ -340,12 +361,14 @@ END
} else {
$r->print($lt{'nogr'});
if ($manage_permission) {
- if (!exists($env{'form.refpage'})) {
- $r->print('
'.$lt{'crng'}.'');
+ $r->print('
'.$lt{'crng'}.'');
+ if ($action ne 'reenable') {
+ if ($reenable_link) {
+ $r->print($reenable_link);
+ }
}
} else {
$r->print('
'.$lt{'alth'});
-
}
}
} else {
@@ -433,7 +456,7 @@ sub group_administration {
$state = 'pick_task';
}
} else {
- %stored = &retrieve_settings($cdom,$cnum,$groupname);
+ %stored = &retrieve_settings($cdom,$cnum,$groupname,$action);
if (ref($stored{'types'}) eq 'ARRAY') {
@types = @{$stored{'types'}};
}
@@ -812,6 +835,7 @@ function changeSort(caller) {
@{$states{'create'}} = ('pick_name','pick_members','pick_privs','result');
@{$states{'modify'}} = ('pick_task');
@{$states{'delete'}} = ('verify','result');
+ @{$states{'reenable'}} = ('verify','result');
@{$branchstates{'noprivs'}} = ('result');
@{$branchstates{'settings'}} = ('change_settings','chgresult');
@{$branchstates{'members'}} = ('change_members','change_privs','memresult');
@@ -822,7 +846,7 @@ function changeSort(caller) {
push (@{$states{$action}},@{$branchstates{$env{'form.branch'}}});
}
- if (($action eq 'create') || ($action eq 'modify') || ($action eq 'delete')) {
+ if (($action eq 'create') || ($action eq 'modify') || ($action eq 'delete') || ($action eq 'reenable')) {
my $done = 0;
my $i=0;
while ($i<@{$states{$action}} && !$done) {
@@ -838,14 +862,14 @@ function changeSort(caller) {
$r->print(&header("Groups Manager",
$jscript,$action,$state,$page,$loaditems));
- if ($env{'form.refpage'} eq 'enrl') {
+ if ($env{'form.refpage'} eq 'cusr') {
&Apache::lonhtmlcommon::add_breadcrumb
- ({href=>"/adm/dropadd",
- text=>"Enrollment Manager",
+ ({href=>"/adm/createuser",
+ text=>"User Management",
faq=>9,bug=>'Instructor Interface',});
if ($action eq 'modify' || $action eq 'delete') {
&Apache::lonhtmlcommon::add_breadcrumb
- ({href=>"/adm/coursegroups?refpage=enrl&action=$action",
+ ({href=>"/adm/coursegroups?refpage=cusr&action=$action",
text=>"Groups",
faq=>9,bug=>'Instructor Interface',});
}
@@ -885,6 +909,10 @@ function changeSort(caller) {
verify => 'Verify deletion',
result => 'Deletion Complete'
);
+ %{$trail{'reenable'}} = &Apache::lonlocal::texthash(
+ verify => 'Verify Re-enable',
+ result => 'Re-enabled'
+ );
my %navbuttons = &Apache::lonlocal::texthash(
gtns => 'Go to next step',
gtps => 'Go to previous step',
@@ -893,7 +921,7 @@ function changeSort(caller) {
gtpp => 'Go to previous page',
adme => 'Add members',
);
- if ((($action eq 'create') || ($action eq 'modify') || ($action eq 'delete')) &&
+ if ((($action eq 'create') || ($action eq 'modify') || ($action eq 'delete') || ($action eq 'reenable')) &&
($manage_permission)) {
for (my $i=0; $i<@{$states{$action}}; $i++) {
if ($state eq $states{$action}[$i]) {
@@ -938,8 +966,16 @@ function changeSort(caller) {
}
sub retrieve_settings {
- my ($cdom,$cnum,$groupname) = @_;
- my %curr_groups = &Apache::longroup::coursegroups($cdom,$cnum,$groupname);
+ my ($cdom,$cnum,$groupname,$action) = @_;
+ my %curr_groups;
+ my $namespace;
+ if ($action eq 'reenable') {
+ $namespace = 'deleted_groups';
+ } else {
+ $namespace = 'coursegroups';
+ }
+ %curr_groups = &Apache::longroup::coursegroups($cdom,$cnum,$groupname,
+ $namespace);
return if (!%curr_groups);
@@ -1079,13 +1115,21 @@ sub display_control {
$sectioncount,$stored,$gpterm,$ucgpterm,$crstype);
}
} elsif ($action eq 'delete') {
- my %stored = &retrieve_settings($cdom,$cnum,$groupname);
+ my %stored = &retrieve_settings($cdom,$cnum,$groupname,$action);
if ($state eq 'verify') {
&verify_delete($r,$groupname,$state,$action,$page,$states,
\%stored);
} elsif ($state eq 'result') {
&delete_group($r,$cdom,$cnum,$groupname);
}
+ } elsif ($action eq 'reenable') {
+ my %stored = &retrieve_settings($cdom,$cnum,$groupname,$action);
+ if ($state eq 'verify') {
+ &verify_reenable($r,$groupname,$state,$action,$page,$states,
+ \%stored);
+ } elsif ($state eq 'result') {
+ &reenable_group($r,$cdom,$cnum,$groupname);
+ }
}
}
@@ -1102,7 +1146,7 @@ sub verify_delete {
my $prevtext = &mt('Go back');
my $nexttext = &mt('Delete group');
my $prev;
- if ($env{'form.refpage'} eq 'enrl') {
+ if ($env{'form.refpage'} eq 'cusr') {
$prev = 'view';
}
&display_navbuttons($r,$formname,$prev,$prevtext,
@@ -1124,13 +1168,13 @@ sub delete_group {
foreach my $key (sort(keys(%membership))) {
if ($key =~ /^\Q$groupname\E:([^:]+:[^:]+)$/) {
my $user = $1;
- my($end,$start,@userprivs) = split(/:/,$membership{$key});
+ my($end,$start,$userprivs) = split(/:/,$membership{$key},3);
if ($start != -1) {
$num_users ++;
- $usersettings{$groupname.':'.$user} = $now.':-1:';
+ $usersettings{$groupname.':'.$user} = $now.':-1:'.$userprivs;
if (&Apache::lonnet::modify_group_roles($cdom,$cnum,
$groupname,$user,
- $now,'-1','')
+ $now,'-1',$userprivs)
eq 'ok') {
$num_ok ++;
push(@deleted,$user);
@@ -1147,25 +1191,55 @@ sub delete_group {
\%usersettings);
}
if ($num_fail > 0) {
- $r->print(&mt('Group deletion failed because deletion of [_1] out of [_2] members failed',$num_fail,$num_users));
+ $r->print(&mt('Group deletion failed because deletion of [_1] out of [_2] members failed.',$num_fail,$num_users));
} else {
my ($result,$message) =
- &Apache::lonnet::delete_coursegroup($cdom,$cnum,$groupname);
+ &Apache::lonnet::toggle_coursegroup_status($cdom,$cnum,
+ $groupname,'delete');
if ($result eq 'ok') {
my $outcome = &modify_folders($cdom,$cnum,$groupname);
if ($outcome eq '') {
- $r->print(&mt('Group successfully deleted'));
+ $r->print(&mt('Group successfully deleted.'));
} else {
$r->print(&mt("Although the group was deleted, an error ([_1]) occurred when removing the group's folder from the 'Course Groups' folder.",$outcome));
}
} else {
- $r->print(&mt('Group deletion failed'));
+ $r->print(&mt('Group deletion failed.'));
}
}
return;
}
+sub reenable_folder {
+ my ($cdom,$cnum,$groupname,$description) = @_;
+ my $outcome;
+ my $crspath = '/uploaded/'.$cdom.'/'.$cnum.'/';
+ my $allgrpsmap = $crspath.'group_allfolders.sequence';
+ my $foldertitle = &mt('Course Folder -').$description;
+ my $mapurl = $crspath.'group_folder_'.
+ $groupname.'.sequence';
+ my ($errtext,$fatal)=&LONCAPA::map::mapread($allgrpsmap);
+ if ($fatal) {
+ $outcome=&mt('Error reading contents of parent folder to group').
+ " ($allgrpsmap): $errtext".'
';
+ } else {
+ my $idx=&LONCAPA::map::getresidx($mapurl);
+ $LONCAPA::map::resources[$idx] = $foldertitle.':'.$mapurl.
+ ':false:normal:res';
+ $LONCAPA::map::order[1+$#LONCAPA::map::order]=$idx;
+ my ($outtext,$errtext) = &LONCAPA::map::storemap($allgrpsmap,1);
+ if ($errtext) {
+ $outcome = &mt('Error saving updated parent folder to group').
+ "- $allgrpsmap - $errtext".'
';
+ } else {
+ my ($furl,$ferr) =
+ &Apache::lonuserstate::readmap($cdom.'/'.$cnum);
+ }
+ }
+ return $outcome;
+}
+
sub modify_folders {
my ($cdom,$cnum,$groupname) = @_;
my $outcome;
@@ -1173,8 +1247,12 @@ sub modify_folders {
my $groupmap = '/uploaded/'.$cdom.'/'.$cnum.'/'.'group_folder_'.
$groupname.'.sequence';
my $groupmapres = $navmap->getResourceByUrl($groupmap);
+ my ($map,$id,$src);
if ($groupmapres) {
- my ($map,$id,$src)=&Apache::lonnet::decode_symb($groupmapres->symb());
+ ($map,$id,$src)=&Apache::lonnet::decode_symb($groupmapres->symb());
+ }
+ undef($navmap);
+ if ($map) {
$map = '/'.$map;
my ($errtext,$fatal) = &LONCAPA::map::mapread($map);
if ($fatal) {
@@ -1201,17 +1279,116 @@ sub modify_folders {
}
$#LONCAPA::map::order--;
my ($outtext,$errtext) = &LONCAPA::map::storemap($map,1);
- if ($outtext) {
- $outcome = &mt('Error storing updated parent folder to group'). " ($map): $errtext".'
';
- return;
- }
+ if ($errtext) {
+ $outcome = &mt('Error saving updated parent folder to group'). "- $map - $errtext".'
';
+ } else {
+ my ($furl,$ferr) =
+ &Apache::lonuserstate::readmap($cdom.'/'.$cnum);
+ }
}
}
}
- undef($navmap);
return $outcome;
}
+sub verify_reenable {
+ my ($r,$groupname,$formname,$action,$page,$states,$stored) = @_;
+ $r->print(&Apache::lonhtmlcommon::echo_form_input([]));
+ $r->print(&mt("You have requested enabling the following previously deleted group: ").''.
+ $stored->{'description'}.''.
+ '
'.&mt('When a deleted group is re-enabled the following occurs:').'