--- loncom/interface/lonmenu.pm 2017/01/28 03:48:44 1.466 +++ loncom/interface/lonmenu.pm 2017/09/04 19:17:02 1.476 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Routines to control the menu # -# $Id: lonmenu.pm,v 1.466 2017/01/28 03:48:44 raeburn Exp $ +# $Id: lonmenu.pm,v 1.476 2017/09/04 19:17:02 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -497,12 +497,23 @@ sub secondary_menu { my $url = $$menuitem[0]; $url =~ s{\[cdom\]/\[cnum\]}{$cdom/$cnum}; if (&Apache::lonnet::is_on_map($url)) { - unless ($$menuitem[0] =~ /\?register=1/) { - $$menuitem[0] .= '?register=1'; + unless ($$menuitem[0] =~ /(\?|\&)register=1/) { + $$menuitem[0] .= (($$menuitem[0]=~/\?/)? '&' : '?').'register=1'; } } else { - $$menuitem[0] =~ s{\?register=1}{}; + $$menuitem[0] =~ s{\&?register=1}{}; } + if ($env{'course.'.$env{'request.course.id'}.'.externalsyllabus'} =~ m{^http://}) { + if (($ENV{'SERVER_PORT'} == 443) || ($env{'request.use_absolute'} =~ m{^https://})) { + unless ($$menuitem[0] =~ m{^https?://}) { + $$menuitem[0] = 'http://'.$ENV{'SERVER_NAME'}.$$menuitem[0]; + } + unless ($$menuitem[0] =~ /(\&|\?)usehttp=1/) { + $$menuitem[0] .= (($$menuitem[0]=~/\?/) ? '&' : '?').'usehttp=1'; + } + } + } + $$menuitem[0] = &HTML::Entities::encode($$menuitem[0],'&<>"'); } $menu .= &prep_menuitem(\@$menuitem); } @@ -521,7 +532,7 @@ sub secondary_menu { my $londocroot = $Apache::lonnet::perlvar{'lonDocRoot'}; ($escurl = $env{'request.filename'}) =~ s{^\Q$londocroot\E}{}; $escurl = &escape($escurl); - } + } $menu =~ s/\[url\]/$escurl/g; $menu =~ s/\[symb\]/$escsymb/g; } @@ -625,7 +636,7 @@ sub build_submenu { } sub innerregister { - my ($forcereg,$bread_crumbs,$group,$pagebuttonshide) = @_; + my ($forcereg,$bread_crumbs,$group,$pagebuttonshide,$hostname) = @_; my $const_space = ($env{'request.state'} eq 'construct'); my $is_const_dir = 0; @@ -635,7 +646,7 @@ sub innerregister { undef(@inlineremote); - my ($mapurl,$resurl,$crstype); + my ($mapurl,$resurl,$crstype,$navmap); if ($env{'request.course.id'}) { # @@ -643,12 +654,23 @@ sub innerregister { # $crstype = &Apache::loncommon::course_type(); if ($env{'request.symb'}) { - ($mapurl, my $rid, $resurl) = &Apache::lonnet::decode_symb(&Apache::lonnet::symbread()); + my $ignorenull; + unless ($env{'request.noversionuri'} eq '/adm/navmaps') { + $ignorenull = 1; + } + my $symb = &Apache::lonnet::symbread('','',$ignorenull); + ($mapurl, my $rid, $resurl) = &Apache::lonnet::decode_symb($symb); my $coursetitle = $env{'course.'.$env{'request.course.id'}.'.description'}; my $maptitle = &Apache::lonnet::gettitle($mapurl); - my $restitle = &Apache::lonnet::gettitle(&Apache::lonnet::symbread()); - my @crumbs; + my $restitle = &Apache::lonnet::gettitle($symb); + my (@crumbs,@mapcrumbs); + if (($env{'request.noversionuri'} ne '/adm/navmaps') && ($mapurl ne '')) { + $navmap = Apache::lonnavmaps::navmap->new(); + if (ref($navmap)) { + @mapcrumbs = $navmap->recursed_crumbs($mapurl); + } + } unless (($forcereg) && ($env{'request.noversionuri'} eq '/adm/navmaps') && ($mapurl eq $env{'course.'.$env{'request.course.id'}.'.url'}) || @@ -657,14 +679,18 @@ sub innerregister { href => "Javascript:gopost('/adm/navmaps','')"}); } if ($mapurl ne $env{'course.'.$env{'request.course.id'}.'.url'}) { - push(@crumbs, {text => '...', - no_mt => 1}); + if (@mapcrumbs) { + push(@crumbs,@mapcrumbs); + } else { + push(@crumbs, {text => '...', + no_mt => 1}); + } } - unless (($crstype eq 'Placement') || (!$env{'request.role.adv'})) { - push @crumbs, {text => $maptitle, no_mt => 1} if ($maptitle - && $maptitle ne 'default.sequence' - && $maptitle ne $coursetitle); + unless ((($crstype eq 'Placement') && (!$env{'request.role.adv'})) || (@mapcrumbs) || + (!$maptitle) || ($maptitle eq 'default.sequence') || + ($mapurl eq $env{'course.'.$env{'request.course.id'}.'.url'})) { + push @crumbs, {text => $maptitle, no_mt => 1, href => $mapurl}; } push @crumbs, {text => $restitle, no_mt => 1} if $restitle; @@ -692,7 +718,7 @@ sub innerregister { } my $trail; if ($env{'form.folderpath'}) { - &prepare_functions($resurl,$forcereg,$group,undef,undef,1); + &prepare_functions($resurl,$forcereg,$group,undef,undef,1,$hostname); ($trail) = &Apache::lonhtmlcommon::docs_breadcrumbs(undef,$crstype,undef,$title,1); } else { @@ -707,10 +733,10 @@ sub innerregister { } elsif ($resurl =~ m{^\Q/uploaded$courseurl/portfolio/syllabus/}) { &Apache::lonhtmlcommon::clear_breadcrumbs(); &prepare_functions('/public'.$courseurl."/syllabus", - $forcereg,$group,undef,undef,1); + $forcereg,$group,undef,undef,1,$hostname); $title = &mt('Syllabus File'); my ($trail) = - &Apache::lonhtmlcommon::docs_breadcrumbs(undef,$crstype,undef,$title,1); + &Apache::lonhtmlcommon::docs_breadcrumbs(undef,$crstype,undef,$title,1,$hostname); return $trail; } unless ($env{'request.state'} eq 'construct') { @@ -734,7 +760,7 @@ sub innerregister { $forceview,$editbutton); if (($resurl =~ m{^/?adm/($match_domain)/($match_username)/aboutme$}) || ($env{'request.role'} !~/^(aa|ca|au)/)) { - $editbutton = &prepare_functions($resurl,$forcereg,$group); + $editbutton = &prepare_functions($resurl,$forcereg,$group,'','','',$hostname); } if ($editbutton eq '') { $editbutton = &clear(6,1); @@ -908,7 +934,7 @@ if ($env{'browser.mobile'}) { $is_mobile = 1; } - unless ($env{'request.noversionuri'}=~/\/(bulletinboard|smppg|navmaps|syllabus|aboutme|viewclasslist|portfolio|exttools?)(\?|$)/) { + unless ($env{'request.noversionuri'}=~/\/(bulletinboard|smppg|navmaps|syllabus|aboutme|viewclasslist|portfolio|ext\.tool)(\?|$)/) { 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('$is_mobile')&Show Metadata @@ -1033,7 +1059,7 @@ ENDMENUITEMS } sub get_editbutton { - my ($cfile,$home,$switchserver,$forceedit,$forceview,$forcereg) = @_; + my ($cfile,$home,$switchserver,$forceedit,$forceview,$forcereg,$hostname) = @_; my $jscall; if (($forceview) && ($env{'form.todocs'})) { my ($folderpath,$command,$navmap); @@ -1053,9 +1079,9 @@ sub get_editbutton { $jscall = &Apache::lonhtmlcommon::jump_to_editres($cfile,$home,$switchserver, $forceedit,$forcereg,$env{'request.symb'}, &escape($env{'form.folderpath'}), - &escape($env{'form.title'}),$env{'form.idx'}, - &escape($env{'form.suppurl'}),$env{'form.todocs'}, - $suppanchor); + &escape($env{'form.title'}),$hostname, + $env{'form.idx'},&escape($env{'form.suppurl'}), + $env{'form.todocs'},$suppanchor); } if ($jscall) { my $icon = 'pcstr.png'; @@ -1072,7 +1098,7 @@ sub get_editbutton { } sub prepare_functions { - my ($resurl,$forcereg,$group,$bread_crumbs,$advtools,$docscrumbs) = @_; + my ($resurl,$forcereg,$group,$bread_crumbs,$advtools,$docscrumbs,$hostname) = @_; unless ($env{'request.registered'}) { undef(@inlineremote); } @@ -1118,9 +1144,13 @@ sub prepare_functions { # This applies in course context # if (($perms{'mdc'}) && - (($resurl eq "/public/$cdom/$cnum/syllabus") || - ($resurl =~ m{^/uploaded/$cdom/$cnum/portfolio/syllabus/}))) { - $cfile = $resurl; + (($resurl =~ m{^/?public/$cdom/$cnum/syllabus}) || + ($resurl =~ m{^/?uploaded/$cdom/$cnum/portfolio/syllabus/}))) { + if ($resurl =~ m{^/}) { + $cfile = $resurl; + } else { + $cfile = "/$resurl"; + } $home = &Apache::lonnet::homeserver($cnum,$cdom); if ($env{'form.forceedit'}) { $forceview = 1; @@ -1128,7 +1158,8 @@ sub prepare_functions { $forceedit = 1; } $editbutton = &get_editbutton($cfile,$home,$switchserver, - $forceedit,$forceview,$forcereg); + $forceedit,$forceview,$forcereg, + $hostname); } elsif (($resurl eq '/adm/extresedit') && (($env{'form.symb'}) || ($env{'form.folderpath'}))) { ($cfile,$home,$switchserver,$forceedit,$forceview) = @@ -1136,8 +1167,7 @@ sub prepare_functions { $env{'form.symb'}); if ($cfile ne '') { $editbutton = &get_editbutton($cfile,$home,$switchserver, - $forceedit,$forceview,$forcereg, - $env{'form.title'},$env{'form.suppurl'}); + $forceedit,$forceview,$forcereg); } } elsif (($resurl =~ m{^/?adm/viewclasslist$}) && (&Apache::lonnet::allowed('opa',$env{'request.course.id'}))) { @@ -1155,7 +1185,8 @@ sub prepare_functions { &Apache::lonnet::clutter($resurl),$env{'request.symb'},$group); if ($cfile ne '') { $editbutton = &get_editbutton($cfile,$home,$switchserver, - $forceedit,$forceview,$forcereg); + $forceedit,$forceview,$forcereg, + $hostname); } } } @@ -1205,7 +1236,7 @@ sub prepare_functions { if (($env{'form.folderpath'} =~ /^supplemental/) && (&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) && (($resurl =~ m{^/adm/wrapper/ext/}) || - ($resurl =~ m{^/adm/$cdom/$cnum/\d+/exttools?$}) || + ($resurl =~ m{^/adm/$cdom/$cnum/\d+/ext\.tool$}) || ($resurl =~ m{^/uploaded/$cdom/$cnum/supplemental/}) || ($resurl eq '/adm/supplemental') || ($resurl =~ m{^/public/$cdom/$cnum/syllabus$}) || @@ -1217,9 +1248,13 @@ sub prepare_functions { $suppanchor = $env{'form.anchor'}; } my $esc_path=&escape(&HTML::Entities::encode(&escape($env{'form.folderpath'}),'<>&"')); + my $link = '/adm/coursedocs?command=direct&forcesupplement=1&supppath='. + "$esc_path&anchor=$suppanchor"; + if ($env{'request.use_absolute'} ne '') { + $link = $env{'request.use_absolute'}.$link; + } &switch('','',7,4,'docs-22x22.png','Edit Folder','parms[_2]', - "location.href='/adm/coursedocs?command=direct&forcesupplement=1&supppath=$esc_path&anchor=$suppanchor'", - 'Folder/Page Content'); + "location.href='$link'",'Folder/Page Content'); } } } @@ -2110,11 +2145,11 @@ sub roles_selector { } my ($privref,$gotsymb,$destsymb); my $destinationurl = $ENV{'REQUEST_URI'}; - if ($destinationurl =~ /\?symb=/) { + if ($destinationurl =~ /(\?|\&)symb=/) { $gotsymb = 1; } elsif ($destinationurl =~ m{^/enc/}) { my $plainurl = &Apache::lonenc::unencrypted($destinationurl); - if ($plainurl =~ /\?symb=/) { + if ($plainurl =~ /(\?|\&)symb=/) { $gotsymb = 1; } }