Diff for /loncom/interface/lonmenu.pm between versions 1.279 and 1.285

version 1.279, 2009/08/12 18:38:04 version 1.285, 2009/10/13 13:18:25
Line 137  use Apache::loncommon(); Line 137  use Apache::loncommon();
 use Apache::lonenc();  use Apache::lonenc();
 use Apache::lonlocal;  use Apache::lonlocal;
 use LONCAPA qw(:DEFAULT :match);  use LONCAPA qw(:DEFAULT :match);
   use HTML::Entities();
   
 use vars qw(@desklines %category_names %category_members %category_positions $readdesk);  use vars qw(@desklines %category_names %category_members %category_positions 
               $readdesk @primary_menu @secondary_menu);
   
   
 my @inlineremote;  my @inlineremote;
   
   sub prep_menuitem {
       my $menuitem = shift;
       return '' unless ref $menuitem eq 'ARRAY';
       my $link;
       if ($$menuitem[1]) { # graphical Link
           $link = "<img class=\"LC_noBorder\""
                 . " src=\"" . Apache::loncommon::lonhttpdurl($$menuitem[1]) . "\""
                 . " alt=\"" . mt($$menuitem[2]) . "\" />";
       } else {             # textual Link
           $link = mt($$menuitem[3]);
       }     
       return "<li><a href=\"javascript:$$menuitem[0]\">$link</a></li>";
   }
   
   # primary_menu() evaluates @primary_menu and returns XHTML for the menu
   # that contains following links:
   # About, Message, Roles, Help, Logout
   # @primary_menu is filled within the BEGIN block of this module with 
   # entries from mydesk.tab
   sub primary_menu {
       my $menu;
       # each element of @primary contains following array:
       # (link url, icon path, alt text, link text, condition)
       foreach my $menuitem (@primary_menu) {
           # evaluate conditions 
           next if    $$menuitem[4]        eq 'nonewmsg'  # show links depending on
                   && Apache::lonmsg::mynewmail();        # whether a new msg 
           next if    $$menuitem[4]        eq 'newmsg'    # arrived or not
                   && !Apache::lonmsg::mynewmail();       # 
           next if    $$menuitem[4]        !~ /public/    ##we've a public user, 
                   && $env{'user.name'}    eq 'public'    ##who should not see all 
                   && $env{'user.domain'}  eq 'public';   ##links
           next if    $$menuitem[4]        eq 'onlypublic'# hide links which are 
                   && $env{'user.name'}    ne 'public'    # only visible to public
                   && $env{'user.domain'}  ne 'public';   # users
           next if    $$menuitem[4]        eq 'roles'     ##show links depending on
                   && Apache::loncommon::show_course();   ##term 'Courses' or 
           next if    $$menuitem[4]        eq 'courses'   ##'Roles' wanted
                   && !Apache::loncommon::show_course();  ##
   
   
           if ($$menuitem[3] eq 'Help') { # special treatment for helplink
               $menu .= '<li>'.Apache::loncommon::top_nav_help('Help').'</li>';
           } else {
               $menu .= prep_menuitem(\@$menuitem);
           }
        }
   
        return "<ol class=\"LC_primary_menu LC_right\">$menu</ol>";
   }
   
   
   sub secondary_menu {
       my $menu;
   
       foreach my $menuitem (@secondary_menu) {
           # evaluate conditions 
           next if    $$menuitem[4]   ne 'always'
                   && !$env{'request.course.id'};
           next if    $$menuitem[4]   eq 'showreturn'
                   && !show_return_link() 
                   && !($env{'request.state'} eq 'construct');
           next if    $$menuitem[4]   =~ /^mdc/
                   && !Apache::lonnet::allowed('mdc', $env{'request.course.id'});
           next if    $$menuitem[4]   =~ /nogrp$/
                   && Apache::loncommon::course_type() eq 'Group';
           next if    $$menuitem[4]   =~ /group$/
                   && Apache::loncommon::course_type() ne 'Group';
           next if    $$menuitem[4]   eq 'remotenav'
                   && $env{'environment.remotenavmap'} ne 'on';
           next if    $$menuitem[4]   eq 'noremotenav'
                   && $env{'environment.remotenavmap'} eq 'on';
           next if    $$menuitem[4]   =~ /showgroups$/
                   && !Apache::lonnet::allowed('vcg', $env{'request.course.id'}
                      . ($env{'request.course.sec'} ? "/$env{'request.course.sec'}"
                                                    : ''))
                   && !Apache::lonnet::get_active_groups(
                      $env{'user.domain'}, $env{'user.name'},
                      $env{'course.' . $env{'request.course.id'} . '.domain'},
                      $env{'course.' . $env{'request.course.id'} . '.num'});
   
   
           if($$menuitem[3] eq 'Roles' && $env{'request.course.id'}) { 
               # special treatment for role selector
               my $roles_selector = roles_selector(
                           $env{'course.' . $env{'request.course.id'} . '.domain'},
                           $env{'course.' . $env{'request.course.id'} . '.num'}  );
   
               $menu .= $roles_selector ? "<li>$roles_selector</li>"
                                        : '';
           } else {
               $menu .= prep_menuitem(\@$menuitem);
           }
       }
       if ($menu =~ /\[url\].*\[symb\]/) {
           my $escurl  = escape( Apache::lonenc::check_encrypt(
                               $env{'request.noversionuri'}));
   
           my $escsymb = escape( Apache::lonenc::check_encrypt(
                               $env{'request.symb'})); 
   
           if (    $env{'request.state'} eq 'construct'
               and (   $env{'request.noversionuri'} eq '' 
                    || !defined($env{'request.noversionuri'}))) 
           {
               ($escurl = $env{'request.filename'}) =~ 
                   s{^/home/([^/]+)/public_html/(.*)$}{/priv/$1/$2};
   
               $escurl  = escape($escurl);
           }    
           $menu =~ s/\[url\]/$escurl/g;
           $menu =~ s/\[symb\]/$escsymb/g;
       }
   
       return "<ul id=\"LC_secondary_menu\">$menu</ul>";
   }
   
   
 #  #
 # This routine returns a translated hash for the menu items in the top inline menu row  # This routine returns a translated hash for the menu items in the top inline menu row
 # Probably should be in mydesk.tab  # Probably should be in mydesk.tab
   
   #SD this sub is deprecated - don't use it
 sub initlittle {  sub initlittle {
     return &Apache::lonlocal::texthash('ret' => 'Return to Last Location',      return &Apache::lonlocal::texthash('ret' => 'Return to Last Location',
        'nav' => 'Navigate Contents',         'nav' => 'Course Contents',
        'main' => 'Main Menu',         'main' => 'Main Menu',
                                        'roles' => (&Apache::loncommon::show_course()?                                         'roles' => (&Apache::loncommon::show_course()?
                                                     'Courses':'Roles'),                                                      'Courses':'Roles'),
Line 163  sub initlittle { Line 284  sub initlittle {
                                        );                                         );
 }  }
   
   #SD this sub is deprecated - don't use it
   #SD functionality is covered by new loncommon::bodytag and primary_menu(), secondary_menu()
 sub menubuttons {  sub menubuttons {
     my $forcereg=shift;      my $forcereg=shift;
     my $titletable=shift;      my $titletable=shift;
Line 240  sub menubuttons { Line 363  sub menubuttons {
   
         if ($env{'user.name'} eq 'public' && $env{'user.domain'} eq 'public') {          if ($env{'user.name'} eq 'public' && $env{'user.domain'} eq 'public') {
             return (<<ENDINLINEMENU);              return (<<ENDINLINEMENU);
             <ol class="LC_smallMenu LC_right">              <ol class="LC_primary_menu LC_right">
                 <li>$logo</li>                  <li>$logo</li>
                 <li><a href="/adm/roles" target="_top">$lt{'login'}</a></li>                  <li><a href="/adm/roles" target="_top">$lt{'login'}</a></li>
             </ol>              </ol>
Line 304  ENDCRELOAD Line 427  ENDCRELOAD
 $utility  $utility
 // ]]>  // ]]>
 </script>  </script>
 <ol class="LC_smallMenu LC_right">  <ol class="LC_primary_menu LC_right">
  <li>$logo</li>   <li>$logo</li>
  <li>$messagelink</li>   <li>$messagelink</li>
  <li>$roles</li>   <li>$roles</li>
  <li>$helplink</li>   <li>$helplink</li>
  <li><a href="/adm/logout" target="_top">$lt{'exit'}</a></li>   <li><a href="/adm/logout" target="_top">$lt{'exit'}</a></li>
 </ol>  </ol>
 <ul id="LC_TabMainMenuContent">  <ul id="LC_secondary_menu">
 <li><a href="/adm/menu" target="_top">$lt{'main'}</a></li>  <li><a href="/adm/menu" target="_top">$lt{'main'}</a></li>
 $reloadlink  $reloadlink
 $navmaps  $navmaps
Line 1308  sub rawconfig { Line 1431  sub rawconfig {
   
 sub check_for_rcrs {  sub check_for_rcrs {
     my $showreqcrs = 0;      my $showreqcrs = 0;
     foreach my $type ('official','unofficial','community') {      my @reqtypes = ('official','unofficial','community');
       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'},
                                               $type,undef,'requestcourses')) {                                                $type,undef,'requestcourses')) {
Line 1316  sub check_for_rcrs { Line 1440  sub check_for_rcrs {
             last;              last;
         }          }
     }      }
       if (!$showreqcrs) {
           foreach my $type (@reqtypes) {
               if ($env{'environment.reqcrsotherdom.'.$type} ne '') {
                   $showreqcrs = 1;
                   last;
               }
           }
       }
     return $showreqcrs;      return $showreqcrs;
 }  }
   
Line 1679  sub roles_selector { Line 1811  sub roles_selector {
         }          }
         $role_selector .= '</select>'."\n".          $role_selector .= '</select>'."\n".
                '<input type="hidden" name="destinationurl" value="'.                 '<input type="hidden" name="destinationurl" value="'.
                $ENV{'REQUEST_URI'}.'" />'."\n".                 &HTML::Entities::encode($ENV{'REQUEST_URI'}).'" />'."\n".
                '<input type="hidden" name="gotorole" value="1" />'."\n".                 '<input type="hidden" name="gotorole" value="1" />'."\n".
                '<input type="hidden" name="selectrole" value="" />'."\n".                 '<input type="hidden" name="selectrole" value="" />'."\n".
                '<input type="hidden" name="switch" value="1" />'."\n".                 '<input type="hidden" name="switch" value="1" />'."\n".
Line 1857  END Line 1989  END
   
 BEGIN {  BEGIN {
     if (! defined($readdesk)) {      if (! defined($readdesk)) {
  {          {
     my $tabfile = $Apache::lonnet::perlvar{'lonTabDir'}.'/mydesk.tab';              my $tabfile = $Apache::lonnet::perlvar{'lonTabDir'}.'/mydesk.tab';
     if ( CORE::open( my $config,"<$tabfile") ) {              if ( CORE::open( my $config,"<$tabfile") ) {
  while (my $configline=<$config>) {                  while (my $configline=<$config>) {
     $configline=(split(/\#/,$configline))[0];                      $configline=(split(/\#/,$configline))[0];
     $configline=~s/^\s+//;                      $configline=~s/^\s+//;
     chomp($configline);                      chomp($configline);
                     if ($configline=~/^cat\:/) {                      if ($configline=~/^cat\:/) {
                        my @entries=split(/\:/,$configline);                          my @entries=split(/\:/,$configline);
                        $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) {                      } elsif ($configline=~/^prim\:/) {
  push(@desklines,$configline);                          my @entries = (split(/\:/, $configline))[1..5];
     }                          push @primary_menu, \@entries;
  }                      } elsif ($configline=~/^scnd\:/) {
  CORE::close($config);                          my @entries = (split(/\:/, $configline))[1..5];
     }                          push @secondary_menu, \@entries; 
  }                      } elsif ($configline) {
  $readdesk='done';                          push(@desklines,$configline);
                       }
                   }
                   CORE::close($config);
               }
           }
           $readdesk='done';
     }      }
 }  }
   
 1;  1;
 __END__  __END__
   
   
   
   
   
   
   

Removed from v.1.279  
changed lines
  Added in v.1.285


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