Diff for /loncom/interface/lonmenu.pm between versions 1.38 and 1.43

version 1.38, 2003/02/14 19:35:54 version 1.43, 2003/02/20 18:00:31
Line 41  use Apache::loncommon; Line 41  use Apache::loncommon;
 use Apache::File;  use Apache::File;
 use vars qw(@desklines $readdesk);  use vars qw(@desklines $readdesk);
   
 # ======================================================= Make the menu buttons  # ============================= 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;
     unless ($ENV{'browser.interface'} eq 'textual') { return ''; }      unless ($ENV{'browser.interface'} eq 'textual') { return ''; }
     return "Menu here<hr />";  # Textual display only
       my $output='<a href="/adm/menu" target="_top">Main Menu</a><br />';
       if ($registration) { $output.=&innerregister($forcereg,$target); }
       return $output."<hr />";
 }  }
   
 # ============================================== Register a URL with the remote  # ====================================== This gets called in the header section
   
   
 sub registerurl {  sub registerurl {
     my $forcereg=shift;      my $forcereg=shift;
Line 71  sub registerurl { Line 74  sub registerurl {
  return $result.   return $result.
          '<script type="text/javascript">function LONCAPAreg(){;} function LONCAPAstale(){}</script>';           '<script type="text/javascript">function LONCAPAreg(){;} function LONCAPAstale(){}</script>';
     }      }
   # Graphical display after login only
     if ($Apache::lonxml::registered && !$forcereg) { return ''; }      if ($Apache::lonxml::registered && !$forcereg) { return ''; }
       $result.=&innerregister($forcereg,$target);
       return $result;
   }
   
   # =========== This gets called in order to register a URL, both with the Remote
   # =========== and in the body of the document
   
   sub innerregister {
       my $forcereg=shift;
       my $target = shift;
       my $result = '';
   
     $Apache::lonxml::registered=1;      $Apache::lonxml::registered=1;
   
       my $textual=($ENV{'browser.interface'} eq 'textual');
     my $reopen=&Apache::lonmenu::reopenmenu();      my $reopen=&Apache::lonmenu::reopenmenu();
   
     my $newmail='';      my $newmail='';
     if (&Apache::lonmsg::newmail()) {       if (&Apache::lonmsg::newmail()) { 
        $newmail='swmenu.setstatus("you have","messages");';         $newmail=($textual?
     }   '<b><a href="/adm/communicate">You have new messages</a></b><br />':
     my $timesync='swmenu.syncclock(1000*'.time.');';                            'swmenu.setstatus("you have","messages");');
       }
       my $timesync=($textual?'':'swmenu.syncclock(1000*'.time.');');
   # =============================================================================
   # ============================ This is for URLs that actually can be registered
     if (($ENV{'REQUEST_URI'}!~/^\/(res\/)*adm\//) || ($forcereg)) {      if (($ENV{'REQUEST_URI'}!~/^\/(res\/)*adm\//) || ($forcereg)) {
   # -- This applies to homework problems for users with grading privileges
         my $hwkadd='';          my $hwkadd='';
         if ($ENV{'request.filename'}=~/\.(problem|exam|quiz|assess|survey|form)$/) {          if 
         ($ENV{'request.filename'}=~/\.(problem|exam|quiz|assess|survey|form)$/) {
     if (&Apache::lonnet::allowed('vgr',$ENV{'request.course.id'})) {      if (&Apache::lonnet::allowed('vgr',$ENV{'request.course.id'})) {
  $hwkadd.=(<<ENDSUBM);   $hwkadd.=&switch('','',7,1,'subm.gif','view sub','missions',
                      swmenu.switchbutton(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');
 ENDSUBM  
             }              }
     if (&Apache::lonnet::allowed('mgr',$ENV{'request.course.id'})) {      if (&Apache::lonnet::allowed('mgr',$ENV{'request.course.id'})) {
  $hwkadd.=(<<ENDGRDS);   $hwkadd.=&switch('','',7,2,'pgrd.gif','problem','grades',
                      swmenu.switchbutton(7,2,'pgrd.gif','problem','grades','gocmd("/adm/grades","gradingmenu")',                         "gocmd('/adm/grades','gradingmenu')",
                      'Modify user grades for this assessment resource');                         'Modify user grades for this assessment resource');
 ENDGRDS  
             }              }
     if (&Apache::lonnet::allowed('opa',$ENV{'request.course.id'})) {      if (&Apache::lonnet::allowed('opa',$ENV{'request.course.id'})) {
  $hwkadd.=(<<ENDPARM);   $hwkadd.=&switch('','',7,3,'pparm.gif','problem','parms',
                      swmenu.switchbutton(7,3,'pparm.gif','problem','parms','gocmd("/adm/parmset","set")',                         "gocmd('/adm/parmset','set')",
                      'Modify deadlines, etc, for this assessment resource');                         'Modify deadlines, etc, for this assessment resource');
 ENDPARM  
             }              }
  }   }
   # -- End Homework
         ###          ###
         ### Determine whether or not to display the 'cstr' button for this          ### Determine whether or not to display the 'cstr' button for this
         ### resource          ### resource
Line 124  ENDPARM Line 147  ENDPARM
                 # 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'}) {                  if ($home eq $Apache::lonnet::perlvar{'lonHostID'}) {
                     $editbutton=&Apache::lonmenu::switch                      $editbutton=&switch
                         ('','',6,1,$top,,$bottom,$action,$desc);                          ('','',6,1,$top,,$bottom,$action,$desc);
                 }                  }
             }              }
Line 148  ENDPARM Line 171  ENDPARM
             }                      }        
             # Finally, turn the button on or off              # Finally, turn the button on or off
             if ($cfile) {              if ($cfile) {
                 $editbutton=&Apache::lonmenu::switch                  $editbutton=&switch
                     ('','',6,1,'cstr.gif','edit','resource',                      ('','',6,1,'cstr.gif','edit','resource',
                      "go('".$cfile."');","Edit this resource");                       "go('".$cfile."');","Edit this resource");
             } elsif ($editbutton eq '') {              } elsif ($editbutton eq '') {
                 $editbutton = '    swmenu.clearbut(6,1);';                  $editbutton=&clear(6,1);
             }              }
         }          }
         ###          ###
         ###          ###
  $result = (<<ENDREGTHIS);  # Prepare the rest of the buttons
    my $menuitems=(<<ENDMENUITEMS);
   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&3&forw.gif&forward&&gopost('/adm/flip','forward:'+currentURL)&Go to the next resource in the course sequence&1
   s&6&3&catalog.gif&catalog&info&catalog_info()&Show catalog information
   s&8&1&eval.gif&evaluate&this&gopost('/adm/evaluate',currentURL)&Provide my evaluation of this resource
   s&8&2&fdbk.gif&feedback&discuss&gopost('/adm/feedback',currentURL)&Provide feedback messages or contribute to the course discussion about this resource
   s&8&3&prt.gif&prepare&printout&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&2&vbkm.gif&view&bookmark&edit_bookmarks()&Use or edit my bookmark collection&2
   s&9&3&anot.gif&anno-&tations&annotate()&Make notes and annotations about this resource&2
   ENDMENUITEMS
           my $buttons='';
           foreach (split(/\n/,$menuitems)) {
       my ($command,@rest)=split(/\&/,$_);
               if ($command eq 's') {
    $buttons.=&switch('','',@rest);
               } else {
                   $buttons.=&clear(@rest);
               }
           }
           if ($textual) {
   # Registered, textual output
               my $utility=&utilityfunctions();
               my $form=&serverform();
       $result =(<<ENDREGTEXT);
   <script>
   // BEGIN LON-CAPA Internal
   $utility
   </script>
   $timesync
   $newmail
   $buttons
   $hwkadd
   $editbutton
   $form
   <script>
   //END LON-CAPA Internal
   </script>
   
   ENDREGTEXT
   # Registered, graphical output
           } else {
       $result = (<<ENDREGTHIS);
             
 <script language="JavaScript">  <script language="JavaScript">
 // BEGIN LON-CAPA Internal  // BEGIN LON-CAPA Internal
   var swmenu=null;
   
     function LONCAPAreg() {      function LONCAPAreg() {
   swmenu=$reopen;    swmenu=$reopen;
           swmenu.clearTimeout(swmenu.menucltim);            swmenu.clearTimeout(swmenu.menucltim);
           $timesync            $timesync
           $newmail            $newmail
             $buttons
   swmenu.currentURL=window.location.pathname;    swmenu.currentURL=window.location.pathname;
           swmenu.reloadURL=window.location.pathname;            swmenu.reloadURL=window.location.pathname;
           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;
           swmenu.clearbut(3,1);  
           swmenu.switchbutton  
        (6,3,'catalog.gif','catalog','info','catalog_info()','Show catalog information');  
           swmenu.switchbutton  
        (8,1,'eval.gif','evaluate','this','gopost("/adm/evaluate",currentURL)','Provide my evaluation of this resource');  
           swmenu.switchbutton  
     (8,2,'fdbk.gif','feedback','discuss','gopost("/adm/feedback",currentURL)','Provide feedback messages or contribute to the course discussion about this resource');  
           swmenu.switchbutton  
      (8,3,'prt.gif','prepare','printout','gopost("/adm/printout",currentURL)','Prepare a printable document');  
           swmenu.switchbutton  
        (2,1,'back.gif','backward','','gopost("/adm/flip","back:"+currentURL)','Go to the previous resource in the course sequence');  
           swmenu.switchbutton  
      (2,3,'forw.gif','forward','','gopost("/adm/flip","forward:"+currentURL)','Go to the next resource in the course sequence');  
           swmenu.switchbutton  
                             (9,1,'sbkm.gif','set','bookmark','set_bookmark()','Set a bookmark for this resource');  
           swmenu.switchbutton  
                          (9,2,'vbkm.gif','view','bookmark','edit_bookmarks()','Use or edit my bookmark collection');  
           swmenu.switchbutton  
                                (9,3,'anot.gif','anno-','tations','annotate()','Make notes and annotations about this resource');  
           $hwkadd            $hwkadd
           $editbutton            $editbutton
     }      }
Line 215  ENDPARM Line 265  ENDPARM
 // END LON-CAPA Internal  // END LON-CAPA Internal
 </script>  </script>
 ENDREGTHIS  ENDREGTHIS
           }
   # =============================================================================
     } else {      } else {
         $result = (<<ENDDONOTREGTHIS);  # ========================================== This can or will not be registered
           if ($textual) {
   # Not registered, textual
       $result= (<<ENDDONOTREGTEXT);
   ENDDONOTREGTEXT
           } else {
   # Not registered, graphical
              $result = (<<ENDDONOTREGTHIS);
   
 <script language="JavaScript">  <script language="JavaScript">
 // BEGIN LON-CAPA Internal  // BEGIN LON-CAPA Internal
   var swmenu=null;
   
     function LONCAPAreg() {      function LONCAPAreg() {
   swmenu=$reopen    swmenu=$reopen
Line 245  ENDREGTHIS Line 304  ENDREGTHIS
 // END LON-CAPA Internal  // END LON-CAPA Internal
 </script>  </script>
 ENDDONOTREGTHIS  ENDDONOTREGTHIS
          }
   # =============================================================================
     }      }
     return $result;      return $result;
 }  }
