--- loncom/interface/lonmenu.pm 2013/07/03 16:44:20 1.417 +++ loncom/interface/lonmenu.pm 2014/06/22 19:46:48 1.428 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Routines to control the menu # -# $Id: lonmenu.pm,v 1.417 2013/07/03 16:44:20 raeburn Exp $ +# $Id: lonmenu.pm,v 1.428 2014/06/22 19:46:48 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -261,7 +261,7 @@ sub primary_menu { push(@primsub,$item); } if (@primsub > 0) { - $menu{$position} .= &create_submenu($link,$target,$title,\@primsub); + $menu{$position} .= &create_submenu($link,$target,$title,\@primsub,1); } elsif ($link) { $menu{$position} .= '<li><a href="'.$link.'" target="'.$target.'">'.&mt($title).'</a></li>'; } @@ -283,8 +283,14 @@ sub primary_menu { $menu{$position} .= prep_menuitem($menuitem); } } - return ("<ol class=\"LC_primary_menu LC_floatleft\">$menu{'left'}</ol>", - "<ol class=\"LC_primary_menu LC_floatright LC_right\">$menu{'right'}</ol>"); + my @output = ('',''); + if ($menu{'left'} ne '') { + $output[0] = "<ol class=\"LC_primary_menu LC_floatleft\">$menu{'left'}</ol>"; + } + if ($menu{'right'} ne '') { + $output[1] = "<ol class=\"LC_primary_menu LC_floatright LC_right\">$menu{'right'}</ol>"; + } + return @output; } #returns hashref {user=>'',dom=>''} containing: @@ -313,6 +319,7 @@ sub getauthor{ } sub secondary_menu { + my ($httphost) = @_; my $menu; my $crstype = &Apache::loncommon::course_type(); @@ -321,6 +328,9 @@ sub secondary_menu { : ''); my $canedit = &Apache::lonnet::allowed('mdc', $env{'request.course.id'}); my $canviewroster = $env{'course.'.$env{'request.course.id'}.'.student_classlist_view'}; + if ($canviewroster eq 'disabled') { + undef($canviewroster); + } my $canviewgrps = &Apache::lonnet::allowed('vcg', $crs_sec); my $canmodifyuser = &Apache::lonnet::allowed('cst', $crs_sec); my $canviewwnew = &Apache::lonnet::allowed('whn', $crs_sec); @@ -414,7 +424,8 @@ sub secondary_menu { ($roleswitcher_js,$roleswitcher_form,my $switcher) = &roles_selector( $env{'course.' . $env{'request.course.id'} . '.domain'}, - $env{'course.' . $env{'request.course.id'} . '.num'} + $env{'course.' . $env{'request.course.id'} . '.num'}, + $httphost ); $menu .= $switcher; } else { @@ -466,7 +477,7 @@ sub secondary_menu { } sub create_submenu { - my ($link,$target,$title,$submenu) = @_; + my ($link,$target,$title,$submenu,$translate) = @_; return unless (ref($submenu) eq 'ARRAY'); my $disptarget; if ($target ne '') { @@ -503,9 +514,17 @@ sub create_submenu { if ($count == $numsub) { $borderbot = 'border-bottom:1px solid black;'; } + unless (($href eq '') || ($href =~ /^\#/)) { + $target = ' target="_top"'; + } $menu .= '<li style="margin:0;padding:0;'. - $borderbot.'"><a href="'.$href.'">'. - &mt($item->[1]).'</a></li>'; + $borderbot.'"><a href="'.$href.'"'.$target.'>'; + if ($translate) { + $menu .= &mt($item->[1]); + } else { + $menu .= $item->[1]; + } + $menu .= '</a></li>'; } } $menu .= '</ul></li>'; @@ -733,7 +752,7 @@ ENDMENUITEMS # wishlist is only available for users with access to resource-pool # and links can only be set for resources within the resource-pool $menuitems .= (<<ENDMENUITEMS); -s&9&1&wishlist-link.png&Stored Links&wishlistlink[_2]&set_wishlistlink()&Save a link for this resource in your personal Stored Links repository&&1 +s&9&1&wishlist-link.png&Stored Links&wishlistlink[_2]&set_wishlistlink()&Save a link for this resource in my personal Stored Links repository&&1 ENDMENUITEMS $got_wishlist = 1; } @@ -749,21 +768,28 @@ if(length($annotation) > 0){ } $menuitems.="&Notes&&annotate()&"; $menuitems.="Make notes and annotations about this resource&&1\n"; +my $is_mobile; +if ($env{'browser.mobile'}) { + $is_mobile = 1; +} unless ($env{'request.noversionuri'}=~/\/(bulletinboard|smppg|navmaps|syllabus|aboutme|viewclasslist|portfolio)(\?|$)/) { if ((!$env{'request.enc'}) && ($env{'request.noversionuri'} !~ m{^/adm/wrapper/ext/}) && ($env{'request.noversionuri'} !~ m{^/uploaded/$match_domain/$match_courseid/docs/})) { $menuitems.=(<<ENDREALRES); -s&6&3&catalog.png&Info&info[_1]&catalog_info()&Show Metadata +s&6&3&catalog.png&Info&info[_1]&catalog_info('$is_mobile')&Show Metadata ENDREALRES } - unless ($env{'request.noversionuri'} =~ m{^/uploaded/$match_domain/$match_courseid/docs/}) { + unless (($env{'request.noversionuri'} =~ m{^/uploaded/$match_domain/$match_courseid/docs/}) || + ($env{'request.noversionuri'} =~ m{^\Q/adm/wrapper/\E(ext|uploaded)/})) { $menuitems.=(<<ENDREALRES); s&8&1&eval.png&Evaluate&this[_1]&gopost('/adm/evaluate',currentURL,1)&Provide my evaluation of this resource ENDREALRES } - $menuitems.=(<<ENDREALRES); + unless ($env{'request.noversionuri'} =~ m{^\Q/adm/wrapper/\E(ext|uploaded)/}) { + $menuitems.=(<<ENDREALRES); s&8&2&fdbk.png&Communicate&discuss[_1]&gopost('/adm/feedback',currentURL,1)&Provide feedback messages or contribute to the course discussion about this resource ENDREALRES + } } } if ($env{'request.uri'} =~ /^\/res/) { @@ -1207,7 +1233,10 @@ sub rawconfig { my $pub=($env{'request.state'} eq 'published'); my $con=($env{'request.state'} eq 'construct'); my $rol=$env{'request.role'}; - my $requested_domain = $env{'request.role.domain'}; + my $requested_domain; + if ($rol) { + $requested_domain = $env{'request.role.domain'}; + } foreach my $line (@desklines) { my ($row,$col,$pro,$prt,$img,$top,$bot,$act,$desc,$cat)=split(/\:/,$line); $prt=~s/\$uname/$uname/g; @@ -1221,7 +1250,13 @@ sub rawconfig { next if ($crstype ne 'Community'); $prt=~s/\$cmty/$crs/g; } - $prt=~s/\$requested_domain/$requested_domain/g; + if ($prt =~ m/\$requested_domain/) { + if ((!$requested_domain) && ($pro eq 'pbre') && ($env{'user.adv'})) { + $prt=~s/\$requested_domain/$env{'user.domain'}/g; + } else { + $prt=~s/\$requested_domain/$requested_domain/g; + } + } if ($category_names{$cat}!~/\w/) { $cat='oth'; } if ($pro eq 'clear') { $output.=&clear($row,$col); @@ -1257,8 +1292,9 @@ sub rawconfig { next; } } - if (&Apache::lonnet::allowed($priv,$prt)) { - $output.=&switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc,$cat); + if ((($priv eq 'bre') && (&Apache::lonnet::allowed($priv,$prt) eq 'F')) || + (($priv ne 'bre') && (&Apache::lonnet::allowed($priv,$prt)))) { + $output.=&switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc,$cat); } } elsif ($pro eq 'course') { if (($env{'request.course.fn'}) && ($crstype ne 'Community')) { @@ -1368,7 +1404,7 @@ sub rawconfig { sub check_for_rcrs { my $showreqcrs = 0; - my @reqtypes = ('official','unofficial','community'); + my @reqtypes = ('official','unofficial','community','textbook'); foreach my $type (@reqtypes) { if (&Apache::lonnet::usertools_access($env{'user.name'}, $env{'user.domain'}, @@ -1435,6 +1471,7 @@ END } sub utilityfunctions { + my ($httphost) = @_; my $currenturl=&Apache::lonnet::clutter(&Apache::lonnet::fixversion((split(/\?/,$env{'request.noversionuri'}))[0])); if ($currenturl =~ m{^/adm/wrapper/ext/} && $env{'request.external.querystring'} ) { @@ -1470,7 +1507,7 @@ sub utilityfunctions { my $countdown = &countdown_toggle_js(); return (<<ENDUTILITY) - + var host="$httphost"; var currentURL=unescape("$esc_url"); var reloadURL=unescape("$esc_url"); var currentSymb=unescape("$esc_symb"); @@ -1481,7 +1518,7 @@ $jumptores function gopost(url,postdata) { if (url!='') { - this.document.server.action=url; + this.document.server.action=host+url; this.document.server.postdata.value=postdata; this.document.server.command.value=''; this.document.server.url.value=''; @@ -1492,7 +1529,7 @@ function gopost(url,postdata) { function gocmd(url,cmd) { if (url!='') { - this.document.server.action=url; + this.document.server.action=host+url; this.document.server.postdata.value=''; this.document.server.command.value=cmd; this.document.server.url.value=currentURL; @@ -1544,22 +1581,26 @@ function golist(url) { if (url!='' && url!= null) { currentURL = null; currentSymb= null; - top.location.href=url; + top.location.href=host+url; } } -function catalog_info() { - openMyModal(window.location.pathname+'.meta',500,400,'yes'); +function catalog_info(isMobile) { + if (isMobile == 1) { + openMyModal(window.location.pathname+'.meta?modal=1',500,400,'yes'); + } else { + loncatinfo=window.open(window.location.pathname+'.meta',"LONcatInfo",'height=500,width=400,resizable=yes,scrollbars=yes,location=no,menubar=no,toolbar=no'); + } } function chat_win() { - lonchat=window.open('/res/adm/pages/chatroom.html',"LONchat",'height=320,width=480,resizable=yes,location=no,menubar=no,toolbar=no'); + lonchat=window.open(host+'/res/adm/pages/chatroom.html',"LONchat",'height=320,width=480,resizable=yes,location=no,menubar=no,toolbar=no'); } function group_chat(group) { - var url = '/adm/groupchat?group='+group; + var url = host+'/adm/groupchat?group='+group; var winName = 'LONchat_'+group; grpchat=window.open(url,winName,'height=320,width=280,resizable=yes,location=no,menubar=no,toolbar=no'); } @@ -1580,11 +1621,11 @@ function annotate() { function open_StoredLinks_Import(rat) { var newWin; if (rat) { - newWin = window.open('/adm/wishlist?inhibitmenu=yes&mode=import&rat='+rat, + newWin = window.open(host+'/adm/wishlist?inhibitmenu=yes&mode=import&rat='+rat, 'wishlistImport','scrollbars=1,resizable=1,menubar=0'); } else { - newWin = window.open('/adm/wishlist?inhibitmenu=yes&mode=import', + newWin = window.open(host+'/adm/wishlist?inhibitmenu=yes&mode=import', 'wishlistImport','scrollbars=1,resizable=1,menubar=0'); } newWin.focus(); @@ -1649,7 +1690,7 @@ sub hidden_button_check { } sub roles_selector { - my ($cdom,$cnum) = @_; + my ($cdom,$cnum,$httphost) = @_; my $crstype = &Apache::loncommon::course_type(); my $now = time; my (%courseroles,%seccount,%courseprivs); @@ -1742,7 +1783,7 @@ sub roles_selector { } } } - $switchtext = &mt('Switch role'); + $switchtext = 'Switch role'; # do not translate here my @roles_order = ($ccrole,'in','ta','ep','ad','st'); my $numdiffsec; if (keys(%seccount) == 1) { @@ -1754,7 +1795,7 @@ sub roles_selector { my @submenu; $js = &jump_to_role($cdom,$cnum,\%seccount,\%courseroles,\%courseprivs,$priv); $form = - '<form name="rolechooser" method="post" action="/adm/roles">'."\n". + '<form name="rolechooser" method="post" action="'.$httphost.'/adm/roles">'."\n". ' <input type="hidden" name="destinationurl" value="'. &HTML::Entities::encode($destinationurl).'" />'."\n". ' <input type="hidden" name="gotorole" value="1" />'."\n".