--- loncom/interface/lonmenu.pm 2023/01/23 05:40:00 1.369.2.83.2.7
+++ loncom/interface/lonmenu.pm 2022/03/25 21:25:37 1.369.2.83.4.1
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Routines to control the menu
#
-# $Id: lonmenu.pm,v 1.369.2.83.2.7 2023/01/23 05:40:00 raeburn Exp $
+# $Id: lonmenu.pm,v 1.369.2.83.4.1 2022/03/25 21:25:37 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -99,7 +99,7 @@ It gets filled in the BEGIN block of thi
=over
-=item prep_menuitems(\@menuitem,$target,$listclass,$linkattr)
+=item prep_menuitems(\@menuitem)
This routine wraps a menuitem in proper HTML. It is used by primary_menu() and
secondary_menu().
@@ -240,9 +240,9 @@ use vars qw(@desklines %category_names %
my @inlineremote;
sub prep_menuitem {
- my ($menuitem,$target,$listclass,$linkattr) = @_;
+ my ($menuitem,$listclass,$linkattr) = @_;
return '' unless(ref($menuitem) eq 'ARRAY');
- my ($link,$targetattr);
+ my $link;
if ($$menuitem[1]) { # graphical Link
$link = "
':'
').'$link|;
+ . qq| href="$$menuitem[0]" target="_top" $linkattr>$link|;
}
# primary_menu() evaluates @primary_menu and returns a two item array,
@@ -266,8 +263,8 @@ sub prep_menuitem {
# @primary_menu is filled within the BEGIN block of this module with
# entries from mydesk.tab
sub primary_menu {
- my ($crstype,$ltimenu,$menucoll,$menuref,$links_disabled,$links_target) = @_;
- my (%menu,%menuopts);
+ my ($links_disabled) = @_;
+ my %menu;
# each element of @primary contains following array:
# (link url, icon path, alt text, link text, condition, position)
my $public;
@@ -275,27 +272,6 @@ sub primary_menu {
|| (($env{'user.name'} eq '') && ($env{'user.domain'} eq ''))) {
$public = 1;
}
- my ($listclass,$linkattr,$target);
- if ($links_disabled) {
- $listclass = 'LCisDisabled';
- $linkattr = 'aria-disabled="true"';
- }
- if ($links_target ne '') {
- $target = $links_target;
- } else {
- my $deeplinktarget;
- if ($env{'request.deeplink.login'}) {
- $deeplinktarget = $env{'request.deeplink.target'};
- }
- if ($deeplinktarget eq '_self') {
- $target = '_self';
- } else {
- $target = '_top';
- }
- }
- if (($menucoll) && (ref($menuref) eq 'HASH')) {
- %menuopts = %{$menuref};
- }
foreach my $menuitem (@primary_menu) {
# evaluate conditions
next if ref($menuitem) ne 'ARRAY'; #
@@ -319,27 +295,16 @@ sub primary_menu {
if ($position eq '') {
$position = 'right';
}
- if ($env{'request.course.id'} && $menucoll) {
- if (($menuitem->[6]) && (!$menuopts{$menuitem->[6]})) {
- if ($menuitem->[6] eq 'pers') {
- if ($menuopts{'name'} &&
- $env{'user.name'} && $env{'user.domain'}) {
- $menu{$position} .= ''.
- &Apache::loncommon::plainname($env{'user.name'},
- $env{'user.domain'}).'';
- next;
- } else {
- next;
- }
- } else {
- next;
- }
- }
+ my ($listclass,$linkattr);
+ if ($links_disabled) {
+ $listclass = 'LCisDisabled';
+ $linkattr = 'aria-disabled="true"';
}
if (defined($primary_submenu{$title})) {
- my $link;
+ my ($link,$target);
if ($menuitem->[0] ne '') {
$link = $menuitem->[0];
+ $target = '_top';
} else {
$link = '#';
}
@@ -351,30 +316,18 @@ sub primary_menu {
($item->[2] eq 'blog')) &&
(!&Apache::lonnet::usertools_access('','',$item->[2],
undef,'tools')));
- if ($env{'request.course.id'} && $menucoll) {
- next if ($item->[3]) && (!$menuopts{$item->[3]});
- }
push(@primsub,$item);
}
- if ($title eq 'Personal') {
- if ($env{'user.name'} && $env{'user.domain'}) {
- unless (($env{'request.course.id'}) && ($menucoll) && (!$menuopts{'name'})) {
- $title = &Apache::loncommon::plainname($env{'user.name'},$env{'user.domain'});
- }
- }
- next if (($env{'request.course.id'}) && ($menucoll) && ($title eq 'Personal') &&
- (!@primsub));
- if ($title eq 'Personal') {
+ if (@primsub > 0) {
+ if ($title eq 'Personal' && $env{'user.name'} && $env{'user.domain'} ) {
+ $title = &Apache::loncommon::plainname($env{'user.name'},$env{'user.domain'});
+ } else {
$title = &mt($title);
}
- } else {
- $title = &mt($title);
- }
- if (@primsub > 0) {
$menu{$position} .= &create_submenu($link,$target,$title,\@primsub,1,undef,$listclass,$linkattr);
} elsif ($link) {
$menu{$position} .= ($listclass?'':'').
- ''.$title.'';
+ ''.&mt($title).'';
}
}
} elsif ($$menuitem[3] eq 'Help') { # special treatment for helplink
@@ -385,7 +338,7 @@ sub primary_menu {
'helpdeskmail',
$defdom,$origmail);
if ($to ne '') {
- $menu{$position} .= &prep_menuitem($menuitem,$target,$listclass,$linkattr);
+ $menu{$position} .= &prep_menuitem($menuitem,$listclass,$linkattr);
}
} else {
$menu{$position} .= ($listclass?'':'').
@@ -398,9 +351,9 @@ sub primary_menu {
$$menuitem[0] = '/adm/login';
}
}
- $menu{$position} .= prep_menuitem($menuitem,$target,$listclass,$linkattr);
+ $menu{$position} .= prep_menuitem($menuitem,$listclass,$linkattr);
} else {
- $menu{$position} .= prep_menuitem($menuitem,$target,$listclass,$linkattr);
+ $menu{$position} .= prep_menuitem($menuitem,$listclass,$linkattr);
}
}
my @output = ('','');
@@ -439,8 +392,7 @@ sub getauthor{
}
sub secondary_menu {
- my ($httphost,$ltiscope,$ltimenu,$noprimary,$menucoll,$menuref,
- $links_disabled,$links_target) = @_;
+ my ($httphost,$links_disabled) = @_;
my $menu;
my $crstype = &Apache::loncommon::course_type();
@@ -461,10 +413,9 @@ sub secondary_menu {
my $canmodpara = &Apache::lonnet::allowed('opa', $crs_sec);
my $canvgr = &Apache::lonnet::allowed('vgr', $crs_sec);
my $canmgr = &Apache::lonnet::allowed('mgr', $crs_sec);
- my $canplc = &Apache::lonnet::allowed('plc', $crs_sec);
my $author = &getauthor();
- my ($cdom,$cnum,$showsyllabus,$showfeeds,$showresv,$grouptools,%menuopts);
+ my ($cdom,$cnum,$showsyllabus,$showfeeds,$showresv,$grouptools);
$grouptools = 0;
if ($env{'request.course.id'}) {
$cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
@@ -499,11 +450,8 @@ sub secondary_menu {
}
}
}
- if (($menucoll) && (ref($menuref) eq 'HASH')) {
- %menuopts = %{$menuref};
- }
- my ($listclass,$linkattr,$target);
+ my ($listclass,$linkattr);
if ($links_disabled) {
$listclass = 'LCisDisabled';
$linkattr = 'aria-disabled="true"';
@@ -519,19 +467,6 @@ sub secondary_menu {
}
my ($roleswitcher_js,$roleswitcher_form);
- if ($links_target ne '') {
- $target = $links_target;
- } else {
- my $deeplinktarget;
- if ($env{'request.deeplink.login'}) {
- $deeplinktarget = $env{'request.deeplink.target'};
- }
- if ($deeplinktarget eq '_self') {
- $target = '_self';
- } else {
- $target = '_top';
- }
- }
foreach my $menuitem (@secondary_menu) {
# evaluate conditions
@@ -567,25 +502,17 @@ sub secondary_menu {
&& !$showsyllabus;
next if $$menuitem[4] eq 'showfeeds'
&& !$showfeeds;
- next if $$menuitem[4] eq 'plc'
- && !$canplc;
next if $$menuitem[4] eq 'author'
&& !$author;
next if $$menuitem[4] eq 'cca'
&& !$canmodifycoauthor;
my $title = $menuitem->[3];
- if ($env{'request.course.id'} && $menucoll) {
- if ($$menuitem[5] eq 'main') {
- next if ($menuopts{$$menuitem[5]} eq 'n');
- } elsif ($$menuitem[5] ne 'roles') {
- next if (($$menuitem[5]) && (!$menuopts{$$menuitem[5]}));
- }
- }
if (defined($secondary_submenu{$title})) {
- my $link;
+ my ($link,$target);
if ($menuitem->[0] ne '') {
$link = $menuitem->[0];
+ $target = '_top';
} else {
$link = '#';
}
@@ -617,16 +544,12 @@ sub secondary_menu {
}
} elsif ($$menuitem[3] eq 'Roles' && $env{'request.course.id'}) {
# special treatment for role selector
- my ($switcher,$has_opa_priv);
- ($roleswitcher_js,$roleswitcher_form,$switcher,$has_opa_priv) =
+ ($roleswitcher_js,$roleswitcher_form,my $switcher) =
&roles_selector(
$env{'course.' . $env{'request.course.id'} . '.domain'},
$env{'course.' . $env{'request.course.id'} . '.num'},
- $httphost,$target,$menucoll,$menuref
+ $httphost
);
- if (($$menuitem[5]) && (!$menuopts{$$menuitem[5]})) {
- next unless ($has_opa_priv);
- }
$menu .= $switcher;
} else {
if ($$menuitem[3] eq 'Syllabus' && $env{'request.course.id'}) {
@@ -653,7 +576,7 @@ sub secondary_menu {
}
$$menuitem[0] = &HTML::Entities::encode($$menuitem[0],'&<>"');
}
- $menu .= &prep_menuitem(\@$menuitem,$target,$listclass,$linkattr);
+ $menu .= &prep_menuitem(\@$menuitem,$listclass,$linkattr);
}
}
if ($menu =~ /\[url\].*\[symb\]/) {
@@ -676,7 +599,6 @@ sub secondary_menu {
}
$menu =~ s/\[uname\]/$$author{user}/g;
$menu =~ s/\[udom\]/$$author{dom}/g;
- $menu =~ s/\[javascript\]/javascript:/g;
if ($env{'request.course.id'}) {
$menu =~ s/\[cnum\]/$cnum/g;
$menu =~ s/\[cdom\]/$cdom/g;
@@ -693,12 +615,12 @@ sub secondary_menu {
sub create_submenu {
my ($link,$target,$title,$submenu,$translate,$addclass,$listclass,$linkattr) = @_;
return unless (ref($submenu) eq 'ARRAY');
- my $targetattr;
- if (($target ne '') && ($link ne '#')) {
- $targetattr = ' target="'.$target.'"';
+ my $disptarget;
+ if ($target ne '') {
+ $disptarget = ' target="'.$target.'"';
}
my $menu = ''.
- ''.
+ ''.
''.$title.
''.
' ▼'.
@@ -775,17 +697,14 @@ sub build_submenu {
}
$href =~ s/\[returnurl\]/$returnurl/;
}
- my $targetattr;
unless (($href eq '') || ($href =~ /^\#/)) {
- if ($target ne '') {
- $targetattr = ' target="'.$target.'"';
- }
+ $target = ' target="_top"';
}
$menu .= '';
- $menu .= '' . $title . '';
+ $menu .= '' . $title . '';
$menu .= '';
}
}
@@ -822,8 +741,7 @@ sub registerurl {
}
sub innerregister {
- my ($forcereg,$bread_crumbs,$group,$pagebuttonshide,$hostname,
- $ltiscope,$ltiuri,$showncrumbsref) = @_;
+ my ($forcereg,$bread_crumbs,$group,$pagebuttonshide,$hostname) = @_;
my $const_space = ($env{'request.state'} eq 'construct');
my $is_const_dir = 0;
@@ -871,8 +789,12 @@ sub innerregister {
@mapcrumbs = $navmap->recursed_crumbs($mapurl,$restitle);
}
}
- @crumbs = ({text => $crstype.' Contents',
- href => "Javascript:gopost('/adm/navmaps','')"});
+ unless (($forcereg) &&
+ ($env{'request.noversionuri'} eq '/adm/navmaps') &&
+ ($mapurl eq $env{'course.'.$env{'request.course.id'}.'.url'})) {
+ @crumbs = ({text => $crstype.' Contents',
+ href => "Javascript:gopost('/adm/navmaps','')"});
+ }
if ($mapurl ne $env{'course.'.$env{'request.course.id'}.'.url'}) {
if (@mapcrumbs) {
push(@crumbs,@mapcrumbs);
@@ -912,39 +834,27 @@ sub innerregister {
if ($env{'form.title'}) {
$title = $env{'form.title'};
}
- my ($trail,$cnum,$cdom);
- if ($env{'form.folderpath'}) {
- $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
- $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
- &Apache::loncommon::validate_folderpath(1,'',$cnum,$cdom);
- }
+ my $trail;
if ($env{'form.folderpath'}) {
&prepare_functions($resurl,$forcereg,$group,undef,undef,1,$hostname);
- $title = &HTML::Entities::encode($title,'\'"<>&');
($trail) =
- &Apache::lonhtmlcommon::docs_breadcrumbs(undef,$crstype,undef,$title,1,1);
+ &Apache::lonhtmlcommon::docs_breadcrumbs(undef,$crstype,undef,$title,1);
} else {
&Apache::lonhtmlcommon::add_breadcrumb(
{text => "Supplemental $crstype Content",
href => "javascript:gopost('/adm/supplemental','')"});
- $title = &HTML::Entities::encode(&mt('View Resource'),'\'"<>&');
+ $title = &mt('View Resource');
($trail) =
- &Apache::lonhtmlcommon::docs_breadcrumbs(undef,$crstype,undef,$title,1,1);
- }
- if (ref($showncrumbsref)) {
- $$showncrumbsref = 1;
+ &Apache::lonhtmlcommon::docs_breadcrumbs(undef,$crstype,undef,$title,1);
}
return $trail;
} elsif ($resurl =~ m{^\Q/uploaded$courseurl/portfolio/syllabus/}) {
&Apache::lonhtmlcommon::clear_breadcrumbs();
&prepare_functions('/public'.$courseurl."/syllabus",
$forcereg,$group,undef,undef,1,$hostname);
- $title = &HTML::Entities::encode(&mt('Syllabus File'),'\'"<>&');
+ $title = &mt('Syllabus File');
my ($trail) =
- &Apache::lonhtmlcommon::docs_breadcrumbs(undef,$crstype,undef,$title,1,1);
- if (ref($showncrumbsref)) {
- $$showncrumbsref = 1;
- }
+ &Apache::lonhtmlcommon::docs_breadcrumbs(undef,$crstype,undef,$title,1,$hostname);
return $trail;
}
unless ($env{'request.state'} eq 'construct') {
@@ -1137,15 +1047,13 @@ if ($env{'browser.mobile'}) {
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/|default_\d+\.page$)}) &&
- ($env{'request.noversionuri'} !~ m{^/adm/.+/ext\.tool$})) {
+ ($env{'request.noversionuri'} !~ m{^/uploaded/$match_domain/$match_courseid/(docs/|default_\d+\.page$)})) {
$menuitems.=(<
+