Line 372  sub clear { Line 433  sub clear {
    } else { return ''; }     } else { return ''; }
 }  }
   
   # ============================================ Switch a button or create a link
 # Switch acts on the javascript that is executed when a button is clicked.    # Switch acts on the javascript that is executed when a button is clicked.  
 # The javascript is usually similar to "go('/adm/roles')" or "cstrgo(..)".  # The javascript is usually similar to "go('/adm/roles')" or "cstrgo(..)".
   
 sub switch {  sub switch {
     my ($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc)=@_;      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;
     unless ($ENV{'browser.interface'} eq 'textual') {      unless ($ENV{'browser.interface'} eq 'textual') {
        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"););
    } else {     } else {
          if ($nobreak==2) { return ''; }
        my $text=$top.' '.$bot;         my $text=$top.' '.$bot;
        $text=~s/\- //;         $text=~s/\- //;
        return '<br /><a href="javascript:'.$act.';">'.$text.'</a> '.$desc;         return "\n".($nobreak?' ':'<br />').
           '<a href="javascript:'.$act.';" target="_top">'.$text.'</a> '.
           ($nobreak?'':$desc);
    }     }
 }  }
   
Line 520  sub footer { Line 586  sub footer {
   
 }  }
   
   sub utilityfunctions {
       unless ($ENV{'browser.interface'} eq 'textual') { return ''; }
       my $currenturl=$ENV{'REQUEST_URI'};
       my $currentsymb=$ENV{'request.symb'};
   return (<<ENDUTILITY)
   
       var currentURL="$currenturl";
       var reloadURL="$currenturl";
       var currentSymb="$currentsymb";
   
   function go(url) {
      if (url!='' && url!= null) {
          currentURL = null;
          currentSymb= null;
          window.location.href=url;
      }
   }
   
   function gopost(url,postdata) {
      if (url!='') {
         this.document.server.action=url;
         this.document.server.postdata.value=postdata;
         this.document.server.command.value='';
         this.document.server.url.value='';
         this.document.server.symb.value='';
         this.document.server.submit();
      }
   }
   
   function gocmd(url,cmd) {
      if (url!='') {
         this.document.server.action=url;
         this.document.server.postdata.value='';
         this.document.server.command.value=cmd;
         this.document.server.url.value=currentURL;
         this.document.server.symb.value=currentSymb;
         this.document.server.submit();
      }
   }
   ENDUTILITY
   }
   
   sub serverform {
       return(<<ENDSERVERFORM);
   
   <form name="server" action="/adm/logout" method="post">
   <input type="hidden" name="postdata" value="none" />
   <input type="hidden" name="command" value="none" />
   <input type="hidden" name="url" value="none" />
   <input type="hidden" name="symb" value="none" />
   </form>
   ENDSERVERFORM
   }
 # ================================================ Handler when called directly  # ================================================ Handler when called directly
   
   
Line 529  sub handler { Line 648  sub handler {
     $r->send_http_header;      $r->send_http_header;
     return OK if $r->header_only;      return OK if $r->header_only;
   
       my $utility=&utilityfunctions();
       my $form=&serverform();
     my $bodytag=&Apache::loncommon::bodytag('Main Menu');      my $bodytag=&Apache::loncommon::bodytag('Main Menu');
 # ------------------------------------------------------------ Print the screen  # ------------------------------------------------------------ Print the screen
     $r->print(<<ENDHEADER);      $r->print(<<ENDHEADER);
 <html><head>  <html><head>
 <title>LON-CAPA Main Menu</title>  <title>LON-CAPA Main Menu</title>
 <script>  <script>
 function go(url) {  $utility
     window.location=url;  
 }  
 function gopost(url) {  
     window.location=url;  
 }  
 </script>  </script>
 </head>  </head>
 $bodytag  $bodytag
 ENDHEADER  ENDHEADER
     $r->print(&rawconfig(1));      $r->print(&rawconfig(1).$form);
     $r->print('</body></html>');      $r->print('</body></html>');
     return OK;      return OK;
 }  }

Removed from v.1.38  
changed lines
  Added in v.1.43


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