--- loncom/interface/lonmenu.pm	2004/12/03 23:31:28	1.136
+++ loncom/interface/lonmenu.pm	2005/02/08 00:01:32	1.145
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Routines to control the menu
 #
-# $Id: lonmenu.pm,v 1.136 2004/12/03 23:31:28 albertel Exp $
+# $Id: lonmenu.pm,v 1.145 2005/02/08 00:01:32 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -145,13 +145,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">
@@ -290,7 +302,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 +311,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 +324,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 +407,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
             }
-        } elsif (defined($ENV{'request.course.id'})) {
+        } 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,7 +440,9 @@ ENDREALRES
                 $buttons.=&clear(@rest);
             }
         }
-        if ($textual) {
+	my $addremote=0;
+	foreach (@inlineremote) { if ($_ ne '') { $addremote=1; } }
+        if ($textual && $addremote) {
 # Registered, textual output
 	    my $inlinebuttons='';
 
@@ -460,10 +477,12 @@ $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">
@@ -498,7 +517,7 @@ 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);
       }
 
@@ -972,7 +991,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 +1040,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 +1109,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 +1160,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">