--- loncom/interface/lonmenu.pm	2007/04/11 02:42:00	1.209
+++ 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.209 2007/04/11 02:42:00 www Exp $
+# $Id: lonmenu.pm,v 1.231 2007/11/09 20:57:29 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -54,14 +54,27 @@ 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'),
-                                       'docs' => 'Course Documents',
+                                       'roles' => (&show_course()?
+                                                    'Courses':'Roles'),
+                                       'docs' => 'Edit Course',
                                        'exit' => 'Exit',
                                        'login' => 'Log In',
 				       'launch' => 'Launch Remote Control',
@@ -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 {
@@ -445,7 +460,7 @@ sub innerregister {
             # Finally, turn the button on or off
             if ($cfile && !$const_space) {
                 $editbutton=&switch
-                    ('','',6,1,'cstr.gif','edit[_1]','resource[_2]',
+                    ('','',6,1,'pcstr.gif','edit[_1]','resource[_2]',
                      "go('".$cfile."');","Edit this resource");
             } elsif ($editbutton eq '') {
                 $editbutton=&clear(6,1);
@@ -486,9 +501,14 @@ s&8&3&prt.gif&prepare[_1]&printout[_1]&g
 s&9&1&sbkm.gif&set[_1]&bookmark[_2]&set_bookmark()&Set a bookmark for this resource&&1
 s&9&3&anot.gif&anno-[_1]&tations[_1]&annotate()&Make notes and annotations about this resource&&1
 ENDMENUITEMS
+
             unless ($env{'request.noversionuri'}=~/\/(bulletinboard|smppg|navmaps|syllabus|aboutme)(\?|$)/) {
-	        $menuitems.=(<<ENDREALRES);
+		if (!$env{'request.enc'}) {
+		    $menuitems.=(<<ENDREALRES);
 s&6&3&catalog.gif&catalog[_1]&info[_1]&catalog_info()&Show catalog information
+ENDREALRES
+                }
+	        $menuitems.=(<<ENDREALRES);
 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
@@ -502,10 +522,19 @@ ENDMENUITEMS
         my $buttons='';
         foreach (split(/\n/,$menuitems)) {
 	    my ($command,@rest)=split(/\&/,$_);
-            if ($command eq 's') {
-		$buttons.=&switch('','',@rest);
-            } else {
-                $buttons.=&clear(@rest);
+            my $idx=10*$rest[0]+$rest[1];
+            if (&hidden_button_check() eq 'yes') {
+                if ($idx == 21 ||$idx == 23) {
+                    $buttons.=&switch('','',@rest);
+                } else {
+                    $buttons.=&clear(@rest);
+                }
+            } else {  
+                if ($command eq 's') {
+	            $buttons.=&switch('','',@rest);
+                } else {
+                    $buttons.=&clear(@rest);
+                }
             }
         }
 
@@ -515,29 +544,52 @@ ENDMENUITEMS
 	    my $inlinebuttons='';
 	    if ($addremote) {
 # Registered, textual output
-
 		if ($env{'browser.interface'} eq 'textual') {
 		    $inlinebuttons=
                         join('',map { (defined($_)?$_:'') } @inlineremote);
 		} else {
-		    $inlinebuttons=(<<ENDINLINE);
+                    if ($env{'environment.icons'} eq 'iconsonly') {
+                        $inlinebuttons=(<<ENDARROWSINLINE);
+<tr><td>
+$inlineremote[21] $inlineremote[23]
+ENDARROWSINLINE
+                        if (&hidden_button_check() ne 'yes') {
+                            $inlinebuttons .= (<<ENDINLINEICONS);
+$inlineremote[61] $inlineremote[63]
+$inlineremote[71] $inlineremote[72] $inlineremote[73]
+$inlineremote[81] $inlineremote[82] $inlineremote[83]
+$inlineremote[91] $inlineremote[92] $inlineremote[93]</td></tr>
+ENDINLINEICONS
+                        }
+                    } else {
+			if ($inlineremote[21] ne '' || $inlineremote[23] ne '') {
+			    $inlinebuttons=(<<ENDFIRSTLINE);
 <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
-                }
+ENDFIRSTLINE
+                        }
+                        if (&hidden_button_check() ne 'yes') { 
+			    foreach my $row (6..9) {
+				if ($inlineremote[${row}.'1'] ne ''
+				    || $inlineremote[$row.'2'] ne ''
+				    || $inlineremote[$row.'3'] ne '') {
+				    $inlinebuttons .= <<"ENDLINE";
+<tr><td>$inlineremote["${row}1"]</td><td>$inlineremote["${row}2"]</td><td>$inlineremote["${row}3"]</td></tr>
+ENDLINE
+				}
+			    }
+			}
+		    }
+		}
 	    }
 	    $result =(<<ENDREGTEXT);
 <script type="text/javascript">
 // BEGIN LON-CAPA Internal
 </script>
 $timesync
-$newmail
 $tablestart
 $inlinebuttons
 $tableend
+$newmail
 <script type="text/javascript">
 // END LON-CAPA Internal
 </script>
@@ -756,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);');
 } 
@@ -774,16 +833,17 @@ sub open {
         ($env{'environment.remote'} eq 'off')) { 
 	return '<script type="text/javascript">self.name="loncapaclient";</script>';
     }
-    my $menuname='LCmenu'.$Apache::lonnet::perlvar{'lonHostID'};
-    unless (shift eq 'unix') {
+    my $menuname = &get_menu_name();
+    
+#    unless (shift eq 'unix') {
 # resizing does not work on linux because of virtual desktop sizes
-       $returnval.=(<<ENDRESIZE);
-if (window.screen) {
-    self.resizeTo(screen.availWidth-215,screen.availHeight-55);
-    self.moveTo(190,15);
-}
-ENDRESIZE
-    }
+#       $returnval.=(<<ENDRESIZE);
+#if (window.screen) {
+#    self.resizeTo(screen.availWidth-215,screen.availHeight-55);
+#    self.moveTo(190,15);
+#}
+#ENDRESIZE
+#    }
     $returnval.=(<<ENDOPEN);
 window.status='Opening LON-CAPA Remote Control';
 var menu=window.open("/res/adm/pages/menu.html","$menuname",
@@ -842,16 +902,17 @@ sub switch {
        }
    } else {
 # Inline Remote
+       if ($env{'environment.icons'} ne 'classic') {
+          $img=~s/\.gif$/\.png/;
+       }
        if ($nobreak==2) { return ''; }
        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) {
@@ -863,19 +924,23 @@ sub switch {
 	       $inlineremote[$idx]="\n<tr>".
 		   '<td class="LC_menubuttons_img" align="left">'.
 		   '<a href="javascript:'.$act.';">'.$pic.'</a></td>
-                    <td class="LC_menubuttons_text" align="left">'.$text.'</td>';
+                    <td class="LC_menubuttons_text" align="left"><a class="LC_menubuttons_link" href="javascript:'.$act.';"><span class="LC_menubuttons_inline_text">'.$text.'</span></a></td>';
 	   } else {
 	       $inlineremote[$idx]="\n<tr>".
 		   '<td class="LC_menubuttons_img" align="left">'.
 		   '<a href="javascript:'.$act.';">'.$pic.
 		   '</a></td><td class="LC_menubuttons_text" colspan="3">'.
-		   $desc.'</td></tr>';
+		   '<a class="LC_menubuttons_link" href="javascript:'.$act.';"><span class="LC_menubuttons_inline_text">'.$desc.'</span></a></td></tr>';
 	   }
        } else {
 # Inline Menu
-	   $inlineremote[$idx]=
-		   '<a href="javascript:'.$act.';">'.$pic.
-		   '</a><span class="LC_menubuttons_inline_text">'.$desc.'</span>';
+           if ($env{'environment.icons'} eq 'iconsonly') {
+              $inlineremote[$idx]='<a title="'.$desc.'" href="javascript:'.$act.';">'.$pic.'</a>';
+           } else {
+	      $inlineremote[$idx]=
+		   '<a class="LC_menubuttons_link" href="javascript:'.$act.';">'.$pic.
+		   '<span class="LC_menubuttons_inline_text">'.$desc.'</span></a>';
+           }
        }
    }
     return '';
@@ -896,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();
@@ -904,18 +969,16 @@ sub openmenu {
 }
 
 sub inlinemenu {
-    @inlineremote=();
-    undef @inlineremote;
-    %category_members=();
-    undef %category_members;
+    undef(@inlineremote);
+    undef(%category_members);
     &rawconfig(1);
-    my $output='<table><tr>';
+    my $output='<table id="LC_mainmenu"><tr>';
     for (my $col=1; $col<=2; $col++) {
-        $output.='<td>';
+        $output.='<td class="LC_mainmenu_column">';
         for (my $row=1; $row<=8; $row++) {
             foreach my $cat (keys(%category_members)) {
                if ($category_positions{$cat} ne "$col,$row") { next; }
-               $output.='<table id="LC_menubuttons_mainmenu"><tr><td colspan="4" class="LC_menu_category">'.&mt($category_names{$cat}).'</td></tr>';
+               $output.='<table id="LC_menubuttons_mainmenu"><tr><td colspan="4" class="LC_menubuttons_category">'.&mt($category_names{$cat}).'</td></tr>';
                my %active=();
                foreach my $menu_item (split(/\:/,$category_members{$cat})) {
                   if ($inlineremote[$menu_item]) {
@@ -948,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'}) {
@@ -967,6 +1031,7 @@ sub rawconfig {
         $prt=~s/\$udom/$udom/g;
         $prt=~s/\$crs/$crs/g; 
         $prt=~s/\$requested_domain/$requested_domain/g;
+        if ($category_names{$cat}!~/\w/) { $cat='oth'; }
         my $type = &Apache::loncommon::course_type();
         if ($type eq 'Group') {
             $desc = &convert_menu_function($desc,$type);
@@ -986,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);
@@ -1047,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';
@@ -1231,7 +1306,7 @@ function annotate() {
    '$start_page_annotate'
   +"<form name='goannotate' target='Annotator' method='post' "
   +"action='/adm/annotations'>"
-  +"<input type='hidden' name='urlnew' value='"+currentURL+"' />"
+  +"<input type='hidden' name='symbnew' value='"+currentSymb+"' />"
   +"<\\/form>"
   +'$end_page_annotate');
    annotator.document.close();
@@ -1315,6 +1390,16 @@ sub convert_menu_function {
     return $rolename;
 }
 
+sub hidden_button_check {
+    my $hidden;
+    if ($env{'request.course.id'} eq '') {
+        return;
+    }
+    if ($env{'request.role.adv'}) {
+        return;
+    }
+    return &Apache::lonnet::EXT('resource.0.buttonshide'); 
+}
 
 # ================================================================ Main Program