Diff for /loncom/interface/lonmenu.pm between versions 1.358 and 1.372

version 1.358, 2011/10/31 22:46:09 version 1.372, 2012/05/21 16:24:14
Line 26 Line 26
 # http://www.lon-capa.org/  # http://www.lon-capa.org/
 #  #
 #  #
 # There is one parameter controlling the action of this module:  
 #  
   
 =head1 NAME  =head1 NAME
   
Line 35  Apache::lonmenu Line 33  Apache::lonmenu
   
 =head1 SYNOPSIS  =head1 SYNOPSIS
   
 Coordinates the response to clicking an image.  Loads contents of /home/httpd/lonTabs/mydesk.tab, 
   used to generate inline menu, and Main Menu page. 
   
 This is part of the LearningOnline Network with CAPA project  This is part of the LearningOnline Network with CAPA project
 described at http://www.lon-capa.org.  described at http://www.lon-capa.org.
Line 74  It is set to 'done' in the BEGIN block o Line 73  It is set to 'done' in the BEGIN block o
 =item @primary_menu  =item @primary_menu
   
 The elements of this array reference arrays that are made up of the components  The elements of this array reference arrays that are made up of the components
 of those lines of mydesk.tab that start with prim.  of those lines of mydesk.tab that start with prim:.
 It is used by primary_menu() to generate the corresponding menu.  It is used by primary_menu() to generate the corresponding menu.
 It gets filled in the BEGIN block of this module.  It gets filled in the BEGIN block of this module.
   
   =item %primary_sub_menu
   
   The keys of this hash reference are the names of items in the primary_menu array 
   which have sub-menus.  For each key, the corresponding value is a reference to
   an array containing components extracted from lines in mydesk.tab which begin
   with primsub:.
   This hash, which is used by primary_menu to generate sub-menus, is populated in
   the BEGIN block.
   
 =item @secondary_menu  =item @secondary_menu
   
 The elements of this array reference arrays that are made up of the components  The elements of this array reference arrays that are made up of the components
Line 129  The javascript is usually similar to "go Line 137  The javascript is usually similar to "go
   
 =item utilityfunctions()  =item utilityfunctions()
   
   Output from this routine is a number of javascript functions called by
   items in the inline menu, and in some cases items in the Main Menu page. 
   
 =item serverform()  =item serverform()
   
 =item constspaceform()  =item constspaceform()
Line 153  use Apache::lonhtmlcommon(); Line 164  use Apache::lonhtmlcommon();
 use Apache::loncommon();  use Apache::loncommon();
 use Apache::lonenc();  use Apache::lonenc();
 use Apache::lonlocal;  use Apache::lonlocal;
   use Apache::lonmsg();
 use LONCAPA qw(:DEFAULT :match);  use LONCAPA qw(:DEFAULT :match);
 use HTML::Entities();  use HTML::Entities();
 use Apache::lonwishlist();  use Apache::lonwishlist();
   
 use vars qw(@desklines %category_names %category_members %category_positions   use vars qw(@desklines %category_names %category_members %category_positions 
             $readdesk @primary_menu @secondary_menu);              $readdesk @primary_menu %primary_submenu @secondary_menu);
   
 my @inlineremote;  my @inlineremote;
   
