--- loncom/interface/lonmenu.pm	2004/12/03 22:10:39	1.135
+++ loncom/interface/lonmenu.pm	2005/02/21 00:32:04	1.149
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Routines to control the menu
 #
-# $Id: lonmenu.pm,v 1.135 2004/12/03 22:10:39 albertel Exp $
+# $Id: lonmenu.pm,v 1.149 2005/02/21 00:32:04 www Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -60,6 +60,9 @@ sub initlittle {
     return &Apache::lonlocal::texthash('ret' => 'Return to Last Location',
 				       'nav' => 'Navigate Contents',
 				       'main' => 'Main Menu',
+                                       'roles' => ($ENV{'user.adv'}?
+                                                    'Roles':'Courses'),
+                                       'exit' => 'Exit',
 				       'launch' => 'Launch Remote Control');
 }
 
@@ -72,7 +75,8 @@ sub menubuttons {
     my $titletable=shift;
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
 					    ['inhibitmenu']);
-    if ($ENV{'form.inhibitmenu'} eq 'yes') { return ''; }
+    if (($ENV{'form.inhibitmenu'} eq 'yes') ||
+        ($ENV{'REQUEST_URI'} eq '/adm/logout')) { return ''; }
 
     my $navmaps='';
     my $reloadlink='';
@@ -103,16 +107,20 @@ ENDNAV
 <a href="/adm/flip?postdata=$escreload" target="_top"><font color="$font">$lt{'ret'}</font></a>
 ENDRELOAD
             }
-        }
+	}
         my $form=&serverform();
         my $utility=&utilityfunctions();
 	my $output=(<<ENDMAINMENU);
 <script type="text/javascript">
-// BEGIN LON-CAPA Internal
+<!-- // BEGIN LON-CAPA Internal
 $utility
+-->
 </script>
 <a href="/adm/menu" target="_top">$lt{'main'}</a>
-$reloadlink $navmaps<br />
+$reloadlink $navmaps
+<a href="/adm/roles" target="_top"><font color="$font">$lt{'roles'}</font></a>
+<a href="/adm/logout" target="_top"><font color="$font">$lt{'exit'}</font></a>
+<br />
 <script type="text/javascript">
 // END LON-CAPA Internal
 </script>
@@ -145,13 +153,25 @@ ENDMAINMENU
         my $sidebg=&Apache::loncommon::designparm($function.'.sidebg',$domain);
 # Do we have a NAV link?
         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">
-<a href="javascript:gonav('/adm/navmaps?postdata=$escurl&amp;postsymb=$escsymb')"><font color="$font">$lt{'nav'}</font></a></td>
+<a href="$link"><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)(\?|$)/)) {
+	    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:');
                 $reloadlink=(<<ENDRELOAD);
 <td bgcolor="$tabbg">
@@ -165,10 +185,12 @@ ENDRELOAD
         }
         my $form=&serverform();
 	my $utility=&utilityfunctions();
+	my $logo=&Apache::loncommon::lonhttpdurl("/adm/lonIcons/minilogo.gif");
 	return (<<ENDINLINEMENU);
 <script type="text/javascript">
-// BEGIN LON-CAPA Internal
+<!-- // BEGIN LON-CAPA Internal
 $utility
+-->
 </script>
 <font face="Arial,Helvetica,sans-serif"><table bgcolor="$pgbg" width="100%" border="0" cellpadding="1" cellspacing="1">
 <tr>
@@ -181,7 +203,13 @@ $navmaps
 <a href="/adm/remote?action=launch&amp;url=$escurl" target="_top">
 <font color="$font">$lt{'launch'}</font></a></td>
 <td bgcolor="$tabbg">
-<img align="right" src="/adm/lonIcons/minilogo.gif" />
+<a href="/adm/roles" target="_top"><font color="$font">$lt{'roles'}</font></a>
+</td>
+<td bgcolor="$tabbg">
+<a href="/adm/logout" target="_top"><font color="$font">$lt{'exit'}</font></a>
+</td>
+<td bgcolor="$tabbg">
+<img align="right" src="$logo" />
 <b>LON-CAPA</b></td>
 $form
 </tr>
