Diff for /loncom/interface/lonmenu.pm between versions 1.515 and 1.519

version 1.515, 2022/05/06 19:36:09 version 1.519, 2022/05/28 15:55:34
Line 99  It gets filled in the BEGIN block of thi Line 99  It gets filled in the BEGIN block of thi
   
 =over  =over
   
 =item prep_menuitems(\@menuitem,$ltitarget)  =item prep_menuitems(\@menuitem,$ltitarget,$deeplinktarget,$listclass,$linkattr)
   
 This routine wraps a menuitem in proper HTML. It is used by primary_menu() and   This routine wraps a menuitem in proper HTML. It is used by primary_menu() and 
 secondary_menu().  secondary_menu().
Line 220  use vars qw(@desklines %category_names % Line 220  use vars qw(@desklines %category_names %
 my @inlineremote;  my @inlineremote;
   
 sub prep_menuitem {  sub prep_menuitem {
     my ($menuitem,$ltitarget,$listclass,$linkattr) = @_;      my ($menuitem,$ltitarget,$deeplinktarget,$listclass,$linkattr) = @_;
     return '' unless(ref($menuitem) eq 'ARRAY');      return '' unless(ref($menuitem) eq 'ARRAY');
     my $link;      my $link;
     if ($$menuitem[1]) { # graphical Link      if ($$menuitem[1]) { # graphical Link
Line 233  sub prep_menuitem { Line 233  sub prep_menuitem {
     my $target = ' target="_top"';      my $target = ' target="_top"';
     if ($ltitarget eq 'iframe') {      if ($ltitarget eq 'iframe') {
         $target ='';          $target ='';
       } elsif ($deeplinktarget eq '_self') {
           $target = ' target="'.$deeplinktarget.'"';
     }      }
     return ($listclass?'<li class="'.$listclass.'">':'<li>').'<a'      return ($listclass?'<li class="'.$listclass.'">':'<li>').'<a'
            # highlighting for new messages             # highlighting for new messages
Line 265  sub primary_menu { Line 267  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 ($lti,$ltitarget);      my ($lti,$ltitarget,$deeplinktarget);
     if ($env{'request.lti.login'}) {      if ($env{'request.lti.login'}) {
         $lti = 1;          $lti = 1;
         $ltitarget = $env{'request.lti.target'};          $ltitarget = $env{'request.lti.target'};
Line 277  sub primary_menu { Line 279  sub primary_menu {
             }              }
         }          }
     }      }
       if ($env{'request.deeplink.login'}) {
           $deeplinktarget = $env{'request.deeplink.target'};
       }
     if (($menucoll) && (ref($menuref) eq 'HASH')) {      if (($menucoll) && (ref($menuref) eq 'HASH')) {
         %menuopts = %{$menuref};          %menuopts = %{$menuref};
     }      }
Line 341  sub primary_menu { Line 346  sub primary_menu {
             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') || ($deeplinktarget eq '_self')) {
                     $target = '_top';                      $target = '_top';
                 }                  }
             } else {              } else {
Line 391  sub primary_menu { Line 396  sub primary_menu {
                                                                   'helpdeskmail',                                                                    'helpdeskmail',
                                                                   $defdom,$origmail);                                                                    $defdom,$origmail);
                 if ($to ne '') {                  if ($to ne '') {
                     $menu{$position} .= &prep_menuitem($menuitem,$ltitarget,$listclass,$linkattr);                       $menu{$position} .= &prep_menuitem($menuitem,$ltitarget,$deeplinktarget,$listclass,$linkattr); 
                 }                  }
             } else {              } else {
                 $menu{$position} .= ($listclass?'<li class="'.$listclass.'">':'<li>').                  $menu{$position} .= ($listclass?'<li class="'.$listclass.'">':'<li>').
Line 404  sub primary_menu { Line 409  sub primary_menu {
                     $$menuitem[0] = '/adm/login';                      $$menuitem[0] = '/adm/login';
                 }                  }
             }              }
             $menu{$position} .= prep_menuitem($menuitem,$ltitarget,$listclass,$linkattr);              $menu{$position} .= prep_menuitem($menuitem,$ltitarget,$deeplinktarget,$listclass,$linkattr);
         } else {          } else {
             $menu{$position} .= prep_menuitem($menuitem,$ltitarget,$listclass,$linkattr);              $menu{$position} .= prep_menuitem($menuitem,$ltitarget,$deeplinktarget,$listclass,$linkattr);
         }          }
     }      }
     my @output = ('','');      my @output = ('','');
