--- loncom/interface/lonmenu.pm 2010/11/30 05:51:55 1.309.2.19 +++ loncom/interface/lonmenu.pm 2010/12/07 04:33:49 1.309.2.24 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Routines to control the menu # -# $Id: lonmenu.pm,v 1.309.2.19 2010/11/30 05:51:55 raeburn Exp $ +# $Id: lonmenu.pm,v 1.309.2.24 2010/12/07 04:33:49 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -151,10 +151,10 @@ sub prep_menuitem { } else { # textual Link $link = &mt($$menuitem[3]); } - if($$menuitem[4] eq 'newmsg'){ #special style for New Messages - return '
  • '.$link.'
  • '; - } - return '
  • '.$link.'
  • '; + return '
  • $link
  • |; } # primary_menu() evaluates @primary_menu and returns XHTML for the menu @@ -166,12 +166,15 @@ sub primary_menu { my $menu; my $custommenu = &Apache::loncommon::needs_gci_custom(); my $numdc = &Apache::loncommon::check_for_gci_dc(); + my %allnums = &Apache::loncommon::get_faculty_cnums(); # each element of @primary contains following array: # (link url, icon path, alt text, link text, condition) - my $public; + my ($public,$faculty); if ((($env{'user.name'} eq 'public') && ($env{'user.domain'} eq 'public')) || (($env{'user.name'} eq '') && ($env{'user.domain'} eq ''))) { $public = 1; + } elsif (ref($allnums{$env{'user.domain'}}) eq 'HASH') { + $faculty = 1; } foreach my $menuitem (@primary_menu) { # evaluate conditions @@ -186,13 +189,13 @@ sub primary_menu { next if $$menuitem[4] eq 'onlypublic'# hide links which are && !$public; # only visible to public # users - next if $$menuitem[4] eq 'gci' - && (!$custommenu || $env{'request.role'} =~ m{^st\./gcitest/}); + next if $$menuitem[4] eq 'ci' + && (!$custommenu || $env{'request.role'} =~ m{^st\./\w+citest/}); next if $$menuitem[4] eq 'home' - && (($custommenu) || ($env{'user.domain'} eq 'gcitest') || - (($env{'user.domain'} eq 'gci') && !$numdc)); - next if $$menuitem[4] eq 'gcitest' - && (($env{'user.domain'} eq 'gci') || ($env{'request.role'} eq 'cm')); + && (($custommenu) || ($env{'user.domain'} =~ /^\w+citest$/) || + ($faculty && !$numdc)); + next if $$menuitem[4] eq 'citest' + && ($faculty || ($env{'request.role'} eq 'cm')); next if $$menuitem[4] eq 'roles' # hide links which are && $custommenu; # not visible when GCI next if $$menuitem[4] eq 'courses' # tabbed interface in use @@ -204,11 +207,20 @@ sub primary_menu { if ($$menuitem[3] eq 'Help') { # special treatment for helplink - $menu .= '
  • '.&Apache::loncommon::top_nav_help('Help').'
  • '; + if ($public) { + my $origmail = $Apache::lonnet::perlvar{'lonSupportEMail'}; + my $defdom = &Apache::lonnet::default_login_domain(); + my $to = &Apache::loncommon::build_recipient_list(undef, + 'helpdeskmail', + $defdom,$origmail); + if ($to ne '') { + $menu .= &prep_menuitem($menuitem); + } + } else { + $menu .= '
  • '.&Apache::loncommon::top_nav_help('Help').'
  • '; + } } else { - my @items = @{$menuitem}; - $items[0] = 'javascript:'.$menuitem->[0].';'; - $menu .= &prep_menuitem(\@items); + $menu .= &prep_menuitem($menuitem); } } @@ -307,22 +319,37 @@ sub secondary_menu { } sub gci_secondary_menu { - my %courses = ( - 'review' => 'gci_9615072b469884921gcil1', - 'submit' => 'gci_1H96711d710194bfegcil1', - 'tutorial' => 'gci_5422913620b814c90gcil1', - ); + my %courses; + my $inventory; + if ($env{'user.domain'} =~ /^(\w+ci)test$/) { + $inventory = $1; + } else { + $inventory = $env{'user.domain'}; + } + my %allnums = &Apache::loncommon::get_faculty_cnums(); + if (($inventory ne '') && (ref($allnums{$inventory}) eq 'HASH')) { + foreach my $key (keys(%{$allnums{$inventory}})) { + $courses{$key} = $inventory.'_'.$allnums{$inventory}->{$key}; + } + } + my %linktext = ( 'review' => 'Review Questions', 'submit' => 'Submit Questions', 'managetest' => 'Manage Tests', 'tutorial' => 'Tutorials', ); - my %links = ( - 'managetest' => '/adm/menu', - ); - my $current = 'managetest'; - if ($env{'form.destinationurl'} eq '/adm/gci_info') { + my (%links,@menutabs,$current,%can_request,%request_domains); + my %concepttests = &Apache::loncommon::existing_gcitest_courses('cc'); + my $canreq = &Apache::lonnet::check_can_request($env{'user.domain'}.'test', + \%can_request,\%request_domains); + if (($canreq) || (keys(%concepttests) > 0)) { + %links = ( + 'managetest' => '/adm/menu', + ); + $current = 'managetest'; + } + if ($env{'form.destinationurl'} eq '/adm/ci_info') { undef($current); } foreach my $key (keys(%courses)) { @@ -334,12 +361,16 @@ sub gci_secondary_menu { $links{$key} = '/adm/navmaps'; } $current = $key; - $links{'managetest'} = '/adm/roles?selectrole=1&cm=1&orgurl=%2fadm%2fmenu'; + if (($canreq) || (keys(%concepttests) > 0) { + $links{'managetest'} = '/adm/roles?selectrole=1&cm=1&orgurl=%2fadm%2fmenu'; + } } } - my @menutabs = ('review','submit','managetest','tutorial'); + my @posstabs = ('review','submit','managetest','tutorial'); my $tabs; - foreach my $item (@menutabs) { + foreach my $item (@posstabs) { + next if ($links{$item} eq ''); + push(@menutabs,$item); if ($item eq $current) { $tabs .= '
  • '. $linktext{$item}.'
  • '; @@ -1448,9 +1479,9 @@ ENDSCRIPT } $switcher = $switcher_js.$switcher; } - if ($env{'user.domain'} eq 'gci') { + if ($env{'user.domain'} !~ /^\w+citest$/) { $canreq = - &Apache::lonnet::check_can_request('gcitest',\%can_request,\%request_domains); + &Apache::lonnet::check_can_request($env{'user.domain'}.'test',\%can_request,\%request_domains); $createtext = &mt('Create Concept Test'); if ($numcourses) { $createtext = &mt('Create New Test'); @@ -1491,7 +1522,7 @@ ENDSCRIPT } else { my $navtext = &mt('Table of Contents'); my $navdesc = &mt('Display Table of Contents for Geoscience Concept Inventory'); - if ($env{'request.role.domain'} eq 'gcitest') { + if ($env{'request.role.domain'} =~ /^\w+citest$/) { $navtext = &mt('Display Test Contents'); $navdesc = &mt('Display the table of contents for this Concept Test'); } @@ -1878,44 +1909,54 @@ sub utilityfunctions { my $gcimenujs; if ($custommenu) { my %concepttests = &Apache::loncommon::existing_gcitest_courses('cc'); - my $managetesturl = '/adm/menu'; - my $createtesturl = '/adm/requestcourse'; + my (@calls,%switchpage_call,%canrequest,%request_domains); + my $canreq = &Apache::lonnet::check_can_request($env{'user.domain'}.'test', + \%canrequest,\%request_domains); + if ($canreq) { + foreach my $call ('createtest','managetest') { + push(@calls,$call); + } + $switchpage_call{'managetest'} = '/adm/menu'; + $switchpage_call{'createtest'} = '/adm/requestcourse'; + if ($env{'request.course.id'}) { + $switchpage_call{'createtest'} = '/adm/roles?selectrole=1&cm=1&orgurl=%2fadm%2frequestcourse'; + } + } if (($env{'request.course.id'}) && - ($env{'course.'.$env{'request.course.id'}.'.domain'} eq 'gci')) { + ($env{'course.'.$env{'request.course.id'}.'.domain'} !~ /^\w+citest$/)) { my @items = keys(%concepttests); - if (@items== 1) { + if (@items==1) { my $newrole = $items[0]; $newrole =~ s{_}{/}; - $managetesturl = '/adm/roles?selectrole=1&cc./'.$newrole.'=1'; + $switchpage_call{'managetest'} = '/adm/roles?selectrole=1&cc./'.$newrole.'=1'; } else { - $managetesturl = '/adm/roles?selectrole=1&cm=1&orgurl=%2fadm%2fmenu'; + $switchpage_call{'managetest'} = '/adm/roles?selectrole=1&cm=1&orgurl=%2fadm%2fmenu'; } } - if ($env{'request.course.id'}) { - $createtesturl = '/adm/roles?selectrole=1&cm=1&orgurl=%2fadm%2frequestcourse'; + my %allnums = &Apache::loncommon::get_faculty_cnums(); + my $udom = $env{'user.domain'}; + if (ref($allnums{$udom}) eq 'HASH') { + foreach my $key (keys(%{$allnums{$udom}})) { + $switchpage_call{$key} = '/adm/roles?selectrole=1&'. + 'st./'.$udom.'/'.$allnums{$udom}->{$key}.'=1'; + push(@calls,$key); + } } - $gcimenujs = <<"ENDCUSTOM"; - + if (@calls > 0) { + $gcimenujs = ' function switchpage(caller) { - if (caller == 'review') { - document.location.href = '/adm/roles?selectrole=1&st./gci/9615072b469884921gcil1=1'; - } - if (caller == 'submit') { - document.location.href = '/adm/roles?selectrole=1&st./gci/1H96711d710194bfegcil1=1'; - } - if (caller == 'createtest') { - document.location.href = '$createtesturl'; - } - if (caller == 'managetest') { - document.location.href = '$managetesturl'; - } - if (caller == 'tutorial') { - document.location.href = '/adm/roles?selectrole=1&st./gci/5422913620b814c90gcil1=1'; - } +'; + foreach my $call (@calls) { + $gcimenujs .= " + if (caller == '$call') { + document.location.href = '$switchpage_call{$call}'; + }"; + } + $gcimenujs .= ' return; } - -ENDCUSTOM +'; + } } my $currenturl=&Apache::lonnet::clutter(&Apache::lonnet::fixversion((split(/\?/,$env{'request.noversionuri'}))[0])); @@ -1975,12 +2016,6 @@ function go(url) { } } -function gotop(url) { - if (url!='' && url!= null) { - top.location.href = url; - } -} - function gopost(url,postdata) { if (url!='') { this.document.server.action=url;