--- loncom/interface/lonmenu.pm	2007/08/17 22:12:30	1.223
+++ loncom/interface/lonmenu.pm	2007/11/09 20:57:29	1.231
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Routines to control the menu
 #
-# $Id: lonmenu.pm,v 1.223 2007/08/17 22:12:30 albertel Exp $
+# $Id: lonmenu.pm,v 1.231 2007/11/09 20:57:29 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -54,13 +54,26 @@ my @inlineremote;
 
 
 # ================================================================ Little texts
+sub show_course {
+    my $course = !$env{'user.adv'};
+    if (!$env{'user.adv'}) {
+	foreach my $env (keys(%env)) {
+	    next if ($env !~ m/^user\.priv\./);
+	    if ($env !~ m/^user\.priv\.(?:st|cm)/) {
+		$course = 0;
+		last;
+	    }
+	}
+    }
+    return $course;
+}
 
 sub initlittle {
     return &Apache::lonlocal::texthash('ret' => 'Return to Last Location',
 				       'nav' => 'Navigate Contents',
 				       'main' => 'Main Menu',
-                                       'roles' => ($env{'user.adv'}?
-                                                    'Roles':'Courses'),
+                                       'roles' => (&show_course()?
+                                                    'Courses':'Roles'),
                                        'docs' => 'Edit Course',
                                        'exit' => 'Exit',
                                        'login' => 'Log In',
@@ -121,9 +134,7 @@ sub menubuttons {
 	    $navmaps=(<<ENDNAV);
 <a href="/adm/navmaps?postdata=$escurl&amp;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)(\?|$)/)) {
+            if (&show_return_link()) {
                 my $escreload=&escape('return:');
                 $reloadlink=(<<ENDRELOAD);
 <a href="/adm/flip?postdata=$escreload" target="_top">$lt{'ret'}</a>
@@ -196,7 +207,7 @@ ENDINLINEMENU
 	    $navmaps=(<<ENDNAV);
 <td><a href="$link" target="_top">$lt{'nav'}</a></td>
 ENDNAV
-my $is_group = (&Apache::loncommon::course_type() eq 'Group');
+            my $is_group = (&Apache::loncommon::course_type() eq 'Group');
 	    if (&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) {
                 my $text = ($is_group) ? $lt{'gdoc'} : $lt{'docs'};
 		$docs=(<<ENDDOCS);
@@ -208,16 +219,7 @@ ENDDOCS
 <td><a href="/adm/coursegroups" target="_top">$lt{'groups'}</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)($|\?)])
-		  )
-		 ) {
+	    if (&show_return_link()) {
                 my $escreload=&escape('return:');
                 $reloadlink=(<<ENDRELOAD);
 <td><a href="/adm/flip?postdata=$escreload" target="_top">$lt{'ret'}</a></td>
@@ -274,6 +276,19 @@ ENDINLINEMENU
     }
 }
 