@@ -290,7 +318,7 @@ sub innerregister {
     my $tableend=($noremote?'</table></font>':'').($textinter?'<a name="content" />':'');
 # =============================================================================
 # ============================ 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
 	my $crs='/'.$ENV{'request.course.id'};
 	if ($ENV{'request.course.sec'}) {
@@ -299,7 +327,8 @@ sub innerregister {
 	$crs=~s/\_/\//g;
 
         my $hwkadd='';
-        if ($ENV{'request.filename'}=~/\.(problem|exam|quiz|assess|survey|form)$/) {
+        if ($ENV{'request.symb'} ne '' &&
+	    $ENV{'request.filename'}=~/\.(problem|exam|quiz|assess|survey|form)$/) {
 	    if (&Apache::lonnet::allowed('vgr',$crs)) {
 		$hwkadd.=&switch('','',7,1,'subm.gif','view sub-[_1]','missions[_1]',
                        "gocmd('/adm/grades','submission')",
@@ -311,7 +340,8 @@ sub innerregister {
                        'Modify user grades 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]',
 			     "gocmd('/adm/parmset','set')",
 			     'Modify deadlines, etc, for this resource');
@@ -393,10 +423,11 @@ s&6&1&list.gif&list[_1]&dir[_1]&golist('
 s&6&2&rtrv.gif&retrieve[_1]&version[_1]&gocstr('/adm/retrieve','/~$uname/$thisdisfn')&Retrieve old version
 s&6&3&pub.gif&publish[_1]&resource[_1]&gocstr('/adm/publish','/~$uname/$thisdisfn')&Publish this resource
 s&7&1&del.gif&delete[_1]&resource[_2]&gocstr('/adm/cfile?action=delete','/~$uname/$thisdisfn')&Delete this resource
-s&7&2&prt.gif&prepare[_1]&printout[_1]&gopost('/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
             }
-        } else {
+        } elsif (defined($ENV{'request.course.id'}) && 
+		 $ENV{'request.symb'} ne '') {
 	    $menuitems=(<<ENDMENUITEMS);
 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
@@ -425,25 +456,27 @@ ENDREALRES
                 $buttons.=&clear(@rest);
             }
         }
+
         if ($textual) {
-# Registered, textual output
+	    my $addremote=0;
+	    foreach (@inlineremote) { if ($_ ne '') { $addremote=1; } }
 	    my $inlinebuttons='';
+	    if ($addremote) {
+# Registered, textual output
 
-	    if ($ENV{'browser.interface'} eq 'textual') {
-		$inlinebuttons=
+		if ($ENV{'browser.interface'} eq 'textual') {
+		    $inlinebuttons=
                         join('',map { (defined($_)?$_:'') } @inlineremote);
-	    } else {
-		$inlinebuttons=(<<ENDINLINE);
+		} 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
+                }
 	    }
-            if ($const_space && $is_const_dir) {
-                $inlinebuttons = '';
-            }
 	    $result =(<<ENDREGTEXT);
 <script type="text/javascript">
 // BEGIN LON-CAPA Internal
@@ -460,14 +493,17 @@ $tableend
 ENDREGTEXT
 # Registered, graphical output
         } else {
-	    my $requri=(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));
 	    my $cursymb=&Apache::lonenc::check_encrypt($ENV{'request.symb'});
 	    my $navstatus=&get_nav_status();
+	    my $clearcstr;
+
+	    if ($ENV{'user.adv'}) { $clearcstr='clearbut(6,1)'; }
 	    $result = (<<ENDREGTHIS);
      
 <script type="text/javascript">
-// BEGIN LON-CAPA Internal
+// <!-- BEGIN LON-CAPA Internal
 var swmenu=null;
 
     function LONCAPAreg() {
@@ -498,11 +534,11 @@ var swmenu=null;
           swmenu.clearbut(7,3);
           swmenu.menucltim=swmenu.setTimeout(
  'clearbut(2,1);clearbut(2,3);clearbut(8,1);clearbut(8,2);clearbut(8,3);'+
- 'clearbut(9,1);clearbut(9,3);clearbut(6,3);clearbut(6,1)',
+ 'clearbut(9,1);clearbut(9,3);clearbut(6,3);$clearcstr',
 			  2000);
       }
 
-// END LON-CAPA Internal
+// END LON-CAPA Internal -->
 </script>
 ENDREGTHIS
         }
@@ -972,7 +1008,8 @@ sub utilityfunctions {
     my $caller = shift;
     unless (($ENV{'browser.interface'} eq 'textual')  ||
         ($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 $nav_control=&nav_control_js();
@@ -1020,6 +1057,27 @@ function gocstr(url,filename) {
         this.document.cstrdelete.submit();
         return;
     }
+    if (url == '/adm/printout') {
+        this.document.cstrprint.postdata.value = filename
+        this.document.cstrprint.curseed.value = 0;
+        this.document.cstrprint.problemtype.value = 0;
+        if (this.document.lonhomework) {
+            if ((this.document.lonhomework.rndseed) && (this.document.lonhomework.rndseed.value != null) && (this.document.lonhomework.rndseed.value != '')) {
+                this.document.cstrprint.curseed.value = this.document.lonhomework.rndseed.value
+            }
+            if (this.document.lonhomework.problemtype) {
+                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();
+        return;
+    }
     if (url !='') {
         this.document.constspace.filename.value = filename;
         this.document.constspace.action = url;
@@ -1068,6 +1126,12 @@ sub constspaceform {
 <input type="hidden" name="action" value="delete" /> 
 <input type="hidden" name="filename" value="" />
 </form>
+<form name="cstrprint" action="/adm/printout" target="_parent" method="post">
+<input type="hidden" name="postdata" value="" />
+<input type="hidden" name="curseed" value="" />
+<input type="hidden" name="problemtype" value="" />
+</form>
+
 ENDCONSTSPACEFORM
 }
 
@@ -1113,7 +1177,7 @@ sub handler {
     $tabbg=&Apache::loncommon::designparm($function.'.tabbg',$domain);
     $font=&Apache::loncommon::designparm($function.'.font',$domain);
     my $script_tag;
-    if ($ENV{'environment.remote'} eq 'on') {
+    if ($ENV{'environment.remote'} ne 'off') {
         my $utility=&utilityfunctions('/adm/menu');
         $script_tag=(<<ENDSCRIPT);
 <script type="text/javascript">
@@ -1126,8 +1190,10 @@ ENDSCRIPT
 	$ENV{'browser.interface'}='faketextual';
 	$ENV{'environment.remote'}='off';
     }
+    my $html=&Apache::lonxml::xmlbegin();
     $r->print(<<ENDHEADER);
-<html><head>
+$html
+<head>
 <title>LON-CAPA Main Menu</title>
 $script_tag
 </head>