--- loncom/interface/lonmainmenu.pm 2009/12/07 18:37:11 1.8.4.1 +++ loncom/interface/lonmainmenu.pm 2021/06/07 06:05:49 1.13 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # displays the main menu # -# $Id: lonmainmenu.pm,v 1.8.4.1 2009/12/07 18:37:11 raeburn Exp $ +# $Id: lonmainmenu.pm,v 1.13 2021/06/07 06:05:49 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -31,119 +31,66 @@ # browser.interface - if this is 'textual', it overrides the second parameter # and goes to screen reader PDA mode # -# environment.remote - if this is 'on', the routines controll the remote -# control, otherwise they render the main window controls; ignored it -# browser.interface is 'textual' -# package Apache::lonmainmenu; use strict; -use Apache::Constants qw(:common); +use Apache::Constants qw(:common REDIRECT); use Apache::loncommon(); use Apache::lonnet; use Apache::lonmenu(); use Apache::lonlocal; -use LONCAPA qw(:DEFAULT :match); sub handler { my $r = shift; + + # Check for critical messages and redirect if present. + my ($redirect,$url) = &Apache::loncommon::critical_redirect(300,'menu'); + if ($redirect) { + &Apache::loncommon::content_type($r,'text/html'); + $r->header_out(Location => $url); + return REDIRECT; + } + &Apache::loncommon::no_cache($r); &Apache::loncommon::content_type($r,'text/html'); $r->send_http_header; return OK if $r->header_only; - my $form; - if ($env{'environment.remote'} ne 'off') { - $form=&Apache::lonmenu::serverform(); - } - - my $custommenu = &Apache::loncommon::needs_gci_custom(); - my ($script_tag,$switcher); - if ($env{'environment.remote'} ne 'off') { - my $utility=&Apache::lonmenu::utilityfunctions('/adm/menu'); - $script_tag=(< -$utility - -ENDSCRIPT - } elsif ($custommenu) { - my $switcher_js; - my %courses = &Apache::loncommon::existing_gcitest_courses(); - my $numcourses = keys(%courses); - if ($numcourses > 0) { - $switcher = &gcitest_switcher(%courses); - my $current; - if ($env{'request.course.id'}) { - $current = 'cc./'.$env{'course.'.$env{'request.course.id'}.'.domain'}. - '/'.$env{'course.'.$env{'request.course.id'}.'.num'}; - } - $switcher_js = &gcitest_switcher_js($current,$numcourses); - $script_tag= <<"ENDSCRIPT"; - -ENDSCRIPT - } - } # ---- Print the screen, pretend to be in text mode to generate text-based menu # temporarily set interface to "faketextual" and remote to "off", which renders # the main menu $env{'browser.interface'}='faketextual'; - $env{'environment.remote'}='off'; $r->print(&Apache::loncommon::start_page( 'Main Menu', - $script_tag, + undef, {'bread_crumbs' => 1})); - if ($custommenu) { - $r->print(&Apache::lonmenu::inlinemenu('gcicustom',$switcher).$form); - } else { - $r->print(&Apache::lonmenu::inlinemenu().$form); +# +# If menu collection is in effect in course context, and Main Menu is +# not included, display message in place of usual menu items. +# + if ($env{'request.course.id'}) { + my ($menucoll,$deeplinkmenu,$menuref) = + &Apache::loncommon::menucoll_in_effect(); + if ($menucoll) { + if (ref($menuref) eq 'HASH') { + if ($menuref->{'main'} eq 'n') { + $r->print('

'.&mt('Main Menu unavailable').'

'); + unless ($deeplinkmenu) { + my $crstype = &Apache::loncommon::course_type(); + $r->print('

'.&mt("Main Menu page is unavailable in this $crstype").'

'); + } + $r->print(&Apache::loncommon::end_page()); + return OK; + } + } + } } + $r->print(&Apache::lonmenu::inlinemenu()); $r->print(&Apache::loncommon::end_page()); return OK; } -sub gcitest_switcher { - my (%courses) = @_; - my $output; - my %Sortby; - foreach my $course (sort(keys(%courses))) { - next unless (ref($courses{$course}) eq 'HASH'); - my $clean_title = $courses{$course}{'description'}; - $clean_title =~ s/\W+//g; - if ($clean_title eq '') { - $clean_title = $courseinfo{$course}{'description'}; - } - push(@{$Sortby{$clean_title}},$course); - } - my @sorted_courses = sort { lc($a) cmp lc($b) } (keys(%Sortby)); - my $default; - if (@sorted_courses > 1) { - if (($env{'request.course.id'}) && ($courses{$env{'request.course.id'}})) { - $default = &mt('Switch concept test ...'); - } else { - $default = &mt('Select a concept test ...'); - } - } else { - unless (($env{'request.course.id'}) && ($courses{$env{'request.course.id'}})) { - $default = &mt('Select concept test ...'); - } - } - if ($default) { - $output = '
'. - '
'; - } - return $output; -} 1; __END__