--- loncom/interface/lonmenu.pm 2012/12/22 15:08:10 1.369.2.29 +++ loncom/interface/lonmenu.pm 2012/12/27 05:52:00 1.369.2.30 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Routines to control the menu # -# $Id: lonmenu.pm,v 1.369.2.29 2012/12/22 15:08:10 raeburn Exp $ +# $Id: lonmenu.pm,v 1.369.2.30 2012/12/27 05:52:00 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -351,6 +351,8 @@ sub secondary_menu { $env{'course.' . $env{'request.course.id'} . '.domain'}, $env{'course.' . $env{'request.course.id'} . '.num'}); + my ($roleswitcher_js,$roleswitcher_form); + foreach my $menuitem (@secondary_menu) { # evaluate conditions next if ref($menuitem) ne 'ARRAY'; @@ -413,12 +415,12 @@ sub secondary_menu { } } elsif ($$menuitem[3] eq 'Roles' && $env{'request.course.id'}) { # special treatment for role selector - my $roles_selector = &roles_selector( + ($roleswitcher_js,$roleswitcher_form,my $switcher) = + &roles_selector( $env{'course.' . $env{'request.course.id'} . '.domain'}, - $env{'course.' . $env{'request.course.id'} . '.num'} ); - - $menu .= $roles_selector ? "
  • $roles_selector
  • " - : ''; + $env{'course.' . $env{'request.course.id'} . '.num'} + ); + $menu .= $switcher; } else { $menu .= &prep_menuitem(\@$menuitem); } @@ -446,6 +448,9 @@ sub secondary_menu { if ($menu) { $menu = ""; } + if ($roleswitcher_form) { + $menu .= "\n$roleswitcher_js\n$roleswitcher_form"; + } return $menu; } @@ -2078,7 +2083,7 @@ sub roles_selector { my $now = time; my (%courseroles,%seccount,%courseprivs); my $is_cc; - my $role_selector; + my ($js,$form,$switcher,$switchtext); my $ccrole; if ($crstype eq 'Community') { $ccrole = 'co'; @@ -2168,40 +2173,69 @@ sub roles_selector { } my $switchtext; if ($crstype eq 'Community') { - $switchtext = &mt('Switch community role to...') + $switchtext = &mt('Switch community role') } else { - $switchtext = &mt('Switch course role to...') + $switchtext = &mt('Switch course role') } my @roles_order = ($ccrole,'in','ta','ep','ad','st'); - if (keys(%courseroles) > 1) { - $role_selector = &jump_to_role($cdom,$cnum,\%seccount,\%courseroles,\%courseprivs,$priv); - $role_selector .= '
    - '."\n". + ' '."\n". + ' '."\n". + ' '."\n"; + if ($destsymb ne '') { + $form .= ' '."\n"; + } + $form .= '
    '."\n"; foreach my $role (@roles_order) { + my $include; if (defined($courseroles{$role})) { - $role_selector .= "\n".''; + if ($env{'request.role'} =~ m{^\Q$role\E}) { + if ($seccount{$role} > 1) { + $include = 1; + } + } else { + $include = 1; + } + } + if ($include) { + push(@submenu,['javascript:adhocRole('."'$role'".')', + &Apache::lonnet::plaintext($role,$crstype)]); } } foreach my $role (sort(keys(%courseroles))) { if ($role =~ /^cr/) { - $role_selector .= "\n".''; + my $include; + if ($env{'request.role'} =~ m{^\Q$role\E}) { + if ($seccount{$role} > 1) { + $include = 1; + } + } else { + $include = 1; + } + if ($include) { + push(@submenu,['javascript:adhocRole('."'$role'".')', + &Apache::lonnet::plaintext($role)]); + } } } - $role_selector .= ''."\n"; - if ($destsymb ne '') { - $role_selector .= ''."\n"; + if (@submenu > 0) { + $switcher = &create_submenu('','',$switchtext,\@submenu); } - $role_selector .= - ''."\n". - ''."\n". - ''."\n". - ''."\n". - ''; } - return $role_selector; + return ($js,$form,$switcher); } sub get_all_courseroles { @@ -2340,9 +2374,8 @@ sub jump_to_role { return <<"END";