--- loncom/interface/loncoursegroups.pm 2006/07/20 22:17:14 1.55
+++ loncom/interface/loncoursegroups.pm 2009/11/06 19:49:26 1.104
@@ -1,6 +1,6 @@
# The LearningOnline Network with CAPA
#
-# $Id: loncoursegroups.pm,v 1.55 2006/07/20 22:17:14 raeburn Exp $
+# $Id: loncoursegroups.pm,v 1.104 2009/11/06 19:49:26 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -29,13 +29,14 @@ package Apache::loncoursegroups;
use strict;
use Apache::lonnet;
-use Apache::loncommon;
-use Apache::lonhtmlcommon;
+use Apache::loncommon();
+use Apache::lonhtmlcommon();
use Apache::lonlocal;
-use Apache::lonnavmaps;
-use Apache::longroup;
-use Apache::portfolio;
+use Apache::lonnavmaps();
+use Apache::longroup();
+use Apache::portfolio();
use Apache::Constants qw(:common :http);
+use LONCAPA::map();
use lib '/home/httpd/lib/perl/';
use LONCAPA;
@@ -53,7 +54,7 @@ sub handler {
if (! ($env{'request.course.fn'})) {
# Not in a course
$env{'user.error.msg'}=
- "/adm/coursegroups:mdg:0:0:Cannot edit or view course groups";
+ "/adm/coursegroups:mdg:0:0:Cannot edit or view course/community groups";
return HTTP_NOT_ACCEPTABLE;
}
@@ -74,11 +75,11 @@ sub handler {
my $crstype = &Apache::loncommon::course_type();
my %functions = (
- email => 'E-mail',
- discussion => 'Discussion boards',
- chat => 'Chat',
- files => 'File repository',
- roster => 'Membership roster',
+ email => 'Send Messages',
+ discussion => 'Discussion Boards',
+ chat => 'Chat Room',
+ files => 'Group Portfolio',
+ roster => 'Membership Roster',
homepage => $ucgpterm.' home page',
);
@@ -91,12 +92,13 @@ sub handler {
my $action = $env{'form.action'};
my $state = $env{'form.state'};
- if ((!defined($action)) || ($action eq 'view') || ($action eq 'modify')) {
+ 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') {
+ if ($action eq 'create' || $action eq 'modify' || $action eq 'view' ||
+ $action eq 'delete' || $action eq 'reenable') {
if ($view_permission || $manage_permission) {
if ($state eq 'view') {
&print_main_menu($r,$cdom,$cnum,\%functions,\%idx,
@@ -109,8 +111,10 @@ sub handler {
$crstype);
}
} else {
- $r->print(&mt('You do not have [_1] administration '.
- 'privileges in this [_2]',$gpterm,lc($crstype)));
+ $r->print('
'
+ .&mt('You do not have '.$gpterm.' administration '
+ .'privileges in this '.lc($crstype).'.')
+ .'
');
}
} else {
&print_main_menu($r,$cdom,$cnum,\%functions,\%idx,$view_permission,
@@ -127,17 +131,30 @@ sub print_main_menu {
function changeSort(caller) {
document.$state.sortby.value = caller;
document.$state.submit();
+}
+function openGroupRoster(group,status) {
+ var url = '/adm/grouproster?';
+ url += 'group='+group+'&status='+status+'&ref=popup';
+ var title = 'Group Membership';
+ var options = 'scrollbars=1,resizable=1,menubar=0';
+ options += ',width=700,height=600';
+ rosterbrowser = open(url,title,options,'1');
+ rosterbrowser.focus();
}\n|;
- $r->print(&header('Groups',$jscript,$action,$state));
- if ($env{'form.refpage'} eq 'enrl') {
+ $r->print(&header('My Space',$jscript,$action,$state));
+ 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",
text=>"Groups"});
- $r->print(&Apache::lonhtmlcommon::breadcrumbs('Groups'));
+ my $helpitem;
+ if ($manage_permission) {
+ $helpitem = 'Creating_Groups';
+ }
+ $r->print(&Apache::lonhtmlcommon::breadcrumbs('Groups',$helpitem));
&display_groups($r,$cdom,$cnum,$functions,$idx,$view_permission,
$manage_permission,$action,$state,$gpterm,$ucgpterm,
$crstype);
@@ -155,12 +172,15 @@ sub display_groups {
$env{'form.refpage'}.'&state=pick_task&groupname=',
view => ''
+ .&mt('Group deletion failed because deletion of [_1] out of [_2] members failed.'
+ ,$num_fail,$num_users)
+ .'
');
+ } else {
+ my ($result,$message) =
+ &Apache::lonnet::toggle_coursegroup_status($cdom,$cnum,
+ $groupname,'delete');
+ if ($result eq 'ok') {
+ my $outcome = &modify_folders($cdom,$cnum,$groupname,$crstype);
+ if ($outcome eq '') {
+ $r->print(''
+ .&mt('Group successfully deleted.')
+ .'
');
+ } else {
+ $r->print('');
+ if ($crstype eq 'Comunity') {
+ $r->print(&mt("Although the group was deleted, an error occurred when removing the group's folder from the 'Community Groups' folder: [_1]",$outcome));
+ } else {
+ $r->print(&mt("Although the group was deleted, an error occurred when removing the group's folder from the 'Course Groups' folder: [_1]",$outcome));
+ }
+ $r->print('
');
+ }
+ } else {
+ $r->print(''
+ .&mt('An error occurred when 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('An error occurred when 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,$crstype) = @_;
+ my ($outcome,$groupmap,$groupmapres,$map,$id,$src);
+ my $navmap = Apache::lonnavmaps::navmap->new();
+ if (!defined($navmap)) {
+ $outcome = '';
+ if ($crstype eq 'Community') {
+ $outcome .= &mt("Error reading community contents.").' '.
+ &mt("You need to re-initialize the community.");
+ } else {
+ $outcome .= &mt("Error reading course contents.").' '.
+ &mt("You need to re-initialize the course.");
+ }
+ $outcome .= '
';
+ return $outcome;
+ }
+ $groupmap = '/uploaded/'.$cdom.'/'.$cnum.'/'.'group_folder_'.
+ $groupname.'.sequence';
+ $groupmapres = $navmap->getResourceByUrl($groupmap);
+ if ($groupmapres) {
+ ($map,$id,$src)=&Apache::lonnet::decode_symb($groupmapres->symb());
+ }
+ undef($navmap);
+ if ($map) {
+ $map = '/'.$map;
+ my ($errtext,$fatal) = &LONCAPA::map::mapread($map);
+ if ($fatal) {
+ $outcome=''
+ .&mt('An error occurred when reading contents of parent folder to group:')
+ ."
($map): $errtext"
+ .'
';
+ } else {
+ my $idx = 0;
+ my $grpidx;
+ foreach my $item (@LONCAPA::map::order) {
+ my ($name,$url)=split(/\:/,$LONCAPA::map::resources[$item]);
+ $url=&LONCAPA::map::qtescape($url);
+ if ($url eq $groupmap) {
+ $grpidx = $idx;
+ last;
+ } else {
+ $idx++;
+ }
+ }
+
+ if ($grpidx ne '') {
+ &LONCAPA::map::makezombie($LONCAPA::map::order[$grpidx]);
+ for (my $i=$grpidx;$i<$#LONCAPA::map::order;$i++) {
+ $LONCAPA::map::order[$i] = $LONCAPA::map::order[$i+1];
+ }
+ $#LONCAPA::map::order--;
+ my ($outtext,$errtext) = &LONCAPA::map::storemap($map,1);
+ if ($errtext) {
+ $outcome=''
+ .&mt('An error occurred when saving updated parent folder to group:')
+ ."
$map - $errtext"
+ .'
';
+ } else {
+ my ($furl,$ferr) =
+ &Apache::lonuserstate::readmap($cdom.'/'.$cnum);
+ }
+ }
+ }
+ }
+ return $outcome;
+}
+
+sub verify_reenable {
+ my ($r,$groupname,$formname,$action,$page,$states,$stored,$crstype) = @_;
+ $r->print(&Apache::lonhtmlcommon::echo_form_input([]));
+ $r->print(&mt('You have requested enabling the previously deleted group [_1].'
+ ,''
+ .&mt('Membership reinstated for [quant,_1,user], each with start and end dates for group access set to defaults: [_2] and [_3]',$num_ok,$showstart,$showend)
+ .'
');
+ }
+ } else {
+ $r->print(''
+ .&mt('A problem occurred when trying to reinstate [_1] of the [_2] members of the pre-existing group.',$num_fail,$num_users)
+ .'
');
+ }
+ } else {
+ $r->print(''
+ .&mt('There were no group members to reinstate, as none were removed when the group was deleted.')
+ .'
');
+ }
+ my $outcome = &reenable_folder($cdom,$cnum,$groupname,$description,$crstype);
+ if ($outcome eq '') {
+ $r->print(''
+ .&mt('Group successfully re-enabled.')
+ .'
');
+ } else {
+ $r->print('');
+ if ($crstype eq 'Comunity') {
+ $r->print(&mt("Although the group was re-enabled, an error occurred when adding the group's folder to the 'Community Groups' folder: [_1]",$outcome));
+ } else {
+ $r->print(&mt("Although the group was re-enabled, an error occurred when adding the group's folder to the 'Course Groups' folder: [_1]",$outcome));
+ }
+ $r->print('
');
+ }
+ } else {
+ $r->print('