--- loncom/interface/lonmainmenu.pm 2009/07/13 08:24:21 1.8 +++ loncom/interface/lonmainmenu.pm 2010/01/15 04:12:54 1.8.4.7 @@ -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.7 2010/01/15 04:12:54 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; @@ -56,7 +58,8 @@ sub handler { $form=&Apache::lonmenu::serverform(); } - my $script_tag; + 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=(< 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 @@ -74,11 +103,98 @@ ENDSCRIPT $r->print(&Apache::loncommon::start_page( 'Main Menu', $script_tag, {'bread_crumbs' => 1})); - $r->print(&Apache::lonmenu::inlinemenu().$form); + my $rolecount = 0; + unless (($custommenu) || ($env{'user.domain'} eq 'gcitest')) { + foreach my $envkey (keys(%env)) { + next unless ($envkey =~ /^user\.role\./); + $rolecount ++; + } + } + if ($custommenu) { + $r->print(&Apache::lonmenu::inlinemenu('gcicustom',$switcher).$form); + } elsif ($env{'user.domain'} eq 'gcitest') { + $r->print(&Apache::lonmenu::inlinemenu('gcistudent',$switcher).$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; } +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 ...'); + } 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; +} + +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 (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; +} 1; __END__