Diff for /loncom/interface/lonmenu.pm between versions 1.441 and 1.447

version 1.441, 2016/03/16 13:54:06 version 1.447, 2016/05/04 05:54:51
Line 124  dropdown list when mouse hovers over top Line 124  dropdown list when mouse hovers over top
 (no hover psuedo class) via LC_hoverable class for <li> tag for top-  (no hover psuedo class) via LC_hoverable class for <li> tag for top-
 level item, which employs jQuery to handle behavior on mouseover.  level item, which employs jQuery to handle behavior on mouseover.
   
 Inputs: 4 - (a) link and (b) target for anchor href in top level item,  Inputs: 6 - (a) link and (b) target for anchor href in top level item,
             (c) title for text wrapped by anchor tag in top level item.              (c) title for text wrapped by anchor tag in top level item,
             (d) reference to array of arrays of sub-menu items.              (d) reference to array of arrays of sub-menu items,
               (e) boolean to indicate whether to call &mt() to translate 
                   name of menu item,
               (f) optional class for <li> element in primary menu, for which
                   sub menu is being generated.
   
  The underlying datastructure used in (d) contains data from mydesk.tab.   The underlying datastructure used in (d) contains data from mydesk.tab.
  It consists of an array which has an array for each item appearing in   It consists of an array which has an array for each item appearing in
