# The LearningOnline Network with CAPA
#
# $Id
#
# Copyright Michigan State University Board of Trustees
#
# This file is part of the LearningOnline Network with CAPA (LON-CAPA).
#
# LON-CAPA is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# LON-CAPA is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with LON-CAPA; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# /home/httpd/html/adm/gpl.txt
#
# http://www.lon-capa.org/
#
package Apache::grouproster;
use strict;
use Apache::lonnet;
use Apache::loncommon;
use Apache::lonhtmlcommon;
use Apache::lonlocal;
use Apache::longroup;
use LONCAPA;
use Apache::Constants qw(:common :http);
use lib '/home/httpd/lib/perl/';
sub handler {
my ($r) = @_;
&Apache::loncommon::content_type($r,'text/html');
$r->send_http_header;
if ($r->header_only) {
return OK;
}
# Needs to be in a course
if (! ($env{'request.course.fn'})) {
# Not in a course
$env{'user.error.msg'}=
"/adm/coursegroups:mdg:0:0:Cannot edit or view course groups";
return HTTP_NOT_ACCEPTABLE;
}
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
['group','ref','status']);
my $gpterm = &Apache::loncommon::group_term();
my $ucgpterm = $gpterm;
$ucgpterm =~ s/^(\w)/uc($1)/e;
my $crstype = &Apache::loncommon::course_type();
my $group;
my %curr_groups;
# Validating group input.
my $badinput;
if ((!defined($env{'form.group'})) || ($env{'form.group'} eq '')) {
$r->print(&mt('No group name provided.').'
');
$badinput = 1;
} else {
$group = $env{'form.group'};
$group =~ s/\W//g;
}
if (!$badinput && $group eq '') {
$r->print(&mt('Invalid group name provided.').'
');
$badinput = 1;
}
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
if ($cdom eq '' || $cnum eq '') {
$r->print(&mt('Invalid [_1]',$crstype).'
');
$badinput = 1;
}
if (!$badinput) {
%curr_groups = &Apache::longroup::coursegroups($cdom,$cnum);
if (!defined($curr_groups{$group})) {
$r->print(&mt('"[_1]" is not the name of a valid group in this [_2].',
$group,lc($crstype)));
$badinput = 1;
}
}
if ($badinput) {
return OK;
}
&Apache::lonhtmlcommon::clear_breadcrumbs();
my $can_view = &Apache::lonnet::allowed('vgm',$env{'request.course.id'}.
'/'.$group);
my $view_details = &Apache::lonnet::allowed('vmd',$env{'request.course.id'}.'/'.$group);
my $viewgrps = &Apache::lonnet::allowed('vcg',$env{'request.course.id'}.($env{'request.course.sec'}?'/'.$env{'request.course.sec'}:''));
my $editgrps = &Apache::lonnet::allowed('mdg',$env{'request.course.id'});
if ((!$can_view) && (!$view_details) && (!$viewgrps) && (!$editgrps)) {
$r->print(&mt('You do not have privileges to view the membership roster in this '.$gpterm.'.'));
return OK;
}
my %content = &Apache::longroup::get_group_settings($curr_groups{$group});
my $description = &unescape($content{'description'});
$r->print(&roster_header($cdom,$cnum,$group,$description,$gpterm,$ucgpterm));
my $available;
foreach my $tool (sort(keys(%{$content{'functions'}}))) {
if ($content{functions}{$tool} eq 'on') {
push(@{$available},$tool);
}
}
&roster_table($r,$cdom,$cnum,$group,$can_view,$view_details,$viewgrps,
$editgrps,$available,$gpterm,$ucgpterm);
$r->print(&Apache::loncommon::end_page());
return OK;
}
sub roster_header {
my ($cdom,$cnum,$group,$description,$gpterm,$ucgpterm) = @_;
my $refarg;
if (exists($env{'form.ref'}) && $env{'form.ref'} ne 'popup') {
$refarg = 'ref='.$env{'form.ref'};
&Apache::lonhtmlcommon::add_breadcrumb
({href=>"/adm/coursegroups",
text=>"Groups",
title=>"View course groups"});
}
my $args;
if ($env{'form.ref'} eq 'popup') {
$args = {
'no_nav_bar' => 1,
'no_inline_link' => 1,
};
}
my $jscript = qq|
function changeSort(caller) {
document.grouproster.sortby.value = caller;
document.grouproster.submit();
}\n|;
my $itemtitle = &mt('Group membership status - [_1]',$description);
my $output =
&Apache::loncommon::start_page('Group Membership',
'',$args);
if ($env{'form.ref'} eq 'popup') {
$output .= '