Diff for /loncom/interface/lonmenu.pm between versions 1.54 and 1.118

version 1.54, 2003/04/03 21:32:23 version 1.118, 2004/10/28 16:25:21
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::Constants qw(:common);
 use Apache::lonhtmlcommon();  use Apache::lonhtmlcommon();
 use Apache::loncommon;  use Apache::loncommon();
 use Apache::File;  use Apache::lonnavmaps();
   use Apache::lonlocal;
   
 use vars qw(@desklines $readdesk);  use vars qw(@desklines $readdesk);
   
   
   my @inlineremote;
   my $font;
   my $tabbg;
   my $pgbg;
   
   # ================================================================ Little texts
   
   sub initlittle {
       return &Apache::lonlocal::texthash('ret' => 'Return to Last Location',
          'nav' => 'Navigate Contents',
          'main' => 'Main Menu',
          'launch' => 'Launch Remote Control');
   }
   
 # ============================= 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 $target  =shift;
     my $registration=shift;      my $registration=shift;
       &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
       ['inhibitmenu']);
       if ($ENV{'form.inhibitmenu'} eq 'yes') { return ''; }
   
       my $navmaps='';
       my $reloadlink='';
       my $escurl=&Apache::lonnet::escape($ENV{'request.noversionuri'});
       my $escsymb=&Apache::lonnet::escape($ENV{'request.symb'});
     if ($ENV{'browser.interface'} eq 'textual') {      if ($ENV{'browser.interface'} eq 'textual') {
 # Textual display only  # Textual display only
    my %lt=&initlittle();
           $pgbg='#FFFFFF';
           $tabbg='#FFFFFF';
    $font='#000000';
           if ($ENV{'request.course.id'}) {
       $navmaps=(<<ENDNAV);
   <a href="/adm/navmaps?postdata=$escurl&postsymb=$escsymb" target="_top">$lt{'nav'}</a>
   ENDNAV
               if (($ENV{'request.noversionuri'}=~/^\/adm\//) &&
            ($ENV{'request.noversionuri'}!~/^\/adm\/wrapper\//) &&
            ($ENV{'request.noversionuri'}!~/^\/adm\/.*\/(smppg|bulletinboard|aboutme)(\?|$)/)) {
                   my $escreload=&Apache::lonnet::escape('return:');
                   $reloadlink=(<<ENDRELOAD);
   <a href="/adm/flip?postdata=$escreload" target="_top"><font color="$font">$lt{'ret'}</font></a>
   ENDRELOAD
               }
           }
           my $utility=&utilityfunctions();
  my $output=(<<ENDMAINMENU);   my $output=(<<ENDMAINMENU);
 <script>  <script>
 // BEGIN LON-CAPA Internal  // BEGIN LON-CAPA Internal
   $utility
 </script>  </script>
 <a href="/adm/menu" target="_top">Main Menu</a><br />  <a href="/adm/menu" target="_top">$lt{'main'}</a>
   $reloadlink $navmaps<br />
 <script>  <script>
 // END LON-CAPA Internal  // END LON-CAPA Internal
 </script>  </script>
Line 67  ENDMAINMENU Line 112  ENDMAINMENU
  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
         my $escurl=&Apache::lonnet::escape($ENV{'REQUEST_URI'});  # figure out colors
  my $output=(<<ENDINLINEMENU);   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();
           $pgbg=&Apache::loncommon::designparm($function.'.pgbg',$domain);
           $tabbg=&Apache::loncommon::designparm($function.'.tabbg',$domain);
           $font=&Apache::loncommon::designparm($function.'.font',$domain);
           my $link=&Apache::loncommon::designparm($function.'.link',$domain);
           my $alink=&Apache::loncommon::designparm($function.'.alink',$domain);
           my $vlink=&Apache::loncommon::designparm($function.'.vlink',$domain);
           my $sidebg=&Apache::loncommon::designparm($function.'.sidebg',$domain);
   # Do we have a NAV link?
           if ($ENV{'request.course.id'}) {
              $navmaps=(<<ENDNAV);
   <td bgcolor="$tabbg">
   <a href="javascript:gonav('/adm/navmaps?postdata=$escurl&postsymb=$escsymb')"><font color="$font">$lt{'nav'}</font></a></td>
   ENDNAV
       if (($ENV{'request.noversionuri'}=~/^\/adm\//) &&
                   ($ENV{'request.noversionuri'}!~/^\/adm\/wrapper\//) &&
            ($ENV{'request.noversionuri'}!~/^\/adm\/.*\/(smppg|bulletinboard|aboutme)(\?|$)/)) {
                   my $escreload=&Apache::lonnet::escape('return:');
                   $reloadlink=(<<ENDRELOAD);
   <td bgcolor="$tabbg">
   <a href="/adm/flip?postdata=$escreload" target="_top"><font color="$font">$lt{'ret'}</font></a></td>
   ENDRELOAD
               }
           }
           my $reg='';
           if ($registration) {
              $reg=&innerregister($forcereg,$target);
           }
    my $utility=&utilityfunctions();
    return (<<ENDINLINEMENU);
 <script>  <script>
 // BEGIN LON-CAPA Internal  // BEGIN LON-CAPA Internal
   $utility
 </script>  </script>
 <table bgcolor="#AAAAAA" width="100%" border="2"><tr><td>  <font face="Arial,Helvetica,sans-serif"><table bgcolor="$pgbg" width="100%" border="0" cellpadding="1" cellspacing="1">
 <a href="/adm/menu" target="_top">Main Menu</a>  <tr>
 <a href="/adm/remote?action=launch&url=$escurl" target="_top">Launch Remote Control</a>  <td bgcolor="$tabbg">
 <br />  <a href="/adm/menu" target="_top"><font color="$font">$lt{'main'}</font></a>
   </td>
   $reloadlink
   $navmaps
   <td bgcolor="$tabbg">
   <a href="/adm/remote?action=launch&url=$escurl" target="_top">
   <font color="$font">$lt{'launch'}</font></a></td>
   <td bgcolor="$tabbg">
   <img align="right" src="/adm/lonIcons/minilogo.gif" />
   <b>LON-CAPA</b></td>
   </tr>
   </table>
   </font>
 <script>  <script>
 // END LON-CAPA Internal  // END LON-CAPA Internal
 </script>  </script>
   $reg
 ENDINLINEMENU  ENDINLINEMENU
         if ($registration) { $output.=&innerregister($forcereg,$target); }  
  return $output."</td></tr></table>";  
     } else {      } else {
  return '';   return '';
     }      }
Line 93  sub registerurl { Line 191  sub registerurl {
     my $forcereg=shift;      my $forcereg=shift;
     my $target = shift;      my $target = shift;
     my $result = '';      my $result = '';
           if ($ENV{'request.noversionuri'} eq '/res/adm/pages/menu.html') { return ''; }
       my $force_title='';
       if ($ENV{'request.state'} eq 'construct') {
    $force_title=&Apache::lonxml::display_title();
       }
     if ($target eq 'edit') {      if ($target eq 'edit') {
         $result .="<script type=\"text/javascript\">\n".          $result .="<script type=\"text/javascript\">\n".
             "if (typeof swmenu != 'undefined') {swmenu.currentURL=null;}\n".              "if (typeof swmenu != 'undefined') {swmenu.currentURL=null;}\n".
Line 103  sub registerurl { Line 205  sub registerurl {
     if (($ENV{'browser.interface'} eq 'textual') ||      if (($ENV{'browser.interface'} eq 'textual') ||
         ($ENV{'environment.remote'} eq 'off') ||          ($ENV{'environment.remote'} eq 'off') ||
         ((($ENV{'request.publicaccess'}) ||           ((($ENV{'request.publicaccess'}) || 
          (!&Apache::lonnet::is_on_map($ENV{'REQUEST_URI'}))) &&           (!&Apache::lonnet::is_on_map(
      &Apache::lonnet::unescape($ENV{'request.noversionuri'})))) &&
         (!$forcereg))) {          (!$forcereg))) {
  return $result.    return $result.
          '<script type="text/javascript">function LONCAPAreg(){;} function LONCAPAstale(){}</script>';            '<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 ($Apache::lonxml::registered && !$forcereg) { return ''; }
     $result.=&innerregister($forcereg,$target);      if ($target ne 'edit') {
     return $result;   $result.=&innerregister($forcereg,$target);
       }
       return $result.$force_title;
 }  }
   
 # =========== This gets called in order to register a URL, both with the Remote  # =========== This gets called in order to register a URL, both with the Remote
Line 121  sub innerregister { Line 226  sub innerregister {
     my $forcereg=shift;      my $forcereg=shift;
     my $target = shift;      my $target = shift;
     my $result = '';      my $result = '';
       if ($ENV{'request.noversionuri'} eq '/res/adm/pages/menu.html') { return ''; }
   
     $Apache::lonxml::registered=1;      $Apache::lonxml::registered=1;
   
Line 129  sub innerregister { Line 235  sub innerregister {
           
     my $textual=($textinter || $noremote);      my $textual=($textinter || $noremote);
   
       @inlineremote=();
       undef @inlineremote;
   
     my $reopen=&Apache::lonmenu::reopenmenu();      my $reopen=&Apache::lonmenu::reopenmenu();
   
     my $newmail='';      my $newmail='';
       if ($noremote) {
    $newmail='<font face="Arial,Helvetica,sans-serif"><table bgcolor="'.$pgbg.'" border="0" cellspacing="1" cellpadding="1" width="100%"><tr><td bgcolor="'.$tabbg.'">';
       }
       if (($textual) && ($ENV{'request.symb'}) && ($ENV{'request.course.id'})) {
    my ($mapurl,$rid,$resurl)=&Apache::lonnet::decode_symb($ENV{'request.symb'});
           $newmail.=$ENV{'course.'.$ENV{'request.course.id'}.'.description'};
           my $maptitle=&Apache::lonnet::gettitle($mapurl);
    my $restitle=&Apache::lonnet::gettitle($resurl);
           if ($maptitle) {
       $newmail.=', '.$maptitle;
           }
           if ($restitle) {
       $newmail.=': '.$restitle;
           }
           $newmail.='&nbsp;&nbsp;&nbsp;';
       }
     if (&Apache::lonmsg::newmail()) {       if (&Apache::lonmsg::newmail()) { 
        $newmail=($textual?         $newmail=($textual?
  '<b><a href="/adm/communicate">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 ($noremote) {
    $newmail.='</td></tr></table></font>';
       }
     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 $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_URI'}!~/^\/(res\/)*adm\//) || ($forcereg)) {      if (($ENV{'request.noversionuri'}!~/^\/(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'};
    if ($ENV{'request.course.sec'}) {
       $crs.='_'.$ENV{'request.course.sec'};
    }
    $crs=~s/\_/\//g;
   
         my $hwkadd='';          my $hwkadd='';
         if           if ($ENV{'request.filename'}=~/\.(problem|exam|quiz|assess|survey|form)$/) {
       ($ENV{'request.filename'}=~/\.(problem|exam|quiz|assess|survey|form)$/) {      if (&Apache::lonnet::allowed('vgr',$crs)) {
     if (&Apache::lonnet::allowed('vgr',$ENV{'request.course.id'})) {   $hwkadd.=&switch('','',7,1,'subm.gif','view sub-[_1]','missions[_1]',
  $hwkadd.=&switch('','',7,1,'subm.gif','view sub','missions',  
                        "gocmd('/adm/grades','submission')",                         "gocmd('/adm/grades','submission')",
        'View user submissions for this assessment resource');         'View user submissions for this assessment resource');
             }              }
     if (&Apache::lonnet::allowed('mgr',$ENV{'request.course.id'})) {      if (&Apache::lonnet::allowed('mgr',$crs)) {
  $hwkadd.=&switch('','',7,2,'pgrd.gif','problem','grades',   $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');
             }              }
     if (&Apache::lonnet::allowed('opa',$ENV{'request.course.id'})) {   }
  $hwkadd.=&switch('','',7,3,'pparm.gif','problem','parms',   if (&Apache::lonnet::allowed('opa',$crs)) {
                        "gocmd('/adm/parmset','set')",      $hwkadd.=&switch('','',7,3,'pparm.gif','problem[_2]','parms[_2]',
                        'Modify deadlines, etc, for this assessment resource');       "gocmd('/adm/parmset','set')",
             }       'Modify deadlines, etc, for this resource');
  }   }
 # -- End Homework  # -- End Homework
         ###          ###
Line 184  sub innerregister { Line 319  sub innerregister {
                 }                  }
                 # Check that we are on the correct machine                  # Check that we are on the correct machine
                 my $home = &Apache::lonnet::homeserver($caname,$cadom);                  my $home = &Apache::lonnet::homeserver($caname,$cadom);
                 if ($home eq $Apache::lonnet::perlvar{'lonHostID'}) {   my $allowed=0;
                     $editbutton=&switch   my @ids=&Apache::lonnet::current_machine_ids();
                         ('','',6,1,$top,,$bottom,$action,$desc);   foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } }
    if (!$allowed) {
       $editbutton=&switch('','',6,1,$top,,$bottom,$action,$desc);
                 }                  }
             }              }
             ##              ##
Line 198  sub innerregister { Line 335  sub innerregister {
             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/;
                 # Chech 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);
                 if (defined($cfudom)) {                  if (defined($cfudom)) {
                     if (&Apache::lonnet::homeserver($cfuname,$cfudom)       my $home=&Apache::lonnet::homeserver($cfuname,$cfudom);
                         eq $Apache::lonnet::perlvar{'lonHostID'}) {      my $allowed=0;
       my @ids=&Apache::lonnet::current_machine_ids();
       foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } }
       if ($allowed) {
                         $cfile=$file;                          $cfile=$file;
                     }                      }
                 }                  }
Line 210  sub innerregister { Line 350  sub innerregister {
             # Finally, turn the button on or off              # Finally, turn the button on or off
             if ($cfile) {              if ($cfile) {
                 $editbutton=&switch                  $editbutton=&switch
                     ('','',6,1,'cstr.gif','edit','resource',                      ('','',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=&clear(6,1);
Line 221  sub innerregister { Line 361  sub innerregister {
 # Prepare the rest of the buttons  # Prepare the rest of the buttons
  my $menuitems=(<<ENDMENUITEMS);   my $menuitems=(<<ENDMENUITEMS);
 c&3&1  c&3&1
 s&2&1&back.gif&backward&&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
 s&2&3&forw.gif&forward&&gopost('/adm/flip','forward:'+currentURL)&Go to the next resource in the course sequence&1  s&2&3&forw.gif&forward[_1]&&gopost('/adm/flip','forward:'+currentURL)&Go to the next resource in the course sequence&3
 s&6&3&catalog.gif&catalog&info&catalog_info()&Show catalog information  c&6&3
 s&8&1&eval.gif&evaluate&this&gopost('/adm/evaluate',currentURL)&Provide my evaluation of this resource  c&8&1
 s&8&2&fdbk.gif&feedback&discuss&gopost('/adm/feedback',currentURL)&Provide feedback messages or contribute to the course discussion about this resource  c&8&2
 s&8&3&prt.gif&prepare&printout&gopost('/adm/printout',currentURL)&Prepare a printable document  s&8&3&prt.gif&prepare[_1]&printout[_1]&gopost('/adm/printout',currentURL)&Prepare a printable document
 s&9&1&sbkm.gif&set&bookmark&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&2&vbkm.gif&view&bookmark&edit_bookmarks()&Use or edit my bookmark collection&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-&tations&annotate()&Make notes and annotations about this resource&2  
 ENDMENUITEMS  ENDMENUITEMS
           unless ($ENV{'request.noversionuri'}=~/\/(bulletinboard|smppg|navmaps|syllabus|aboutme)(\?|$)/) {
       $menuitems.=(<<ENDREALRES);
   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&2&fdbk.gif&feedback[_1]&discuss[_1]&gopost('/adm/feedback',currentURL,1)&Provide feedback messages or contribute to the course discussion about this resource
   ENDREALRES
    }
         my $buttons='';          my $buttons='';
         foreach (split(/\n/,$menuitems)) {          foreach (split(/\n/,$menuitems)) {
     my ($command,@rest)=split(/\&/,$_);      my ($command,@rest)=split(/\&/,$_);
Line 242  ENDMENUITEMS Line 388  ENDMENUITEMS
         }          }
         if ($textual) {          if ($textual) {
 # Registered, textual output  # Registered, textual output
             my $utility=&utilityfunctions();  
             my $form=&serverform();              my $form=&serverform();
       my $inlinebuttons='';
   
       if ($ENV{'browser.interface'} eq 'textual') {
    $inlinebuttons=
                           join('',map { (defined($_)?$_:'') } @inlineremote);
       } else {
    $inlinebuttons=(<<ENDINLINE);
   <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[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[91]</td><td>$inlineremote[92]</td><td>$inlineremote[93]</td></tr>
   ENDINLINE
       }
     $result =(<<ENDREGTEXT);      $result =(<<ENDREGTEXT);
 <script>  <script>
 // BEGIN LON-CAPA Internal  // BEGIN LON-CAPA Internal
 $utility  
 </script>  </script>
 $timesync  $timesync
 $newmail  $newmail
 $buttons  $tablestart
 $hwkadd  $inlinebuttons
 $editbutton  $tableend
 $form  $form
 <script>  <script>
 //END LON-CAPA Internal  // END LON-CAPA Internal
 </script>  </script>
   
 ENDREGTEXT  ENDREGTEXT
 # Registered, graphical output  # Registered, graphical output
         } else {          } else {
       my $requri=(split(/\?/,$ENV{'request.noversionuri'}))[0];
       $requri=&Apache::lonnet::unescape($requri);
       my $navstatus=&get_nav_status();
     $result = (<<ENDREGTHIS);      $result = (<<ENDREGTHIS);
             
 <script language="JavaScript">  <script language="JavaScript">
Line 274  var swmenu=null; Line 435  var swmenu=null;
           $timesync            $timesync
           $newmail            $newmail
           $buttons            $buttons
   swmenu.currentURL=window.location.pathname;    swmenu.currentURL="$requri";
           swmenu.reloadURL=window.location.pathname+window.location.search;            swmenu.reloadURL=swmenu.currentURL+window.location.search;
           swmenu.currentSymb="$ENV{'request.symb'}";            swmenu.currentSymb="$ENV{'request.symb'}";
           swmenu.reloadSymb="$ENV{'request.symb'}";            swmenu.reloadSymb="$ENV{'request.symb'}";
           swmenu.currentStale=0;            swmenu.currentStale=0;
     $navstatus
           $hwkadd            $hwkadd
           $editbutton            $editbutton
     }      }
Line 295  var swmenu=null; Line 457  var swmenu=null;
           swmenu.clearbut(7,3);            swmenu.clearbut(7,3);
           swmenu.menucltim=swmenu.setTimeout(            swmenu.menucltim=swmenu.setTimeout(
  'clearbut(2,1);clearbut(2,3);clearbut(8,1);clearbut(8,2);clearbut(8,3);'+   'clearbut(2,1);clearbut(2,3);clearbut(8,1);clearbut(8,2);clearbut(8,3);'+
  'clearbut(9,1);clearbut(9,2);clearbut(9,3);clearbut(6,3);clearbut(6,1)',   'clearbut(9,1);clearbut(9,3);clearbut(6,3);clearbut(6,1)',
   2000);    2000);
   
       }        }
   
 // END LON-CAPA Internal  // END LON-CAPA Internal
Line 349  ENDDONOTREGTHIS Line 510  ENDDONOTREGTHIS
 }  }
   
 sub loadevents() {  sub loadevents() {
       if ($ENV{'request.noversionuri'} eq '/res/adm/pages/menu.html') { return ''; }
     return 'LONCAPAreg();';      return 'LONCAPAreg();';
 }  }
   
 sub unloadevents() {  sub unloadevents() {
       if ($ENV{'request.noversionuri'} eq '/res/adm/pages/menu.html') { return ''; }
     return 'LONCAPAstale();';      return 'LONCAPAstale();';
 }  }
   
Line 369  sub startupremote { Line 532  sub startupremote {
 #  #
     my $configmenu=&rawconfig();      my $configmenu=&rawconfig();
     my $esclowerurl=&Apache::lonnet::escape($lowerurl);      my $esclowerurl=&Apache::lonnet::escape($lowerurl);
       my $message=&mt('"Waiting for remote to load "+[_1]','waited');
     return(<<ENDREMOTESTARTUP);      return(<<ENDREMOTESTARTUP);
 <script>  <script>
   var timestart;
 function wheelswitch() {  function wheelswitch() {
       if (typeof(document.wheel) != 'undefined') {
    if (typeof(document.wheel.spin) != 'undefined') {
       var date=new Date();
       var waited=Math.round(30-((date.getTime()-timestart)/1000));
       document.wheel.spin.value=$message;
    }
       }
    if (window.status=='|') {      if (window.status=='|') { 
       window.status='/';         window.status='/'; 
    } else {     } else {
Line 410  function wait() { Line 580  function wait() {
 function main() {  function main() {
    canceltim=setTimeout('tim=1;',30000);     canceltim=setTimeout('tim=1;',30000);
    window.status='-';     window.status='-';
      var date=new Date();
      timestart=date.getTime();
    wait();     wait();
 }  }
   
Line 435  sub maincall() { Line 607  sub maincall() {
 </script>  </script>
 ENDMAINCALL  ENDMAINCALL
 }  }
   
   sub load_remote_msg {
       my ($lowerurl)=@_;
   
       if (($ENV{'browser.interface'} eq 'textual') ||
           ($ENV{'environment.remote'} eq 'off')) { return ''; }
   
       my $esclowerurl=&Apache::lonnet::escape($lowerurl);
       my $link=&mt('<a href="[_1]">Continue</a> on in inline remote mode',
       "/adm/remote?action=collapse?url=$esclowerurl");
       return(<<ENDREMOTEFORM);
   <p>
   <form name="wheel">
   <input name="spin" type="text" size="40"/>
   </form>
   </p>
   <p>$link</p>
   ENDREMOTEFORM
   }
 # ================================================================= Reopen menu  # ================================================================= Reopen menu
   
 sub reopenmenu {  sub reopenmenu {
Line 450  sub reopenmenu { Line 641  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')) { return ''; }          ($ENV{'environment.remote'} eq 'off')) { 
    return '<script type="text/javascript">self.name="loncapaclient";</script>';
       }
     my $menuname='LCmenu'.$Apache::lonnet::perlvar{'lonHostID'};      my $menuname='LCmenu'.$Apache::lonnet::perlvar{'lonHostID'};
     unless (shift eq 'unix') {      unless (shift eq 'unix') {
 # resizing does not work on linux because of virtual desktop sizes  # resizing does not work on linux because of virtual desktop sizes
Line 465  ENDRESIZE Line 658  ENDRESIZE
 window.status='Opening LON-CAPA Remote Control';  window.status='Opening LON-CAPA Remote Control';
 var menu=window.open("/res/adm/pages/menu.html","$menuname",  var menu=window.open("/res/adm/pages/menu.html","$menuname",
 "height=350,width=150,scrollbars=no,menubar=no,top=5,left=5,screenX=5,screenY=5");  "height=350,width=150,scrollbars=no,menubar=no,top=5,left=5,screenX=5,screenY=5");
   self.name='loncapaclient';
 ENDOPEN  ENDOPEN
     return '<script>'.$returnval.'</script>';      return '<script>'.$returnval.'</script>';
 }  }
Line 477  sub clear { Line 671  sub clear {
     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 { return ''; }     } else { 
          $inlineremote[10*$row+$col]='';
          return ''; 
      }
 }  }
   
 # ============================================ Switch a button or create a link  # ============================================ Switch a button or create a link
Line 488  sub switch { Line 685  sub switch {
     my ($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc,$nobreak)=@_;      my ($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc,$nobreak)=@_;
     $act=~s/\$uname/$uname/g;      $act=~s/\$uname/$uname/g;
     $act=~s/\$udom/$udom/g;      $act=~s/\$udom/$udom/g;
       $top=&mt($top);
       $bot=&mt($bot);
       $desc=&mt($desc);
       $img=&mt($img);
     unless (($ENV{'browser.interface'} eq 'textual')  ||      unless (($ENV{'browser.interface'} eq 'textual')  ||
             ($ENV{'environment.remote'} eq 'off')) {              ($ENV{'environment.remote'} eq 'off')) {
 # Remote  # Remote
Line 497  sub switch { Line 698  sub switch {
 # Accessibility  # Accessibility
        if ($nobreak==2) { return ''; }         if ($nobreak==2) { return ''; }
        my $text=$top.' '.$bot;         my $text=$top.' '.$bot;
        $text=~s/\- //;         $text=~s/\s*\-\s*//gs;
        return "\n".($nobreak?' ':'<br />').         if ($nobreak) {
         '<a href="javascript:'.$act.';" target="_top">'.$text.'</a> '.     $inlineremote[10*$row+$col]=
         ($nobreak?'':$desc);         '<a href="javascript:'.$act.';">'.$text.'</a>';
          } else {
      $inlineremote[10*$row+$col]="\n<br />".
          $desc.' <a href="javascript:'.$act.';">'.$text.'</a>';
          }
    } else {     } else {
 # Inline Remote  # Inline Remote
        if ($nobreak==2) { return ''; }         if ($nobreak==2) { return ''; }
        my $text=$top.' '.$bot;         my $text=$top.' '.$bot;
        $text=~s/\- //;         $text=~s/\s*\-\s*//gs;
        return "\n".($nobreak?' ':'<br />').  
         '<a href="javascript:'.$act.';" target="_top">'.$text.'</a> '.         my $lonhttpdPort=$Apache::lonnet::perlvar{'lonhttpdPort'};
         ($nobreak?'':$desc);         if (!defined($lonhttpdPort)) { $lonhttpdPort='8080'; }
          my $pic=
      '<img border="0" alt="'.$text.'" src="http://'.$ENV{'HTTP_HOST'}.
      ':'.$lonhttpdPort.'/res/adm/pages/'.$img.'" align="'.
      ($nobreak==3?'right':'left').'" />';
          if (($ENV{'browser.interface'} eq 'textual') || ($ENV{'browser.interface'} eq 'faketextual')) {
   # Accessibility
      if ($nobreak==3) {
          $inlineremote[10*$row+$col]="\n".
      '<td width="40%" align="right"><font color="'.$font.'" size="+1">'.$text.
      '</font></td><td width="10%" align="right" bgcolor="'.$tabbg.'">'.
      '<a href="javascript:'.$act.';">'.$pic.'</a></td></tr>';
      } elsif ($nobreak) {
          $inlineremote[10*$row+$col]="\n<tr>".
      '<td width="10%" align="left" bgcolor="'.$tabbg.'">'.
      '<a href="javascript:'.$act.';">'.$pic.
      '</a></td><td width="40%" align="left"><font color="'.$font.'" size="+1">'.$text.'</font></td>';
      } else {
          $inlineremote[10*$row+$col]="\n<tr>".
      '<td width="10%" align="left" bgcolor="'.$tabbg.'">'.
      '<a href="javascript:'.$act.';">'.$pic.
      '</a></td><td colspan="3"><font color="'.$font.'">'.$desc.
      '</font></td></tr>';       
      }
          } else {
   # Inline Menu
      $inlineremote[10*$row+$col]=
      '<a href="javascript:'.$act.';">'.$pic.
      '</a><font color="'.$font.'" size="2">'.$desc.
      '</font>';
          }
    }     }
       return '';
 }  }
   
 sub secondlevel {  sub secondlevel {
Line 534  sub openmenu { Line 770  sub openmenu {
     return "window.open(".$nothing.",'".$menuname."');";      return "window.open(".$nothing.",'".$menuname."');";
 }  }
   
   sub inlinemenu {
       @inlineremote=();
       undef @inlineremote;
       &rawconfig(1);
       return join('',map { (defined($_)?$_:'') } @inlineremote);
   }
   
 sub rawconfig {  sub rawconfig {
     my $textualoverride=shift;      my $textualoverride=shift;
     my $output='';      my $output='';
Line 582  sub rawconfig { Line 825  sub rawconfig {
                $output.=&secondlevel(                 $output.=&secondlevel(
   $uname,$udom,$rol,$crs,$pub,$con,$row,$col,$prt,$img,$top,$bot,$act,$desc);    $uname,$udom,$rol,$crs,$pub,$con,$row,$col,$prt,$img,$top,$bot,$act,$desc);
             }              }
         } elsif (($pro=~/p(\w+)/) && ($prt)) {          } elsif (($pro=~/^p(\w+)/) && ($prt)) {
     if (&Apache::lonnet::allowed($1,$prt)) {      if (&Apache::lonnet::allowed($1,$prt)) {
                $output.=switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc);                 $output.=switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc);
             }              }
Line 590  sub rawconfig { Line 833  sub rawconfig {
             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 =~ /^course_(.*)$/) {
               # Check for permissions inside of a course
               if (($ENV{'request.course.id'}) &&
                   (&Apache::lonnet::allowed($1,$ENV{'request.course.id'}.
               ($ENV{'request.course.sec'}?'/'.$ENV{'request.course.sec'}:''))
                    )) {
                   $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/)) ||
Line 603  sub rawconfig { Line 854  sub rawconfig {
                     }                                             }                       
                     $act =~ s/\$caname/$caname/g;                      $act =~ s/\$caname/$caname/g;
                     my $home = &Apache::lonnet::homeserver($caname,$cadom);                      my $home = &Apache::lonnet::homeserver($caname,$cadom);
                     if ($home eq $Apache::lonnet::perlvar{'lonHostID'}) {      my $allowed=0;
       my @ids=&Apache::lonnet::current_machine_ids();
       foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } }
       if ($allowed) {
                         $output.=switch($caname,$cadom,                          $output.=switch($caname,$cadom,
                                         $row,$col,$img,$top,$bot,$act,$desc);                                          $row,$col,$img,$top,$bot,$act,$desc);
                     }                      }
Line 648  sub footer { Line 902  sub footer {
 sub utilityfunctions {  sub utilityfunctions {
     unless (($ENV{'browser.interface'} eq 'textual')  ||      unless (($ENV{'browser.interface'} eq 'textual')  ||
         ($ENV{'environment.remote'} eq 'off')) { return ''; }          ($ENV{'environment.remote'} eq 'off')) { return ''; }
     my $currenturl=$ENV{'REQUEST_URI'};      my $currenturl=$ENV{'request.noversionuri'};
     my $currentsymb=$ENV{'request.symb'};      my $currentsymb=$ENV{'request.symb'};
       my $nav_control=&Apache::lonnavmaps::nav_control_js();
 return (<<ENDUTILITY)  return (<<ENDUTILITY)
   
     var currentURL="$currenturl";      var currentURL="$currenturl";
     var reloadURL="$currenturl";      var reloadURL="$currenturl";
     var currentSymb="$currentsymb";      var currentSymb="$currentsymb";
   
   $nav_control
   
 function go(url) {  function go(url) {
    if (url!='' && url!= null) {     if (url!='' && url!= null) {
        currentURL = null;         currentURL = null;
Line 685  function gocmd(url,cmd) { Line 942  function gocmd(url,cmd) {
       this.document.server.submit();        this.document.server.submit();
    }     }
 }  }
   
   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');
   }
   
   function chat_win() {
      lonchat=window.open('/res/adm/pages/chatroom.html',"LONchat",'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">  <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 699  sub serverform { Line 964  sub serverform {
 </form>  </form>
 ENDSERVERFORM  ENDSERVERFORM
 }  }
   
   sub get_nav_status {
       my $navstatus="swmenu.w_loncapanav_flag=";
       if ($ENV{'environment.remotenavmap'} eq 'on') {
    $navstatus.="1";
       } else {
    $navstatus.="-1";
       }
       return $navstatus;
   }
   
 # ================================================ Handler when called directly  # ================================================ Handler when called directly
   
   
 sub handler {  sub handler {
     my $r = shift;      my $r = shift;
     $r->content_type('text/html');      &Apache::loncommon::content_type($r,'text/html');
     $r->send_http_header;      $r->send_http_header;
     return OK if $r->header_only;      return OK if $r->header_only;
   
     my $form=&serverform();      my $form=&serverform();
     my $bodytag=&Apache::loncommon::bodytag('Main Menu');      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);
 # ---- Print the screen, pretent to be in text mode to generate text-based menu  # ---- Print the screen, pretent to be in text mode to generate text-based menu
     unless ($ENV{'brower.interface'} eq 'textual') {      unless ($ENV{'browser.interface'} eq 'textual') {
    $ENV{'browser.interface'}='faketextual';
  $ENV{'environment.remote'}='off';   $ENV{'environment.remote'}='off';
     }      }
     my $utility=&utilityfunctions();  
     $r->print(<<ENDHEADER);      $r->print(<<ENDHEADER);
 <html><head>  <html><head>
 <title>LON-CAPA Main Menu</title>  <title>LON-CAPA Main Menu</title>
 <script>  
 $utility  
 </script>  
 </head>  </head>
 $bodytag  $bodytag
 ENDHEADER  ENDHEADER
     $r->print(&rawconfig(1).$form);      $r->print('<table>'.&inlinemenu().'</table>'.$form);
     $r->print('</body></html>');      $r->print('</body></html>');
     return OK;      return OK;
 }  }
Line 734  ENDHEADER Line 1022  ENDHEADER
 BEGIN {  BEGIN {
   if (! defined($readdesk)) {    if (! defined($readdesk)) {
    {     {
     my $config=Apache::File->new($Apache::lonnet::perlvar{'lonTabDir'}.      my $tabfile = $Apache::lonnet::perlvar{'lonTabDir'}.'/mydesk.tab';
   '/mydesk.tab');      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;                  $desklines[$#desklines+1]=$configline;
        }              }
           }
           CORE::close($config);
     }      }
    }     }
    $readdesk='done';     $readdesk='done';

Removed from v.1.54  
changed lines
  Added in v.1.118


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.