--- loncom/interface/loncoursegroups.pm 2006/02/23 17:23:09 1.8
+++ loncom/interface/loncoursegroups.pm 2006/05/22 22:35:46 1.21
@@ -30,6 +30,7 @@ use Apache::loncommon;
use Apache::lonhtmlcommon;
use Apache::lonlocal;
use Apache::lonnavmaps;
+use Apache::longroup;
use Apache::Constants qw(:common :http);
sub handler {
@@ -37,7 +38,7 @@ sub handler {
&Apache::loncommon::content_type($r,'text/html');
$r->send_http_header;
-
+
if ($r->header_only) {
return OK;
}
@@ -82,10 +83,16 @@ sub handler {
my $rowColor2 = "#eeeeee";
my $action = $env{'form.action'};
+ my $state = $env{'form.state'};
+ if ((!defined($action)) || ($action eq 'view')) {
+ if (!defined($state)) {
+ $state = 'view';
+ }
+ }
if ($action eq 'create' || $action eq 'modify' || $action eq 'view') {
if ($view_permission || $manage_permission) {
- &group_administration($r,$action,$cdom,$cnum,$function,$tabcol,
- \%functions,\%idx,$view_permission,
+ &group_administration($r,$action,$state,$cdom,$cnum,$function,
+ $tabcol,\%functions,\%idx,$view_permission,
$manage_permission,$rowColor1,$rowColor2);
} else {
$r->print(&mt('You do not have group administration '.
@@ -93,7 +100,7 @@ sub handler {
}
} else {
&print_main_menu($r,$cdom,$cnum,$function,$tabcol,\%functions,\%idx,
- $view_permission,$manage_permission,$action,
+ $view_permission,$manage_permission,$action,$state,
$rowColor1,$rowColor2);
}
return OK;
@@ -101,33 +108,36 @@ sub handler {
sub print_main_menu {
my ($r,$cdom,$cnum,$function,$tabcol,$functions,$idx,$view_permission,
- $manage_permission,$action,$rowColor1,$rowColor2) = @_;
- $r->print(&header('Course Groups',&mt('LON-CAPA Course Groups'),
- undef,undef,undef,undef,$function));
+ $manage_permission,$action,$state,$rowColor1,$rowColor2) = @_;
+ my $jscript = qq|
+function changeSort(caller) {
+ document.$state.sortby.value = caller;
+ document.$state.submit();
+}\n|;
+ $r->print(&header('Course Groups',$jscript,$action,$state,
+ undef,$function));
&Apache::lonhtmlcommon::add_breadcrumb
({href=>"/adm/coursegroups",
text=>"Course Groups",});
- $r->print(&Apache::lonhtmlcommon::breadcrumbs
- (undef,'Course Groups'));
+ $r->print(&Apache::lonhtmlcommon::breadcrumbs('Course Groups'));
&display_groups($r,$cdom,$cnum,$function,$tabcol,$functions,$idx,
- $view_permission,$manage_permission,$action,$rowColor1,
- $rowColor2);
+ $view_permission,$manage_permission,$action,$state,
+ $rowColor1,$rowColor2);
$r->print(&footer());
return;
}
sub display_groups {
my ($r,$cdom,$cnum,$function,$tabcol,$functions,$idx,$view_permission,
- $manage_permission,$action,$rowColor1,$rowColor2) = @_;
+ $manage_permission,$action,$state,$rowColor1,$rowColor2) = @_;
my %curr_groups = ();
my %grp_info = ();
-
my %actionlinks = (
- modify => ' ' 'Modify',
@@ -156,8 +166,8 @@ sub display_groups {
if (!defined($action)) {
$action = 'view';
}
- my %curr_groups;
- if (&Apache::loncommon::coursegroups(\%curr_groups,$cdom,$cnum)) {
+ my %curr_groups = &Apache::longroup::coursegroups($cdom,$cnum);
+ if (%curr_groups) {
$r->print(' ');
$r->print(&Apache::lonhtmlcommon::start_pick_box());
$r->print(<<"END");
@@ -175,7 +185,7 @@ sub display_groups {
$lt{'func'}
$lt{'quot'}
- $lt{'memb'}
+ $lt{'memb'}
$lt{'file'}
$lt{'dibd'}
$lt{'dius'}
@@ -184,7 +194,7 @@ END
my %Sortby = ();
foreach my $group (sort(keys(%curr_groups))) {
%{$grp_info{$group}} =
- &Apache::loncommon::get_group_settings(
+ &Apache::longroup::get_group_settings(
$curr_groups{$group});
my $members_result = &group_members($cdom,$cnum,$group,
\%grp_info);
@@ -247,15 +257,31 @@ END
if ($action eq 'modify' || $action eq 'delete') {
$link .= $group;
} else {
- $link .= $group.'/grppg?register=1';
+ $link .= $group.'/grppg';
+ }
+ $link .= '">'.$lt{$action}.'';
+ if ($action eq 'view') {
+ if (($manage_permission) &&
+ ($env{'form.refpage'} ne 'enrl')) {
+ $link .= ' '.$actionlinks{'modify'}.
+ $group.'">'.$lt{'modify'}.'';
+ }
}
- $link .= '">'.$lt{$action}.'';
$r->print(''.$link.' '.$group.' '.$description.' '.$creator.' '. &Apache::lonnavmaps::timeToHumanString($creation).' '. &Apache::lonnavmaps::timeToHumanString($modified).' '.$functionality.' '.$quota.' '.$totalmembers.' '.$totalfiles.' '.$boards.' '.$diskuse.' ');
$rowNum ++;
}
}
$r->print('');
$r->print(&Apache::lonhtmlcommon::end_pick_box());
+ $r->print(' ');
+ if ($action eq 'view') {
+ if (!defined($state)) {
+ $state = 'view';
+ }
+ $r->print(' ');
+ }
} else {
$r->print($lt{'nogr'});
if ($manage_permission) {
@@ -269,15 +295,15 @@ END
my @coursegroups = split(/:/,$env{'request.course.groups'});
if (@coursegroups > 0) {
$r->print(' ');
- my %curr_groups;
- if (&Apache::loncommon::coursegroups(\%curr_groups,$cdom,$cnum)) {
+ my %curr_groups = &Apache::longroup::coursegroups($cdom,$cnum);
+ if (%curr_groups) {
foreach my $group (@coursegroups) {
- my %group_info = &Apache::loncommon::get_group_settings(
+ my %group_info = &Apache::longroup::get_group_settings(
$curr_groups{$group});
my $description = &Apache::lonnet::unescape(
$group_info{description});
my ($uname,$udom) = split(/:/,$group_info{creator});
- $r->print(''.$group,' '.$description.' ');
+ $r->print(''.$group,' '.$description.' ');
}
}
} else {
@@ -289,7 +315,7 @@ END
}
sub group_administration {
- my ($r,$action,$cdom,$cnum,$function,$tabcol,$functions,$idx,
+ my ($r,$action,$state,$cdom,$cnum,$function,$tabcol,$functions,$idx,
$view_permission,$manage_permission,$rowColor1,$rowColor2) = @_;
my %sectioncount = ();
my @tools = ();
@@ -304,7 +330,6 @@ sub group_administration {
my %memchg;
my @member_changes = ('deletion','expire','activate','reenable',
'changefunc','changepriv');
- my $state = $env{'form.state'};
my ($groupname,$description,$startdate,$enddate,$granularity,$specificity);
if (defined($env{'form.groupname'})) {
@@ -343,7 +368,11 @@ sub group_administration {
if ($action eq 'modify') {
if ($state eq '') {
- $state = 'pick_group';
+ if (defined($env{'form.groupname'})) {
+ $state = 'pick_task';
+ } else {
+ $state = 'pick_group';
+ }
} else {
%stored = &retrieve_settings($cdom,$cnum,$groupname);
if (ref($stored{'types'}) eq 'ARRAY') {
@@ -435,7 +464,10 @@ sub group_administration {
);
if (ref($stored{'autorole'}) eq 'ARRAY') {
foreach my $role (@{$stored{'autorole'}}) {
- $elements{'modify'}{'change_settings'}{'sec_'.$role} = 'selectbox';
+ unless ($role eq 'cc') {
+ $elements{'modify'}{'change_settings'}{'sec_'.$role} =
+ 'selectbox';
+ }
}
}
%{$elements{'create'}{'pick_members'}} = (
@@ -456,16 +488,16 @@ sub group_administration {
(($state eq 'pick_name') || ($state eq 'pick_privs'))) ||
(($action eq 'modify') && (($state eq 'change_settings') ||
($state eq 'add_members')))) {
- my $numsections = &Apache::loncommon::get_sections($cdom,$cnum,
- \%sectioncount);
- if ($numsections > 0) {
+ %sectioncount = &Apache::loncommon::get_sections($cdom,$cnum);
+ if (%sectioncount) {
$elements{'create'}{'pick_name'}{'sectionpick'} = 'selectbox';
$elements{'modify'}{'change_mapping'}{'sectionpick'} = 'selectbox';
$elements{'modify'}{'add_members'}{'sectionpick'} = 'selectbox';
}
}
- if ($action eq 'create') {
+ if (($action eq 'create') ||
+ ($action eq 'modify' && $state eq 'pick_members')) {
if (defined($env{'form.types'})) {
@types=&Apache::loncommon::get_env_multiple('form.types');
}
@@ -474,7 +506,7 @@ sub group_administration {
}
if (defined($env{'form.sectionpick'})) {
@sections=&Apache::loncommon::get_env_multiple('form.sectionpick');
- if (grep/^_all$/,@sections) {
+ if (grep/^all$/,@sections) {
@sections = sort {$a cmp $b} keys(%sectioncount);
}
}
@@ -558,11 +590,17 @@ sub group_administration {
}
if (($state eq 'pick_privs') || ($state eq 'change_privs') ||
- (($specificity eq 'No') &&
- (($state eq 'result') || ($state eq 'memresult')))) {
+ (($specificity eq 'No') &&
+ ($state eq 'memresult' || $state eq 'result' || $state eq 'addresult'))) {
foreach my $tool (@tools) {
my @values = &Apache::loncommon::get_env_multiple('form.user_'.$tool);
foreach my $user (@values) {
+ if ($state eq 'pick_privs' || $state eq 'result'
+ || $state eq 'addresult') {
+ if (!grep(/^\Q$user\E$/,@members)) {
+ next;
+ }
+ }
unless(exists($usertools{$user}{$tool})) {
$usertools{$user}{$tool} = 1;
}
@@ -689,7 +727,7 @@ function changeSort(caller) {
document.$state.sortby.value = caller;
document.$state.submit();
}
-
+
|;
$jscript .= &Apache::lonhtmlcommon::set_form_elements(
\%{$elements{$action}{$state}},\%stored);
@@ -703,7 +741,7 @@ function changeSort(caller) {
@{$branchstates{'members'}} = ('change_members','change_privs','memresult');
@{$branchstates{'adds'}} = ('add_members','pick_members','pick_privs',
'addresult');
-
+
if (defined($env{'form.branch'})) {
push (@{$states{$action}},@{$branchstates{$env{'form.branch'}}});
}
@@ -721,8 +759,8 @@ function changeSort(caller) {
}
my $loaditems = &onload_action($action,$state);
- $r->print(&header('Course Groups Manager',&mt('LON-CAPA Groups Manager'),
- $jscript,$action,$state,$page,$function,$loaditems));
+ $r->print(&header('Course Groups Manager',
+ $jscript,$action,$state,$page,$function,$loaditems));
if ($env{'form.refpage'} eq 'enrl') {
&Apache::lonhtmlcommon::add_breadcrumb
@@ -772,7 +810,7 @@ function changeSort(caller) {
&Apache::lonhtmlcommon::add_breadcrumb(
{text=>"$trail{$action}{$state}"});
$r->print(&Apache::lonhtmlcommon::breadcrumbs
- (undef,'Course Groups Manager'));
+ ('Course Groups Manager'));
&display_control($r,$cdom,$cnum,$tabcol,$action,$state,$page,
\%sectioncount,$groupname,$description,$functions,
\@tools,\%toolprivs,\%fixedprivs,$startdate,$enddate,
@@ -797,9 +835,9 @@ function changeSort(caller) {
&Apache::lonhtmlcommon::add_breadcrumb(
{text=>"View groups"});
$r->print(&Apache::lonhtmlcommon::breadcrumbs
- (undef,'Course Groups Manager'));
+ ('Course Groups Manager'));
&display_groups($r,$cdom,$cnum,$function,$tabcol,$functions,$idx,
- $view_permission,$manage_permission,$action,
+ $view_permission,$manage_permission,$action,$state,
$rowColor1,$rowColor2);
}
@@ -809,55 +847,57 @@ function changeSort(caller) {
sub retrieve_settings {
my ($cdom,$cnum,$groupname) = @_;
- my %groupinfo;
+ my %curr_groups = &Apache::longroup::coursegroups($cdom,$cnum,$groupname);
+
+ return if (!%curr_groups);
+
+ my %groupinfo =
+ &Apache::longroup::get_group_settings($curr_groups{$groupname});
+
my %stored;
- my %curr_groups;
- my $numgroups = &Apache::loncommon::coursegroups(\%curr_groups,$cdom,
- $cnum,$groupname);
- if ($numgroups > 0) {
- %groupinfo = &Apache::loncommon::get_group_settings(
- $curr_groups{$groupname});
- $stored{'description'} = &Apache::lonnet::unescape(
- $groupinfo{'description'});
- $stored{'startdate'} = $groupinfo{'startdate'};
- $stored{'enddate'} = $groupinfo{'enddate'};
- if ($stored{'enddate'} == 0) {
- $stored{'no_end_date'} = 1;
- }
- $stored{'granularity'} = $groupinfo{'granularity'};
- $stored{'specificity'} = $groupinfo{'specificity'};
- $stored{'creation'} = $groupinfo{'creation'};
- $stored{'creator'} = $groupinfo{'creator'};
-
- foreach my $tool (sort(keys(%{$groupinfo{'functions'}}))) {
- if ($groupinfo{functions}{$tool} eq 'on') {
- push(@{$stored{tool}},$tool);
- }
- }
- foreach my $role (@{$groupinfo{'roles'}}) {
- push(@{$stored{roles}},$role);
- }
- foreach my $type (@{$groupinfo{'types'}}) {
- push(@{$stored{types}},$type);
- }
- foreach my $section (@{$groupinfo{'sectionpick'}}) {
- push(@{$stored{sectionpick}},$section);
- }
- foreach my $defpriv (@{$groupinfo{'defpriv'}}) {
- push(@{$stored{defpriv}},$defpriv);
- }
- $stored{'autoadd'} = $groupinfo{'autoadd'};
- $stored{'autodrop'} = $groupinfo{'autodrop'};
- if (exists($groupinfo{'autosec'})) {
- foreach my $role (sort(keys(%{$groupinfo{'autosec'}}))) {
- foreach my $section (@{$groupinfo{'autosec'}{$role}}) {
- push (@{$stored{'sec_'.$role}},$section);
- }
- if (@{$groupinfo{'autosec'}{$role}} > 0) {
- push(@{$stored{'autorole'}},$role);
- }
+
+ $stored{'description'} =
+ &Apache::lonnet::unescape($groupinfo{'description'});
+ $stored{'startdate'} = $groupinfo{'startdate'};
+ $stored{'enddate'} = $groupinfo{'enddate'};
+ if ($stored{'enddate'} == 0) {
+ $stored{'no_end_date'} = 1;
+ }
+ $stored{'granularity'} = $groupinfo{'granularity'};
+ $stored{'specificity'} = $groupinfo{'specificity'};
+ $stored{'creation'} = $groupinfo{'creation'};
+ $stored{'creator'} = $groupinfo{'creator'};
+
+ foreach my $tool (sort(keys(%{$groupinfo{'functions'}}))) {
+ if ($groupinfo{functions}{$tool} eq 'on') {
+ push(@{$stored{tool}},$tool);
+ }
+ }
+ foreach my $role (@{$groupinfo{'roles'}}) {
+ push(@{$stored{roles}},$role);
+ }
+ foreach my $type (@{$groupinfo{'types'}}) {
+ push(@{$stored{types}},$type);
+ }
+ foreach my $section (@{$groupinfo{'sectionpick'}}) {
+ push(@{$stored{sectionpick}},$section);
+ }
+ foreach my $defpriv (@{$groupinfo{'defpriv'}}) {
+ push(@{$stored{defpriv}},$defpriv);
+ }
+ $stored{'autoadd'} = $groupinfo{'autoadd'};
+ $stored{'autodrop'} = $groupinfo{'autodrop'};
+ if (exists($groupinfo{'autosec'})) {
+ foreach my $role (sort(keys(%{$groupinfo{'autosec'}}))) {
+ if (ref($groupinfo{'autosec'}{$role}) eq 'ARRAY') {
+ foreach my $section (@{$groupinfo{'autosec'}{$role}}) {
+ push (@{$stored{'sec_'.$role}},$section);
+ }
+ if (@{$groupinfo{'autosec'}{$role}} > 0) {
+ push(@{$stored{'autorole'}},$role);
+ }
}
- }
+ }
}
return %stored;
}
@@ -899,7 +939,7 @@ sub display_control {
my $groupname = $env{'form.groupname'};
if ($state eq 'pick_group') {
&display_groups($r,$cdom,$cnum,$function,$tabcol,$functions,$idx,
- $view_permission,$manage_permission,$action,
+ $view_permission,$manage_permission,$action,$state,
$rowColor1,$rowColor2);
} elsif ($state eq 'pick_task') {
&modify_menu($r,$groupname,$page);
@@ -951,19 +991,16 @@ sub display_control {
}
sub header {
- my ($bodytitle,$title,$jscript,$action,$state,$page,$function,$loaditems) = @_;
- my $html=&Apache::lonxml::xmlbegin();
- my $bodytag=&Apache::loncommon::bodytag($bodytitle,$function,$loaditems);
+ my ($bodytitle,$jscript,$action,$state,$page,$function,$loaditems) = @_;
+ my $start_page=
+ &Apache::loncommon::start_page($bodytitle,
+ '',
+ {'function' => $function,
+ 'add_entries' => $loaditems,});
my $output = <<"END";
-$html
-
-$title
-
-
-$bodytag
-
-