Line 537  sub secondary_menu { Line 542  sub secondary_menu {
         }          }
     }      }
   
     my ($roleswitcher_js,$roleswitcher_form,$ltitarget);      my ($roleswitcher_js,$roleswitcher_form,$ltitarget,$deeplinktarget);
     if ($env{'request.lti.login'}) {      if ($env{'request.lti.login'}) {
         $ltitarget = $env{'request.lti.target'};          $ltitarget = $env{'request.lti.target'};
     }      }
       if ($env{'request.deeplink.login'}) {
           $deeplinktarget = $env{'request.deeplink.target'};
       }
   
     foreach my $menuitem (@secondary_menu) {      foreach my $menuitem (@secondary_menu) {
         # evaluate conditions           # evaluate conditions 
Line 598  sub secondary_menu { Line 606  sub secondary_menu {
             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') || ($deeplinktarget eq '_self')) {
                     $target = '_top';                      $target = '_top';
                 }                  }
             } else {              } else {
Line 649  sub secondary_menu { Line 657  sub secondary_menu {
                 &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,$menucoll,$menuref
                 );                  );
             if (($$menuitem[5]) && (!$menuopts{$$menuitem[5]})) {              if (($$menuitem[5]) && (!$menuopts{$$menuitem[5]})) {
                 next unless ($has_opa_priv);                  next unless ($has_opa_priv);
Line 683  sub secondary_menu { Line 691  sub secondary_menu {
                 }                  }
                 $$menuitem[0] = &HTML::Entities::encode($$menuitem[0],'&<>"');                  $$menuitem[0] = &HTML::Entities::encode($$menuitem[0],'&<>"');
             }              }
             $menu .= &prep_menuitem(\@$menuitem,$ltitarget,$listclass,$linkattr);              $menu .= &prep_menuitem(\@$menuitem,$ltitarget,$deeplinktarget,$listclass,$linkattr);
         }          }
     }      }
     if ($menu =~ /\[url\].*\[symb\]/) {      if ($menu =~ /\[url\].*\[symb\]/) {
Line 2235  sub utilityfunctions { Line 2243  sub utilityfunctions {
   
     my $countdown = &countdown_toggle_js();      my $countdown = &countdown_toggle_js();
   
     my $ltitarget;      my ($ltitarget,$deeplinktarget);
     if ($env{'request.lti.login'}) {      if ($env{'request.lti.login'}) {
         $ltitarget = $env{'request.lti.target'};          $ltitarget = $env{'request.lti.target'};
     }      }
       if ($env{'request.deeplink.login'}) {
           $deeplinktarget = $env{'request.deeplink.target'};
       }
   
     my $annotateurl = '/adm/annotation';      my $annotateurl = '/adm/annotation';
     if ($httphost) {      if ($httphost) {
Line 2357  function golist(url) { Line 2368  function golist(url) {
        currentSymb= null;         currentSymb= null;
        var lcHostname = setLCHost();         var lcHostname = setLCHost();
        var ltitarget = '$ltitarget';         var ltitarget = '$ltitarget';
        if (ltitarget == 'iframe') {         var deeplinktarget = '$deeplinktarget';
          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 2455  sub serverform { Line 2467  sub serverform {
     unless (($env{'request.lti.login'}) && ($env{'request.lti.target'} eq 'iframe')) {      unless (($env{'request.lti.login'}) && ($env{'request.lti.target'} eq 'iframe')) {
         $target = ' target="_top"';          $target = ' target="_top"';
     }      }
       if (($env{'request.deeplink.login'}) && ($env{'request.deeplink.target'} eq '_self')) {
           $target = ' target="_self"';
       }
     return(<<ENDSERVERFORM);      return(<<ENDSERVERFORM);
 <form name="server" action="/adm/logout" method="post"$target>  <form name="server" action="/adm/logout" method="post"$target>
 <input type="hidden" name="postdata" value="none" />  <input type="hidden" name="postdata" value="none" />
Line 2466  ENDSERVERFORM Line 2481  ENDSERVERFORM
 }  }
   
 sub constspaceform {  sub constspaceform {
       my ($frameset) = @_;
     my ($target,$printtarget);      my ($target,$printtarget);
     unless (($env{'request.lti.login'}) && ($env{'request.lti.target'} eq 'iframe')) {      if ($frameset) {
         $target = ' target="_top"';          $target = ' target="_parent"';
         $printtarget = ' target="_parent"';          $printtarget = ' target="_parent"';
       } else {
           unless ((($env{'request.lti.login'}) && ($env{'request.lti.target'} eq 'iframe')) ||
                   (($env{'request.deeplink.login'}) && ($env{'request.deeplink.target'} eq '_self'))) {
               $target = ' target="_top"';
               $printtarget = ' target="_parent"';
           }
     }      }
     return(<<ENDCONSTSPACEFORM);      return(<<ENDCONSTSPACEFORM);
 <form name="constspace" action="/adm/logout" method="post"$target>  <form name="constspace" action="/adm/logout" method="post"$target>
Line 2504  sub hidden_button_check { Line 2526  sub hidden_button_check {
 }  }
   
 sub roles_selector {  sub roles_selector {
     my ($cdom,$cnum,$httphost,$ltitarget) = @_;      my ($cdom,$cnum,$httphost,$menucoll,$menuref) = @_;
     my $crstype = &Apache::loncommon::course_type();      my $crstype = &Apache::loncommon::course_type();
     my $now = time;      my $now = time;
     my (%courseroles,%seccount,%courseprivs,%roledesc);      my (%courseroles,%seccount,%courseprivs,%roledesc);
Line 2611  sub roles_selector { Line 2633  sub roles_selector {
     }      }
     if ((keys(%seccount) > 1) || ($numdiffsec > 1)) {      if ((keys(%seccount) > 1) || ($numdiffsec > 1)) {
         my @submenu;          my @submenu;
         $js = &jump_to_role($cdom,$cnum,\%seccount,\%courseroles,\%courseprivs,\%roledesc,$privref);          $js = &jump_to_role($cdom,$cnum,\%seccount,\%courseroles,\%courseprivs,
                               \%roledesc,$privref,$menucoll,$menuref);
         $form =           $form = 
             '<form name="rolechooser" method="post" action="'.$httphost.'/adm/roles">'."\n".              '<form name="rolechooser" method="post" action="'.$httphost.'/adm/roles">'."\n".
             '  <input type="hidden" name="destinationurl" value="'.              '  <input type="hidden" name="destinationurl" value="'.
Line 2676  sub roles_selector { Line 2699  sub roles_selector {
             }              }
         }          }
         if (@submenu > 0) {          if (@submenu > 0) {
             $switcher = &create_submenu('','',&mt('Switch role'),\@submenu,'','',$ltitarget);              $switcher = &create_submenu('','',&mt('Switch role'),\@submenu);
         }          }
     }      }
     return ($js,$form,$switcher,$has_opa_priv);      return ($js,$form,$switcher,$has_opa_priv);
Line 2846  sub get_customadhoc_roles { Line 2869  sub get_customadhoc_roles {
 }  }
   
 sub jump_to_role {  sub jump_to_role {
     my ($cdom,$cnum,$seccount,$courseroles,$courseprivs,$roledesc,$privref) = @_;      my ($cdom,$cnum,$seccount,$courseroles,$courseprivs,$roledesc,$privref,
           $menucoll,$menuref) = @_;
     my %lt = &Apache::lonlocal::texthash(      my %lt = &Apache::lonlocal::texthash(
                 this => 'This role has section(s) associated with it.',                  this => 'This role has section(s) associated with it.',
                 ente => 'Enter a specific section.',                  ente => 'Enter a specific section.',
Line 2857  sub jump_to_role { Line 2881  sub jump_to_role {
                 role => 'The role you selected is not permitted to view the current page.',                  role => 'The role you selected is not permitted to view the current page.',
                 swit => 'Switch role, but display Main Menu page instead?',                  swit => 'Switch role, but display Main Menu page instead?',
     );      );
       &js_escape(\%lt);
     my $js;      my $js;
     if (ref($courseroles) eq 'HASH') {      if (ref($courseroles) eq 'HASH') {
         $js = '    var secpick = new Array("'.$lt{'ente'}.'","'.$lt{'orlb'}.'");'."\n".           $js = '    var secpick = new Array("'.$lt{'ente'}.'","'.$lt{'orlb'}.'");'."\n". 
Line 2879  sub jump_to_role { Line 2904  sub jump_to_role {
         }          }
     }      }
     my $checkroles = 0;      my $checkroles = 0;
       my $fallback = '/adm/menu';
       my $displaymsg = $lt{'swit'};
     if ((ref($privref) eq 'ARRAY') && (@{$privref} > 0) && (ref($courseprivs) eq 'HASH')) {      if ((ref($privref) eq 'ARRAY') && (@{$privref} > 0) && (ref($courseprivs) eq 'HASH')) {
         my %disallowed;          my %disallowed;
         foreach my $role (sort(keys(%{$courseprivs}))) {          foreach my $role (sort(keys(%{$courseprivs}))) {
Line 2900  sub jump_to_role { Line 2927  sub jump_to_role {
             $checkroles = 1;              $checkroles = 1;
             $js .= "    var disallow = new Array('".join("','",keys(%disallowed))."');\n".              $js .= "    var disallow = new Array('".join("','",keys(%disallowed))."');\n".
                    "    var rolecheck = 1;\n";                     "    var rolecheck = 1;\n";
               if ($menucoll) {
                   if (ref($menuref) eq 'HASH') {
                       if ($menuref->{'main'} eq 'n') {
                           $fallback = '/adm/navmaps';
                           if (&Apache::loncommon::course_type() eq 'Community') {
                               $displaymsg = &mt('Switch role, but display Community Contents page instead?');
                           } else {
                               $displaymsg = &mt('Switch role, but display Course Contents page instead?');
                           }
                           &js_escape(\$displaymsg);
                       }
                   }
               }
         }          }
     }      }
       &js_escape(\$fallback);
     if (!$checkroles) {      if (!$checkroles) {
         $js .=  "    var disallow = new Array();\n".          $js .=  "    var disallow = new Array();\n".
                 "    rolecheck = 0;\n";                  "    rolecheck = 0;\n";
Line 2924  function adhocRole(newrole) { Line 2965  function adhocRole(newrole) {
     if (rolecheck > 0) {      if (rolecheck > 0) {
         for (var i=0; i<disallow.length; i++) {          for (var i=0; i<disallow.length; i++) {
             if (disallow[i] == newrole) {              if (disallow[i] == newrole) {
                 if (confirm("$lt{'role'}\\n$lt{'swit'}")) {                  if (confirm("$lt{'role'}\\n$displaymsg")) {
                     document.rolechooser.destinationurl.value = '/adm/menu';                      document.rolechooser.destinationurl.value = '$fallback';
                 } else {                  } else {
                     return;                      return;
                 }                  }

Removed from v.1.515  
changed lines
  Added in v.1.519


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