# The LearningOnline Network with CAPA
#
# 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 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']);
my $gpterm = &Apache::loncommon::group_term();
my $ucgpterm = $gpterm;
$ucgpterm =~ s/^(\w)/uc($1)/e;
my $crstype = &Apache::loncommon::course_type();
my $group;
if ((!defined($env{'form.group'})) || ($env{'form.group'} eq '')) {
$r->print(&mt('No [_1] name provided',$gpterm));
} else {
$group = $env{'form.group'};
$group =~ s/\W//g;
}
if ($group eq '') {
$r->print(&mt('Invalid [_1] name provided',$gpterm));
}
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));
}
my @coursegroups = split(/:/,$env{'request.course.groups'});
if ((@coursegroups == 0) || ((@coursegroups > 0) &&
(!(grep/^\Q$group\E$/,@coursegroups)))) {
$r->print(&mt('[_1] is not the name of a valid [_2] in this [_3].',
$group,$gpterm,lc($crstype)));
}
&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'});
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 [_1]',$gpterm));
return OK;
}
my %coursegroups = &Apache::longroup::coursegroups($cdom,$cnum,$group);
my %content = &Apache::longroup::get_group_settings($coursegroups{$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 $jscript = qq|
function changeSort(caller) {
document.grouproster.sortby.value = caller;
document.grouproster.submit();
}\n|;
my $output =
&Apache::loncommon::start_page(&mt('[_1] Membership ',$ucgpterm),
'');
&Apache::lonhtmlcommon::add_breadcrumb
({href=>"/adm/$cdom/$cnum/$group/grppg",
text=>"$ucgpterm: $description",
title=>"Go to group's home page"},
{href=>"/adm/grouproster?group=$group",
text=>"Membership roster",
title=>"Display group membership"},);
$output .= &Apache::lonhtmlcommon::breadcrumbs(&mt('[_1] membership status - [_2]',$gpterm,$description));
return $output;
}
sub roster_table {
my ($r,$cdom,$cnum,$group,$can_view,$view_details,$viewgrps,$editgrps,
$available,$gpterm,$ucgpterm) = @_;
my $fixedprivs = &Apache::longroup::get_fixed_privs();
my ($memberinfo,$hastools,$addtools,$numitems) =
&Apache::longroup::group_memberlist($cdom,$cnum,$group,$fixedprivs,
$available);
my (%tooltype,$toolprivs);
if ($hastools) {
$toolprivs = &Apache::longroup::get_tool_privs($gpterm);
foreach my $tool (sort(keys(%{$toolprivs}))) {
foreach my $priv (sort(keys(%{$$toolprivs{$tool}}))) {
$tooltype{$priv} = $tool;
}
}
}
my %lt = &Apache::lonlocal::texthash(
'name' => 'Name',
'usnm' => 'Username',
'doma' => 'Domain',
'stid' => 'ID',
'stda' => 'Start Date',
'enda' => 'End Date',
'func' => 'Functionality',
'priv' => 'Privileges',
'all' => 'Any Membership status',
'active' => 'Active Member',
'previous' => 'Former Member',
'future' => 'Future Member',
'updi' => 'Update Display',
);
my $status = $env{'form.status'};
if (!defined($status)) {
$status = 'active';
}
if (($viewgrps) || ($editgrps) ||
(&Apache::lonnet::allowed('vmd',$env{'request.course.id'}.'/'.$group))) {
if (keys(%{$memberinfo}) == 0) {
$r->print(&mt('There are no membership data to display for this [_1]',
$gpterm));
return;
}
$r->print('