+sub show_return_link {
+    return (($env{'request.noversionuri'}=~m{^/(res|public)/} &&
+	     $env{'request.symb'} eq '')
+	    ||
+	    ($env{'request.noversionuri'}=~ m{^/cgi-bin/printout.pl})
+	    ||
+	    (($env{'request.noversionuri'}=~/^\/adm\//) &&
+	     ($env{'request.noversionuri'}!~/^\/adm\/wrapper\//) &&
+	     ($env{'request.noversionuri'}!~
+	      m[^/adm/.*/(smppg|bulletinboard|aboutme)($|\?)])
+	     ));
+}
+
 # ====================================== This gets called in the header section
 
 sub registerurl {
@@ -571,10 +586,10 @@ ENDLINE
 // BEGIN LON-CAPA Internal
 </script>
 $timesync
-$newmail
 $tablestart
 $inlinebuttons
 $tableend
+$newmail
 <script type="text/javascript">
 // END LON-CAPA Internal
 </script>
@@ -793,12 +808,19 @@ sub load_remote_msg {
 <p>$link</p>
 ENDREMOTEFORM
 }
+
+sub get_menu_name {
+    my $hostid = $Apache::lonnet::perlvar{'lonHostID'};
+    $hostid =~ s/\W//g;
+    return 'LCmenu'.$hostid;
+}
+
 # ================================================================= Reopen menu
 
 sub reopenmenu {
    if (($env{'browser.interface'} eq 'textual') ||
        ($env{'environment.remote'} eq 'off')) { return ''; }
-   my $menuname='LCmenu'.$Apache::lonnet::perlvar{'lonHostID'};
+   my $menuname = &get_menu_name();
    my $nothing = &Apache::lonhtmlcommon::javascript_nothing();
    return('window.open('.$nothing.',"'.$menuname.'","",false);');
 } 
@@ -811,7 +833,7 @@ sub open {
         ($env{'environment.remote'} eq 'off')) { 
 	return '<script type="text/javascript">self.name="loncapaclient";</script>';
     }
-    my $menuname='LCmenu'.$Apache::lonnet::perlvar{'lonHostID'};
+    my $menuname = &get_menu_name();
     
 #    unless (shift eq 'unix') {
 # resizing does not work on linux because of virtual desktop sizes
@@ -887,12 +909,10 @@ sub switch {
        my $text=$top.' '.$bot;
        $text=~s/\s*\-\s*//gs;
 
-       my $lonhttpdPort=$Apache::lonnet::perlvar{'lonhttpdPort'};
-       if (!defined($lonhttpdPort)) { $lonhttpdPort='8080'; }
        my $pic=
-	   '<img alt="'.$text.'" src="http://'.$ENV{'HTTP_HOST'}.
-	   ':'.$lonhttpdPort.'/res/adm/pages/'.$img.'" align="'.
-	   ($nobreak==3?'right':'left').'" />';
+	   '<img alt="'.$text.'" src="'.
+	   &Apache::loncommon::lonhttpdurl('/res/adm/pages/'.$img).
+	   '" align="'.($nobreak==3?'right':'left').'" />';
        if ($env{'browser.interface'} eq 'faketextual') {
 # Accessibility
 	   if ($nobreak==3) {
@@ -941,7 +961,7 @@ sub secondlevel {
 }
 
 sub openmenu {
-    my $menuname='LCmenu'.$Apache::lonnet::perlvar{'lonHostID'};
+    my $menuname = &get_menu_name();
     if (($env{'browser.interface'} eq 'textual') ||
         ($env{'environment.remote'} eq 'off')) { return ''; }
     my $nothing = &Apache::lonhtmlcommon::javascript_nothing();
@@ -991,6 +1011,7 @@ sub rawconfig {
     my $uname=$env{'user.name'};
     my $udom=$env{'user.domain'};
     my $adv=$env{'user.adv'};
+    my $show_course=&show_course();
     my $author=$env{'user.author'};
     my $crs='';
     if ($env{'request.course.id'}) {
@@ -1030,6 +1051,16 @@ sub rawconfig {
                $output.=&secondlevel(
 	  $uname,$udom,$rol,$crs,$pub,$con,$row,$col,$prt,$img,$top,$bot,$act,$desc,$cat);
             }
+	} elsif ($pro eq 'shc') {
+            if ($show_course) {
+               $output.=&secondlevel(
+          $uname,$udom,$rol,$crs,$pub,$con,$row,$col,$prt,$img,$top,$bot,$act,$desc,$cat);
+            }
+        } elsif ($pro eq 'nsc') {
+            if (!$show_course) {
+               $output.=&secondlevel(
+	  $uname,$udom,$rol,$crs,$pub,$con,$row,$col,$prt,$img,$top,$bot,$act,$desc,$cat);
+            }
         } elsif (($pro=~/^p(\w+)/) && ($prt)) {
 	    if (&Apache::lonnet::allowed($1,$prt)) {
                $output.=&switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc,$cat);
@@ -1091,7 +1122,7 @@ sub rawconfig {
 sub close {
     if (($env{'browser.interface'} eq 'textual') ||
         ($env{'environment.remote'} eq 'off')) { return ''; }
-    my $menuname='LCmenu'.$Apache::lonnet::perlvar{'lonHostID'};
+    my $menuname = &get_menu_name();
     return(<<ENDCLOSE);
 <script type="text/javascript">
 window.status='Accessing Remote Control';