Diff for /loncom/interface/lonmenu.pm between versions 1.490 and 1.498

version 1.490, 2018/04/27 23:01:05 version 1.498, 2019/08/06 15:54:37
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) = @_;      my ($crstype,$ltimenu) = @_;
     my (%menu);      my (%menu,%ltiexc);
     # 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 265  sub primary_menu { Line 265  sub primary_menu {
         my %roles_in_env;          my %roles_in_env;
         $rolecount = &Apache::lonroles::roles_from_env(\%roles_in_env,$update);          $rolecount = &Apache::lonroles::roles_from_env(\%roles_in_env,$update);
     }      }
     my $ltitarget;      my ($lti,$ltitarget);
     if ($env{'request.lti.login'}) {      if ($env{'request.lti.login'}) {
           $lti = 1;
         $ltitarget = $env{'request.lti.target'};          $ltitarget = $env{'request.lti.target'};
           if (ref($ltimenu) eq 'HASH') {
               foreach my $item ('fullname','logout') {
                   unless ($ltimenu->{$item}) {
                       $ltiexc{$item} = 1;
                   }
               }
           }
     }      }
     foreach my $menuitem (@primary_menu) {      foreach my $menuitem (@primary_menu) {
         # evaluate conditions           # evaluate conditions 
Line 283  sub primary_menu { Line 291  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                  || $env{'request.lti.login'});         ##'Roles' wanted
                 && !&Apache::loncommon::show_course(); ##          next if    $$menuitem[4]        eq 'courses'   ##and not LTI access
                   && (!&Apache::loncommon::show_course()
                   || !$env{'request.lti.login'});
           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];
         if (($crstype eq 'Placement') && (!$env{'request.role.adv'})) {          if (($crstype eq 'Placement') && (!$env{'request.role.adv'})) {
             if ($menuitem->[4] eq 'courses') {              if ($menuitem->[4] eq 'courses') {
Line 320  sub primary_menu { Line 334  sub primary_menu {
                     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'} ) {
                     $title = &Apache::loncommon::plainname($env{'user.name'},$env{'user.domain'});                      unless ($ltiexc{'fullname'}) {
                           $title = &Apache::loncommon::plainname($env{'user.name'},$env{'user.domain'});
                       }
                 } else {                  } else {
                     $title = &mt($title);                      $title = &mt($title);
                 }                  }
Line 384  sub getauthor{ Line 400  sub getauthor{
 }  }
   
 sub secondary_menu {  sub secondary_menu {
     my ($httphost,$ltiscope) = @_;      my ($httphost,$ltiscope,$ltimenu,$noprimary) = @_;
     my $menu;      my $menu;
   
     my $crstype = &Apache::loncommon::course_type();      my $crstype = &Apache::loncommon::course_type();
Line 408  sub secondary_menu { Line 424  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);      my ($cdom,$cnum,$showsyllabus,$showfeeds,$showresv,$grouptools,$lti,$ltimapres,%ltiexc);
     $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 432  sub secondary_menu { Line 448  sub secondary_menu {
                 $showresv = 1;                  $showresv = 1;
             }              }
         }          }
         my %groups = &Apache::lonnet::get_active_groups(          if ($env{'request.course.groups'} ne '') {
                      $env{'user.domain'}, $env{'user.name'},$cdom,$cnum);              foreach my $group (split(/:/,$env{'request.course.groups'}) {
         if (%groups) {                  next unless ($group =~ /^\w+$/);
             foreach my $group (keys(%groups)) {  
                 my @privs = split(/:/,$env{"user.priv.$env{'request.role'}./$cdom/$cnum/$group"});                  my @privs = split(/:/,$env{"user.priv.$env{'request.role'}./$cdom/$cnum/$group"});
                 shift(@privs);                  shift(@privs);
                 if (@privs) {                  if (@privs) {
Line 443  sub secondary_menu { Line 458  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;
               }
           }
     }      }
   
     my ($canmodifycoauthor);       my ($canmodifycoauthor); 
Line 453  sub secondary_menu { Line 481  sub secondary_menu {
             $canmodifycoauthor = 1;              $canmodifycoauthor = 1;
         }          }
     }      }
   
     my ($roleswitcher_js,$roleswitcher_form,$ltitarget);      my ($roleswitcher_js,$roleswitcher_form,$ltitarget);
     if ($env{'request.lti.login'}) {      if ($env{'request.lti.login'}) {
         $ltitarget = $env{'request.lti.target'};          $ltitarget = $env{'request.lti.target'};
Line 468  sub secondary_menu { Line 497  sub secondary_menu {
         next if    $$menuitem[4]   =~ /^crsedit/          next if    $$menuitem[4]   =~ /^crsedit/
                 && (!$canedit && !$canvieweditor);                  && (!$canedit && !$canvieweditor);
         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 496  sub secondary_menu { Line 525  sub secondary_menu {
         next if    $$menuitem[4]    eq 'cca'          next if    $$menuitem[4]    eq 'cca'
                 && !$canmodifycoauthor;                  && !$canmodifycoauthor;
         next if    $$menuitem[4]    eq 'notltimapres'          next if    $$menuitem[4]    eq 'notltimapres'
                 && (($ltiscope eq 'resource') || ($ltiscope eq 'map'));                  && $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 (defined($secondary_submenu{$title})) {          if (defined($secondary_submenu{$title})) {
Line 523  sub secondary_menu { Line 558  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,$title,\@scndsub,1);                      $menu .= &create_submenu($link,$target,$title,\@scndsub,1);
                 } elsif ($link ne '#') {                  } elsif ($link ne '#') {
Line 534  sub secondary_menu { Line 581  sub secondary_menu {
             }              }
         } 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
             unless ($env{'request.lti.login'}) {              ($roleswitcher_js,$roleswitcher_form,my $switcher) =
                 ($roleswitcher_js,$roleswitcher_form,my $switcher) =                  &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                  );
                     );              $menu .= $switcher;
                 $menu .= $switcher;          } elsif ($$menuitem[3] eq 'Help') { # special treatment for helplink
             }              next if ($crstype eq 'Placement');
               $menu .= '<li>'.&Apache::loncommon::top_nav_help('Help').'</li>';
         } else {          } else {
             if ($$menuitem[3] eq 'Syllabus' && $env{'request.course.id'}) {              if ($$menuitem[3] eq 'Syllabus' && $env{'request.course.id'}) {
                 my $url = $$menuitem[0];                  my $url = $$menuitem[0];
Line 556  sub secondary_menu { Line 604  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 ($$menuitem[0] =~ m{^https?://}) {                          unless (&Apache::lonnet::uses_sts()) {
                             $$menuitem[0] = 'http://'.$ENV{'SERVER_NAME'}.$$menuitem[0];                              unless ($$menuitem[0] =~ m{^https?://}) {
                         }                                  $$menuitem[0] = 'http://'.$ENV{'SERVER_NAME'}.$$menuitem[0];
                         unless ($$menuitem[0] =~ /(\&|\?)usehttp=1/) {                              }
                             $$menuitem[0] .= (($$menuitem[0]=~/\?/) ? '&' : '?').'usehttp=1';                              unless ($$menuitem[0] =~ /(\&|\?)usehttp=1/) {
                                   $$menuitem[0] .= (($$menuitem[0]=~/\?/) ? '&' : '?').'usehttp=1';
                               }
                         }                          }
                     }                      }
                 }                  }
Line 589  sub secondary_menu { Line 639  sub secondary_menu {
     }      }
     $menu =~ s/\[uname\]/$$author{user}/g;      $menu =~ s/\[uname\]/$$author{user}/g;
     $menu =~ s/\[udom\]/$$author{dom}/g;      $menu =~ s/\[udom\]/$$author{dom}/g;
     $menu =~ s/\[javascript\]/javascript:/;      $menu =~ s/\[javascript\]/javascript:/g;
     if ($env{'request.course.id'}) {      if ($env{'request.course.id'}) {
         $menu =~ s/\[cnum\]/$cnum/g;          $menu =~ s/\[cnum\]/$cnum/g;
         $menu =~ s/\[cdom\]/$cdom/g;          $menu =~ s/\[cdom\]/$cdom/g;
Line 1050  if ($env{'browser.mobile'}) { Line 1100  if ($env{'browser.mobile'}) {
             unless ($env{'request.noversionuri'}=~/\/(bulletinboard|smppg|navmaps|syllabus|aboutme|viewclasslist|portfolio)(\?|$)/) {              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/}) && ($env{'request.noversionuri'} !~ m{^/adm/.+/ext\.tool$})) {   if ((!$env{'request.enc'}) && ($env{'request.noversionuri'} !~ m{^/adm/wrapper/ext/}) && ($env{'request.noversionuri'} !~ m{^/uploaded/$match_domain/$match_courseid/docs/}) && ($env{'request.noversionuri'} !~ m{^/adm/.+/ext\.tool$})) {
     $menuitems.=(<<ENDREALRES);      $menuitems.=(<<ENDREALRES);
 s&6&3&catalog.png&Info&info[_1]&catalog_info('$is_mobile')&Show Metadata  s&6&3&catalog.png&Info&info[_1]&catalog_info(currentURL,'$is_mobile')&Show Metadata
 ENDREALRES  ENDREALRES
                 }                  }
                 unless (($env{'request.noversionuri'} =~ m{^/uploaded/$match_domain/$match_courseid/docs/}) ||                  unless (($env{'request.noversionuri'} =~ m{^/uploaded/$match_domain/$match_courseid/docs/}) ||
Line 1502  sub switch { Line 1552  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 2037  END Line 2088  END
 sub utilityfunctions {  sub utilityfunctions {
     my ($httphost) = @_;      my ($httphost) = @_;
     my $currenturl=&Apache::lonnet::clutter(&Apache::lonnet::fixversion((split(/\?/,$env{'request.noversionuri'}))[0]));      my $currenturl=&Apache::lonnet::clutter(&Apache::lonnet::fixversion((split(/\?/,$env{'request.noversionuri'}))[0]));
     if ($currenturl =~ m{^/adm/wrapper/ext/}      my $currentsymb=&Apache::lonenc::check_encrypt($env{'request.symb'});
         && $env{'request.external.querystring'} ) {      if ($currenturl =~ m{^/adm/wrapper/ext/}) {
           if ($env{'request.external.querystring'}) {
             $currenturl .= ($currenturl=~/\?/)?'&':'?'.$env{'request.external.querystring'};              $currenturl .= ($currenturl=~/\?/)?'&':'?'.$env{'request.external.querystring'};
           }
           my ($anchor) = ($env{'request.symb'} =~ /(\#[^\#]+)$/);
           if (($anchor) && ($currenturl !~ /\Q$anchor\E$/)) {
               $currenturl .= $1;
           }
     }      }
     $currenturl=&Apache::lonenc::check_encrypt(&unescape($currenturl));      $currenturl=&Apache::lonenc::check_encrypt(&unescape($currenturl));
       
     my $currentsymb=&Apache::lonenc::check_encrypt($env{'request.symb'});  
   
     my $dc_popup_cid;      my $dc_popup_cid;
     if ($env{'user.adv'} && exists($env{'user.role.dc./'.      if ($env{'user.adv'} && exists($env{'user.role.dc./'.
Line 2075  sub utilityfunctions { Line 2130  sub utilityfunctions {
         $ltitarget = $env{'request.lti.target'};          $ltitarget = $env{'request.lti.target'};
     }      }
   
       my $annotateurl = '/adm/annotation';
       if ($httphost) {
           $annotateurl = '/adm/annotations';
       }
     my $hostvar = '      my $hostvar = '
 function setLCHost() {  function setLCHost() {
     var lcHostname="";      var lcHostname="";
Line 2182  function golist(url) { Line 2241  function golist(url) {
   
   
   
 function catalog_info(isMobile) {  function catalog_info(url,isMobile) {
     if (isMobile == 1) {      if (isMobile == 1) {
         openMyModal(window.location.pathname+'.meta?modal=1',500,400,'yes');          openMyModal(url+'.meta?modal=1',500,400,'yes');
     } else {      } else {
         loncatinfo=window.open(window.location.pathname+'.meta',"LONcatInfo",'height=500,width=400,resizable=yes,scrollbars=yes,location=no,menubar=no,toolbar=no');          loncatinfo=window.open(url+'.meta',"LONcatInfo",'height=500,width=400,resizable=yes,scrollbars=yes,location=no,menubar=no,toolbar=no');
     }      }
 }  }
   
Line 2208  function annotate() { Line 2267  function annotate() {
    annotator.document.write(     annotator.document.write(
    '$start_page_annotate'     '$start_page_annotate'
   +"<form name='goannotate' target='Annotator' method='post' "    +"<form name='goannotate' target='Annotator' method='post' "
   +"action='/adm/annotations'>"    +"action='$annotateurl'>"
   +"<input type='hidden' name='symbnew' value='"+currentSymb+"' />"    +"<input type='hidden' name='symbnew' value='"+currentSymb+"' />"
   +"<\\/form>"    +"<\\/form>"
   +'$end_page_annotate');    +'$end_page_annotate');
Line 2230  function open_StoredLinks_Import(rat) { Line 2289  function open_StoredLinks_Import(rat) {
 }  }
   
 function open_source() {  function open_source() {
    var url = escape(window.location.pathname);     sourcewin=window.open('/adm/source?inhibitmenu=yes&viewonly=1&filename='+currentURL,'LONsource',
    sourcewin=window.open('/adm/source?inhibitmenu=yes&viewonly=1&filename='+url,'LONsource',  
                          '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]));

Removed from v.1.490  
changed lines
  Added in v.1.498


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