--- loncom/interface/lonmainmenu.pm 2009/07/13 08:24:21 1.8 +++ loncom/interface/lonmainmenu.pm 2010/12/05 16:39:33 1.8.4.11 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # displays the main menu # -# $Id: lonmainmenu.pm,v 1.8 2009/07/13 08:24:21 www Exp $ +# $Id: lonmainmenu.pm,v 1.8.4.11 2010/12/05 16:39:33 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -43,6 +43,8 @@ use Apache::Constants qw(:common); use Apache::loncommon(); use Apache::lonnet; use Apache::lonmenu(); +use Apache::lonlocal; +use LONCAPA qw(:DEFAULT :match); sub handler { my $r = shift; @@ -51,7 +53,25 @@ sub handler { $r->send_http_header; return OK if $r->header_only; - my $form; + my $custommenu = &Apache::loncommon::needs_gci_custom(); + my $cid = $env{'request.course.id'}; + + my %cicourses; + my $udom = $env{'user.domain'}; + my %allnums = &Apache::loncommon::get_faculty_cnums(); + if ($udom ne '' && ref($allnums{$udom} eq 'HASH') { + foreach my $key (%{$allnums{$udom}}) { + $cicourses{$udom.'_'.$key} = $allnums{$udom}->{$key}; + } + } + + if (($custommenu && $cid ne '' && ($cicourses{$cid} || $env{'request.role'} !~ m{^cc\./\Q$udom\Etest/})) || + ($cid ne '' && $env{'user.domain'} =~ /^\w+citest$/)) { + $r->internal_redirect('/adm/navmaps'); + return OK; + } + + my $form; if ($env{'environment.remote'} ne 'off') { $form=&Apache::lonmenu::serverform(); } @@ -71,15 +91,45 @@ ENDSCRIPT $env{'browser.interface'}='faketextual'; $env{'environment.remote'}='off'; - $r->print(&Apache::loncommon::start_page( 'Main Menu', - $script_tag, - {'bread_crumbs' => 1})); - $r->print(&Apache::lonmenu::inlinemenu().$form); + # Breadcrumbs + my ($nocrumbs,$args); + if ($custommenu) { + if ($env{'request.course.id'}) { + unless ($cicourses{$env{'request.course.id'}}) { + $nocrumbs = 1; + } + } else { + $nocrumbs = 1; + } + } + unless ($nocrumbs) { + my $brcrum = []; + $args = {bread_crumbs => $brcrum}; + } + $r->print(&Apache::loncommon::start_page('Main Menu',$script_tag,$args)); + + my ($rolecount,$numcourses) = (0,0); + my $now = time; + unless (($custommenu) || ($env{'user.domain'} =~ /^\w+citest$/)) { + foreach my $envkey (keys(%env)) { + next unless ($envkey =~ /^user\.role\./); + my ($start,$end) = split(/\./,$env{$envkey}); + if (($start eq '' || $start <= $now) && ($end eq '' || $end > $now)) { + $rolecount ++; + } + } + } + if ($custommenu) { + $r->print(&Apache::lonmenu::inlinemenu('gcicustom').$form); + } elsif (!$rolecount) { + $r->print(&Apache::lonmenu::inlinemenu('gcinorole').$form); + } else { + $r->print(&Apache::lonmenu::inlinemenu().$form); + } $r->print(&Apache::loncommon::end_page()); return OK; } - 1; __END__