Diff for /loncom/interface/lonmenu.pm between versions 1.140 and 1.174

version 1.140, 2004/12/07 23:59:52 version 1.174, 2006/04/20 02:58:17
Line 39 Line 39
 package Apache::lonmenu;  package Apache::lonmenu;
   
 use strict;  use strict;
 use Apache::lonnet();  use Apache::lonnet;
 use Apache::Constants qw(:common);  
 use Apache::lonhtmlcommon();  use Apache::lonhtmlcommon();
 use Apache::loncommon();  use Apache::loncommon();
 use Apache::lonenc();  use Apache::lonenc();
Line 50  use vars qw(@desklines $readdesk); Line 49  use vars qw(@desklines $readdesk);
   
   
 my @inlineremote;  my @inlineremote;
 my $font;  
 my $tabbg;  
 my $pgbg;  
   
 # ================================================================ Little texts  # ================================================================ Little texts
   
Line 60  sub initlittle { Line 56  sub initlittle {
     return &Apache::lonlocal::texthash('ret' => 'Return to Last Location',      return &Apache::lonlocal::texthash('ret' => 'Return to Last Location',
        'nav' => 'Navigate Contents',         'nav' => 'Navigate Contents',
        'main' => 'Main Menu',         'main' => 'Main Menu',
        'launch' => 'Launch Remote Control');                                         'roles' => ($env{'user.adv'}?
                                                       'Roles':'Courses'),
                                          'docs' => 'Course Documents',
                                          'exit' => 'Exit',
          'launch' => 'Launch Remote Control',
                                          'groups' => 'Groups');
 }  }
   
   sub get_colors {
       my ($font,$pgbg,$tabbg);
       if ($env{'browser.interface'} eq 'textual') {
    $pgbg='#FFFFFF';
           $tabbg='#FFFFFF';
    $font='#000000';
       } else {
    my $domain   =&Apache::loncommon::determinedomain();
    my $function =&Apache::loncommon::get_users_function();
   
           $pgbg  =&Apache::loncommon::designparm($function.'.pgbg', $domain);
           $tabbg =&Apache::loncommon::designparm($function.'.tabbg',$domain);
           $font  =&Apache::loncommon::designparm($function.'.font', $domain);
       }
       return ($font,$pgbg,$tabbg);
   }
 # ============================= This gets called at the top of the body section  # ============================= This gets called at the top of the body section
   
 sub menubuttons {  sub menubuttons {
     my $forcereg=shift;      my $forcereg=shift;
     my $target  =shift;  
     my $registration=shift;      my $registration=shift;
     my $titletable=shift;      my $titletable=shift;
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
     ['inhibitmenu']);      ['inhibitmenu']);
     if ($ENV{'form.inhibitmenu'} eq 'yes') { return ''; }      if (($env{'form.inhibitmenu'} eq 'yes') ||
           ($ENV{'REQUEST_URI'} eq '/adm/logout')) { return ''; }
       my %lt=&initlittle();
     my $navmaps='';      my $navmaps='';
     my $reloadlink='';      my $reloadlink='';
     my $escurl=&Apache::lonnet::escape(&Apache::lonenc::check_encrypt($ENV{'request.noversionuri'}));      my $docs='';
     my $escsymb=&Apache::lonnet::escape(&Apache::lonenc::check_encrypt($ENV{'request.symb'}));      my $groups='';
     if ($ENV{'request.state'} eq 'construct') {      my $showgroups=0;
         if (($ENV{'request.noversionuri'} eq '') || (!defined($ENV{'request.noversionuri'}))) {      my $escurl=&Apache::lonnet::escape(&Apache::lonenc::check_encrypt($env{'request.noversionuri'}));
             my $returnurl = $ENV{'request.filename'};      my $escsymb=&Apache::lonnet::escape(&Apache::lonenc::check_encrypt($env{'request.symb'}));
       my $face= 'face="Arial,Helvetica,sans-serif"';
       if ($env{'request.state'} eq 'construct') {
           if (($env{'request.noversionuri'} eq '') || (!defined($env{'request.noversionuri'}))) {
               my $returnurl = $env{'request.filename'};
             $returnurl =~ s:^/home/([^/]+)/public_html/(.*)$:/priv/$1/$2:;              $returnurl =~ s:^/home/([^/]+)/public_html/(.*)$:/priv/$1/$2:;
             $escurl = &Apache::lonnet::escape($returnurl);              $escurl = &Apache::lonnet::escape($returnurl);
         }          }
     }      }
     if ($ENV{'browser.interface'} eq 'textual') {      if ($env{'request.course.id'}) {
           my %coursegroups;
           my $viewgrps_permission =                                                
                        &Apache::lonnet::allowed('vcg',$env{'request.course.id'});
           if (!$viewgrps_permission) {
               %coursegroups = &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 ((keys(%coursegroups) > 0) || ($viewgrps_permission)) {
               $showgroups = 1;
           }
       }
   
       my ($font,$pgbg,$tabbg) = &get_colors();
   
       if ($env{'browser.interface'} eq 'textual') {
 # Textual display only  # Textual display only
  my %lt=&initlittle();          if ($env{'request.course.id'}) {
         $pgbg='#FFFFFF';  
         $tabbg='#FFFFFF';  
  $font='#000000';  
         if ($ENV{'request.course.id'}) {  
     $navmaps=(<<ENDNAV);      $navmaps=(<<ENDNAV);
 <a href="/adm/navmaps?postdata=$escurl&postsymb=$escsymb" target="_top">$lt{'nav'}</a>  <a href="/adm/navmaps?postdata=$escurl&postsymb=$escsymb" target="_top">$lt{'nav'}</a>
 ENDNAV  ENDNAV
             if (($ENV{'request.noversionuri'}=~/^\/adm\//) &&              if (($env{'request.noversionuri'}=~/^\/adm\//) &&
          ($ENV{'request.noversionuri'}!~/^\/adm\/wrapper\//) &&           ($env{'request.noversionuri'}!~/^\/adm\/wrapper\//) &&
          ($ENV{'request.noversionuri'}!~/^\/adm\/.*\/(smppg|bulletinboard|aboutme)(\?|$)/)) {           ($env{'request.noversionuri'}!~/^\/adm\/.*\/(smppg|bulletinboard|aboutme)(\?|$)/)) {
                 my $escreload=&Apache::lonnet::escape('return:');                  my $escreload=&Apache::lonnet::escape('return:');
                 $reloadlink=(<<ENDRELOAD);                  $reloadlink=(<<ENDRELOAD);
 <a href="/adm/flip?postdata=$escreload" target="_top"><font color="$font">$lt{'ret'}</font></a>  <a href="/adm/flip?postdata=$escreload" target="_top"><font $face color="$font">$lt{'ret'}</font></a>
 ENDRELOAD  ENDRELOAD
             }              }
         }      if (&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) {
                  $docs=(<<ENDDOCS);
   <a href="/adm/coursedocs" target="_top"><font $face color="$font">$lt{'docs'}</font></a>
   ENDDOCS
               }
               if ($showgroups) {
                   $groups =(<<ENDGROUPS);
   <td bgcolor="$tabbg">
   <a href="/adm/coursegroups" target="_top"><font $face color="$font">$lt{'groups'}</font></a></td>
   ENDGROUPS
               }
    }
         my $form=&serverform();          my $form=&serverform();
         my $utility=&utilityfunctions();          my $utility=&utilityfunctions();
  my $output=(<<ENDMAINMENU);   my $output=(<<ENDMAINMENU);
Line 112  ENDRELOAD Line 154  ENDRELOAD
 $utility  $utility
 </script>  </script>
 <a href="/adm/menu" target="_top">$lt{'main'}</a>  <a href="/adm/menu" target="_top">$lt{'main'}</a>
 $reloadlink $navmaps<br />  $reloadlink $navmaps $docs $groups
   <a href="/adm/roles" target="_top"><font $face color="$font">$lt{'roles'}</font></a>
   <a href="/adm/logout" target="_top"><font $face color="$font">$lt{'exit'}</font></a>
   <br />
 <script type="text/javascript">  <script type="text/javascript">
 // END LON-CAPA Internal  // END LON-CAPA Internal
 </script>  </script>
 $form  $form
 ENDMAINMENU  ENDMAINMENU
         if ($registration) { $output.=&innerregister($forcereg,$target); }          if ($registration) { $output.=&innerregister($forcereg); }
  return $output."<hr />";   return $output."<hr />";
     } elsif ($ENV{'environment.remote'} eq 'off') {      } elsif ($env{'environment.remote'} eq 'off') {
 # Remote Control is switched off  # Remote Control is switched off
 # figure out colors  # figure out colors
  my %lt=&initlittle();   my %lt=&initlittle();
  my $function='student';  
         if ($ENV{'request.role'}=~/^(cc|in|ta|ep)/) {  
     $function='coordinator';  
         }  
  if ($ENV{'request.role'}=~/^(su|dc|ad|li)/) {  
             $function='admin';  
         }  
         if (($ENV{'request.role'}=~/^(au|ca)/) ||  
             ($ENV{'request.noversionuri'}=~/^(\/priv|\~)/)) {  
             $function='author';  
         }  
         my $domain=&Apache::loncommon::determinedomain();          my $domain=&Apache::loncommon::determinedomain();
         $pgbg=&Apache::loncommon::designparm($function.'.pgbg',$domain);   my $function =&Apache::loncommon::get_users_function();
         $tabbg=&Apache::loncommon::designparm($function.'.tabbg',$domain);  
         $font=&Apache::loncommon::designparm($function.'.font',$domain);  
         my $link=&Apache::loncommon::designparm($function.'.link',$domain);          my $link=&Apache::loncommon::designparm($function.'.link',$domain);
         my $alink=&Apache::loncommon::designparm($function.'.alink',$domain);          my $alink=&Apache::loncommon::designparm($function.'.alink',$domain);
         my $vlink=&Apache::loncommon::designparm($function.'.vlink',$domain);          my $vlink=&Apache::loncommon::designparm($function.'.vlink',$domain);
         my $sidebg=&Apache::loncommon::designparm($function.'.sidebg',$domain);          my $sidebg=&Apache::loncommon::designparm($function.'.sidebg',$domain);
    if ($env{'user.name'} eq 'public' && $env{'user.domain'} eq 'public') {
       my $logo=&Apache::loncommon::lonhttpdurl("/adm/lonIcons/minilogo.gif");
       return (<<ENDINLINEMENU);
   <font face="Arial,Helvetica,sans-serif">
      <table bgcolor="$pgbg" width="100%" border="0" cellpadding="1" cellspacing="1">
       <tr>
         <td bgcolor="$tabbg">
           <a href="/adm/logout" target="_top"><font color="$font">$lt{'exit'}</font></a>
        </td>
        <td align="right" bgcolor="$tabbg">
          <img align="right" src="$logo" alt="Logo" />
          <b>LON-CAPA</b>&nbsp;
        </td>
      </tr>
     </table>
   </font>
   ENDINLINEMENU
           }
 # Do we have a NAV link?  # Do we have a NAV link?
         if ($ENV{'request.course.id'}) {          if ($env{'request.course.id'}) {
            $navmaps=(<<ENDNAV);      my $link='/adm/navmaps?postdata='.$escurl.'&amp;postsymb='.
    $escsymb;
       if ($env{'environment.remotenavmap'} eq 'on') {
    $link="javascript:gonav('".$link."')";
       }
       $navmaps=(<<ENDNAV);
 <td bgcolor="$tabbg">  <td bgcolor="$tabbg">
 <a href="javascript:gonav('/adm/navmaps?postdata=$escurl&amp;postsymb=$escsymb')"><font color="$font">$lt{'nav'}</font></a></td>  <a href="$link" target="_top"><font $face color="$font">$lt{'nav'}</font></a></td>
 ENDNAV  ENDNAV
     if (($ENV{'request.noversionuri'}=~/^\/adm\//) &&      if (&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) {
                 ($ENV{'request.noversionuri'}!~/^\/adm\/wrapper\//) &&   $docs=(<<ENDDOCS);
          ($ENV{'request.noversionuri'}!~/^\/adm\/.*\/(smppg|bulletinboard|aboutme)(\?|$)/)) {  <td bgcolor="$tabbg">
   <a href="/adm/coursedocs" target="_top"><font $face color="$font">$lt{'docs'}</font></a></td>
   ENDDOCS
               }
               if ($showgroups) {
                   $groups =(<<ENDGROUPS);
   <td bgcolor="$tabbg">
   <a href="/adm/coursegroups" target="_top"><font $face color="$font">$lt{'groups'}</font></a></td>
   ENDGROUPS
               }
       if (
    ($env{'request.noversionuri'}=~m[^/(res|public)/] &&
    $env{'request.symb'} eq '')
    ||
    (($env{'request.noversionuri'}=~/^\/adm\//) &&
    ($env{'request.noversionuri'}!~/^\/adm\/wrapper\//) &&
    ($env{'request.noversionuri'}!~
           m[^/adm/.*/(smppg|bulletinboard|aboutme)($|\?)])
     )
    ) {
                 my $escreload=&Apache::lonnet::escape('return:');                  my $escreload=&Apache::lonnet::escape('return:');
                 $reloadlink=(<<ENDRELOAD);                  $reloadlink=(<<ENDRELOAD);
 <td bgcolor="$tabbg">  <td bgcolor="$tabbg">
 <a href="/adm/flip?postdata=$escreload" target="_top"><font color="$font">$lt{'ret'}</font></a></td>  <a href="/adm/flip?postdata=$escreload" target="_top"><font $face color="$font">$lt{'ret'}</font></a></td>
 ENDRELOAD  ENDRELOAD
             }              }
         }          }
    if (($env{'request.state'} eq 'construct') && ($env{'request.course.id'})) {
       my $escreload=&Apache::lonnet::escape('return:');
       $reloadlink=(<<ENDCRELOAD);
   <td bgcolor="$tabbg">
   <a href="/adm/flip?postdata=$escreload" target="_top"><font $face color="$font">$lt{'ret'}</font></a></td>
   ENDCRELOAD
           }
         my $reg='';          my $reg='';
         if ($registration) {          if ($registration) {
            $reg=&innerregister($forcereg,$target,$titletable);             $reg=&innerregister($forcereg,$titletable);
         }          }
         my $form=&serverform();          my $form=&serverform();
  my $utility=&utilityfunctions();   my $utility=&utilityfunctions();
    my $logo=&Apache::loncommon::lonhttpdurl("/adm/lonIcons/minilogo.gif");
   
  return (<<ENDINLINEMENU);   return (<<ENDINLINEMENU);
 <script type="text/javascript">  <script type="text/javascript">
 // BEGIN LON-CAPA Internal  // BEGIN LON-CAPA Internal
   // <![CDATA[
 $utility  $utility
   // ]]>
 </script>  </script>
 <font face="Arial,Helvetica,sans-serif"><table bgcolor="$pgbg" width="100%" border="0" cellpadding="1" cellspacing="1">  <table bgcolor="$pgbg" width="100%" border="0" cellpadding="1" cellspacing="1">
 <tr>  <tr>
 <td bgcolor="$tabbg">  <td bgcolor="$tabbg">
 <a href="/adm/menu" target="_top"><font color="$font">$lt{'main'}</font></a>  <a href="/adm/menu" target="_top"><font $face color="$font">$lt{'main'}</font></a>
 </td>  </td>
 $reloadlink  $reloadlink
 $navmaps  $navmaps
   $docs
   $groups
 <td bgcolor="$tabbg">  <td bgcolor="$tabbg">
 <a href="/adm/remote?action=launch&amp;url=$escurl" target="_top">  <a href="/adm/remote?action=launch&amp;url=$escurl" target="_top">
 <font color="$font">$lt{'launch'}</font></a></td>  <font $face color="$font">$lt{'launch'}</font></a></td>
   <td bgcolor="$tabbg">
   <a href="/adm/roles" target="_top"><font $face color="$font">$lt{'roles'}</font></a>
   </td>
   <td bgcolor="$tabbg">
   <a href="/adm/logout" target="_top"><font $face color="$font">$lt{'exit'}</font></a>
   </td>
 <td bgcolor="$tabbg">  <td bgcolor="$tabbg">
 <img align="right" src="/adm/lonIcons/minilogo.gif" />  <img align="right" src="$logo" alt="Logo" />
 <b>LON-CAPA</b></td>  <b>LON-CAPA</b></td>
 $form  
 </tr>  </tr>
 </table>  </table>
 </font>  $form
 <script type="text/javascript">  <script type="text/javascript">
 // END LON-CAPA Internal  // END LON-CAPA Internal
 </script>  </script>
Line 200  ENDINLINEMENU Line 293  ENDINLINEMENU
 # ====================================== This gets called in the header section  # ====================================== This gets called in the header section
   
 sub registerurl {  sub registerurl {
     my $forcereg=shift;      my ($forcereg) = @_;
     my $target = shift;  
     my $result = '';      my $result = '';
     if ($ENV{'request.noversionuri'} eq '/res/adm/pages/menu.html') { return ''; }      if ($env{'request.noversionuri'} eq '/res/adm/pages/menu.html') { return ''; }
     my $force_title='';      my $force_title='';
     if ($ENV{'request.state'} eq 'construct') {      if ($env{'request.state'} eq 'construct') {
  $force_title=&Apache::lonxml::display_title();   $force_title=&Apache::lonxml::display_title();
     }      }
     if ($target eq 'edit') {      if (($env{'browser.interface'} eq 'textual') ||
         $result .="<script type=\"text/javascript\">\n".          ($env{'environment.remote'} eq 'off') ||
             "if (typeof swmenu != 'undefined') {swmenu.currentURL=null;}\n".          ((($env{'request.publicaccess'}) || 
             &Apache::loncommon::browser_and_searcher_javascript().  
                 "\n</script>\n";  
     }  
     if (($ENV{'browser.interface'} eq 'textual') ||  
         ($ENV{'environment.remote'} eq 'off') ||  
         ((($ENV{'request.publicaccess'}) ||   
          (!&Apache::lonnet::is_on_map(           (!&Apache::lonnet::is_on_map(
    &Apache::lonnet::unescape($ENV{'request.noversionuri'})))) &&     &Apache::lonnet::unescape($env{'request.noversionuri'})))) &&
         (!$forcereg))) {          (!$forcereg))) {
   return $result.    return $result.
           '<script type="text/javascript">function LONCAPAreg(){;} function LONCAPAstale(){}</script>'.$force_title;            '<script type="text/javascript">function LONCAPAreg(){;} function LONCAPAstale(){}</script>'.$force_title;
     }      }
 # Graphical display after login only  # Graphical display after login only
     if ($Apache::lonxml::registered && !$forcereg) { return ''; }      if ($env{'request.registered'} && !$forcereg) { return ''; }
     if ($target ne 'edit') {      $result.=&innerregister($forcereg);
  $result.=&innerregister($forcereg,$target);  
     }  
     return $result.$force_title;      return $result.$force_title;
 }  }
   
Line 235  sub registerurl { Line 319  sub registerurl {
 # =========== and in the body of the document  # =========== and in the body of the document
   
 sub innerregister {  sub innerregister {
     my $forcereg=shift;      my ($forcereg, $titletable) = @_;
     my $target = shift;  
     my $titletable = shift;  
     my $result = '';      my $result = '';
     my ($uname,$thisdisfn);      my ($uname,$thisdisfn);
     my $const_space = ($ENV{'request.state'} eq 'construct');      my $const_space = ($env{'request.state'} eq 'construct');
     my $is_const_dir = 0;      my $is_const_dir = 0;
   
     if ($ENV{'request.noversionuri'} eq '/res/adm/pages/menu.html') { return ''; }      if ($env{'request.noversionuri'} eq '/res/adm/pages/menu.html') { return ''; }
   
     $Apache::lonxml::registered=1;      $env{'request.registered'} = 1;
   
     my $textinter=($ENV{'browser.interface'} eq 'textual');      my $textinter=($env{'browser.interface'} eq 'textual');
     my $noremote=($ENV{'environment.remote'} eq 'off');      my $noremote=($env{'environment.remote'} eq 'off');
           
     my $textual=($textinter || $noremote);      my $textual=($textinter || $noremote);
   
Line 257  sub innerregister { Line 339  sub innerregister {
   
     my $reopen=&Apache::lonmenu::reopenmenu();      my $reopen=&Apache::lonmenu::reopenmenu();
   
       my ($font,$pgbg,$tabbg) = &get_colors();
   
     my $newmail='';      my $newmail='';
     if ($noremote) {      if ($noremote) {
  $newmail='<font face="Arial,Helvetica,sans-serif"><table bgcolor="'.$pgbg.'" border="0" cellspacing="1" cellpadding="1" width="100%"><tr><td bgcolor="'.$tabbg.'">';   $newmail='<table bgcolor="'.$pgbg.'" border="0" cellspacing="1" cellpadding="1" width="100%"><tr><td bgcolor="'.$tabbg.'"><font face="Arial,Helvetica,sans-serif">';
     }      }
     if (($textual) && ($ENV{'request.symb'}) && ($ENV{'request.course.id'})) {      if (($textual) && ($env{'request.symb'}) && ($env{'request.course.id'})) {
  my ($mapurl,$rid,$resurl)=&Apache::lonnet::decode_symb($ENV{'request.symb'});   my ($mapurl,$rid,$resurl)=
         $newmail.=$ENV{'course.'.$ENV{'request.course.id'}.'.description'};      &Apache::lonnet::decode_symb(&Apache::lonnet::symbread());
           $newmail.=$env{'course.'.$env{'request.course.id'}.'.description'};
         my $maptitle=&Apache::lonnet::gettitle($mapurl);          my $maptitle=&Apache::lonnet::gettitle($mapurl);
  my $restitle=&Apache::lonnet::gettitle($resurl);   my $restitle=&Apache::lonnet::gettitle(&Apache::lonnet::symbread());
         if ($maptitle && $maptitle ne 'default.sequence') {          if ($maptitle && $maptitle ne 'default.sequence') {
     $newmail.=', '.$maptitle;      $newmail.=', '.$maptitle;
         }          }
Line 279  sub innerregister { Line 364  sub innerregister {
  '<b><a href="/adm/communicate" target="_top">You have new messages</a></b><br />':   '<b><a href="/adm/communicate" target="_top">You have new messages</a></b><br />':
                           'swmenu.setstatus("you have","messages");');                            'swmenu.setstatus("you have","messages");');
     }      }
     if ($ENV{'request.state'} eq 'construct') {      if ($env{'request.state'} eq 'construct') {
         $newmail = $titletable;          $newmail = $titletable;
     }      } else {
     if ($noremote) {   if ($noremote) {
  $newmail.='</td></tr></table></font>';      $newmail.='</font></td></tr></table>';
    }
     }      }
     my $timesync=($textual?'':'swmenu.syncclock(1000*'.time.');');      my $timesync=($textual?'':'swmenu.syncclock(1000*'.time.');');
     my $tablestart=($noremote?'<font face="Arial,Helvetica,sans-serif"><table bgcolor="'.$pgbg.'" border="0" cellspacing="1" cellpadding="1" width="100%">':'').($textinter?'<br /><a href="#content">'.&mt('Skip to Content').'</a><br />':'');      my $tablestart=($noremote?'<font face="Arial,Helvetica,sans-serif"><table bgcolor="'.$pgbg.'" border="0" cellspacing="1" cellpadding="1" width="100%">':'').($textinter?'<br /><a href="#content">'.&mt('Skip to Content').'</a><br />':'');
     my $tableend=($noremote?'</table></font>':'').($textinter?'<a name="content" />':'');      my $tableend=($noremote?'</table></font>':'').($textinter?'<a name="content" />':'');
 # =============================================================================  # =============================================================================
 # ============================ This is for URLs that actually can be registered  # ============================ This is for URLs that actually can be registered
     if (($ENV{'request.noversionuri'}!~/^\/(res\/)*adm\//) || ($forcereg)) {      if (($env{'request.noversionuri'}!~m|^/(res/)*adm/|) || ($forcereg)) {
 # -- This applies to homework problems for users with grading privileges  # -- This applies to homework problems for users with grading privileges
  my $crs='/'.$ENV{'request.course.id'};   my $crs='/'.$env{'request.course.id'};
  if ($ENV{'request.course.sec'}) {   if ($env{'request.course.sec'}) {
     $crs.='_'.$ENV{'request.course.sec'};      $crs.='_'.$env{'request.course.sec'};
  }   }
  $crs=~s/\_/\//g;   $crs=~s/\_/\//g;
   
         my $hwkadd='';          my $hwkadd='';
         if ($ENV{'request.filename'}=~/\.(problem|exam|quiz|assess|survey|form)$/) {          if ($env{'request.symb'} ne '' &&
     if (&Apache::lonnet::allowed('vgr',$crs)) {      $env{'request.filename'}=~/\.(problem|exam|quiz|assess|survey|form|task)$/) {
  $hwkadd.=&switch('','',7,1,'subm.gif','view sub-[_1]','missions[_1]',  
                        "gocmd('/adm/grades','submission')",  
        'View user submissions for this assessment resource');  
             }  
     if (&Apache::lonnet::allowed('mgr',$crs)) {      if (&Apache::lonnet::allowed('mgr',$crs)) {
  $hwkadd.=&switch('','',7,2,'pgrd.gif','problem[_1]','grades[_3]',   $hwkadd.=&switch('','',7,2,'pgrd.gif','problem[_1]','grades[_3]',
                        "gocmd('/adm/grades','gradingmenu')",                         "gocmd('/adm/grades','gradingmenu')",
                        'Modify user grades for this assessment resource');                         'Modify user grades for this assessment resource');
               } elsif (&Apache::lonnet::allowed('vgr',$crs)) {
    $hwkadd.=&switch('','',7,2,'subm.gif','view sub-[_1]','missions[_1]',
                          "gocmd('/adm/grades','submission')",
          'View user submissions for this assessment resource');
             }              }
  }   }
  if (&Apache::lonnet::allowed('opa',$crs)) {   if ($env{'request.symb'} ne '' &&
       &Apache::lonnet::allowed('opa',$crs)) {
     $hwkadd.=&switch('','',7,3,'pparm.gif','problem[_2]','parms[_2]',      $hwkadd.=&switch('','',7,3,'pparm.gif','problem[_2]','parms[_2]',
      "gocmd('/adm/parmset','set')",       "gocmd('/adm/parmset','set')",
      'Modify deadlines, etc, for this resource');       'Modify deadlines, etc, for this resource');
Line 322  sub innerregister { Line 409  sub innerregister {
         ### resource          ### resource
         ###          ###
         my $editbutton = '';          my $editbutton = '';
         if ($ENV{'user.author'}) {          if ($env{'user.author'}) {
             if ($ENV{'request.role'}=~/^(ca|au)/) {              if ($env{'request.role'}=~/^(ca|au)/) {
                 # Set defaults for authors                  # Set defaults for authors
                 my ($top,$bottom) = ('con-','struct');                  my ($top,$bottom) = ('con-','struct');
                 my $action = "go('/priv/".$ENV{'user.name'}."');";                  my $action = "go('/priv/".$env{'user.name'}."');";
                 my $cadom  = $ENV{'request.role.domain'};                  my $cadom  = $env{'request.role.domain'};
                 my $caname = $ENV{'user.name'};                  my $caname = $env{'user.name'};
                 my $desc = "Enter my resource construction space";                  my $desc = "Enter my resource construction space";
                 # Set defaults for co-authors                  # Set defaults for co-authors
                 if ($ENV{'request.role'} =~ /^ca/) {                   if ($env{'request.role'} =~ /^ca/) { 
                     ($cadom,$caname)=($ENV{'request.role'}=~/(\w+)\/(\w+)$/);                      ($cadom,$caname)=($env{'request.role'}=~/(\w+)\/(\w+)$/);
                     ($top,$bottom) = ('co con-','struct');                      ($top,$bottom) = ('co con-','struct');
                     $action = "go('/priv/".$caname."');";                      $action = "go('/priv/".$caname."');";
                     $desc = "Enter construction space as co-author";                      $desc = "Enter construction space as co-author";
Line 352  sub innerregister { Line 439  sub innerregister {
             my $cfile='';              my $cfile='';
             my $cfuname='';              my $cfuname='';
             my $cfudom='';              my $cfudom='';
             if ($ENV{'request.filename'}) {              if ($env{'request.filename'}) {
                 my $file=&Apache::lonnet::declutter($ENV{'request.filename'});                  my $file=&Apache::lonnet::declutter($env{'request.filename'});
                 $file=~s/^(\w+)\/(\w+)/\/priv\/$2/;                  $file=~s/^(\w+)\/(\w+)/\/priv\/$2/;
                 # Check that the user has permission to edit this resource                  # Check that the user has permission to edit this resource
                 ($cfuname,$cfudom)=&Apache::loncacc::constructaccess($file,$1);                  ($cfuname,$cfudom)=&Apache::loncacc::constructaccess($file,$1);
Line 373  sub innerregister { Line 460  sub innerregister {
                     ('','',6,1,'cstr.gif','edit[_1]','resource[_2]',                      ('','',6,1,'cstr.gif','edit[_1]','resource[_2]',
                      "go('".$cfile."');","Edit this resource");                       "go('".$cfile."');","Edit this resource");
             } elsif ($editbutton eq '') {              } elsif ($editbutton eq '') {
                 $editbutton=&clear(6,1);                  $editbutton=&switch('','',6,1,'port.gif',
       'port-[_1]','folio[_1]',
       "go('/adm/portfolio');",
       "Enter my portfolio space");
             }              }
         }          }
         ###          ###
Line 382  sub innerregister { Line 472  sub innerregister {
         my $menuitems;          my $menuitems;
         if ($const_space) {          if ($const_space) {
     my ($uname,$thisdisfn) =      my ($uname,$thisdisfn) =
  ($ENV{'request.filename'}=~m|^/home/([^/]+)/public_html/(.*)|);   ($env{'request.filename'}=~m|^/home/([^/]+)/public_html/(.*)|);
             my $currdir = '/priv/'.$uname.'/'.$thisdisfn;              my $currdir = '/priv/'.$uname.'/'.$thisdisfn;
             if ($currdir =~ m-/$-) {              if ($currdir =~ m-/$-) {
                 $is_const_dir = 1;                  $is_const_dir = 1;
Line 396  s&7&1&del.gif&delete[_1]&resource[_2]&go Line 486  s&7&1&del.gif&delete[_1]&resource[_2]&go
 s&7&2&prt.gif&prepare[_1]&printout[_1]&gocstr('/adm/printout','/~$uname/$thisdisfn')&Prepare a printable document  s&7&2&prt.gif&prepare[_1]&printout[_1]&gocstr('/adm/printout','/~$uname/$thisdisfn')&Prepare a printable document
 ENDMENUITEMS  ENDMENUITEMS
             }              }
         } elsif (defined($ENV{'request.course.id'})) {          } elsif (defined($env{'request.course.id'}) && 
    $env{'request.symb'} ne '') {
     $menuitems=(<<ENDMENUITEMS);      $menuitems=(<<ENDMENUITEMS);
 c&3&1  c&3&1
 s&2&1&back.gif&backward[_1]&&gopost('/adm/flip','back:'+currentURL)&Go to the previous resource in the course sequence&1  s&2&1&back.gif&backward[_1]&&gopost('/adm/flip','back:'+currentURL)&Go to the previous resource in the course sequence&1
Line 408  s&8&3&prt.gif&prepare[_1]&printout[_1]&g Line 499  s&8&3&prt.gif&prepare[_1]&printout[_1]&g
 s&9&1&sbkm.gif&set[_1]&bookmark[_2]&set_bookmark()&Set a bookmark for this resource&2  s&9&1&sbkm.gif&set[_1]&bookmark[_2]&set_bookmark()&Set a bookmark for this resource&2
 s&9&3&anot.gif&anno-[_1]&tations[_1]&annotate()&Make notes and annotations about this resource&2  s&9&3&anot.gif&anno-[_1]&tations[_1]&annotate()&Make notes and annotations about this resource&2
 ENDMENUITEMS  ENDMENUITEMS
             unless ($ENV{'request.noversionuri'}=~/\/(bulletinboard|smppg|navmaps|syllabus|aboutme)(\?|$)/) {              unless ($env{'request.noversionuri'}=~/\/(bulletinboard|smppg|navmaps|syllabus|aboutme)(\?|$)/) {
         $menuitems.=(<<ENDREALRES);          $menuitems.=(<<ENDREALRES);
 s&6&3&catalog.gif&catalog[_1]&info[_1]&catalog_info()&Show catalog information  s&6&3&catalog.gif&catalog[_1]&info[_1]&catalog_info()&Show catalog information
 s&8&1&eval.gif&evaluate[_1]&this[_1]&gopost('/adm/evaluate',currentURL,1)&Provide my evaluation of this resource  s&8&1&eval.gif&evaluate[_1]&this[_1]&gopost('/adm/evaluate',currentURL,1)&Provide my evaluation of this resource
Line 425  ENDREALRES Line 516  ENDREALRES
                 $buttons.=&clear(@rest);                  $buttons.=&clear(@rest);
             }              }
         }          }
   
         if ($textual) {          if ($textual) {
 # Registered, textual output      my $addremote=0;
       foreach (@inlineremote) { if ($_ ne '') { $addremote=1; } }
     my $inlinebuttons='';      my $inlinebuttons='';
       if ($addremote) {
   # Registered, textual output
   
     if ($ENV{'browser.interface'} eq 'textual') {   if ($env{'browser.interface'} eq 'textual') {
  $inlinebuttons=      $inlinebuttons=
                         join('',map { (defined($_)?$_:'') } @inlineremote);                          join('',map { (defined($_)?$_:'') } @inlineremote);
     } else {   } else {
  $inlinebuttons=(<<ENDINLINE);      $inlinebuttons=(<<ENDINLINE);
 <tr><td>$inlineremote[21]</td><td>&nbsp;</td><td>$inlineremote[23]</td></tr>  <tr><td>$inlineremote[21]</td><td>&nbsp;</td><td>$inlineremote[23]</td></tr>
 <tr><td>$inlineremote[61]</td><td>$inlineremote[62]</td><td>$inlineremote[63]</td></tr>  <tr><td>$inlineremote[61]</td><td>$inlineremote[62]</td><td>$inlineremote[63]</td></tr>
 <tr><td>$inlineremote[71]</td><td>$inlineremote[72]</td><td>$inlineremote[73]</td></tr>  <tr><td>$inlineremote[71]</td><td>$inlineremote[72]</td><td>$inlineremote[73]</td></tr>
 <tr><td>$inlineremote[81]</td><td>$inlineremote[82]</td><td>$inlineremote[83]</td></tr>  <tr><td>$inlineremote[81]</td><td>$inlineremote[82]</td><td>$inlineremote[83]</td></tr>
 <tr><td>$inlineremote[91]</td><td>$inlineremote[92]</td><td>$inlineremote[93]</td></tr>  <tr><td>$inlineremote[91]</td><td>$inlineremote[92]</td><td>$inlineremote[93]</td></tr>
 ENDINLINE  ENDINLINE
                   }
     }      }
             if ($const_space && $is_const_dir) {  
                 $inlinebuttons = '';  
             }  
     $result =(<<ENDREGTEXT);      $result =(<<ENDREGTEXT);
 <script type="text/javascript">  <script type="text/javascript">
 // BEGIN LON-CAPA Internal  // BEGIN LON-CAPA Internal
Line 460  $tableend Line 553  $tableend
 ENDREGTEXT  ENDREGTEXT
 # Registered, graphical output  # Registered, graphical output
         } else {          } else {
     my $requri=&Apache::lonnet::clutter(&Apache::lonnet::fixversion((split(/\?/,$ENV{'request.noversionuri'}))[0]));      my $requri=&Apache::lonnet::clutter(&Apache::lonnet::fixversion((split(/\?/,$env{'request.noversionuri'}))[0]));
     $requri=&Apache::lonenc::check_encrypt(&Apache::lonnet::unescape($requri));      $requri=&Apache::lonenc::check_encrypt(&Apache::lonnet::unescape($requri));
     my $cursymb=&Apache::lonenc::check_encrypt($ENV{'request.symb'});      my $cursymb=&Apache::lonenc::check_encrypt($env{'request.symb'});
     my $navstatus=&get_nav_status();      my $navstatus=&get_nav_status();
     my $clearcstr;      my $clearcstr;
     if ($ENV{'user.adv'}) { $clearcstr='clearbut(6,1)'; }  
       if ($env{'user.adv'}) { $clearcstr='clearbut(6,1)'; }
     $result = (<<ENDREGTHIS);      $result = (<<ENDREGTHIS);
             
 <script type="text/javascript">  <script type="text/javascript">
Line 495  var swmenu=null; Line 589  var swmenu=null;
              swmenu.switchbutton               swmenu.switchbutton
              (3,1,'reload.gif','return','location','go(reloadURL)','Return to the last known location in the course sequence');               (3,1,'reload.gif','return','location','go(reloadURL)','Return to the last known location in the course sequence');
   }    }
           swmenu.clearbut(7,1);  
           swmenu.clearbut(7,2);            swmenu.clearbut(7,2);
           swmenu.clearbut(7,3);            swmenu.clearbut(7,3);
           swmenu.menucltim=swmenu.setTimeout(            swmenu.menucltim=swmenu.setTimeout(
Line 504  var swmenu=null; Line 597  var swmenu=null;
   2000);    2000);
       }        }
   
 // END LON-CAPA Internal  // END LON-CAPA Internal 
 </script>  </script>
 ENDREGTHIS  ENDREGTHIS
         }          }
Line 553  ENDDONOTREGTHIS Line 646  ENDDONOTREGTHIS
 }  }
   
 sub loadevents() {  sub loadevents() {
     if ($ENV{'request.state'} eq 'construct' ||      if ($env{'request.state'} eq 'construct' ||
  $ENV{'request.noversionuri'} eq '/res/adm/pages/menu.html') { return ''; }   $env{'request.noversionuri'} eq '/res/adm/pages/menu.html') { return ''; }
     return 'LONCAPAreg();';      return 'LONCAPAreg();';
 }  }
   
 sub unloadevents() {  sub unloadevents() {
     if ($ENV{'request.state'} eq 'construct' ||      if ($env{'request.state'} eq 'construct' ||
  $ENV{'request.noversionuri'} eq '/res/adm/pages/menu.html') { return ''; }   $env{'request.noversionuri'} eq '/res/adm/pages/menu.html') { return ''; }
     return 'LONCAPAstale();';      return 'LONCAPAstale();';
 }  }
   
Line 568  sub unloadevents() { Line 661  sub unloadevents() {
   
 sub startupremote {  sub startupremote {
     my ($lowerurl)=@_;      my ($lowerurl)=@_;
     if (($ENV{'browser.interface'} eq 'textual') ||      if (($env{'browser.interface'} eq 'textual') ||
         ($ENV{'environment.remote'} eq 'off')) {          ($env{'environment.remote'} eq 'off')) {
      return ('<meta HTTP-EQUIV="Refresh" CONTENT="0.5; url='.$lowerurl.'" />');       return ('<meta HTTP-EQUIV="Refresh" CONTENT="0.5; url='.$lowerurl.'" />');
     }      }
 #  #
Line 644  ENDSETFLAGS Line 737  ENDSETFLAGS
 }  }
   
 sub maincall() {  sub maincall() {
     if (($ENV{'browser.interface'} eq 'textual') ||      if (($env{'browser.interface'} eq 'textual') ||
         ($ENV{'environment.remote'} eq 'off')) { return ''; }          ($env{'environment.remote'} eq 'off')) { return ''; }
     return(<<ENDMAINCALL);      return(<<ENDMAINCALL);
 <script type="text/javascript">  <script type="text/javascript">
     main();      main();
Line 656  ENDMAINCALL Line 749  ENDMAINCALL
 sub load_remote_msg {  sub load_remote_msg {
     my ($lowerurl)=@_;      my ($lowerurl)=@_;
   
     if (($ENV{'browser.interface'} eq 'textual') ||      if (($env{'browser.interface'} eq 'textual') ||
         ($ENV{'environment.remote'} eq 'off')) { return ''; }          ($env{'environment.remote'} eq 'off')) { return ''; }
   
     my $esclowerurl=&Apache::lonnet::escape($lowerurl);      my $esclowerurl=&Apache::lonnet::escape($lowerurl);
     my $link=&mt('<a href="[_1]">Continue</a> on in Inline Menu mode',      my $link=&mt('<a href="[_1]">Continue</a> on in Inline Menu mode',
Line 674  ENDREMOTEFORM Line 767  ENDREMOTEFORM
 # ================================================================= Reopen menu  # ================================================================= Reopen menu
   
 sub reopenmenu {  sub reopenmenu {
    if (($ENV{'browser.interface'} eq 'textual') ||     if (($env{'browser.interface'} eq 'textual') ||
        ($ENV{'environment.remote'} eq 'off')) { return ''; }         ($env{'environment.remote'} eq 'off')) { return ''; }
    my $menuname='LCmenu'.$Apache::lonnet::perlvar{'lonHostID'};     my $menuname='LCmenu'.$Apache::lonnet::perlvar{'lonHostID'};
    my $nothing = &Apache::lonhtmlcommon::javascript_nothing();     my $nothing = &Apache::lonhtmlcommon::javascript_nothing();
    return('window.open('.$nothing.',"'.$menuname.'","",false);');     return('window.open('.$nothing.',"'.$menuname.'","",false);');
Line 685  sub reopenmenu { Line 778  sub reopenmenu {
   
 sub open {  sub open {
     my $returnval='';      my $returnval='';
     if (($ENV{'browser.interface'} eq 'textual') ||      if (($env{'browser.interface'} eq 'textual') ||
         ($ENV{'environment.remote'} eq 'off')) {           ($env{'environment.remote'} eq 'off')) { 
  return '<script type="text/javascript">self.name="loncapaclient";</script>';   return '<script type="text/javascript">self.name="loncapaclient";</script>';
     }      }
     my $menuname='LCmenu'.$Apache::lonnet::perlvar{'lonHostID'};      my $menuname='LCmenu'.$Apache::lonnet::perlvar{'lonHostID'};
Line 713  ENDOPEN Line 806  ENDOPEN
   
 sub clear {  sub clear {
     my ($row,$col)=@_;      my ($row,$col)=@_;
     unless (($ENV{'browser.interface'} eq 'textual') ||      unless (($env{'browser.interface'} eq 'textual') ||
             ($ENV{'environment.remote'} eq 'off')) {              ($env{'environment.remote'} eq 'off')) {
        return "\n".qq(window.status+='.';swmenu.clearbut($row,$col););         return "\n".qq(window.status+='.';swmenu.clearbut($row,$col););
    } else {      } else { 
        $inlineremote[10*$row+$col]='';         $inlineremote[10*$row+$col]='';
Line 734  sub switch { Line 827  sub switch {
     $bot=&mt($bot);      $bot=&mt($bot);
     $desc=&mt($desc);      $desc=&mt($desc);
     $img=&mt($img);      $img=&mt($img);
     unless (($ENV{'browser.interface'} eq 'textual')  ||  
             ($ENV{'environment.remote'} eq 'off')) {      my ($font,$pgbg,$tabbg) = &get_colors();
   
       unless (($env{'browser.interface'} eq 'textual')  ||
               ($env{'environment.remote'} eq 'off')) {
 # Remote  # Remote
        return "\n".         return "\n".
  qq(window.status+='.';swmenu.switchbutton($row,$col,"$img","$top","$bot","$act","$desc"););   qq(window.status+='.';swmenu.switchbutton($row,$col,"$img","$top","$bot","$act","$desc"););
    } elsif ($ENV{'browser.interface'} eq 'textual') {     } elsif ($env{'browser.interface'} eq 'textual') {
 # Accessibility  # Accessibility
        if ($nobreak==2) { return ''; }         if ($nobreak==2) { return ''; }
        my $text=$top.' '.$bot;         my $text=$top.' '.$bot;
Line 763  sub switch { Line 859  sub switch {
    '<img border="0" alt="'.$text.'" src="http://'.$ENV{'HTTP_HOST'}.     '<img border="0" alt="'.$text.'" src="http://'.$ENV{'HTTP_HOST'}.
    ':'.$lonhttpdPort.'/res/adm/pages/'.$img.'" align="'.     ':'.$lonhttpdPort.'/res/adm/pages/'.$img.'" align="'.
    ($nobreak==3?'right':'left').'" />';     ($nobreak==3?'right':'left').'" />';
        if (($ENV{'browser.interface'} eq 'textual') || ($ENV{'browser.interface'} eq 'faketextual')) {         if (($env{'browser.interface'} eq 'textual') || ($env{'browser.interface'} eq 'faketextual')) {
 # Accessibility  # Accessibility
    if ($nobreak==3) {     if ($nobreak==3) {
        $inlineremote[10*$row+$col]="\n".         $inlineremote[10*$row+$col]="\n".
Line 809  sub secondlevel { Line 905  sub secondlevel {
   
 sub openmenu {  sub openmenu {
     my $menuname='LCmenu'.$Apache::lonnet::perlvar{'lonHostID'};      my $menuname='LCmenu'.$Apache::lonnet::perlvar{'lonHostID'};
     if (($ENV{'browser.interface'} eq 'textual') ||      if (($env{'browser.interface'} eq 'textual') ||
         ($ENV{'environment.remote'} eq 'off')) { return ''; }          ($env{'environment.remote'} eq 'off')) { return ''; }
     my $nothing = &Apache::lonhtmlcommon::javascript_nothing();      my $nothing = &Apache::lonhtmlcommon::javascript_nothing();
     return "window.open(".$nothing.",'".$menuname."');";      return "window.open(".$nothing.",'".$menuname."');";
 }  }
Line 825  sub inlinemenu { Line 921  sub inlinemenu {
 sub rawconfig {  sub rawconfig {
     my $textualoverride=shift;      my $textualoverride=shift;
     my $output='';      my $output='';
     unless (($ENV{'browser.interface'} eq 'textual') ||      unless (($env{'browser.interface'} eq 'textual') ||
             ($ENV{'environment.remote'} eq 'off')) {              ($env{'environment.remote'} eq 'off')) {
        $output.=         $output.=
  "window.status='Opening Remote Control';var swmenu=".&openmenu().   "window.status='Opening Remote Control';var swmenu=".&openmenu().
 "\nwindow.status='Configuring Remote Control ';";  "\nwindow.status='Configuring Remote Control ';";
     } else {      } else {
        unless ($textualoverride) { return ''; }         unless ($textualoverride) { return ''; }
     }      }
     my $uname=$ENV{'user.name'};      my $uname=$env{'user.name'};
     my $udom=$ENV{'user.domain'};      my $udom=$env{'user.domain'};
     my $adv=$ENV{'user.adv'};      my $adv=$env{'user.adv'};
     my $author=$ENV{'user.author'};      my $author=$env{'user.author'};
     my $crs='';      my $crs='';
     if ($ENV{'request.course.id'}) {      if ($env{'request.course.id'}) {
        $crs='/'.$ENV{'request.course.id'};         $crs='/'.$env{'request.course.id'};
        if ($ENV{'request.course.sec'}) {         if ($env{'request.course.sec'}) {
    $crs.='_'.$ENV{'request.course.sec'};     $crs.='_'.$env{'request.course.sec'};
        }         }
        $crs=~s/\_/\//g;         $crs=~s/\_/\//g;
     }      }
     my $pub=($ENV{'request.state'} eq 'published');      my $pub=($env{'request.state'} eq 'published');
     my $con=($ENV{'request.state'} eq 'construct');      my $con=($env{'request.state'} eq 'construct');
     my $rol=$ENV{'request.role'};      my $rol=$env{'request.role'};
     my $requested_domain = $ENV{'request.role.domain'};      my $requested_domain = $env{'request.role.domain'};
     foreach (@desklines) {      foreach (@desklines) {
         my ($row,$col,$pro,$prt,$img,$top,$bot,$act,$desc)=split(/\:/,$_);          my ($row,$col,$pro,$prt,$img,$top,$bot,$act,$desc)=split(/\:/,$_);
         $prt=~s/\$uname/$uname/g;          $prt=~s/\$uname/$uname/g;
Line 875  sub rawconfig { Line 971  sub rawconfig {
                $output.=switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc);                 $output.=switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc);
             }              }
         } elsif ($pro eq 'course') {          } elsif ($pro eq 'course') {
             if ($ENV{'request.course.fn'}) {              if ($env{'request.course.fn'}) {
                $output.=switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc);                 $output.=switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc);
     }      }
         } elsif ($pro =~ /^courseenv_(.*)$/) {          } elsif ($pro =~ /^courseenv_(.*)$/) {
             my $key = $1;              my $key = $1;
             if ($ENV{'course.'.$ENV{'request.course.id'}.'.'.$key}) {              if ($env{'course.'.$env{'request.course.id'}.'.'.$key}) {
                 $output.=switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc);                  $output.=switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc);
             }              }
         } elsif ($pro =~ /^course_(.*)$/) {          } elsif ($pro =~ /^course_(.*)$/) {
             # Check for permissions inside of a course              # Check for permissions inside of a course
             if (($ENV{'request.course.id'}) &&              if (($env{'request.course.id'}) &&
                 (&Apache::lonnet::allowed($1,$ENV{'request.course.id'}.                  (&Apache::lonnet::allowed($1,$env{'request.course.id'}.
             ($ENV{'request.course.sec'}?'/'.$ENV{'request.course.sec'}:''))              ($env{'request.course.sec'}?'/'.$env{'request.course.sec'}:''))
                  )) {                   )) {
                 $output.=switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc);                  $output.=switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc);
     }      }
         } elsif ($pro eq 'author') {          } elsif ($pro eq 'author') {
             if ($author) {              if ($author) {
                 if ((($prt eq 'rca') && ($ENV{'request.role'}=~/^ca/)) ||                  if ((($prt eq 'rca') && ($env{'request.role'}=~/^ca/)) ||
                     (($prt eq 'rau') && ($ENV{'request.role'}=~/^au/))) {                      (($prt eq 'rau') && ($env{'request.role'}=~/^au/))) {
                     # Check that we are on the correct machine                      # Check that we are on the correct machine
                     my $cadom=$requested_domain;                      my $cadom=$requested_domain;
                     my $caname=$ENV{'user.name'};                      my $caname=$env{'user.name'};
                     if ($prt eq 'rca') {                      if ($prt eq 'rca') {
        ($cadom,$caname)=         ($cadom,$caname)=
                                ($ENV{'request.role'}=~/(\w+)\/(\w+)$/);                                 ($env{'request.role'}=~/(\w+)\/(\w+)$/);
                     }                                             }                       
                     $act =~ s/\$caname/$caname/g;                      $act =~ s/\$caname/$caname/g;
                     my $home = &Apache::lonnet::homeserver($caname,$cadom);                      my $home = &Apache::lonnet::homeserver($caname,$cadom);
Line 915  sub rawconfig { Line 1011  sub rawconfig {
             }              }
         }          }
     }      }
     unless (($ENV{'browser.interface'} eq 'textual') ||      unless (($env{'browser.interface'} eq 'textual') ||
             ($ENV{'environment.remote'} eq 'off')) {              ($env{'environment.remote'} eq 'off')) {
        $output.="\nwindow.status='Synchronizing Time';swmenu.syncclock(1000*".time.");\nwindow.status='Remote Control Configured.';";         $output.="\nwindow.status='Synchronizing Time';swmenu.syncclock(1000*".time.");\nwindow.status='Remote Control Configured.';";
        if (&Apache::lonmsg::newmail()) {          if (&Apache::lonmsg::newmail()) { 
    $output.='swmenu.setstatus("you have","messages");';     $output.='swmenu.setstatus("you have","messages");';
Line 929  sub rawconfig { Line 1025  sub rawconfig {
 # ======================================================================= Close  # ======================================================================= Close
   
 sub close {  sub close {
     if (($ENV{'browser.interface'} eq 'textual') ||      if (($env{'browser.interface'} eq 'textual') ||
         ($ENV{'environment.remote'} eq 'off')) { return ''; }          ($env{'environment.remote'} eq 'off')) { return ''; }
     my $menuname='LCmenu'.$Apache::lonnet::perlvar{'lonHostID'};      my $menuname='LCmenu'.$Apache::lonnet::perlvar{'lonHostID'};
     return(<<ENDCLOSE);      return(<<ENDCLOSE);
 <script type="text/javascript">  <script type="text/javascript">
Line 954  sub footer { Line 1050  sub footer {
 }  }
   
 sub nav_control_js {  sub nav_control_js {
     my $nav=($ENV{'environment.remotenavmap'} eq 'on');      my $nav=($env{'environment.remotenavmap'} eq 'on');
     return (<<NAVCONTROL);      return (<<NAVCONTROL);
     var w_loncapanav_flag="$nav";      var w_loncapanav_flag="$nav";
   
Line 972  NAVCONTROL Line 1068  NAVCONTROL
   
 sub utilityfunctions {  sub utilityfunctions {
     my $caller = shift;      my $caller = shift;
     unless (($ENV{'browser.interface'} eq 'textual')  ||      unless (($env{'browser.interface'} eq 'textual')  ||
         ($ENV{'environment.remote'} eq 'off') || ($caller eq '/adm/menu')) { return ''; }          ($env{'environment.remote'} eq 'off') || ($caller eq '/adm/menu')) { return ''; }
     my $currenturl=&Apache::lonenc::check_encrypt($ENV{'request.noversionuri'});      my $currenturl=&Apache::lonnet::clutter(&Apache::lonnet::fixversion((split(/\?/,$env{'request.noversionuri'}))[0]));
       $currenturl=&Apache::lonenc::check_encrypt(&Apache::lonnet::unescape($currenturl));
           
     my $currentsymb=&Apache::lonenc::check_encrypt($ENV{'request.symb'});      my $currentsymb=&Apache::lonenc::check_encrypt($env{'request.symb'});
     my $nav_control=&nav_control_js();      my $nav_control=&nav_control_js();
 return (<<ENDUTILITY)  return (<<ENDUTILITY)
   
Line 1031  function gocstr(url,filename) { Line 1128  function gocstr(url,filename) {
                 this.document.cstrprint.curseed.value = this.document.lonhomework.rndseed.value                  this.document.cstrprint.curseed.value = this.document.lonhomework.rndseed.value
             }              }
             if (this.document.lonhomework.problemtype) {              if (this.document.lonhomework.problemtype) {
                 for (var i=0; i<this.document.lonhomework.problemtype.options.length; i++) {   if (this.document.lonhomework.problemtype.value) {
                     if (this.document.lonhomework.problemtype.options[i].selected) {      this.document.cstrprint.problemtype.value = 
                         if (this.document.lonhomework.problemtype.options[i].value != null && this.document.lonhomework.problemtype.options[i].value != '') {    this.document.lonhomework.problemtype.value;
                             this.document.cstrprint.problemtype.value = this.document.lonhomework.problemtype.options[i].value   } else if (this.document.lonhomework.problemtype.options) {
                         }      for (var i=0; i<this.document.lonhomework.problemtype.options.length; i++) {
                     }   if (this.document.lonhomework.problemtype.options[i].selected) {
                 }      if (this.document.lonhomework.problemtype.options[i].value != null && this.document.lonhomework.problemtype.options[i].value != '') { 
             }   this.document.cstrprint.problemtype.value = this.document.lonhomework.problemtype.options[i].value
         }   }
    }
       }
    }
       }
    }
         this.document.cstrprint.submit();          this.document.cstrprint.submit();
         return;          return;
     }      }
Line 1067  function catalog_info() { Line 1169  function catalog_info() {
 function chat_win() {  function chat_win() {
    lonchat=window.open('/res/adm/pages/chatroom.html',"LONchat",'height=320,width=280,resizable=yes,location=no,menubar=no,toolbar=no');     lonchat=window.open('/res/adm/pages/chatroom.html',"LONchat",'height=320,width=280,resizable=yes,location=no,menubar=no,toolbar=no');
 }  }
   
   function group_chat(group) {
      var url = '/adm/groupchat?group='+group;
      var winName = 'LONchat_'+group;
      grpchat=window.open(url,winName,'height=320,width=280,resizable=yes,location=no,menubar=no,toolbar=no');
   }
 ENDUTILITY  ENDUTILITY
 }  }
   
 sub serverform {  sub serverform {
     return(<<ENDSERVERFORM);      return(<<ENDSERVERFORM);
   <form name="server" action="/adm/logout" method="POST" target="_top">
 <form name="server" action="/adm/logout" method="post" target="_top">  
 <input type="hidden" name="postdata" value="none" />  <input type="hidden" name="postdata" value="none" />
 <input type="hidden" name="command" value="none" />  <input type="hidden" name="command" value="none" />
 <input type="hidden" name="url" value="none" />  <input type="hidden" name="url" value="none" />
Line 1084  ENDSERVERFORM Line 1191  ENDSERVERFORM
   
 sub constspaceform {  sub constspaceform {
     return(<<ENDCONSTSPACEFORM);      return(<<ENDCONSTSPACEFORM);
 <form name="constspace" action="/adm/logout" method="post" target="_top">  <form name="constspace" action="/adm/logout" method="POST" target="_top">
 <input type="hidden" name="filename" value="" />  <input type="hidden" name="filename" value="" />
 </form>  </form>
 <form name="cstrdelete" action="/adm/cfile" method="post" target="_top">  <form name="cstrdelete" action="/adm/cfile" method="POST" target="_top">
 <input type="hidden" name="action" value="delete" />   <input type="hidden" name="action" value="delete" /> 
 <input type="hidden" name="filename" value="" />  <input type="hidden" name="filename" value="" />
 </form>  </form>
 <form name="cstrprint" action="/adm/printout" target="_parent" method="post">  <form name="cstrprint" action="/adm/printout" target="_parent" method="POST">
 <input type="hidden" name="postdata" value="" />  <input type="hidden" name="postdata" value="" />
 <input type="hidden" name="curseed" value="" />  <input type="hidden" name="curseed" value="" />
 <input type="hidden" name="problemtype" value="" />  <input type="hidden" name="problemtype" value="" />
Line 1103  ENDCONSTSPACEFORM Line 1210  ENDCONSTSPACEFORM
   
 sub get_nav_status {  sub get_nav_status {
     my $navstatus="swmenu.w_loncapanav_flag=";      my $navstatus="swmenu.w_loncapanav_flag=";
     if ($ENV{'environment.remotenavmap'} eq 'on') {      if ($env{'environment.remotenavmap'} eq 'on') {
  $navstatus.="1";   $navstatus.="1";
     } else {      } else {
  $navstatus.="-1";   $navstatus.="-1";
Line 1111  sub get_nav_status { Line 1218  sub get_nav_status {
     return $navstatus;      return $navstatus;
 }  }
   
 # ================================================ Handler when called directly  
   
   
 sub handler {  
     my $r = shift;  
     &Apache::loncommon::content_type($r,'text/html');  
     $r->send_http_header;  
     return OK if $r->header_only;  
   
     my $form;  
     if ($ENV{'environment.remote'} ne 'off' &&  
  $ENV{'browser.interface'} ne 'textual') {  
  $form=&serverform();  
     }  
     my $bodytag=&Apache::loncommon::bodytag('Main Menu');  
     my $function='student';  
     if ($ENV{'request.role'}=~/^(cc|in|ta|ep)/) {  
  $function='coordinator';  
     }  
     if ($ENV{'request.role'}=~/^(su|dc|ad|li)/) {  
  $function='admin';  
     }  
     if (($ENV{'request.role'}=~/^(au|ca)/) ||  
  ($ENV{'request.noversionuri'}=~/^(\/priv|\~)/)) {  
  $function='author';  
     }  
     my $domain=&Apache::loncommon::determinedomain();  
     $pgbg=&Apache::loncommon::designparm($function.'.pgbg',$domain);  
     $tabbg=&Apache::loncommon::designparm($function.'.tabbg',$domain);  
     $font=&Apache::loncommon::designparm($function.'.font',$domain);  
     my $script_tag;  
     if ($ENV{'environment.remote'} eq 'on') {  
         my $utility=&utilityfunctions('/adm/menu');  
         $script_tag=(<<ENDSCRIPT);  
 <script type="text/javascript">  
 $utility  
 </script>  
 ENDSCRIPT  
     }  
 # ---- Print the screen, pretend to be in text mode to generate text-based menu  
     unless ($ENV{'browser.interface'} eq 'textual') {  
  $ENV{'browser.interface'}='faketextual';  
  $ENV{'environment.remote'}='off';  
     }  
     $r->print(<<ENDHEADER);  
 <html><head>  
 <title>LON-CAPA Main Menu</title>  
 $script_tag  
 </head>  
 $bodytag  
 ENDHEADER  
     $r->print('<table>'.&inlinemenu().'</table>'.$form);  
     $r->print('</body></html>');  
     return OK;  
 }  
   
 # ================================================================ Main Program  # ================================================================ Main Program
   
 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) {      if ($configline) {
                 $desklines[$#desklines+1]=$configline;   push(@desklines,$configline);
             }      }
         }   }
         CORE::close($config);   CORE::close($config);
       }
    }
    $readdesk='done';
     }      }
    }  
    $readdesk='done';  
   }  
 }  }
   
 1;  1;

Removed from v.1.140  
changed lines
  Added in v.1.174


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.