--- loncom/interface/lonmenu.pm 2008/02/03 05:07:58 1.234 +++ loncom/interface/lonmenu.pm 2008/03/10 23:47:35 1.235 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Routines to control the menu # -# $Id: lonmenu.pm,v 1.234 2008/02/03 05:07:58 raeburn Exp $ +# $Id: lonmenu.pm,v 1.235 2008/03/10 23:47:35 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -74,6 +74,7 @@ sub initlittle { 'main' => 'Main Menu', 'roles' => (&show_course()? 'Courses':'Roles'), + 'other' => 'Other Roles', 'docs' => 'Edit Course', 'exit' => 'Exit', 'login' => 'Log In', @@ -101,7 +102,10 @@ sub menubuttons { my $reloadlink=''; my $docs=''; my $groups=''; + my $roles=''.$lt{'roles'}.''; + my $role_selector; my $showgroups=0; + my ($cnum,$cdom); my $escurl=&escape(&Apache::lonenc::check_encrypt($env{'request.noversionuri'})); my $escsymb=&escape(&Apache::lonenc::check_encrypt($env{'request.symb'})); @@ -117,15 +121,21 @@ sub menubuttons { } } if ($env{'request.course.id'}) { + $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; + $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; my %coursegroups; my $viewgrps_permission = &Apache::lonnet::allowed('vcg',$env{'request.course.id'}.($env{'request.course.sec'}?'/'.$env{'request.course.sec'}:'')); if (!$viewgrps_permission) { - %coursegroups = &Apache::lonnet::get_active_groups($env{'user.domain'},$env{'user.name'},$env{'course.'.$env{'request.course.id'}.'.domain'}, $env{'course.'.$env{'request.course.id'}.'.num'}); + %coursegroups = &Apache::lonnet::get_active_groups($env{'user.domain'},$env{'user.name'},$cdom,$cnum); } if ((keys(%coursegroups) > 0) || ($viewgrps_permission)) { $showgroups = 1; } + $role_selector = &roles_selector($cdom,$cnum); + if ($role_selector) { + $roles = ''.$role_selector.'  '.$lt{'other'}.''; + } } if ($env{'browser.interface'} eq 'textual') { @@ -160,8 +170,7 @@ $utility
$lt{'main'} -$reloadlink $navmaps $docs $groups -$lt{'roles'} +$reloadlink $navmaps $docs $groups $roles $lt{'exit'}

@@ -197,6 +206,7 @@ ENDMAINMENU ENDINLINEMENU } + $roles = ''.$lt{'roles'}.''; # Do we have a NAV link? if ($env{'request.course.id'}) { my $link='/adm/navmaps?postdata='.$escurl.'&postsymb='. @@ -225,6 +235,9 @@ ENDGROUPS $lt{'ret'} ENDRELOAD } + if ($role_selector) { + $roles = ''.$role_selector.''.$lt{'other'}.''; + } } if (($env{'request.state'} eq 'construct') && ($env{'request.course.id'})) { my $escreload=&escape('return:'); @@ -260,7 +273,7 @@ $navmaps $docs $groups $remote -$lt{'roles'} +$roles $helplink $lt{'exit'} @@ -1410,6 +1423,117 @@ sub hidden_button_check { return $buttonshide; } +sub roles_selector { + my ($cdom,$cnum) = @_; + my $now = time; + my %courseroles; + my $is_cc; + my $role_selector; + if ($env{'user.role.cc./'.$cdom.'/'.$cnum}) { + my ($start,$end) = split(/\./,$env{'user.role.cc./'.$cdom.'/'.$cnum}); + + if ((($start) && ($start<0)) || + (($end) && ($end<$now)) || + (($start) && ($now<$start))) { + $is_cc = 0; + } else { + $is_cc = 1; + } + } + if ($is_cc) { + my %adv_roles = + &Apache::lonnet::get_course_adv_roles($env{'request.course.id'},1); + foreach my $role (keys(%adv_roles),'st') { + my ($urole,$usec) = split(/:/,$role); + @{$courseroles{$urole}} = 'none'; + } + } else { + foreach my $item (keys(%env)) { + if ($item =~ m-^user\.role\.([^.]+)\./\Q$cdom\E/\Q$cnum\E(/?\w*)$-) { + my $role = $1; + my $sec = $2; + next if ($role eq 'gr'); + my ($start,$end) = split(/\./,$env{$item}); + next if (($start && $start > $now) || ($end && $end < $now)); + if ($sec eq '') { + $sec = 'none'; + } + if (ref($courseroles{$role}) eq 'ARRAY') { + if (!grep(/^Q$sec\E$/,@{$courseroles{$role}})) { + push(@{$courseroles{$role}},$sec); + } + } else { + @{$courseroles{$role}} = ($sec); + } + } + } + } + my @roles_order = ('cc','in','ta','ep','ad','st'); + if (keys(%courseroles) > 1) { + $role_selector = &jump_to_role($cdom,$cnum); + $role_selector .= '
+ '."\n". + ''."\n". + ''."\n". + ''."\n". + ''."\n". + '
'; + } + return $role_selector; +} + +sub jump_to_role { + my ($cdom,$cnum) = @_; + my $output = <<"END"; + +END + return $output; +} + + # ================================================================ Main Program BEGIN {