--- loncom/interface/lonmainmenu.pm 2010/01/05 15:27:31 1.8.4.6 +++ loncom/interface/lonmainmenu.pm 2010/12/05 19:43:10 1.8.4.12 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # displays the main menu # -# $Id: lonmainmenu.pm,v 1.8.4.6 2010/01/05 15:27:31 raeburn Exp $ +# $Id: lonmainmenu.pm,v 1.8.4.12 2010/12/05 19:43:10 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -53,13 +53,30 @@ 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(); } - my $custommenu = &Apache::loncommon::needs_gci_custom(); - my ($script_tag,$switcher); + my $script_tag; if ($env{'environment.remote'} ne 'off') { my $utility=&Apache::lonmenu::utilityfunctions('/adm/menu'); $script_tag=(< ENDSCRIPT - } elsif (($custommenu) || ($env{'user.domain'} eq 'gcitest')) { - my $role = 'st'; - if ($custommenu) { - $role = 'cc'; - } - my $switcher_js; - my %courses = &Apache::loncommon::existing_gcitest_courses($role); - my $numcourses = keys(%courses); - if ($numcourses > 0) { - $switcher = &gcitest_switcher($role,%courses); - my $current; - if ($env{'request.course.id'}) { - $current = $role.'./'.$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 @@ -100,91 +91,43 @@ ENDSCRIPT $env{'browser.interface'}='faketextual'; $env{'environment.remote'}='off'; - $r->print(&Apache::loncommon::start_page( 'Main Menu', - $script_tag, - {'bread_crumbs' => 1})); + # Breadcrumbs + my ($nocrumbs,$args); if ($custommenu) { - $r->print(&Apache::lonmenu::inlinemenu('gcicustom',$switcher).$form); - } elsif ($env{'user.domain'} eq 'gcitest') { - $r->print(&Apache::lonmenu::inlinemenu('gcistudent',$switcher).$form); - } else { - $r->print(&Apache::lonmenu::inlinemenu().$form); - } - $r->print(&Apache::loncommon::end_page()); - return OK; -} - -sub gcitest_switcher { - my ($role,%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 = $courses{$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 ...'); + if ($env{'request.course.id'}) { + unless ($cicourses{$env{'request.course.id'}}) { + $nocrumbs = 1; + } } else { - $default = &mt('Select a concept test ...'); - } - } else { - unless (($env{'request.course.id'}) && ($courses{$env{'request.course.id'}})) { - $default = &mt('Select concept test ...'); + $nocrumbs = 1; } } - if ($default) { - $output = '
'. - '
'; + 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 ++; + } + } } - return $output; -} - -sub gcitest_switcher_js { - my ($current,$numcourses) = @_; - my $output = <<"ENDJS"; - -function courseswitcher(caller) { - var numcourses = $numcourses; - var current = '$current'; - var choice = document.pickrole.newrole.options[document.pickrole.newrole.selectedIndex].value; - if (choice == '') { - if (caller == 'icon') { - alert('No Concept Test selected'); - } - document.pickrole.selectrole.value = ''; - return; + 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); } - if (choice == current) { - if ((caller != 'icon') && (numcourses > 1)) { - alert('You have selected the current course.\\nPlease select a different Concept Test course'); - } - document.pickrole.newrole.selectedIndex = 0; - document.pickrole.selectrole.value = ''; - return; - } - document.pickrole.selectrole.value = '1'; - document.pickrole.submit(); - return; -} - -ENDJS - return $output; + $r->print(&Apache::loncommon::end_page()); + return OK; } 1;