--- loncom/interface/lonmenu.pm 2009/11/30 06:23:32 1.307 +++ loncom/interface/lonmenu.pm 2010/08/09 23:39:43 1.309.2.14 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Routines to control the menu # -# $Id: lonmenu.pm,v 1.307 2009/11/30 06:23:32 raeburn Exp $ +# $Id: lonmenu.pm,v 1.309.2.14 2010/08/09 23:39:43 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -131,6 +131,7 @@ use Apache::lonhtmlcommon(); use Apache::loncommon(); use Apache::lonenc(); use Apache::lonlocal; +use Apache::loncoursequeueadmin; use LONCAPA qw(:DEFAULT :match); use HTML::Entities(); @@ -160,6 +161,7 @@ sub prep_menuitem { # entries from mydesk.tab sub primary_menu { my $menu; + my $custommenu = &Apache::loncommon::needs_gci_custom(); # each element of @primary contains following array: # (link url, icon path, alt text, link text, condition) foreach my $menuitem (@primary_menu) { @@ -175,6 +177,10 @@ sub primary_menu { next if $$menuitem[4] eq 'onlypublic'# hide links which are && $env{'user.name'} ne 'public' # only visible to public && $env{'user.domain'} ne 'public'; # users + 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 + && $custommenu; # next if $$menuitem[4] eq 'roles' ##show links depending on && &Apache::loncommon::show_course(); ##term 'Courses' or next if $$menuitem[4] eq 'courses' ##'Roles' wanted @@ -277,6 +283,45 @@ sub secondary_menu { return "<ul id=\"LC_secondary_menu\">$menu</ul>"; } +sub gci_secondary_menu { + my %courses = ( + 'review' => 'gci_9615072b469884921gcil1', + 'submit' => 'gci_1H96711d710194bfegcil1', + ); + my %linktext = ( + 'review' => 'Review Questions', + 'submit' => 'Submit Questions', + 'managetest' => 'Manage Tests', + ); + my %links = ( + 'managetest' => '/adm/menu', + ); + my $current = 'managetest'; + if ($env{'form.destinationurl'} eq '/adm/gci_info') { + undef($current); + } + foreach my $key (keys(%courses)) { + $links{$key} = "javascript:switchpage('$key');"; + if ($env{'request.course.id'} eq $courses{$key}) { + $links{$key} = '/adm/navmaps'; + $current = $key; + $links{'managetest'} = '/adm/roles?selectrole=1&cm=1&orgurl=%2fadm%2fmenu'; + } + } + my @menutabs = ('review','submit','managetest'); + my $tabs; + foreach my $item (@menutabs) { + if ($item eq $current) { + $tabs .= ' <li id="current"><a href="'.$links{$item}.'">'. + $linktext{$item}.'</a></li>'; + } else { + $tabs .= ' <li><a href="'.$links{$item}.'">'. + $linktext{$item}.'</a></li>'; + } + } + return '<div id="gciheader">'. + '<ul>'.$tabs.'</ul></div><br />'; +} # # This routine returns a translated hash for the menu items in the top inline menu row @@ -512,7 +557,7 @@ sub registerurl { } sub innerregister { - my ($forcereg, $titletable) = @_; + my ($forcereg,$titletable,$bread_crumbs) = @_; my $result = ''; my ($uname,$thisdisfn); my $const_space = ($env{'request.state'} eq 'construct'); @@ -753,6 +798,14 @@ s&7&1&del.gif&delete[_1]&resource[_2]&go s&7&2&prt.gif&prepare[_1]&printout[_1]&gocstr('/adm/printout','/~$uname/$cleandisfn')&Prepare a printable document ENDMENUITEMS } + if ($noremote) { + if (ref($bread_crumbs) eq 'ARRAY') { + &Apache::lonhtmlcommon::clear_breadcrumbs(); + foreach my $crumb (@{$bread_crumbs}){ + &Apache::lonhtmlcommon::add_breadcrumb($crumb); + } + } + } } elsif ( defined($env{'request.course.id'}) && $env{'request.symb'} ne '' ) { # @@ -1324,36 +1377,92 @@ sub openmenu { } sub inlinemenu { + my ($context,$switcher) = @_; undef(@inlineremote); undef(%category_members); -# calling rawconfig with "1" will evaluate mydesk.tab, even if there is no active remote control - &rawconfig(1); - my $output='<table id="LC_mainmenu"><tr>'; - for (my $col=1; $col<=2; $col++) { - $output.='<td class="LC_mainmenu_col_fieldset">'; - for (my $row=1; $row<=8; $row++) { - foreach my $cat (keys(%category_members)) { - if ($category_positions{$cat} ne "$col,$row") { next; } - #$output.='<table><tr><td colspan="4" class="LC_menubuttons_category">'.&mt($category_names{$cat}).'</td></tr>'; - $output.='<div class="LC_Box">'; - $output.='<h4 class="LC_hcell">'.&mt($category_names{$cat}).'</h4>'; - $output.='<table>'; - my %active=(); - foreach my $menu_item (split(/\:/,$category_members{$cat})) { - if ($inlineremote[$menu_item]) { - $active{$menu_item}=1; - } - } - foreach my $item (sort(keys(%active))) { - $output.=$inlineremote[$item]; - } - $output.='</table>'; - $output.='</div>'; + my $output; + if (($context eq 'gcicustom') || ($context eq 'gcistudent') || + ($context eq 'gcinorole')) { + $output='<table><tr>'. + '<td class="LC_mainmenu_col_fieldset">'. + '<div class="LC_Box LC_400Box">'. + '<h3 class="LC_hcell">'.&mt('Utilities').'</h3>'. + '<table>'; + if ($context eq 'gcicustom') { + my $createtext = &mt('Create Concept Test'); + if ($switcher) { + $createtext = &mt('Create New Test'); } - } - $output.="</td>"; + $output .= '<tr><td align="left"><a href="javascript:switchpage('."'createtest'".');"><img alt="choose role" src="/res/adm/pages/rcrs.png" align="left" class="LC_icon" /></a></td><td class="LC_menubuttons_text" colspan="3"><a class="LC_menubuttons_link" href="javascript:switchpage('."'createtest'".');"><span class="LC_menubuttons_inline_text">'.$createtext.'</span></a></td></tr>'; + } + if ($switcher) { + $output .= '<tr><td align="left"><a href="javascript:courseswitcher('."'icon'".');"><img alt="choose role" src="/res/adm/pages/roles.png" align="left" class="LC_icon" /></a></td><td class="LC_menubuttons_text" colspan="2">'.$switcher.'</td></tr>'; + } + $output .= '<tr><td align="left"><a href="javascript:go('."'/adm/communicate'".');"><img alt="communication" src="/res/adm/pages/com.png" align="left" class="LC_icon" /></a></td><td class="LC_menubuttons_text" colspan="3"><a class="LC_menubuttons_link" href="javascript:go('."'/adm/communicate'".');"><span class="LC_menubuttons_inline_text">'.&mt('Send/Display Messages').'</span></a></td></tr>'. +'<tr><td align="left"><a href="javascript:go('."'/adm/preferences'".');"><img alt="user preferences" src="/res/adm/pages/pref.png" align="left" class="LC_icon" /></a></td><td class="LC_menubuttons_text" colspan="3"><a class="LC_menubuttons_link" href="javascript:go('."'/adm/preferences'".');"><span class="LC_menubuttons_inline_text">'.&mt('Set my user preferences').'</span></a></td></tr>'; + if ($env{'request.course.id'}) { + if (($context eq 'gcicustom') && (&Apache::lonnet::allowed('mdc',$env{'request.course.id'}))) { + $output.= '</td></tr></table></div></td>'. + '<td class="LC_mainmenu_col_fieldset">'. + '<div class="LC_Box LC_400Box">'. + '<h3 class="LC_hcell">'.&mt('Test Management').'</h3>'. + '<table><tr><td align="left"><a href="javascript:gonav('."'/adm/navmaps'".');"><img alt="course contents" src="/res/adm/pages/nav.png" align="left" class="LC_icon" /></a></td><td class="LC_menubuttons_text" colspan="3"><a class="LC_menubuttons_link" href="javascript:gonav('."'/adm/navmaps'".');"><span class="LC_menubuttons_inline_text">Concept Test Contents</span></a></td></tr>'."\n". + '<tr><td align="left"><a href="javascript:go('."'/adm/coursedocs'".');"><img alt="assemble test" src="/res/adm/pages/docs.png" align="left" class="LC_icon" /></a></td><td class="LC_menubuttons_text" colspan="3"><a class="LC_menubuttons_link" href="javascript:go('."'/adm/coursedocs'".');"><span class="LC_menubuttons_inline_text">Assemble Concept Test</span></a></td></tr>'."\n". + '<tr><td align="left"><a href="javascript:go('."'/adm/createuser'".');"><img alt="user privs" src="/res/adm/pages/cprv.png" align="left" class="LC_icon" /></a></td><td class="LC_menubuttons_text" colspan="3"><a class="LC_menubuttons_link" href="javascript:go('."'/adm/createuser'".');"><span class="LC_menubuttons_inline_text">'.&mt('Enrollment and Student Activity').'</span></a></td></tr>'."\n". + '<tr><td align="left"><a href="javascript:go('."'/adm/whatsnew'".');"><img alt="what is new" src="/res/adm/pages/new.png" align="left" class="LC_icon" /></a></td><td class="LC_menubuttons_text" colspan="3"><a class="LC_menubuttons_link" href="javascript:go('."'/adm/whatsnew'".');"><span class="LC_menubuttons_inline_text">'.&mt("What's New?").'</span></a></td></tr>'. + '<tr><td align="left"><a href="javascript:go('."'/adm/printout'".');"><img alt="print concept test" src="/res/adm/pages/prnt.png" align="left" class="LC_icon" /></a></td><td class="LC_menubuttons_text" colspan="3"><a class="LC_menubuttons_link" href="javascript:go('."'/adm/printout'".');"><span class="LC_menubuttons_inline_text">'.&mt("Prepare Printable Concept Test").'</span></a></td></tr>'. + '<tr><td align="left"><a href="javascript:go('."'/adm/statistics'".');"><img alt="Test Statistics" src="/res/adm/pages/chrt.png" align="left" class="LC_icon" /></a></td><td class="LC_menubuttons_text" colspan="3"><a class="LC_menubuttons_link" href="javascript:go('."'/adm/statistics'".');"><span class="LC_menubuttons_inline_text">'.&mt("Concept Test Statistics").'</span></a></td></tr></table></div></td>'; + } else { + my $navtext = &mt('Table of Contents'); + if ($env{'request.role.domain'} eq 'gcitest') { + $navtext = &mt('Display Test Contents'); + } + $output .= '<tr><td align="left"><a href="javascript:gonav('."'/adm/navmaps'".');"><img alt="course contents" src="/res/adm/pages/nav.png" align="left" class="LC_icon" /></a></td><td class="LC_menubuttons_text" colspan="3"><a class="LC_menubuttons_link" href="javascript:gonav('."'/adm/navmaps'".');"><span class="LC_menubuttons_inline_text">'.$navtext.'</span></a></td></tr></table></div></td>'; + } + } else { + $output.='</td></tr></table></div></td>'; + } + if ($context eq 'gcinorole') { + my $queued = &Apache::loncoursequeueadmin::queued_selfenrollment('notitle'); + if ($queued) { + $output .= '<td class="LC_mainmenu_col_fieldset">'. + '<div class="LC_Box LC_400Box">'. + '<h3 class="LC_hcell">'.&mt('Pending Enrollment Requests').'</h3>'. + $queued. + '</td></tr></table></div></td>'; + } + } + $output.='</tr></table>'; + } else { + # calling rawconfig with "1" will evaluate mydesk.tab, + # even if there is no active remote control + &rawconfig(1); + $output='<table><tr>'; + for (my $col=1; $col<=2; $col++) { + $output.='<td class="LC_mainmenu_col_fieldset">'; + for (my $row=1; $row<=8; $row++) { + foreach my $cat (keys(%category_members)) { + if ($category_positions{$cat} ne "$col,$row") { next; } + $output.='<div class="LC_Box LC_400Box">'; + $output.='<h3 class="LC_hcell">'.&mt($category_names{$cat}).'</h3>'; + $output.='<table>'; + my %active=(); + foreach my $menu_item (split(/\:/,$category_members{$cat})) { + if ($inlineremote[$menu_item]) { + $active{$menu_item}=1; + } + } + foreach my $item (sort(keys(%active))) { + $output.=$inlineremote[$item]; + } + $output.='</table>'; + $output.='</div>'; + } + } + $output.="</td>"; + } + $output.="</tr></table>"; } - $output.="</tr></table>"; return $output; } @@ -1648,11 +1757,51 @@ END } sub utilityfunctions { - my $caller = shift; + my ($caller,$custommenu) = @_; unless ($env{'environment.remote'} eq 'off' || $caller eq '/adm/menu') { return ''; } - + + my $gcimenujs; + if ($custommenu) { + my %concepttests = &Apache::loncommon::existing_gcitest_courses('cc'); + my $managetesturl = '/adm/menu'; + my $createtesturl = '/adm/requestcourse'; + if (($env{'request.course.id'}) && + ($env{'course.'.$env{'request.course.id'}.'.domain'} eq 'gci')) { + my @items = keys(%concepttests); + if (@items== 1) { + my $newrole = $items[0]; + $newrole =~ s{_}{/}; + $managetesturl = '/adm/roles?selectrole=1&cc./'.$newrole.'=1'; + } else { + $managetesturl = '/adm/roles?selectrole=1&cm=1&orgurl=%2fadm%2fmenu'; + } + } + if ($env{'request.course.id'}) { + $createtesturl = '/adm/roles?selectrole=1&cm=1&orgurl=%2fadm%2frequestcourse'; + } + $gcimenujs = <<"ENDCUSTOM"; + +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'; + } + return; +} + +ENDCUSTOM + } + my $currenturl=&Apache::lonnet::clutter(&Apache::lonnet::fixversion((split(/\?/,$env{'request.noversionuri'}))[0])); if ($currenturl =~ m{^/adm/wrapper/ext/}) { if ($env{'request.external.querystring'}) { @@ -1700,6 +1849,8 @@ return (<<ENDUTILITY) $nav_control $dc_popup_cid +$gcimenujs + function go(url) { if (url!='' && url!= null) { currentURL = null; @@ -1890,7 +2041,9 @@ sub hidden_button_check { return; } if ($env{'request.role.adv'}) { - return; + unless (&Apache::loncommon::needs_gci_custom()) { + return; + } } my $buttonshide = &Apache::lonnet::EXT('resource.0.buttonshide'); return $buttonshide;