Line 238  sub prep_menuitem { Line 242  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 (%menu);      my (%menu);
     # 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)
Line 246  sub primary_menu { Line 251  sub primary_menu {
         || (($env{'user.name'} eq '') && ($env{'user.domain'} eq ''))) {          || (($env{'user.name'} eq '') && ($env{'user.domain'} eq ''))) {
         $public = 1;          $public = 1;
     }      }
       my $rolecount;
       if (($crstype eq 'Placement') && (!$env{'request.role.adv'})) {
           my $update=$env{'user.update.time'};
           if (!$update) {
               $update = $env{'user.login.time'};
           }
           my %roles_in_env;
           $rolecount = &Apache::lonroles::roles_from_env(\%roles_in_env,$update);
       }
     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 263  sub primary_menu { Line 277  sub primary_menu {
                 && &Apache::loncommon::show_course();  ##term 'Courses' or                   && &Apache::loncommon::show_course();  ##term 'Courses' or 
         next if    $$menuitem[4]        eq 'courses'   ##'Roles' wanted          next if    $$menuitem[4]        eq 'courses'   ##'Roles' wanted
                 && !&Apache::loncommon::show_course(); ##                  && !&Apache::loncommon::show_course(); ##
           
         my $title = $menuitem->[3];          my $title = $menuitem->[3];
           if (($crstype eq 'Placement') && (!$env{'request.role.adv'})) {
               if ($menuitem->[4] eq 'courses') {
                   next unless ($rolecount>1);
               } else {
                   next unless (($title eq 'Personal') || ($title eq 'Logout'));
               }
           }
         my $position = $menuitem->[5];          my $position = $menuitem->[5];
         if ($position eq '') {          if ($position eq '') {
             $position = 'right';              $position = 'right';
Line 280  sub primary_menu { Line 300  sub primary_menu {
             my @primsub;              my @primsub;
             if (ref($primary_submenu{$title}) eq 'ARRAY') {              if (ref($primary_submenu{$title}) eq 'ARRAY') {
                 foreach my $item (@{$primary_submenu{$title}}) {                  foreach my $item (@{$primary_submenu{$title}}) {
                       next if (($crstype eq 'Placement') && (!$env{'request.role.adv'}));
                     next if (($item->[2] eq 'wishlist') && (!$env{'user.adv'}));                      next if (($item->[2] eq 'wishlist') && (!$env{'user.adv'}));
                     next if ((($item->[2] eq 'portfolio') ||                      next if ((($item->[2] eq 'portfolio') ||
                              ($item->[2] eq 'blog')) &&                               ($item->[2] eq 'blog')) &&
Line 287  sub primary_menu { Line 308  sub primary_menu {
                                                            undef,'tools')));                                                             undef,'tools')));
                     push(@primsub,$item);                      push(@primsub,$item);
                 }                  }
                   if ($title eq 'Personal' && $env{'user.name'} && $env{'user.domain'} ) {
                       $title = &Apache::loncommon::plainname($env{'user.name'},$env{'user.domain'});
                   } else {
                       $title = &mt($title);
                   }
                 if (@primsub > 0) {                  if (@primsub > 0) {
                     if ($title eq 'Personal' && $env{'user.name'} && $env{'user.domain'} ) {  
                         $title = &Apache::loncommon::plainname($env{'user.name'},$env{'user.domain'});  
                     } else {  
                         $title = &mt($title);  
                     }  
                     $menu{$position} .= &create_submenu($link,$target,$title,\@primsub,1);                      $menu{$position} .= &create_submenu($link,$target,$title,\@primsub,1);
                 } elsif ($link) {                  } elsif ($link) {
                     $menu{$position} .= '<li><a href="'.$link.'" target="'.$target.'">'.&mt($title).'</a></li>';                      $menu{$position} .= '<li><a href="'.$link.'" target="'.$target.'">'.$title.'</a></li>';
                 }                  }
             }              }
         } elsif ($$menuitem[3] eq 'Help') { # special treatment for helplink          } elsif ($$menuitem[3] eq 'Help') { # special treatment for helplink
               next if ($crstype eq 'Placement'); 
             if ($public) {              if ($public) {
                 my $origmail = $Apache::lonnet::perlvar{'lonSupportEMail'};                  my $origmail = $Apache::lonnet::perlvar{'lonSupportEMail'};
                 my $defdom = &Apache::lonnet::default_login_domain();                  my $defdom = &Apache::lonnet::default_login_domain();
Line 424  sub secondary_menu { Line 446  sub secondary_menu {
     foreach my $menuitem (@secondary_menu) {      foreach my $menuitem (@secondary_menu) {
         # evaluate conditions           # evaluate conditions 
         next if    ref($menuitem)  ne 'ARRAY';          next if    ref($menuitem)  ne 'ARRAY';
           next if (($crstype eq 'Placement') && ($$menuitem[3] ne 'Roles') && (!$env{'request.role.adv'}));
         next if    $$menuitem[4]   ne 'always'          next if    $$menuitem[4]   ne 'always'
                 && ($$menuitem[4]   ne 'author' && $$menuitem[4] ne 'cca')                  && ($$menuitem[4]   ne 'author' && $$menuitem[4] ne 'cca')
                 && !$env{'request.course.id'};                  && !$env{'request.course.id'};
Line 515  sub secondary_menu { Line 538  sub secondary_menu {
 }  }
   
 sub create_submenu {  sub create_submenu {
     my ($link,$target,$title,$submenu,$translate) = @_;      my ($link,$target,$title,$submenu,$translate,$addclass) = @_;
     return unless (ref($submenu) eq 'ARRAY');      return unless (ref($submenu) eq 'ARRAY');
     my $disptarget;      my $disptarget;
     if ($target ne '') {      if ($target ne '') {
         $disptarget = ' target="'.$target.'"';          $disptarget = ' target="'.$target.'"';
     }      }
     my $menu = '<li class="LC_hoverable">'.      my $menu = '<li class="LC_hoverable '.$addclass.'">'.
                '<a href="'.$link.'"'.$disptarget.'>'.                 '<a href="'.$link.'"'.$disptarget.'>'.
                '<span class="LC_nobreak">'.$title.                 '<span class="LC_nobreak">'.$title.
                '<span class="LC_fontsize_small" style="font-weight:normal;">'.                 '<span class="LC_fontsize_small" style="font-weight:normal;">'.
Line 541  sub create_submenu { Line 564  sub create_submenu {
 # see perldoc create_submenu documentation for further information  # see perldoc create_submenu documentation for further information
 sub build_submenu {  sub build_submenu {
     my ($target, $submenu, $translate, $first_level) = @_;       my ($target, $submenu, $translate, $first_level) = @_; 
     if (!defined(@{$submenu})) {      unless (@{$submenu}) {
         return '';          return '';
     }      }
   
Line 609  sub innerregister { Line 632  sub innerregister {
   
     undef(@inlineremote);      undef(@inlineremote);
   
     my ($mapurl,$resurl);      my ($mapurl,$resurl,$crstype);
   
     if ($env{'request.course.id'}) {      if ($env{'request.course.id'}) {
   #
   #course_type:  Course, Community, or Placement
   #
           $crstype = &Apache::loncommon::course_type();
         if ($env{'request.symb'}) {          if ($env{'request.symb'}) {
             ($mapurl, my $rid, $resurl) = &Apache::lonnet::decode_symb(&Apache::lonnet::symbread());              ($mapurl, my $rid, $resurl) = &Apache::lonnet::decode_symb(&Apache::lonnet::symbread());
             my $coursetitle = $env{'course.'.$env{'request.course.id'}.'.description'};              my $coursetitle = $env{'course.'.$env{'request.course.id'}.'.description'};
   
             my $maptitle = &Apache::lonnet::gettitle($mapurl);              my $maptitle = &Apache::lonnet::gettitle($mapurl);
             my $restitle = &Apache::lonnet::gettitle(&Apache::lonnet::symbread());              my $restitle = &Apache::lonnet::gettitle(&Apache::lonnet::symbread());
   
 #SD  
 #course_type only Course and Community?  
 #  
             my @crumbs;              my @crumbs;
             unless (($forcereg) &&              unless (($forcereg) &&
                     ($env{'request.noversionuri'} eq '/adm/navmaps') &&                      ($env{'request.noversionuri'} eq '/adm/navmaps') &&
                     ($mapurl eq $env{'course.'.$env{'request.course.id'}.'.url'})) {                      ($mapurl eq $env{'course.'.$env{'request.course.id'}.'.url'}) ||
                 @crumbs = ({text  => Apache::loncommon::course_type()                       (($crstype eq 'Placement') && (!$env{'request.role.adv'}))) {
                                     . ' Contents',                   @crumbs = ({text  => $crstype.' Contents', 
                             href  => "Javascript:gopost('/adm/navmaps','')"});                              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'}) { 
Line 635  sub innerregister { Line 658  sub innerregister {
                                no_mt => 1});                                 no_mt => 1});
             }              }
   
             push @crumbs, {text => $maptitle, no_mt => 1} if ($maptitle               unless (($crstype eq 'Placement') || (!$env{'request.role.adv'})) {
                                                        && $maptitle ne 'default.sequence'                   push @crumbs, {text => $maptitle, no_mt => 1} if ($maptitle 
                                                        && $maptitle ne $coursetitle);                                                             && $maptitle ne 'default.sequence' 
                                                              && $maptitle ne $coursetitle);
               }
   
             push @crumbs, {text => $restitle, no_mt => 1} if $restitle;               push @crumbs, {text => $restitle, no_mt => 1} if $restitle; 
             my @tools;              my @tools;
Line 655  sub innerregister { Line 680  sub innerregister {
         } else {          } else {
             $resurl = $env{'request.noversionuri'};              $resurl = $env{'request.noversionuri'};
             my $courseurl = &Apache::lonnet::courseid_to_courseurl($env{'request.course.id'});              my $courseurl = &Apache::lonnet::courseid_to_courseurl($env{'request.course.id'});
             my $crstype = &Apache::loncommon::course_type();  
             my $title = &mt('View Resource');              my $title = &mt('View Resource');
             if ($resurl =~ m{^\Q/uploaded$courseurl/supplemental/\E(default|\d+)/}) {              if ($resurl =~ m{^\Q/uploaded$courseurl/supplemental/\E(default|\d+)/}) {
                 &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['folderpath','title']);                  &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['folderpath','title']);
Line 817  ENDMENUITEMS Line 841  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=(<<ENDMENUITEMS);              $menuitems = "c&3&1";
 c&3&1              if (($crstype ne 'Placement') || ($env{'request.role.adv'})) {
                   $menuitems.="
 s&2&1&back.png&&&gopost('/adm/flip','back:'+currentURL)&Previous content resource&&1  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  s&2&3&forw.png&&&gopost('/adm/flip','forward:'+currentURL)&Next content resource&&3";
               } else {
   # Suppress display of backward arrow for Placement Tests
   # Suppress display of forward arrow for Placement Tests if this is the last resource.
                   my $showforw = 1;
                   if ($env{'request.symb'}) {
                       my $navmap = Apache::lonnavmaps::navmap->new();
                       if (ref($navmap)) {
                           if (&Apache::lonplacementtest::is_lastres($env{'request.symb'},$navmap)) {
                               $showforw = 0;
                           }
                       }
                   }
                   if ($showforw) {
                       $menuitems.="
   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&1
 c&8&2  c&8&2
Line 907  ENDMENUITEMS Line 951  ENDMENUITEMS
                 }                  }
             }              }
         }          }
           my $showprogress;
           if (($crstype eq 'Placement') && (!$env{'request.role.adv'})) {
               $showprogress = &placement_progress();
           }
   
    my $addremote=0;
    foreach (@inlineremote) { if ($_ ne '') { $addremote=1; last;} }
   
     my $addremote=0;  
     foreach (@inlineremote) { if ($_ ne '') { $addremote=1; last;} }  
     if ($addremote) {      if ($addremote) {
         my $countdown;          my $countdown;
         if ($env{'request.filename'} =~ /\.page$/) {          if ($env{'request.filename'} =~ /\.page$/) {
Line 929  ENDMENUITEMS Line 978  ENDMENUITEMS
             if ($countdown) {              if ($countdown) {
                 &Apache::lonhtmlcommon::add_breadcrumb_tool('tools',$countdown);                  &Apache::lonhtmlcommon::add_breadcrumb_tool('tools',$countdown);
             }              }
               if ($showprogress) {
                   &Apache::lonhtmlcommon::add_breadcrumb_tool('tools',$showprogress);
               }
         } else {          } else {
             my @tools = @inlineremote[93,91,81,82,83];              my @tools = @inlineremote[93,91,81,82,83];
             if ($countdown) {              if ($countdown) {
Line 947  ENDMENUITEMS Line 999  ENDMENUITEMS
             }              }
             &advtools_crumbs(@inlineremote);              &advtools_crumbs(@inlineremote);
         }          }
       } else {
           if ($showprogress) {
               &Apache::lonhtmlcommon::add_breadcrumb_tool('tools',$showprogress);
           }
     }      }
     my ($topic_help,$topic_help_text);      my ($topic_help,$topic_help_text);
     if ($is_const_dir == 2) {      if ($is_const_dir == 2) {
Line 1501  sub rawconfig { Line 1557  sub rawconfig {
   
 sub check_for_rcrs {  sub check_for_rcrs {
     my $showreqcrs = 0;      my $showreqcrs = 0;
     my @reqtypes = ('official','unofficial','community','textbook');      my @reqtypes = ('official','unofficial','community','textbook','placement');
     foreach my $type (@reqtypes) {      foreach my $type (@reqtypes) {
         if (&Apache::lonnet::usertools_access($env{'user.name'},          if (&Apache::lonnet::usertools_access($env{'user.name'},
                                               $env{'user.domain'},                                                $env{'user.domain'},
Line 1602  sub done_button_js { Line 1658  sub done_button_js {
         my @resources=();          my @resources=();
         if ($type eq 'map') {          if ($type eq 'map') {
             my ($mapurl,$rid,$resurl)=&Apache::lonnet::decode_symb($env{'request.symb'});              my ($mapurl,$rid,$resurl)=&Apache::lonnet::decode_symb($env{'request.symb'});
             @resources=$navmap->retrieveResources(undef,sub { $_[0]->is_problem() },1,0);              @resources=$navmap->retrieveResources($mapurl,sub { $_[0]->is_problem() });
         } else {          } else {
             my $res = $navmap->getBySymb($env{'request.symb'});              my $res = $navmap->getBySymb($env{'request.symb'});
             if (ref($res)) {              if (ref($res)) {
Line 2494  END Line 2550  END
     return;      return;
 }  }
   
   sub placement_progress {
       my ($totalpoints,$incomplete) = &Apache::lonplacementtest::check_completion(undef,undef,1);
       my $complete = 100 - $incomplete;
       return '<span class="LC_placement_prog">'.
              &mt('Test is [_1]% complete',$complete).'</span>';
   }
   
 # ================================================================ Main Program  # ================================================================ Main Program
   
 BEGIN {  BEGIN {

Removed from v.1.441  
changed lines
  Added in v.1.447


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