--- loncom/interface/loncoursegroups.pm 2006/02/21 22:40:45 1.7 +++ loncom/interface/loncoursegroups.pm 2006/05/09 15:09:27 1.16 @@ -37,7 +37,7 @@ sub handler { &Apache::loncommon::content_type($r,'text/html'); $r->send_http_header; - + if ($r->header_only) { return OK; } @@ -102,13 +102,11 @@ 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)); + $r->print(&header('Course Groups',undef,undef,undef,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); @@ -156,8 +154,8 @@ sub display_groups { if (!defined($action)) { $action = 'view'; } - my %curr_groups; - if (&Apache::loncommon::coursegroups(\%curr_groups,$cdom,$cnum)) { + my %curr_groups = &Apache::loncommon::coursegroups($cdom,$cnum); + if (%curr_groups) { $r->print('

'); $r->print(&Apache::lonhtmlcommon::start_pick_box()); $r->print(<<"END"); @@ -269,8 +267,8 @@ 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::loncommon::coursegroups($cdom,$cnum); + if (%curr_groups) { foreach my $group (@coursegroups) { my %group_info = &Apache::loncommon::get_group_settings( $curr_groups{$group}); @@ -456,16 +454,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'); } @@ -689,7 +687,7 @@ function changeSort(caller) { document.$state.sortby.value = caller; document.$state.submit(); } - + |; $jscript .= &Apache::lonhtmlcommon::set_form_elements( \%{$elements{$action}{$state}},\%stored); @@ -721,8 +719,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 +770,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, @@ -782,7 +780,7 @@ function changeSort(caller) { \@sections,\%states,\%navbuttons,$rowColor1,$rowColor2); last; } else { - if (($state =~ /^\w+result$/) && ($i > 0)) { + if (($state eq 'result') && ($i > 0)) { &Apache::lonhtmlcommon::add_breadcrumb( {href=>"javascript:backPage(document.$state,'$states{$action}[0]')", text=>"$trail{$action}{$states{$action}[$i]}"}); @@ -797,7 +795,7 @@ 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, $rowColor1,$rowColor2); @@ -809,55 +807,55 @@ function changeSort(caller) { sub retrieve_settings { my ($cdom,$cnum,$groupname) = @_; - my %groupinfo; + my %curr_groups = &Apache::loncommon::coursegroups($cdom,$cnum,$groupname); + + return if (!%curr_groups); + + my %groupinfo = + &Apache::loncommon::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'}}))) { + foreach my $section (@{$groupinfo{'autosec'}{$role}}) { + push (@{$stored{'sec_'.$role}},$section); + } + if (@{$groupinfo{'autosec'}{$role}} > 0) { + push(@{$stored{'autorole'}},$role); + } + } } return %stored; } @@ -951,19 +949,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 -
+$start_page + END if ($action eq 'create' || $action eq 'modify') { @@ -979,31 +974,31 @@ END sub onload_action { my ($action,$state) = @_; - my $loaditems; + my %loaditems; if ((defined($env{'form.origin'})) && ($action eq 'create') && ($state eq 'pick_name' || $state eq 'pick_members' || $state eq 'pick_privs')) { unless ($env{'form.origin'} eq '') { - $loaditems = - 'onload="javascript:setFormElements(document.'.$state.')"'; + $loaditems{'onload'} = + 'javascript:setFormElements(document.'.$state.')'; } } if (($action eq 'modify') && ($state eq 'change_settings' || $state eq 'change_members' || $state eq 'change_privs' || $state eq 'add_members' || $state eq 'pick_members')) { - $loaditems = - 'onload="javascript:setFormElements(document.'.$state.')"'; + $loaditems{'onload'} = + 'javascript:setFormElements(document.'.$state.')'; } - return $loaditems; + return \%loaditems; } sub footer { + my $end_page = &Apache::loncommon::end_page(); return(< - - +$end_page ENDFOOT } @@ -1216,7 +1211,7 @@ sub membership_options { previous => &mt('Previously had access'), future => &mt('Will have future access'), ); - + my @roles = ('st','cc','in','ta','ep','cr'); my @sections = keys(%{$sectioncount}); @@ -2312,7 +2307,7 @@ END $r->print(''); if ($granularity eq 'Yes') { foreach my $tool (@{$current{$user}{newtools}}) { - $r->print('   '); @@ -2715,7 +2710,6 @@ END '
'); &display_defprivs($r,$tabcol,$rowColor1,$rowColor2,$tools, $toolprivs,\@defprivs); - } } else { if (keys(%{$usertools}) > 0) { @@ -2814,7 +2808,7 @@ sub write_group_data { 'creation','modified','creator','granularity', 'specificity','autoadd','autodrop'); my @mult_attributes = ('roles','types','sectionpick','defpriv'); - + my %groupinfo = ( description => $esc_description, startdate => $startdate, @@ -2853,7 +2847,7 @@ sub write_group_data { } my $autosec; my @autorole = &Apache::loncommon::get_env_multiple('form.autorole'); - + foreach my $role (@autorole) { if (defined($env{'form.sec_'.$role})) { my @autosections=&Apache::loncommon::get_env_multiple('form.sec_'. @@ -2914,6 +2908,11 @@ sub process_membership { &Apache::loncommon::get_env_multiple('form.userpriv_'.$priv); foreach my $user (@users) { $group_privs{$user} .= $priv.':'; + if ($state eq 'memresult') { + unless (exists($$usertools{$user}{$tool})) { + $$usertools{$user}{$tool} = 1; + } + } } } else { if (@{$defprivs} > 0) { @@ -2985,7 +2984,7 @@ sub process_membership { } } } - } + } foreach my $user (sort(keys(%{$usertools}))) { my $type; @@ -3024,13 +3023,14 @@ sub process_membership { if ($num_ok) { foreach my $type (sort(keys(%added))) { $r->print(&mt('The following users were successfully [_1]',$type)); - if ($type eq 'activated' || $type eq 'added' || $type eq 'reenabled') { + if (!($type eq 'deleted' || $type eq 'expired')) { $r->print(&mt(' with the following privileges')); } $r->print(':
'); foreach my $user (@{$added{$type}}) { - my $privlist; - if ($type eq 'activated' || $type eq 'added') { + my $privlist = ''; + if (!($type eq 'deleted' || $type eq 'expired')) { + $privlist = ': '; my @privs = split(/:/,$group_privs{$user}); my $curr_tool = ''; foreach my $priv (@privs) { @@ -3042,7 +3042,7 @@ sub process_membership { } $privlist =~ s/, $//; } - $r->print($$userdata{$user}[$$idx{fullname}].' - '.$user.': '.$privlist.'
'); + $r->print($$userdata{$user}[$$idx{fullname}].' - '.$user.$privlist.'
'); } } } @@ -3409,11 +3409,9 @@ function toggleTools(field,caller) { sub validate_groupname { my ($groupname,$action,$cdom,$cnum) = @_; - my %sectioncount; - my $numsec=&Apache::loncommon::get_sections($cdom,$cnum,\%sectioncount); - my %curr_groups; - my $numgroups=&Apache::loncommon::coursegroups(\%curr_groups,$cdom,$cnum); - + my %sectioncount = &Apache::loncommon::get_sections($cdom,$cnum); + my %curr_groups = &Apache::loncommon::coursegroups($cdom,$cnum); + my %lt = &Apache::lonlocal::texthash ( igna => 'Invalid group name', tgne => 'The group name entered ', @@ -3427,7 +3425,7 @@ sub validate_groupname { thgr => '- does not correspond to the name of an existing'. ' group ', ); - + my $exitmsg = ''.$lt{'igna'}.'

'.$lt{'tgne'}.' "'. $groupname.'" '; my $dupmsg = $lt{'grna'}; @@ -3436,21 +3434,16 @@ sub validate_groupname { $earlyout = $exitmsg.$lt{'isno'}.'
'.$lt{'gnmo'}; return $earlyout; } - if ($numsec) { - if (exists($sectioncount{$groupname})) { - $earlyout = $exitmsg.$lt{'cnnb'}.&mt('a section').$lt{'inth'}. - '
'.$lt{'grna'}; - return $earlyout; - } + if (exists($sectioncount{$groupname})) { + return $exitmsg.$lt{'cnnb'}.&mt('a section').$lt{'inth'}. + '
'.$lt{'grna'}; } - if ($action eq 'create') { - if ($numgroups) { - if (exists($curr_groups{$groupname})) { - $earlyout = $exitmsg.$lt{'cnnb'}.&mt('an existing group'). - $lt{'inth'}.'
'.$lt{'grna'}; - return $earlyout; - } - } + if ($action eq 'create' + && exists($curr_groups{$groupname})) { + + return $exitmsg.$lt{'cnnb'}.&mt('an existing group'). + $lt{'inth'}.'
'.$lt{'grna'}; + } elsif ($action eq 'modify') { unless(exists($curr_groups{$groupname})) { $earlyout = &mt('Group name:').' '.$groupname.$lt{'thgr'}.$lt{'inth'};