--- loncom/interface/loncoursegroups.pm 2006/07/28 18:44:27 1.58
+++ loncom/interface/loncoursegroups.pm 2008/08/24 12:54:55 1.78
@@ -1,6 +1,6 @@
# The LearningOnline Network with CAPA
#
-# $Id: loncoursegroups.pm,v 1.58 2006/07/28 18:44:27 raeburn Exp $
+# $Id: loncoursegroups.pm,v 1.78 2008/08/24 12:54:55 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;
@@ -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,
@@ -127,17 +129,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') {
+ 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 +170,15 @@ sub display_groups {
$env{'form.refpage'}.'&state=pick_task&groupname=',
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('
');
@@ -218,13 +254,13 @@ END
my $members_result = &group_members($cdom,$cnum,$group,
\%grp_info);
my $port_path = '/userfiles/groups/'.$group.'/portfolio';
- my $port_dir = &Apache::loncommon::propath($cdom,$cnum).$port_path;
my $totaldirs = 0;
my $totalfiles = 0;
- &group_files($group,$port_dir,\$totalfiles,\$totaldirs);
+ &group_files($group,$port_path,\$totalfiles,\$totaldirs);
$grp_info{$group}{'totalfiles'} = $totalfiles;
$grp_info{$group}{'totaldirs'} = $totaldirs;
- my $diskuse = &Apache::lonnet::diskusage($cdom,$cnum,$port_dir);
+ my $getpropath = 1;
+ my $diskuse = &Apache::lonnet::diskusage($cdom,$cnum,$port_path, $getpropath);
if ($grp_info{$group}{'quota'} > 0) {
my $pct_use = 0.1 * $diskuse/$grp_info{$group}{'quota'};
$grp_info{$group}{'diskuse'} = sprintf("%.0f",$pct_use);
@@ -282,7 +318,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';
@@ -292,10 +329,11 @@ 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'}.'';
+ $group.'">'.$lt{'modify'}.''.
+ ' '.$actionlinks{'delete'}.
+ $group.'">'.$lt{'delete'}.'';
}
}
$r->print(&Apache::loncommon::start_data_table_row('LC_data_table_dense').
@@ -327,12 +365,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 {
@@ -366,7 +406,6 @@ sub group_administration {
my @types = ();
my @roles = ();
my @sections = ();
- my @buildsections = ();
my %users = ();
my %userdata = ();
my @members = ();
@@ -420,7 +459,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'}};
}
@@ -526,16 +565,11 @@ sub group_administration {
}
if (defined($env{'form.sectionpick'})) {
@sections=&Apache::loncommon::get_env_multiple('form.sectionpick');
- if (grep/^all$/,@sections) {
- @buildsections = sort {$a cmp $b} keys(%sectioncount);
- } else {
- @buildsections = @sections;
- }
}
}
if (($state eq 'pick_members') || ($state eq 'pick_privs') || ($state eq 'change_privs')) {
- &build_members_list($cdom,$cnum,\@types,\@roles,\@buildsections,\%users,
+ &build_members_list($cdom,$cnum,\@types,\@roles,\@sections,\%users,
\%userdata);
}
if ($state eq 'pick_members') {
@@ -798,6 +832,8 @@ function changeSort(caller) {
my %branchstates = ();
@{$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');
@@ -808,7 +844,7 @@ function changeSort(caller) {
push (@{$states{$action}},@{$branchstates{$env{'form.branch'}}});
}
- if (($action eq 'create') || ($action eq 'modify')) {
+ if (($action eq 'create') || ($action eq 'modify') || ($action eq 'delete') || ($action eq 'reenable')) {
my $done = 0;
my $i=0;
while ($i<@{$states{$action}} && !$done) {
@@ -824,14 +860,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') {
+ if ($action eq 'modify' || $action eq 'delete') {
&Apache::lonhtmlcommon::add_breadcrumb
- ({href=>"/adm/coursegroups?refpage=enrl&action=modify",
+ ({href=>"/adm/coursegroups?refpage=cusr&action=$action",
text=>"Groups",
faq=>9,bug=>'Instructor Interface',});
}
@@ -867,6 +903,14 @@ function changeSort(caller) {
memresult => 'Modifications Complete',
addresult => 'Additions Complete',
);
+ %{$trail{'delete'}} = &Apache::lonlocal::texthash(
+ 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',
@@ -875,14 +919,14 @@ function changeSort(caller) {
gtpp => 'Go to previous page',
adme => 'Add members',
);
- if ((($action eq 'create') || ($action eq 'modify')) &&
+ 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]) {
&Apache::lonhtmlcommon::add_breadcrumb(
{text=>"$trail{$action}{$state}"});
$r->print(&Apache::lonhtmlcommon::breadcrumbs
- ("Groups Manager"));
+ ("Groups Manager","Creating_Groups"));
&display_control($r,$cdom,$cnum,$action,$state,$page,
\%sectioncount,$groupname,$description,$functions,
\@tools,$toolprivs,$fixedprivs,$startdate,$enddate,
@@ -893,16 +937,18 @@ function changeSort(caller) {
$crstype);
last;
} else {
- if (($state eq 'result') && ($i > 0)) {
- &Apache::lonhtmlcommon::add_breadcrumb(
+ if (($action eq 'create') || ($action eq 'modify')) {
+ if (($state eq 'result') && ($i > 0)) {
+ &Apache::lonhtmlcommon::add_breadcrumb(
{href=>"javascript:backPage(document.$state,'$states{$action}[0]')",
text=>"$trail{$action}{$states{$action}[$i]}"});
- } else {
- &Apache::lonhtmlcommon::add_breadcrumb(
+ } else {
+ &Apache::lonhtmlcommon::add_breadcrumb(
{href=>"javascript:backPage(document.$state,'$states{$action}[$i]')",
text=>"$trail{$action}{$states{$action}[$i]}"});
+ }
}
- }
+ }
}
} elsif (($action eq 'view') && ($view_permission)) {
&Apache::lonhtmlcommon::add_breadcrumb(
@@ -912,15 +958,22 @@ function changeSort(caller) {
&display_groups($r,$cdom,$cnum,$functions,$idx,$view_permission,
$manage_permission,$action,$state,$gpterm,$ucgpterm,
$crstype);
-
}
$r->print(&footer());
return;
}
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);
@@ -1027,7 +1080,7 @@ sub display_control {
$userdata,$granularity,$quota,$specificity,
$idx,$states,$navbuttons,$gpterm,$ucgpterm);
} elsif ($state eq 'add_members') {
- &add_members_form($r,$action,$state,$page,$startdate,
+ &add_members_form($r,$cdom,$cnum,$action,$state,$page,$startdate,
$enddate,$groupname,$description,$granularity,
$quota,$sectioncount,$tools,$functions,$stored,
$states,$navbuttons,$gpterm,$ucgpterm);
@@ -1059,7 +1112,283 @@ sub display_control {
$sections,$states,$navbuttons,$memchg,
$sectioncount,$stored,$gpterm,$ucgpterm,$crstype);
}
+ } elsif ($action eq 'delete') {
+ 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);
+ }
+ }
+}
+
+sub verify_delete {
+ my ($r,$groupname,$formname,$action,$page,$states,$stored) = @_;
+ $r->print(&Apache::lonhtmlcommon::echo_form_input([]));
+ $r->print(&mt("You have requested deletion of the following group: ").''.
+ $stored->{'description'}.''.
+ '
'.&mt('When a group is deleted the following occurs:').'
'.$lt{'gnam'}.': | @@ -1343,7 +1686,7 @@ sub get_quota_constraints { } sub membership_options { - my ($r,$action,$state,$sectioncount,$image,$gpterm,$ucgpterm) = @_; + my ($r,$cdom,$cnum,$action,$state,$sectioncount,$image,$gpterm,$ucgpterm)=@_; my $crstype = &Apache::loncommon::course_type(); my %lt = &Apache::lonlocal::texthash( 'pipa' => 'Build a list of users for selection of group members', @@ -1365,13 +1708,11 @@ sub membership_options { future => &mt('Will have future access'), ); - #FIXME need to plumb around for the various cr roles defined by the user - my @roles = ('st','cc','in','ta','ep'); + my @roles = ('st','cc','in','ta','ep','cr'); my @sections = keys(%{$sectioncount}); - &topic_bar($r,$image,$lt{'pipa'}); - $r->print(' + $r->print(&Apache::lonhtmlcommon::topic_bar($image,$lt{'pipa'}).' '.$lt{'gmem'}.'|
'); $r->print(&Apache::lonhtmlcommon::status_select_row(\%status_types)); $r->print(' | ');
- $r->print(&Apache::lonhtmlcommon::role_select_row(\@roles));
+ $r->print(&Apache::lonhtmlcommon::role_select_row(\@roles,undef,undef,1,$cdom,$cnum));
if (@sections > 0) {
@sections = sort {$a cmp $b} @sections;
unshift(@sections,'none'); # Put 'no sections' next
@@ -1441,8 +1782,7 @@ sub access_date_settings {
}
}
my ($table) = &date_setting_table($starttime,$endtime,$formname);
- &topic_bar($r,$image,$lt{'sten'});
- $r->print('
+ $r->print(&Apache::lonhtmlcommon::topic_bar($image,$lt{'sten'}).'
'.$table.'
');
return;
@@ -1519,6 +1859,11 @@ sub display_navbuttons {
');
+ } elsif ($prevtext) {
+ $r->print('
+
+ ');
}
if ($next) {
$r->print('
@@ -1675,7 +2020,7 @@ sub pick_new_members {
$r->print(&check_uncheck_tools($r,$available));
}
}
- &topic_bar($r,$img,$lt{'gpme'});
+ $r->print(&Apache::lonhtmlcommon::topic_bar($img,$lt{'gpme'}));
if (keys(%members) > 0) {
$r->print('
|