Diff for /loncom/interface/lonmenu.pm between versions 1.506 and 1.507

version 1.506, 2021/04/29 17:45:22 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'});
                     }                      }
Line 581  sub secondary_menu { Line 600  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
             ($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 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];

Removed from v.1.506  
changed lines
  Added in v.1.507


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