version 1.504, 2021/01/02 21:07:36
|
version 1.507, 2021/06/07 03:32:02
|
Line 247 sub prep_menuitem {
|
Line 247 sub prep_menuitem {
|
# @primary_menu is filled within the BEGIN block of this module with |
# @primary_menu is filled within the BEGIN block of this module with |
# entries from mydesk.tab |
# entries from mydesk.tab |
sub primary_menu { |
sub primary_menu { |
my ($crstype,$ltimenu) = @_; |
my ($crstype,$ltimenu,$menucoll,$menuref) = @_; |
my (%menu,%ltiexc); |
my (%menu,%ltiexc,%menuopts); |
# each element of @primary contains following array: |
# each element of @primary contains following array: |
# (link url, icon path, alt text, link text, condition, position) |
# (link url, icon path, alt text, link text, condition, position) |
my $public; |
my $public; |
Line 277 sub primary_menu {
|
Line 277 sub primary_menu {
|
} |
} |
} |
} |
} |
} |
|
if (($menucoll) && (ref($menuref) eq 'HASH')) { |
|
%menuopts = %{$menuref}; |
|
} |
foreach my $menuitem (@primary_menu) { |
foreach my $menuitem (@primary_menu) { |
# evaluate conditions |
# evaluate conditions |
next if ref($menuitem) ne 'ARRAY'; # |
next if ref($menuitem) ne 'ARRAY'; # |
Line 312 sub primary_menu {
|
Line 315 sub primary_menu {
|
if ($position eq '') { |
if ($position eq '') { |
$position = 'right'; |
$position = 'right'; |
} |
} |
|
if ($env{'request.course.id'} && $menucoll) { |
|
next if (($menuitem->[6]) && (!$menuopts{$menuitem->[6]})); |
|
} |
if (defined($primary_submenu{$title})) { |
if (defined($primary_submenu{$title})) { |
my ($link,$target); |
my ($link,$target); |
if ($menuitem->[0] ne '') { |
if ($menuitem->[0] ne '') { |
Line 331 sub primary_menu {
|
Line 337 sub primary_menu {
|
($item->[2] eq 'blog')) && |
($item->[2] eq 'blog')) && |
(!&Apache::lonnet::usertools_access('','',$item->[2], |
(!&Apache::lonnet::usertools_access('','',$item->[2], |
undef,'tools'))); |
undef,'tools'))); |
|
if ($env{'request.course.id'} && $menucoll) { |
|
next if ($item->[3]) && (!$menuopts{$item->[3]}); |
|
} |
push(@primsub,$item); |
push(@primsub,$item); |
} |
} |
if ($title eq 'Personal' && $env{'user.name'} && $env{'user.domain'} ) { |
if ($title eq 'Personal' && $env{'user.name'} && $env{'user.domain'} ) { |
unless ($ltiexc{'fullname'}) { |
unless (($ltiexc{'fullname'}) || |
|
(($env{'request.course.id'}) && ($menucoll) && (!$menuopts{'name'}))) { |
$title = &Apache::loncommon::plainname($env{'user.name'},$env{'user.domain'}); |
$title = &Apache::loncommon::plainname($env{'user.name'},$env{'user.domain'}); |
} |
} |
} else { |
} else { |
Line 400 sub getauthor{
|
Line 410 sub getauthor{
|
} |
} |
|
|
sub secondary_menu { |
sub secondary_menu { |
my ($httphost,$ltiscope,$ltimenu,$noprimary) = @_; |
my ($httphost,$ltiscope,$ltimenu,$noprimary,$menucoll,$menuref) = @_; |
my $menu; |
my $menu; |
|
|
my $crstype = &Apache::loncommon::course_type(); |
my $crstype = &Apache::loncommon::course_type(); |
Line 424 sub secondary_menu {
|
Line 434 sub secondary_menu {
|
my $canplc = &Apache::lonnet::allowed('plc', $crs_sec); |
my $canplc = &Apache::lonnet::allowed('plc', $crs_sec); |
my $author = &getauthor(); |
my $author = &getauthor(); |
|
|
my ($cdom,$cnum,$showsyllabus,$showfeeds,$showresv,$grouptools,$lti,$ltimapres,%ltiexc); |
my ($cdom,$cnum,$showsyllabus,$showfeeds,$showresv,$grouptools, |
|
$lti,$ltimapres,%ltiexc,%menuopts); |
$grouptools = 0; |
$grouptools = 0; |
if ($env{'request.course.id'}) { |
if ($env{'request.course.id'}) { |
$cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
$cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
Line 472 sub secondary_menu {
|
Line 483 sub secondary_menu {
|
} |
} |
} |
} |
} |
} |
|
if (($menucoll) && (ref($menuref) eq 'HASH')) { |
|
%menuopts = %{$menuref}; |
|
} |
|
|
my ($canmodifycoauthor); |
my ($canmodifycoauthor); |
if ($env{'request.role'} eq "au./$env{'user.domain'}/") { |
if ($env{'request.role'} eq "au./$env{'user.domain'}/") { |
Line 534 sub secondary_menu {
|
Line 548 sub secondary_menu {
|
&& $ltiexc{'logout'}; |
&& $ltiexc{'logout'}; |
|
|
my $title = $menuitem->[3]; |
my $title = $menuitem->[3]; |
|
if ($env{'request.course.id'} && $menucoll) { |
|
unless ($$menuitem[5] eq 'roles') { |
|
next if (($$menuitem[5]) && (!$menuopts{$$menuitem[5]})); |
|
} |
|
} |
if (defined($secondary_submenu{$title})) { |
if (defined($secondary_submenu{$title})) { |
my ($link,$target); |
my ($link,$target); |
if ($menuitem->[0] ne '') { |
if ($menuitem->[0] ne '') { |
$link = $menuitem->[0]; |
$link = $menuitem->[0]; |
unless ($ltitarget eq 'iframe') { |
unless ($ltitarget eq 'iframe') { |
$target = '_top'; |
$target = '_top'; |
} |
} |
} else { |
} else { |
Line 568 sub secondary_menu {
|
Line 587 sub secondary_menu {
|
push(@scndsub,$item); |
push(@scndsub,$item); |
} |
} |
} |
} |
if ($title eq 'Personal' && $env{'user.name'} && $env{'user.domain'} ) { |
if ($title eq 'Personal' && $env{'user.name'} && $env{'user.domain'}) { |
unless ($ltiexc{'fullname'}) { |
unless ($ltiexc{'fullname'}) { |
$title = &Apache::loncommon::plainname($env{'user.name'},$env{'user.domain'}); |
$title = &Apache::loncommon::plainname($env{'user.name'},$env{'user.domain'}); |
} |
} |
} |
} |
if (@scndsub > 0) { |
if (@scndsub > 0) { |
$menu .= &create_submenu($link,$target,$title,\@scndsub,1); |
$menu .= &create_submenu($link,$target,&mt($title),\@scndsub,1); |
} elsif ($link ne '#') { |
} elsif ($link ne '#') { |
$menu .= '<li><a href="'.$link.'" target="'.$target.'">'.&mt($title).'</a></li>'; |
$menu .= '<li><a href="'.$link.'" target="'.$target.'">'.&mt($title).'</a></li>'; |
} |
} |
} |
} |
} elsif ($$menuitem[3] eq 'Roles' && $env{'request.course.id'}) { |
} elsif ($$menuitem[3] eq 'Roles' && $env{'request.course.id'}) { |
# special treatment for role selector |
# special treatment for role selector |
($roleswitcher_js,$roleswitcher_form,my $switcher) = |
my ($switcher,$has_opa_priv); |
|
($roleswitcher_js,$roleswitcher_form,$switcher,$has_opa_priv) = |
&roles_selector( |
&roles_selector( |
$env{'course.' . $env{'request.course.id'} . '.domain'}, |
$env{'course.' . $env{'request.course.id'} . '.domain'}, |
$env{'course.' . $env{'request.course.id'} . '.num'}, |
$env{'course.' . $env{'request.course.id'} . '.num'}, |
$httphost,$ltitarget |
$httphost,$ltitarget |
); |
); |
|
if (($$menuitem[5]) && (!$menuopts{$$menuitem[5]})) { |
|
next unless ($has_opa_priv); |
|
} |
$menu .= $switcher; |
$menu .= $switcher; |
} elsif ($$menuitem[3] eq 'Help') { # special treatment for helplink |
} elsif ($$menuitem[3] eq 'Help') { # special treatment for helplink |
next if ($crstype eq 'Placement'); |
next if ($crstype eq 'Placement'); |
Line 604 sub secondary_menu {
|
Line 627 sub secondary_menu {
|
} |
} |
if ($env{'course.'.$env{'request.course.id'}.'.externalsyllabus'} =~ m{^http://}) { |
if ($env{'course.'.$env{'request.course.id'}.'.externalsyllabus'} =~ m{^http://}) { |
if (($ENV{'SERVER_PORT'} == 443) || ($env{'request.use_absolute'} =~ m{^https://})) { |
if (($ENV{'SERVER_PORT'} == 443) || ($env{'request.use_absolute'} =~ m{^https://})) { |
unless (&Apache::lonnet::uses_sts()) { |
unless ((&Apache::lonnet::uses_sts()) || (&Apache::lonnet::waf_allssl())) { |
unless ($$menuitem[0] =~ m{^https?://}) { |
unless ($$menuitem[0] =~ m{^https?://}) { |
$$menuitem[0] = 'http://'.$ENV{'SERVER_NAME'}.$$menuitem[0]; |
$$menuitem[0] = 'http://'.$ENV{'SERVER_NAME'}.$$menuitem[0]; |
} |
} |
Line 2394 sub roles_selector {
|
Line 2417 sub roles_selector {
|
my $now = time; |
my $now = time; |
my (%courseroles,%seccount,%courseprivs,%roledesc); |
my (%courseroles,%seccount,%courseprivs,%roledesc); |
my $is_cc; |
my $is_cc; |
my ($js,$form,$switcher); |
my ($js,$form,$switcher,$has_opa_priv); |
my $ccrole; |
my $ccrole; |
if ($crstype eq 'Community') { |
if ($crstype eq 'Community') { |
$ccrole = 'co'; |
$ccrole = 'co'; |
Line 2515 sub roles_selector {
|
Line 2538 sub roles_selector {
|
if ($env{'request.role'} =~ m{^\Q$role\E}) { |
if ($env{'request.role'} =~ m{^\Q$role\E}) { |
if ($seccount{$role} > 1) { |
if ($seccount{$role} > 1) { |
$include = 1; |
$include = 1; |
|
} else { |
|
if ($env{'user.priv.'.$env{'request.role'}."./$cdom/$cnum"} =~/opa\&([^\:]*)/) { |
|
$has_opa_priv = 1; |
|
} |
} |
} |
} else { |
} else { |
$include = 1; |
$include = 1; |
} |
} |
} |
} |
if ($include) { |
if ($include) { |
|
if ($env{"user.priv.$role./$cdom/$cnum./$cdom/$cnum"} =~/opa\&([^\:]*)/) { |
|
$has_opa_priv = 1; |
|
} |
push(@submenu,['javascript:adhocRole('."'$role'".')', |
push(@submenu,['javascript:adhocRole('."'$role'".')', |
&Apache::lonnet::plaintext($role,$crstype)]); |
&Apache::lonnet::plaintext($role,$crstype)]); |
} |
} |
Line 2545 sub roles_selector {
|
Line 2575 sub roles_selector {
|
} else { |
} else { |
$rolename = &Apache::lonnet::plaintext($role); |
$rolename = &Apache::lonnet::plaintext($role); |
} |
} |
|
if ($env{"user.priv.$role./$cdom/$cnum./$cdom/$cnum"} =~/opa\&([^\:]*)/) { |
|
$has_opa_priv = 1; |
|
} |
push(@submenu,['javascript:adhocRole('."'$role'".')', |
push(@submenu,['javascript:adhocRole('."'$role'".')', |
$rolename]); |
$rolename]); |
} |
} |
Line 2554 sub roles_selector {
|
Line 2587 sub roles_selector {
|
$switcher = &create_submenu('','',&mt('Switch role'),\@submenu,'','',$ltitarget); |
$switcher = &create_submenu('','',&mt('Switch role'),\@submenu,'','',$ltitarget); |
} |
} |
} |
} |
return ($js,$form,$switcher); |
return ($js,$form,$switcher,$has_opa_priv); |
} |
} |
|
|
sub get_all_courseroles { |
sub get_all_courseroles { |
Line 3002 BEGIN {
|
Line 3035 BEGIN {
|
$category_positions{$entries[2]}=$entries[1]; |
$category_positions{$entries[2]}=$entries[1]; |
$category_names{$entries[2]}=$entries[3]; |
$category_names{$entries[2]}=$entries[3]; |
} elsif ($configline=~/^prim\:/) { |
} elsif ($configline=~/^prim\:/) { |
my @entries = (split(/\:/, $configline))[1..6]; |
my @entries = (split(/\:/, $configline))[1..7]; |
push(@primary_menu,\@entries); |
push(@primary_menu,\@entries); |
} elsif ($configline=~/^primsub\:/) { |
} elsif ($configline=~/^primsub\:/) { |
my ($parent,@entries) = (split(/\:/, $configline))[1..4]; |
my ($parent,@entries) = (split(/\:/, $configline))[1..5]; |
push(@{$primary_submenu{$parent}},\@entries); |
push(@{$primary_submenu{$parent}},\@entries); |
} elsif ($configline=~/^scnd\:/) { |
} elsif ($configline=~/^scnd\:/) { |
my @entries = (split(/\:/, $configline))[1..5]; |
my @entries = (split(/\:/, $configline))[1..6]; |
push(@secondary_menu,\@entries); |
push(@secondary_menu,\@entries); |
} elsif ($configline=~/^scndsub\:/) { |
} elsif ($configline=~/^scndsub\:/) { |
my ($parent,@entries) = (split(/\:/, $configline))[1..4]; |
my ($parent,@entries) = (split(/\:/, $configline))[1..4]; |