--- loncom/interface/loncoursegroups.pm 2006/11/28 19:46:00 1.65
+++ loncom/interface/loncoursegroups.pm 2006/12/04 21:44:02 1.68
@@ -1,6 +1,6 @@
# The LearningOnline Network with CAPA
#
-# $Id: loncoursegroups.pm,v 1.65 2006/11/28 19:46:00 raeburn Exp $
+# $Id: loncoursegroups.pm,v 1.68 2006/12/04 21:44:02 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -1297,10 +1297,14 @@ sub verify_reenable {
}
sub reenable_group {
- my ($r,$cdom,$cnum,$groupname,) = @_;
+ my ($r,$cdom,$cnum,$groupname) = @_;
my %groups =
&Apache::longroup::coursegroups($cdom,$cnum,$groupname,
'deleted_groups');
+ if (keys(%groups) == 0) {
+ $r->print(&mt('The group ([_1]) was not re-enabled, because it is not a deleted group.
Perhaps it has already been re-enabled?',$groupname));
+ return;
+ }
my %groupinfo =
&Apache::longroup::get_group_settings($groups{$groupname});
my $defstart = $groupinfo{'startdate'};
@@ -1368,6 +1372,7 @@ sub reenable_group {
} else {
$r->print(&mt('Re-enabling group failed'));
}
+ return;
}
sub header {
@@ -3134,7 +3139,7 @@ sub write_group_data {
$description,$tools,\%groupinfo,
$gpterm,$ucgpterm,$crstype);
if ($result ne 'ok') {
- $r->print(&mt('A problem occurred when creating folders for the new [_1]. [_2].
',$gpterm,$result));
+ $r->print(&mt('A problem occurred when creating folders for the new [_1].
[_2]
',$gpterm,$result));
}
$r->print(&mt('[_1] [_2] was created.
',$ucgpterm,$groupname));
} elsif ($action eq 'modify') {
@@ -3668,28 +3673,38 @@ sub add_group_folder {
if ($cdom eq '' || $cnum eq '') {
return &mt('Error: invalid course domain or number - group folder creation failed');
}
- my ($outcome,$allgrpsmap,$grpmap,$boardsmap,$grppage);
- my $navmap = Apache::lonnavmaps::navmap->new();
+ my ($outcome,$allgrpsmap,$grpmap,$boardsmap,$grppage,$warning);
my $crspath = '/uploaded/'.$cdom.'/'.$cnum.'/';
$allgrpsmap = $crspath.'group_allfolders.sequence';
- my $topmap = $navmap->getResourceByUrl($allgrpsmap);
- undef($navmap);
if ($action eq 'create') {
- # check if group_allfolders.sequence exists.
- if (!$topmap) {
- my $grpstitle = &mt('[_1] [_2]s',$crstype,$ucgpterm);
- my $topmap_url = '/'.$env{'course.'.$env{'request.course.id'}.'.url'};
- $topmap_url =~ s|/+|/|g;
- if ($topmap_url =~ m|^/uploaded|) {
- $outcome = &map_updater($cdom,$cnum,'group_allfolders.sequence',
- 'toplevelgroup',$grpstitle,$topmap_url);
+ if (&get_folder_lock($cdom,$cnum,'group_allfolders',$now) eq 'ok') {
+ # check if group_allfolders.sequence exists.
+ my ($errtext,$fatal)=&LONCAPA::map::mapread($allgrpsmap);
+ if ($fatal == 2) { #file does not exist;
+ my $grpstitle = &mt('[_1] [_2]s',$crstype,$ucgpterm);
+ my $topmap_url = '/'.$env{'course.'.$env{'request.course.id'}.'.url'};
+ $topmap_url =~ s|/+|/|g;
+ if ($topmap_url =~ m|^/uploaded|) {
+ $outcome = &map_updater($cdom,$cnum,'group_allfolders.sequence',
+ 'toplevelgroup',$grpstitle,$topmap_url);
+ } else {
+ $outcome = &mt('Non-standard course - folder for all groups not added.');
+ }
if ($outcome ne 'ok') {
+ my $delresult = &release_folder_lock($cdom,$cnum,'group_allfolders');
+ if ($delresult ne 'ok') {
+ $warning = $delresult;
+ }
return $outcome;
}
- } else {
- $outcome = &mt('Non-standard course - folder for all groups not added.');
- return $outcome;
}
+ my $delresult = &release_folder_lock($cdom,$cnum,'group_allfolders');
+ if ($delresult ne 'ok') {
+ $warning = $delresult ;
+ }
+ } else {
+ $outcome = &mt('Could not obtain exclusive lock to check status of the folder for all groups. No group folder added.');
+ return $outcome;
}
my $grpfolder = &mt('[_1] Folder -',$ucgpterm,).$description;
$grppage='/adm/'.$cdom.'/'.$cnum.'/'.$groupname.'/smppg';
@@ -3699,7 +3714,7 @@ sub add_group_folder {
'grpseq',$grpfolder,$allgrpsmap,$grppage,
$grptitle);
if ($outcome ne 'ok') {
- return $outcome;
+ return $outcome.$warning;
}
my $pageout = &create_homepage($cdom,$cnum,$groupname,$groupinfo,
$tools,$gpterm,$ucgpterm,$now);
@@ -3710,7 +3725,7 @@ sub add_group_folder {
my $outcome = &map_updater($cdom,$cnum,'group_boards_'.$groupname.
'.sequence','bbseq',$disctitle,$grpmap);
if ($outcome ne 'ok') {
- return $outcome;
+ return $outcome.$warning;
}
$boardsmap = $crspath.'group_boards_'.$groupname.'.sequence';
}
@@ -3718,7 +3733,7 @@ sub add_group_folder {
#modify group folder if status of discussions tools is changed
}
my ($furl,$ferr)= &Apache::lonuserstate::readmap($cdom.'/'.$cnum);
- $navmap = Apache::lonnavmaps::navmap->new();
+ my $navmap = Apache::lonnavmaps::navmap->new();
# modify parameters
my $parm_result;
if ($action eq 'create') {
@@ -3732,8 +3747,39 @@ sub add_group_folder {
$parm_result .= &parm_setter($navmap,$cdom,$boardsmap,$groupname);
}
}
+ undef($navmap);
if ($parm_result) {
- return $parm_result;
+ return $warning.$parm_result;
+ } else {
+ return 'ok';
+ }
+}
+
+sub get_folder_lock {
+ my ($cdom,$cnum,$folder_name,$now) = @_;
+ # get lock for folder being edited.
+ my $lockhash = {
+ $folder_name."\0".'locked_folder' => $now.':'.$env{'user.name'}.
+ ':'.$env{'user.domain'},
+ };
+ my $tries = 0;
+ my $gotlock = &Apache::lonnet::newput('coursegroups',$lockhash,$cdom,$cnum);
+
+ while (($gotlock ne 'ok') && $tries <3) {
+ $tries ++;
+ sleep(1);
+ $gotlock = &Apache::lonnet::newput('coursegroups',$lockhash,$cdom,$cnum);
+ }
+ return $gotlock;
+}
+
+sub release_folder_lock {
+ my ($cdom,$cnum,$folder_name) = @_;
+ # remove lock
+ my @del_lock = ($folder_name."\0".'locked_folder');
+ my $dellockoutcome=&Apache::lonnet::del('coursegroups',\@del_lock,$cdom,$cnum);
+ if ($dellockoutcome ne 'ok') {
+ return ('
'.&mt('Warning: failed to release lock for folder: [_1].',$folder_name).'
');
} else {
return 'ok';
}
@@ -3750,7 +3796,7 @@ sub map_updater {
if ($newmapurl !~ m|^/uploaded|) {
$outcome = &mt('Error uploading new folder.')." ($newfile): $newmapurl".'
';
return $outcome;
- }
+ }
my ($errtext,$fatal)=&LONCAPA::map::mapread($parentmap);
if ($fatal) {
$outcome = &mt('Error reading contents of parent folder')." ($parentmap): $errtext".'
';
@@ -3761,7 +3807,7 @@ sub map_updater {
':false:normal:res';
$LONCAPA::map::order[1+$#LONCAPA::map::order]=$newidx;
my ($outtext,$errtext) = &LONCAPA::map::storemap($parentmap,1);
- if ($outtext) {
+ if ($errtext) {
$outcome = &mt('Error storing updated parent folder')." ($parentmap): $errtext".'
';
return $outcome;
}
@@ -3796,18 +3842,23 @@ sub parm_setter {
},
);
my $res = $navmap->getResourceByUrl($url);
- my $symb = $res->symb();
- foreach my $level (keys(%hide_settings)) {
- my $parmresult = &Apache::lonparmset::storeparm_by_symb($symb,
+ if ($res) {
+ my $symb = $res->symb();
+ foreach my $level (keys(%hide_settings)) {
+ my $parmresult =
+ &Apache::lonparmset::storeparm_by_symb($symb,
'0_hiddenresource',
$hide_settings{$level}{'num'},
$hide_settings{$level}{'set'},
'string_yesno',undef,$cdom,
undef,undef,
$hide_settings{$level}{'extra'});
- if ($parmresult) {
- $allresults .= $level.': '.$parmresult;
+ if ($parmresult) {
+ $allresults .= $level.': '.$parmresult;
+ }
}
+ } else {
+ $allresults = &mt('Parameters not set for [_1] because the resource was not recognized as part of the course',$url).'
';
}
return $allresults;
}