Line 181  sub prep_menuitem { Line 193  sub prep_menuitem {
   
 # primary_menu() evaluates @primary_menu and returns XHTML for the menu  # primary_menu() evaluates @primary_menu and returns XHTML for the menu
 # that contains following links:  # that contains following links:
 # About, Message, Roles, Help, Logout  # About, Message, Personal, Roles, Help, Logout
 # @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 {
Line 211  sub primary_menu { Line 223  sub primary_menu {
         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];
         if ($$menuitem[3] eq 'Help') { # special treatment for helplink          if (defined($primary_submenu{$title})) {
               my ($link,$target,$numsub);
               if ($menuitem->[0] ne '') {
                   $link = $menuitem->[0];
                   $target = '_top';
               } else {
                   $link = '#';
               }
               if (ref($primary_submenu{$title}) eq 'ARRAY') {
                   $numsub = @{$primary_submenu{$title}};
                   if ($numsub) {
                       $title =
                           '<span class="LC_nobreak">'.$title.
                           '<span class="LC_fontsize_small">'.
                           '&#9660;</span></span>';
                   }
               }
               $menu .= '<li class="LC_hoverable">'.
                        '<a href="'.$link.'" target="'.$target.'">'.$title.'</a>';
               if ($numsub) {
                   $menu .= '<ul>';
                   foreach my $item (@{$primary_submenu{$menuitem->[3]}}) {
                       if (ref($item) eq 'ARRAY') {
                           if ($item->[2] eq 'wishlist') {
                               next unless ((&Apache::lonnet::allowed('bre',"/res/$env{'user.domain'}/")) ||
                                            (&Apache::lonnet::allowed('bro',"/res/$env{'user.domain'}/")));
                           } elsif ($item->[2] eq 'reqcrs') {
                               next unless(&check_for_rcrs());
                           } elsif (($item->[2] eq 'portfolio') ||
                                    ($item->[2] eq 'blog')) {
                               if (!&Apache::lonnet::usertools_access(
                                       $env{'user.name'},
                                       $env{'user.domain'},
                                       $item->[2],undef,'tools')) {
                                   next;
                               }
                           }
                           $menu .= '<li style="margin:0;padding:0">'.
                                    '<a href="'.$item->[0].
                                    '" style="padding:0 0 0 10px">'.
                                    $item->[1].'</a></li>';
                       }
                   }
                   $menu .= '</ul>';
               }
               $menu .= '</li>';
           } elsif ($$menuitem[3] eq 'Help') { # special treatment for helplink
             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 334  sub secondary_menu { Line 392  sub secondary_menu {
             and (   $env{'request.noversionuri'} eq ''               and (   $env{'request.noversionuri'} eq '' 
                  || !defined($env{'request.noversionuri'})))                    || !defined($env{'request.noversionuri'}))) 
         {          {
             ($escurl = $env{'request.filename'}) =~ s{^/home/httpd/html}{};              my $londocroot = $Apache::lonnet::perlvar{'lonDocRoot'};
               ($escurl = $env{'request.filename'}) =~ s{^\Q$londocroot\E}{};
             $escurl  = &escape($escurl);              $escurl  = &escape($escurl);
         }              }    
         $menu =~ s/\[url\]/$escurl/g;          $menu =~ s/\[url\]/$escurl/g;
Line 409  sub innerregister { Line 468  sub innerregister {
   
         my $hwkadd='';          my $hwkadd='';
         if ($env{'request.symb'} ne '' &&          if ($env{'request.symb'} ne '' &&
     $env{'request.filename'}=~/\.(problem|exam|quiz|assess|survey|form|task)$/) {      $env{'request.filename'}=~/$LONCAPA::assess_re/) {
     if (&Apache::lonnet::allowed('mgr',$crs)) {      if (&Apache::lonnet::allowed('mgr',$crs)) {
  $hwkadd.=&switch('','',7,2,'pgrd.png','Content Grades','grades[_4]',   $hwkadd.=&switch('','',7,2,'pgrd.png','Content Grades','grades[_4]',
                        "gocmd('/adm/grades','gradingmenu')",                         "gocmd('/adm/grades','gradingmenu')",
Line 426  sub innerregister { Line 485  sub innerregister {
      "gocmd('/adm/parmset','set')",       "gocmd('/adm/parmset','set')",
      'Content Settings');       'Content Settings');
  }   }
           if ($env{'request.symb'}=~/^uploaded/ &&
               &Apache::lonnet::allowed('mdc',$crs)) {
               $hwkadd.=&switch('','',7,4,'docs.png','Folder/Page Content','parms[_2]',
                                "gocmd('/adm/coursedocs','direct')",
                                'Folder/Page Content');
           }
 # -- End Homework  # -- End Homework
         ###          ###
         ### Determine whether or not to display the 'cstr' button for this          ### Determine whether or not to display the 'cstr' button for this
Line 625  ENDMENUITEMS Line 690  ENDMENUITEMS
                 # wishlist is only available for users with access to resource-pool                  # wishlist is only available for users with access to resource-pool
                 # and links can only be set for resources within the resource-pool                  # and links can only be set for resources within the resource-pool
                 $menuitems .= (<<ENDMENUITEMS);                  $menuitems .= (<<ENDMENUITEMS);
 s&9&1&wishlist-link.png&Wishlist&wishlistlink[_2]&set_wishlistlink()&Set a link for this resource to wishlist&&1  s&9&1&wishlist-link.png&Stored Links&wishlistlink[_2]&set_wishlistlink()&Save a link for this resource in your personal Stored Links repository&&1
 ENDMENUITEMS  ENDMENUITEMS
             }              }
   
Line 660  ENDMENUITEMS Line 725  ENDMENUITEMS
             if (&Apache::lonnet::allowed('bre', $env{'request.course.id'}) eq 'F') {              if (&Apache::lonnet::allowed('bre', $env{'request.course.id'}) eq 'F') {
                 # wishlist is only available for users with access to resource-pool                  # wishlist is only available for users with access to resource-pool
                 $menuitems .= (<<ENDMENUITEMS);                  $menuitems .= (<<ENDMENUITEMS);
 s&9&1&wishlist-link.png&Wishlist&wishlistlink[_2]&set_wishlistlink()&Set a link for this resource to wishlist&&1  s&9&1&wishlist-link.png&Stored Links&wishlistlink[_2]&set_wishlistlink()&Save a link for this resource in in your personal Stored Links repository&&1
 ENDMENUITEMS  ENDMENUITEMS
             }              }
  }   }
Line 707  ENDMENUITEMS Line 772  ENDMENUITEMS
                           
             unless ($env{'request.noversionuri'}=~ m{^/adm/(navmaps|viewclasslist)(\?|$)}) {              unless ($env{'request.noversionuri'}=~ m{^/adm/(navmaps|viewclasslist)(\?|$)}) {
                 &Apache::lonhtmlcommon::add_breadcrumb_tool(                  &Apache::lonhtmlcommon::add_breadcrumb_tool(
                     'advtools', @inlineremote[61,71,72,73,92]);                      'advtools', @inlineremote[61,71,72,73,74,92]);
             }              }
         }          }
     }      }
Line 1079  function showCourseID() { Line 1144  function showCourseID() {
     document.getElementById('dccid').style.display='block';      document.getElementById('dccid').style.display='block';
     document.getElementById('dccid').style.textAlign='left';      document.getElementById('dccid').style.textAlign='left';
     document.getElementById('dccid').style.textFace='normal';      document.getElementById('dccid').style.textFace='normal';
     document.getElementById('dccidtext').innerHTML ='<a href="javascript:hideCourseID();">$lt{'less'}</a>';      document.getElementById('dccidtext').innerHTML ='<a href="javascript:hideCourseID();" class="LC_menubuttons_link">$lt{'less'}</a>';
     return;      return;
 }  }
   
 function hideCourseID() {  function hideCourseID() {
     document.getElementById('dccid').style.display='none';      document.getElementById('dccid').style.display='none';
     document.getElementById('dccidtext').innerHTML ='<a href="javascript:showCourseID()">$lt{'more'}</a>';      document.getElementById('dccidtext').innerHTML ='<a href="javascript:showCourseID()" class="LC_menubuttons_link">$lt{'more'}</a>';
     return;      return;
 }  }
   
Line 1124  sub utilityfunctions { Line 1189  sub utilityfunctions {
     my $confirm_switch = &mt("Editing requires switching to the resource's home server.").'\n'.      my $confirm_switch = &mt("Editing requires switching to the resource's home server.").'\n'.
                          &mt('Switch server?');                           &mt('Switch server?');
   
       my $esc_url=&escape($currenturl);
       my $esc_symb=&escape($currentsymb);
   
 return (<<ENDUTILITY)  return (<<ENDUTILITY)
   
     var currentURL="$currenturl";      var currentURL=unescape("$esc_url");
     var reloadURL="$currenturl";      var reloadURL=unescape("$esc_url");
     var currentSymb="$currentsymb";      var currentSymb=unescape("$esc_symb");
   
 $dc_popup_cid  $dc_popup_cid
   
Line 1222  function golist(url) { Line 1289  function golist(url) {
   
   
 function catalog_info() {  function catalog_info() {
    loncatinfo=window.open(window.location.pathname+'.meta',"LONcatInfo",'height=320,width=280,resizable=yes,scrollbars=yes,location=no,menubar=no,toolbar=no');     openMyModal(window.location.pathname+'.meta',500,400,'yes');
 }  }
   
 function chat_win() {  function chat_win() {
Line 1248  function annotate() { Line 1315  function annotate() {
    annotator.document.close();     annotator.document.close();
 }  }
   
 function set_wishlistlink(title, path) {  function open_StoredLinks_Import(rat) {
     if (!title) {  
         title = document.title;  
         title = title.replace(/^LON-CAPA /,'');  
     }  
     if (!path) {  
         path = location.pathname;  
     }  
     Win = window.open('/adm/wishlist?mode=newLink&setTitle='+title+'&setPath='+path,  
                       'wishlistNewLink','width=560,height=350,scrollbars=0');  
 }  
   
 function open_Wishlist_Import(rat) {  
    var newWin;     var newWin;
    if (rat) {     if (rat) {
        newWin = window.open('/adm/wishlist?inhibitmenu=yes&mode=import&rat='+rat,         newWin = window.open('/adm/wishlist?inhibitmenu=yes&mode=import&rat='+rat,
Line 1273  function open_Wishlist_Import(rat) { Line 1328  function open_Wishlist_Import(rat) {
    newWin.focus();     newWin.focus();
 }  }
   
   (function (\$) {
     \$(document).ready(function () {
       \$.single=function(a){return function(b){a[0]=b;return a}}(\$([1]));
       /*\@cc_on
         if (!window.XMLHttpRequest) {
           \$('.LC_hoverable').each(function () {
             this.attachEvent('onmouseenter', function (evt) { \$.single(evt.srcElement).addClass('hover'); });
             this.attachEvent('onmouseleave', function (evt) { \$.single(evt.srcElement).removeClass('hover'); });
           });
         }
       \@*/
     });
   }(jQuery));
   
 ENDUTILITY  ENDUTILITY
 }  }
   
Line 1660  sub required_privs { Line 1729  sub required_privs {
              '/adm/populate'     => 'cst',               '/adm/populate'     => 'cst',
              '/adm/trackstudent' => 'vsa',               '/adm/trackstudent' => 'vsa',
              '/adm/statistics'   => 'vgr',               '/adm/statistics'   => 'vgr',
                '/adm/setblock'     => 'dcm',
                '/adm/coursedocs'   => 'mdc',
            };             };
     unless ($env{'course.'.$env{'request.course.id'}.'.grading'} eq 'spreadsheet') {      unless ($env{'course.'.$env{'request.course.id'}.'.grading'} eq 'spreadsheet') {
         $privs->{'/adm/classcalc'}   => 'vgr',          $privs->{'/adm/classcalc'}   = 'vgr',
         $privs->{'/adm/assesscalc'}  => 'vgr',          $privs->{'/adm/assesscalc'}  = 'vgr',
         $privs->{'/adm/studentcalc'} => 'vgr';          $privs->{'/adm/studentcalc'} = 'vgr';
     }      }
     return $privs;      return $privs;
 }  }
Line 1687  BEGIN { Line 1758  BEGIN {
                     } elsif ($configline=~/^prim\:/) {                      } elsif ($configline=~/^prim\:/) {
                         my @entries = (split(/\:/, $configline))[1..5];                          my @entries = (split(/\:/, $configline))[1..5];
                         push @primary_menu, \@entries;                          push @primary_menu, \@entries;
                       } elsif ($configline=~/^primsub\:/) {
                           my ($parent,@entries) = (split(/\:/, $configline))[1..4];
                           push (@{$primary_submenu{$parent}},\@entries);
                     } elsif ($configline=~/^scnd\:/) {                      } elsif ($configline=~/^scnd\:/) {
                         my @entries = (split(/\:/, $configline))[1..5];                          my @entries = (split(/\:/, $configline))[1..5];
                         push @secondary_menu, \@entries;                           push @secondary_menu, \@entries; 

Removed from v.1.358  
changed lines
  Added in v.1.372


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