--- loncom/interface/loncoursegroups.pm 2006/05/09 15:09:27 1.16 +++ 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 { @@ -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,31 +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',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('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 => 'print('

'); $r->print(&Apache::lonhtmlcommon::start_pick_box()); @@ -173,7 +185,7 @@ sub display_groups { $lt{'func'}
$lt{'quot'} - $lt{'memb'} + $lt{'memb'} $lt{'file'} $lt{'dibd'} $lt{'dius'} @@ -182,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); @@ -245,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) { @@ -267,15 +295,15 @@ END my @coursegroups = split(/:/,$env{'request.course.groups'}); if (@coursegroups > 0) { $r->print('

'); - my %curr_groups = &Apache::loncommon::coursegroups($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 { @@ -287,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 = (); @@ -302,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'})) { @@ -341,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') { @@ -433,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'}} = ( @@ -472,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); } } @@ -556,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; } @@ -701,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'}}}); } @@ -797,7 +837,7 @@ function changeSort(caller) { $r->print(&Apache::lonhtmlcommon::breadcrumbs ('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); } @@ -807,12 +847,12 @@ function changeSort(caller) { sub retrieve_settings { my ($cdom,$cnum,$groupname) = @_; - my %curr_groups = &Apache::loncommon::coursegroups($cdom,$cnum,$groupname); + my %curr_groups = &Apache::longroup::coursegroups($cdom,$cnum,$groupname); return if (!%curr_groups); my %groupinfo = - &Apache::loncommon::get_group_settings($curr_groups{$groupname}); + &Apache::longroup::get_group_settings($curr_groups{$groupname}); my %stored; @@ -849,12 +889,14 @@ sub retrieve_settings { $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); - } + 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; @@ -897,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); @@ -1201,7 +1243,8 @@ sub membership_options { 'meof' => 'members of the new group.', 'admg' => 'additional members of the group.', 'ifno' => 'If you do not wish to add members when you first '. - 'create the group, do not make any selections', + 'create the group, do not make any selections.', + 'asub' => 'A subsequent step will also allow you to specify automatic adding/dropping of group members triggered by specified role and section changes.', 'acty' => 'Access types', 'coro' => 'Course roles', 'cose' => 'Course sections', @@ -1223,7 +1266,7 @@ sub membership_options { '.$lt{'gmem'}.'
'.$lt{'picr'}); if ($action eq 'create') { - $r->print($lt{'meof'}.'
'.$lt{'ifno'}); + $r->print($lt{'meof'}.'
'.$lt{'ifno'}.'
'.$lt{'asub'}); } else { $r->print($lt{'admg'}); } @@ -1247,8 +1290,8 @@ sub membership_options { $r->print(&Apache::lonhtmlcommon::role_select_row(\@roles)); if (@sections > 0) { @sections = sort {$a cmp $b} @sections; - unshift(@sections,'_all'); # Put 'all' at the front of the list - unshift(@sections,'_nosec'); # Put 'no sections' next + unshift(@sections,'all'); # Put 'all' at the front of the list + unshift(@sections,'none'); # Put 'no sections' next $r->print('  '. §ions_selection(\@sections,'sectionpick').''); @@ -1269,9 +1312,9 @@ sub sections_selection { $numvisible = @{$sections}; } foreach my $sec (@{$sections}) { - if ($sec eq '_all') { + if ($sec eq 'all') { $section_sel .= '