Diff for /loncom/interface/lonmenu.pm between versions 1.369.2.83.2.7 and 1.369.2.83.2.8

version 1.369.2.83.2.7, 2023/01/23 05:40:00 version 1.369.2.83.2.8, 2023/07/06 19:16:16
Line 267  sub prep_menuitem { Line 267  sub prep_menuitem {
 # entries from mydesk.tab  # entries from mydesk.tab
 sub primary_menu {  sub primary_menu {
     my ($crstype,$ltimenu,$menucoll,$menuref,$links_disabled,$links_target) = @_;      my ($crstype,$ltimenu,$menucoll,$menuref,$links_disabled,$links_target) = @_;
     my (%menu,%menuopts);      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 275  sub primary_menu { Line 275  sub primary_menu {
         || (($env{'user.name'} eq '') && ($env{'user.domain'} eq ''))) {          || (($env{'user.name'} eq '') && ($env{'user.domain'} eq ''))) {
         $public = 1;          $public = 1;
     }      }
       my $lti;
       if ($env{'request.lti.login'}) {
           $lti = 1;
           if (ref($ltimenu) eq 'HASH') {
               foreach my $item ('fullname','logout') {
                   unless ($ltimenu->{$item}) {
                       $ltiexc{$item} = 1;
                   }
               }
           }
       }
     my ($listclass,$linkattr,$target);      my ($listclass,$linkattr,$target);
     if ($links_disabled) {      if ($links_disabled) {
         $listclass = 'LCisDisabled';          $listclass = 'LCisDisabled';
Line 283  sub primary_menu { Line 294  sub primary_menu {
     if ($links_target ne '') {      if ($links_target ne '') {
         $target = $links_target;          $target = $links_target;
     } else {          } else {    
         my $deeplinktarget;          my ($ltitarget,$deeplinktarget);
           if ($env{'request.lti.login'}) {
                $ltitarget = $env{'request.lti.target'};
           }
         if ($env{'request.deeplink.login'}) {          if ($env{'request.deeplink.login'}) {
             $deeplinktarget = $env{'request.deeplink.target'};              $deeplinktarget = $env{'request.deeplink.target'};
         }          }
         if ($deeplinktarget eq '_self') {          if (($ltitarget eq 'iframe') || ($deeplinktarget eq '_self')) {
             $target = '_self';              $target = '_self';
         } else {          } else {
             $target = '_top';              $target = '_top';
Line 310  sub primary_menu { Line 324  sub primary_menu {
                 && !$public;                           # only visible to public                  && !$public;                           # only visible to public
                                                        # users                                                         # users
         next if    $$menuitem[4]        eq 'roles'     ##show links depending on          next if    $$menuitem[4]        eq 'roles'     ##show links depending on
                 && &Apache::loncommon::show_course();  ##term 'Courses' or                   && (&Apache::loncommon::show_course()  ##term 'Courses' or 
         next if    $$menuitem[4]        eq 'courses'   ##'Roles' wanted                  || $lti);                              ##'Roles' wanted
                 && !&Apache::loncommon::show_course(); ##          next if    $$menuitem[4]        eq 'courses'   ##and not LTI access
                           && (!&Apache::loncommon::show_course()
                   || $lti);
           next if    $$menuitem[4]        eq 'notlti'
                   && $lti;
           next if    $$menuitem[4]        eq 'ltiexc'
                   && exists($ltiexc{lc($menuitem->[3])});
         my $title = $menuitem->[3];          my $title = $menuitem->[3];
         my $position = $menuitem->[5];          my $position = $menuitem->[5];
         if ($position eq '') {          if ($position eq '') {
Line 322  sub primary_menu { Line 341  sub primary_menu {
         if ($env{'request.course.id'} && $menucoll) {          if ($env{'request.course.id'} && $menucoll) {
             if (($menuitem->[6]) && (!$menuopts{$menuitem->[6]})) {              if (($menuitem->[6]) && (!$menuopts{$menuitem->[6]})) {
                 if ($menuitem->[6] eq 'pers') {                  if ($menuitem->[6] eq 'pers') {
                     if ($menuopts{'name'} &&                      if ($menuopts{'name'} && !$ltiexc{'fullname'} &&
                         $env{'user.name'} && $env{'user.domain'}) {                          $env{'user.name'} && $env{'user.domain'}) {
                         $menu{$position} .= '<li><a href="#">'.                          $menu{$position} .= '<li><a href="#">'.
                             &Apache::loncommon::plainname($env{'user.name'},                              &Apache::loncommon::plainname($env{'user.name'},
Line 357  sub primary_menu { Line 376  sub primary_menu {
                     push(@primsub,$item);                      push(@primsub,$item);
                 }                  }
                 if ($title eq 'Personal') {                  if ($title eq 'Personal') {
                     if ($env{'user.name'} && $env{'user.domain'}) {                      if ($env{'user.name'} && $env{'user.domain'} && !$ltiexc{'fullname'}) {
                         unless (($env{'request.course.id'}) && ($menucoll) && (!$menuopts{'name'})) {                          unless (($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'});
                         }                          }
Line 464  sub secondary_menu { Line 483  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,%menuopts);      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 498  sub secondary_menu { Line 518  sub secondary_menu {
                 }                  }
             }              }
         }          }
           if ($env{'request.lti.login'}) {
               $lti = 1;
               if (ref($ltimenu) eq 'HASH') {
                   foreach my $item ('fullname','coursetitle','role','logout','grades') {
                       unless ($ltimenu->{$item}) {
                           $ltiexc{$item} = 1;
                       }
                   }
               }
               if (($ltiscope eq 'map') || ($ltiscope eq 'resource')) {
                   $ltimapres = 1;
               }
           }
     }      }
     if (($menucoll) && (ref($menuref) eq 'HASH')) {      if (($menucoll) && (ref($menuref) eq 'HASH')) {
         %menuopts = %{$menuref};          %menuopts = %{$menuref};
Line 522  sub secondary_menu { Line 555  sub secondary_menu {
     if ($links_target ne '') {      if ($links_target ne '') {
         $target = $links_target;          $target = $links_target;
     } else {      } else {
         my $deeplinktarget;          my ($ltitarget,$deeplinktarget);
           if ($env{'request.lti.login'}) {
               $ltitarget = $env{'request.lti.target'};
           }
         if ($env{'request.deeplink.login'}) {          if ($env{'request.deeplink.login'}) {
             $deeplinktarget = $env{'request.deeplink.target'};              $deeplinktarget = $env{'request.deeplink.target'};
         }          }
         if ($deeplinktarget eq '_self') {          if (($ltitarget eq 'iframe') || ($deeplinktarget eq '_self')) {
             $target = '_self';              $target = '_self';
         } else {          } else {
             $target = '_top';              $target = '_top';
Line 546  sub secondary_menu { Line 582  sub secondary_menu {
         next if    $$menuitem[4]  eq 'crseditCommunity'          next if    $$menuitem[4]  eq 'crseditCommunity'
                 && ($crstype eq 'Course');                  && ($crstype eq 'Course');
         next if    $$menuitem[4]  eq 'nvgr'          next if    $$menuitem[4]  eq 'nvgr'
                 && $canvgr;                  && ($canvgr || $ltiexc{'grades'});
         next if    $$menuitem[4]  eq 'vgr'          next if    $$menuitem[4]  eq 'vgr'
                 && !$canvgr;                  && !$canvgr;
         next if    $$menuitem[4]   eq 'viewusers'          next if    $$menuitem[4]   eq 'viewusers'
Line 573  sub secondary_menu { Line 609  sub secondary_menu {
                 && !$author;                  && !$author;
         next if    $$menuitem[4]    eq 'cca'          next if    $$menuitem[4]    eq 'cca'
                 && !$canmodifycoauthor;                  && !$canmodifycoauthor;
           next if    $$menuitem[4]    eq 'notltimapres'
                   && $ltimapres;
           next if    $$menuitem[4]    eq 'notlti'
                   && $lti;
           next if    $$menuitem[4]    eq 'lti'
                   && (!$lti || !$noprimary);
           next if    $$menuitem[3]    eq 'Logout'
                   && $ltiexc{'logout'};
   
         my $title = $menuitem->[3];          my $title = $menuitem->[3];
         if ($env{'request.course.id'} && $menucoll) {          if ($env{'request.course.id'} && $menucoll) {
Line 603  sub secondary_menu { Line 647  sub secondary_menu {
                         next if ($item->[2] eq 'params' && !$canmodpara && !$canviewpara);                          next if ($item->[2] eq 'params' && !$canmodpara && !$canviewpara);
                         next if ($item->[2] eq 'author' && !$author);                          next if ($item->[2] eq 'author' && !$author);
                         next if ($item->[2] eq 'cca' && !$canmodifycoauthor);                          next if ($item->[2] eq 'cca' && !$canmodifycoauthor);
                           next if ($item->[2] eq 'lti' && !$lti);
                           if ($item->[2] =~ /^lti(portfolio|wishlist|blog)$/) {
                               my $tool = $1;
                               next if !$lti;
                               next if (!&Apache::lonnet::usertools_access('','',$tool,
                                                                           undef,'tools'));
                           }
                         push(@scndsub,$item);                           push(@scndsub,$item); 
                     }                      }
                 }                  }
                   if ($title eq 'Personal' && $env{'user.name'} && $env{'user.domain'}) {
                       unless ($ltiexc{'fullname'}) {
                           $title = &Apache::loncommon::plainname($env{'user.name'},$env{'user.domain'});
                       }
                   }
                 if (@scndsub > 0) {                  if (@scndsub > 0) {
                     $menu .= &create_submenu($link,$target,&mt($title),\@scndsub,1,undef,                      $menu .= &create_submenu($link,$target,&mt($title),\@scndsub,1,undef,
                                              $listclass,$linkattr);                                               $listclass,$linkattr);
Line 864  sub innerregister { Line 920  sub innerregister {
             my $restitle = &Apache::lonnet::gettitle($symb);              my $restitle = &Apache::lonnet::gettitle($symb);
   
             my (@crumbs,@mapcrumbs);              my (@crumbs,@mapcrumbs);
             if (($env{'request.noversionuri'} ne '/adm/navmaps') && ($mapurl ne '') &&              if (($env{'request.noversionuri'} ne '/adm/navmaps') && ($mapurl ne '')) { 
                 ($mapurl ne $env{'course.'.$env{'request.course.id'}.'.url'})) {                  unless ($ltiscope eq 'resource') {
                 $navmap = Apache::lonnavmaps::navmap->new();                      if (($mapurl ne $env{'course.'.$env{'request.course.id'}.'.url'}) &&
                 if (ref($navmap)) {                          !(($ltiscope eq 'map') && (&Apache::lonnet::clutter($resurl) eq $ltiuri))) {
                     @mapcrumbs = $navmap->recursed_crumbs($mapurl,$restitle);                          $navmap = Apache::lonnavmaps::navmap->new();
                           if (ref($navmap)) {
                               @mapcrumbs = $navmap->recursed_crumbs($mapurl,$restitle);
                           }
                       }
                 }                  }
             }              }
             @crumbs = ({text  => $crstype.' Contents',               unless (($ltiscope eq 'map') || ($ltiscope eq 'resource')) {
                         href  => "Javascript:gopost('/adm/navmaps','')"});                  @crumbs = ({text  => $crstype.' Contents', 
                               href  => "Javascript:gopost('/adm/navmaps','')"});
               }
             if ($mapurl ne $env{'course.'.$env{'request.course.id'}.'.url'}) {               if ($mapurl ne $env{'course.'.$env{'request.course.id'}.'.url'}) { 
                 if (@mapcrumbs) {                  if (@mapcrumbs) {
                     push(@crumbs,@mapcrumbs);                      push(@crumbs,@mapcrumbs);
                 } else {                  } elsif (($ltiscope ne 'map') && ($ltiscope ne 'resource')) {
                     push(@crumbs, {text  => '...',                      push(@crumbs, {text  => '...',
                                    no_mt => 1});                                     no_mt => 1});
                 }                  }
             }              }
   
             unless ((@mapcrumbs) || (!$maptitle) || ($maptitle eq 'default.sequence') ||              unless ((@mapcrumbs) || (!$maptitle) || ($maptitle eq 'default.sequence') ||
                     ($mapurl eq $env{'course.'.$env{'request.course.id'}.'.url'})) {                      ($mapurl eq $env{'course.'.$env{'request.course.id'}.'.url'}) ||
                       ($ltiscope eq 'resource')) { 
                 push @crumbs, {text => $maptitle, no_mt => 1,                  push @crumbs, {text => $maptitle, no_mt => 1,
                                href => &Apache::lonnet::clutter($mapurl).'?navmap=1'};                                 href => &Apache::lonnet::clutter($mapurl).'?navmap=1'};
             }              }
Line 996  sub innerregister { Line 1059  sub innerregister {
             $perms{'mdc'} = &Apache::lonnet::allowed('mdc',$env{'request.course.id'});              $perms{'mdc'} = &Apache::lonnet::allowed('mdc',$env{'request.course.id'});
             $perms{'cev'} = &Apache::lonnet::allowed('cev',$env{'request.course.id'});              $perms{'cev'} = &Apache::lonnet::allowed('cev',$env{'request.course.id'});
             my @privs;              my @privs;
               my $gradable_exttool;
             if ($env{'request.symb'} ne '') {              if ($env{'request.symb'} ne '') {
                 if ($env{'request.filename'}=~/$LONCAPA::assess_re/) {                  if ($env{'request.noversionuri'} =~ m{^/adm/$cdom/$cnum/(\d+)/ext\.tool$}) {
                       if (&Apache::lonnet::EXT('resource.0.gradable') =~ /^yes$/i) {
                           $gradable_exttool = 1;
                            push(@privs,('mgr','vgr'));
                       }
                   } elsif ($env{'request.filename'}=~/$LONCAPA::assess_re/) {
                     push(@privs,('mgr','vgr'));                      push(@privs,('mgr','vgr'));
                 }                  }
                 push(@privs,('opa','vpa'));                  push(@privs,('opa','vpa'));
Line 1098  ENDMENUITEMS Line 1167  ENDMENUITEMS
 # We are in a course and looking at a registered URL  # We are in a course and looking at a registered URL
 # Should probably be in mydesk.tab  # Should probably be in mydesk.tab
 #  #
               $menuitems = "c&3&1";
     $menuitems=(<<ENDMENUITEMS);              if ($ltiscope eq 'resource') {
 c&3&1  # Suppress display of backward arrow for LTI Provider if scope is resource.
 s&2&1&back.png&$swtext{'back'}&&gopost('/adm/flip','back:'+currentURL)&Previous content resource&&1  # Suppress display of forward arrow for LTI Provider if scope is resource.
 s&2&3&forw.png&$swtext{'forw'}&&gopost('/adm/flip','forward:'+currentURL)&Next content resource&&3              } elsif ($ltiscope eq 'map') {
   # Suppress display of backward arrow for LTI Provider if scope is map and this is first resource.
   # Suppress display of forward arrow for LTI Provider if scope is map and this is the last resource.
                   my $showforw = 1;
                   my $showback = 1;
                   my $navmap = Apache::lonnavmaps::navmap->new();
                   if (ref($navmap)) {
                       my $mapres = $navmap->getResourceByUrl($ltiuri);
                       if (ref($mapres)) {
                           if ($navmap->isLastResource($mapres,$env{'request.symb'})) {
                               $showforw = 0;
                           }
                           if ($navmap->isFirstResource($mapres,$env{'request.symb'})) {
                               $showback = 0;
                           }
                       }
                   }
                   if ($showback) {
                       $menuitems.="
   s&2&1&back.png&&&gopost('/adm/flip','back:'+currentURL)&Previous content resource&&1";
                   }
                   if ($showforw) {
                       $menuitems.="
   s&2&3&forw.png&&&gopost('/adm/flip','forward:'+currentURL)&Next content resource&&3";
                   }
               } else {
                   $menuitems.="
   s&2&1&back.png&&&gopost('/adm/flip','back:'+currentURL)&Previous content resource&&1
   s&2&3&forw.png&&&gopost('/adm/flip','forward:'+currentURL)&Next content resource&&3";
               }
               $menuitems .= (<<ENDMENUITEMS);
 c&6&3  c&6&3
 c&8&1  
 c&8&2  c&8&2
 s&8&3&prt.png&$swtext{'prt'}&printout[_1]&gopost('/adm/printout',currentURL)&Prepare a printable document  s&8&3&prt.png&$swtext{'prt'}&printout[_1]&gopost('/adm/printout',currentURL)&Prepare a printable document
 ENDMENUITEMS  ENDMENUITEMS
Line 1973  sub switch { Line 2071  sub switch {
         unless ($env{'request.state'} eq 'construct') {          unless ($env{'request.state'} eq 'construct') {
             push(@tools,63);              push(@tools,63);
         }          }
         if (($env{'environment.icons'} eq 'iconsonly') &&          if ((($env{'environment.icons'} eq 'iconsonly') ||
                ($env{'environment.icons'} eq '') && ($env{'request.lti.login'})) &&
             (grep(/^$idx$/,@tools))) {              (grep(/^$idx$/,@tools))) {
             $inlineremote[$idx] =              $inlineremote[$idx] =
         '<a title="'.$desc.'" class="LC_menubuttons_link" href="javascript:'.$act.';">'.$pic.'</a>';          '<a title="'.$desc.'" class="LC_menubuttons_link" href="javascript:'.$act.';">'.$pic.'</a>';
Line 2593  sub utilityfunctions { Line 2692  sub utilityfunctions {
   
     my $countdown = &countdown_toggle_js();      my $countdown = &countdown_toggle_js();
   
     my $deeplinktarget;      my ($ltitarget,$deeplinktarget);
       if ($env{'request.lti.login'}) {
           $ltitarget = $env{'request.lti.target'};
       }
     if ($env{'request.deeplink.login'}) {      if ($env{'request.deeplink.login'}) {
         $deeplinktarget = $env{'request.deeplink.target'};          $deeplinktarget = $env{'request.deeplink.target'};
     }      }
Line 2698  function golist(url) { Line 2800  function golist(url) {
        currentURL = null;         currentURL = null;
        currentSymb= null;         currentSymb= null;
        var lcHostname = setLCHost();         var lcHostname = setLCHost();
          var ltitarget = '$ltitarget';
        var deeplinktarget = '$deeplinktarget';         var deeplinktarget = '$deeplinktarget';
        if (deeplinktarget == '_self') {         if ((ltitarget == 'iframe') || (deeplinktarget == '_self')) {
            document.location.href=lcHostname+url;             document.location.href=lcHostname+url;
        } else {         } else {
            top.location.href=lcHostname+url;             top.location.href=lcHostname+url;
Line 2761  function open_source() { Line 2864  function open_source() {
                          'height=500,width=600,resizable=yes,location=no,menubar=no,toolbar=no,scrollbars=yes');                           'height=500,width=600,resizable=yes,location=no,menubar=no,toolbar=no,scrollbars=yes');
 }  }
   
   function open_aboutLC() {
       var isMobile = "$env{'browser.mobile'}";
       var url = '/adm/about.html';
       if (isMobile == 1) {
           openMyModal(url,600,400,'yes');
       } else {
           window.open(url,"aboutLONCAPA","height=400,width=600,scrollbars=1,resizable=1,menubar=0,location=1");
       }
       return;
   }
   
 (function (\$) {  (function (\$) {
   \$(document).ready(function () {    \$(document).ready(function () {
     \$.single=function(a){return function(b){a[0]=b;return a}}(\$([1]));      \$.single=function(a){return function(b){a[0]=b;return a}}(\$([1]));
Line 2804  sub constspaceform { Line 2918  sub constspaceform {
         $target = ' target="_parent"';          $target = ' target="_parent"';
         $printtarget = ' target="_parent"';          $printtarget = ' target="_parent"';
     } else {      } else {
         unless (($env{'request.deeplink.login'}) && ($env{'request.deeplink.target'} eq '_self')) {          unless ((($env{'request.lti.login'}) && ($env{'request.lti.target'} eq 'iframe')) || 
                   (($env{'request.deeplink.login'}) && ($env{'request.deeplink.target'} eq '_self'))) {
             $target = ' target="_top"';              $target = ' target="_top"';
             $printtarget = ' target="_top"';              $printtarget = ' target="_top"';
         }          }
Line 3381  sub required_privs { Line 3496  sub required_privs {
   
 sub countdown_timer {  sub countdown_timer {
     if (($env{'request.course.id'}) && ($env{'request.symb'} ne '') &&      if (($env{'request.course.id'}) && ($env{'request.symb'} ne '') &&
         ($env{'request.filename'}=~/$LONCAPA::assess_re/)) {          (($env{'request.filename'}=~/$LONCAPA::assess_re/) ||
            (($env{'request.symb'} =~ /ext\.tool$/) &&
            (&Apache::lonnet::EXT('resource.0.gradable',$env{'request.symb'}) =~ /^yes$/i)))) {
         my ($type,$hastimeleft,$slothastime);          my ($type,$hastimeleft,$slothastime);
         my $now = time;          my $now = time;
         if ($env{'request.filename'} =~ /\.task$/) {          if ($env{'request.filename'} =~ /\.task$/) {
             $type = 'Task';              $type = 'Task';
           } elsif ($env{'request.symb'} =~ /ext\.tool$/) {
               $type = 'tool';
         } else {          } else {
             $type = 'problem';              $type = 'problem';
         }          }
         my ($status,$accessmsg,$slot_name,$slot) =          my ($status,$accessmsg,$slot_name,$slot);
             &Apache::lonhomework::check_slot_access('0',$type);          if ($type eq 'tool') {
               ($status,$accessmsg,$slot_name,$slot) =
                   &Apache::lonhomework::check_slot_access('0',$type,$env{'request.symb'},['0']);
           } else {
               ($status,$accessmsg,$slot_name,$slot) =
                   &Apache::lonhomework::check_slot_access('0',$type);
           }
         if ($slot_name ne '') {          if ($slot_name ne '') {
             if (ref($slot) eq 'HASH') {              if (ref($slot) eq 'HASH') {
                 if (($slot->{'starttime'} < $now) &&                  if (($slot->{'starttime'} < $now) &&

Removed from v.1.369.2.83.2.7  
changed lines
  Added in v.1.369.2.83.2.8


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>