Diff for /loncom/interface/lonmenu.pm between versions 1.277 and 1.283

version 1.277, 2009/08/05 11:01:38 version 1.283, 2009/10/04 17:47:21
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 .= Apache::loncommon::top_nav_help('Help');
           } else {
               $menu .= prep_menuitem(\@$menuitem);
           }
        }
   
        return "<ol class=\"LC_smallMenu 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_TabMainMenuContent\">$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 617  if(length($annotation) > 0){ Line 740  if(length($annotation) > 0){
 $menuitems.="&anno-[_1]&tations[_1]&annotate()&";  $menuitems.="&anno-[_1]&tations[_1]&annotate()&";
 $menuitems.="Make notes and annotations about this resource&&1\n";  $menuitems.="Make notes and annotations about this resource&&1\n";
   
               unless ($noremote) { 
                   my $showreqcrs = &check_for_rcrs();
                   if ($showreqcrs) {
                       $menuitems.="s&8&1&rcrs.gif&request[_1]&course[_16]".
                                   "&go('/adm/requestcourse')&Course requests\n";
                   }
               }
             unless ($env{'request.noversionuri'}=~/\/(bulletinboard|smppg|navmaps|syllabus|aboutme)(\?|$)/) {              unless ($env{'request.noversionuri'}=~/\/(bulletinboard|smppg|navmaps|syllabus|aboutme)(\?|$)/) {
  if (!$env{'request.enc'}) {   if (!$env{'request.enc'}) {
     $menuitems.=(<<ENDREALRES);      $menuitems.=(<<ENDREALRES);
Line 1271  sub rawconfig { Line 1401  sub rawconfig {
                     $output.=&clear($row,$col);                      $output.=&clear($row,$col);
                     next;                      next;
                 }                  }
             } elsif ($prt eq 'reqcrs') {              } elsif (($prt eq 'reqcrsnsc') || ($prt eq 'reqcrsshc')) {
                 my $showreqcrs = 0;                  if (($prt eq 'reqcrsnsc') && ($show_course))   {
                 foreach my $type ('official','unofficial') {                      next;
                     if (&Apache::lonnet::usertools_access($env{'user.name'},                  }
                                                     $env{'user.domain'},                  if (($prt eq 'reqcrsshc') && (!$show_course)) {
                                                     $type,undef,'requestcourses')) {                      next;
                         $showreqcrs = 1;  
                         last;  
                     }  
                 }                  }
                   my $showreqcrs = &check_for_rcrs();
                 if (!$showreqcrs) {                  if (!$showreqcrs) {
                     $output.=&clear($row,$col);                      $output.=&clear($row,$col);
                     next;                      next;
Line 1301  sub rawconfig { Line 1429  sub rawconfig {
     return $output;      return $output;
 }  }
   
   sub check_for_rcrs {
       my $showreqcrs = 0;
       my @reqtypes = ('official','unofficial','community');
       foreach my $type (@reqtypes) {
           if (&Apache::lonnet::usertools_access($env{'user.name'},
                                                 $env{'user.domain'},
                                                 $type,undef,'requestcourses')) {
               $showreqcrs = 1;
               last;
           }
       }
       if (!$showreqcrs) {
           foreach my $type (@reqtypes) {
               if ($env{'environment.reqcrsotherdom.'.$type} ne '') {
                   $showreqcrs = 1;
                   last;
               }
           }
       }
       return $showreqcrs;
   }
   
 # ======================================================================= Close  # ======================================================================= Close
   
 sub close {  sub close {
Line 1661  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 1839  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.277  
changed lines
  Added in v.1.283


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