--- loncom/interface/lonmenu.pm 2008/02/03 05:07:58 1.234 +++ loncom/interface/lonmenu.pm 2008/09/11 13:30:59 1.242 @@ -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.242 2008/09/11 13:30:59 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:'); @@ -238,10 +251,6 @@ ENDCRELOAD } my $form=&serverform(); my $utility=&utilityfunctions(); - my $remote; - if ($env{'user.adv'}) { - $remote = ''.$lt{'launch'}.'' - } my $helplink=&Apache::loncommon::top_nav_help('Help'); return (<$lt{'roles'} +$roles $helplink $lt{'exit'} @@ -421,7 +429,7 @@ sub innerregister { my $action = "go('/priv/".$env{'user.name'}."');"; my $cadom = $env{'request.role.domain'}; my $caname = $env{'user.name'}; - my $desc = "Enter my resource construction space"; + my $desc = "Enter my construction space"; # Set defaults for co-authors if ($env{'request.role'} =~ /^ca/) { ($cadom,$caname)=($env{'request.role'}=~/($match_domain)\/($match_username)$/); @@ -885,8 +893,9 @@ sub switch { $top=&mt($top); $bot=&mt($bot); $desc=&mt($desc); - $img=&mt($img); - + if (($env{'environment.remote'} ne 'off') || ($env{'environment.icons'} eq 'classic')) { + $img=&mt($img); + } my $idx=10*$row+$col; $category_members{$cat}.=':'.$idx; @@ -981,11 +990,14 @@ sub inlinemenu { &rawconfig(1); my $output=''; for (my $col=1; $col<=2; $col++) { - $output.='"; @@ -1410,6 +1424,221 @@ sub hidden_button_check { return $buttonshide; } +sub roles_selector { + my ($cdom,$cnum) = @_; + my $now = time; + my (%courseroles,%seccount,%gotnosection); + 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)) { + my ($urole,$usec) = split(/:/,$role); + if (!$gotnosection{$urole}) { + $seccount{$urole} ++; + $gotnosection{$urole} = 1; + } + if (ref($courseroles{$urole}) eq 'ARRAY') { + if ($usec ne '') { + if (!grep(/^Q$usec\E$/,@{$courseroles{$urole}})) { + push(@{$courseroles{$urole}},$usec); + $seccount{$urole} ++; + } + } + } else { + @{$courseroles{$urole}} = (); + if ($usec ne '') { + $seccount{$urole} ++; + push(@{$courseroles{$urole}},$usec); + } + } + } + my %sections_count = &Apache::loncommon::get_sections($cdom,$cnum); + @{$courseroles{'st'}} = (); + if (keys(%sections_count) > 0) { + push(@{$courseroles{'st'}},keys(%sections_count)); + } + } 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 '') { + if (!$gotnosection{$role}) { + $seccount{$role} ++; + $gotnosection{$role} = 1; + } + } + if (ref($courseroles{$role}) eq 'ARRAY') { + if ($sec ne '') { + if (!grep(/^Q$sec\E$/,@{$courseroles{$role}})) { + push(@{$courseroles{$role}},$sec); + $seccount{$role} ++; + } + } + } else { + @{$courseroles{$role}} = (); + if ($sec ne '') { + $seccount{$role} ++; + push(@{$courseroles{$role}},$sec); + } + } + } + } + } + my @roles_order = ('cc','in','ta','ep','ad','st'); + if (keys(%courseroles) > 1) { + $role_selector = &jump_to_role($cdom,$cnum,\%seccount,\%courseroles); + $role_selector .= ' + '."\n". + ''."\n". + ''."\n". + ''."\n". + ''."\n". + ''; + } + return $role_selector; +} + +sub jump_to_role { + my ($cdom,$cnum,$seccount,$courseroles) = @_; + my %lt = &Apache::lonlocal::texthash( + this => 'This role has section(s) associated with it.', + ente => 'Enter a specific section.', + orlb => 'Enter a specific section, or leave blank for no section.', + avai => 'Available sections are:', + youe => 'You entered an invalid section choice:', + plst => 'Please try again', + ); + my $js; + if (ref($courseroles) eq 'HASH') { + $js = ' var secpick = new Array("'.$lt{'ente'}.'","'.$lt{'orlb'}.'");'."\n". + ' var numsec = new Array();'."\n". + ' var rolesections = new Array();'."\n". + ' var rolenames = new Array();'."\n". + ' var roleseclist = new Array();'."\n"; + my @items = keys(%{$courseroles}); + for (my $i=0; $i<@items; $i++) { + $js .= ' rolenames['.$i.'] = "'.$items[$i].'";'."\n"; + my ($secs,$secstr); + if (ref($courseroles->{$items[$i]}) eq 'ARRAY') { + my @sections = sort { $a <=> $b } @{$courseroles->{$items[$i]}}; + $secs = join('","',@sections); + $secstr = join(', ',@sections); + } + $js .= ' rolesections['.$i.'] = new Array("'.$secs.'");'."\n". + ' roleseclist['.$i.'] = "'.$secstr.'";'."\n". + ' numsec['.$i.'] = "'.$seccount->{$items[$i]}.'";'."\n"; + } + } + my $output = <<"END"; + +END + return $output; +} + + # ================================================================ Main Program BEGIN {
'; + $output.=''; for (my $row=1; $row<=8; $row++) { foreach my $cat (keys(%category_members)) { if ($category_positions{$cat} ne "$col,$row") { next; } - $output.=''; + #$output.='
'.&mt($category_names{$cat}).'
'; + $output.='
'; + $output.=''.&mt($category_names{$cat}).''; + $output.='
'.&mt($category_names{$cat}).'
'; my %active=(); foreach my $menu_item (split(/\:/,$category_members{$cat})) { if ($inlineremote[$menu_item]) { @@ -994,8 +1006,10 @@ sub inlinemenu { } foreach my $item (sort(keys(%active))) { $output.=$inlineremote[$item]; + &Apache::lonnet::logthis("item=$item output=$inlineremote[$item]"); } $output.='
'; + $output.=''; } } $output.="