--- loncom/interface/lonmenu.pm	2009/10/04 17:47:21	1.283
+++ loncom/interface/lonmenu.pm	2009/10/16 23:35:08	1.291
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Routines to control the menu
 #
-# $Id: lonmenu.pm,v 1.283 2009/10/04 17:47:21 droeschl Exp $
+# $Id: lonmenu.pm,v 1.291 2009/10/16 23:35:08 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -113,11 +113,6 @@ The javascript is usually similar to "go
 
 =item get_nav_status()
 
-=item convert_menu_function()
-
-FIXME this needs to move into mydesktab and the other locations 
-the text is generated
-
 =item hidden_button_check()
 
 =item roles_selector()
@@ -142,21 +137,20 @@ use HTML::Entities();
 use vars qw(@desklines %category_names %category_members %category_positions 
             $readdesk @primary_menu @secondary_menu);
 
-
 my @inlineremote;
 
 sub prep_menuitem {
-    my $menuitem = shift;
-    return '' unless ref $menuitem eq 'ARRAY';
+    my ($menuitem) = @_;
+    return '' unless(ref($menuitem) eq 'ARRAY');
     my $link;
     if ($$menuitem[1]) { # graphical Link
         $link = "<img class=\"LC_noBorder\""
-              . " src=\"" . Apache::loncommon::lonhttpdurl($$menuitem[1]) . "\""
-              . " alt=\"" . mt($$menuitem[2]) . "\" />";
+              . " src=\"" . &Apache::loncommon::lonhttpdurl($$menuitem[1]) . "\"" 
+              . " alt=\"" . &mt($$menuitem[2]) . "\" />";
     } else {             # textual Link
-        $link = mt($$menuitem[3]);
-    }     
-    return "<li><a href=\"javascript:$$menuitem[0]\">$link</a></li>";
+        $link = &mt($$menuitem[3]);
+    }
+    return '<li><a href="'.$$menuitem[0].'">'.$link.'</a></li>';
 }
 
 # primary_menu() evaluates @primary_menu and returns XHTML for the menu
@@ -171,9 +165,9 @@ sub primary_menu {
     foreach my $menuitem (@primary_menu) {
         # evaluate conditions 
         next if    $$menuitem[4]        eq 'nonewmsg'  # show links depending on
-                && Apache::lonmsg::mynewmail();        # whether a new msg 
+                && &Apache::lonmsg::mynewmail();       # whether a new msg 
         next if    $$menuitem[4]        eq 'newmsg'    # arrived or not
-                && !Apache::lonmsg::mynewmail();       # 
+                && !&Apache::lonmsg::mynewmail();      # 
         next if    $$menuitem[4]        !~ /public/    ##we've a public user, 
                 && $env{'user.name'}    eq 'public'    ##who should not see all 
                 && $env{'user.domain'}  eq 'public';   ##links
@@ -181,53 +175,61 @@ sub primary_menu {
                 && $env{'user.name'}    ne 'public'    # only visible to public
                 && $env{'user.domain'}  ne 'public';   # users
         next if    $$menuitem[4]        eq 'roles'     ##show links depending on
-                && Apache::loncommon::show_course();   ##term 'Courses' or 
+                && &Apache::loncommon::show_course();  ##term 'Courses' or 
         next if    $$menuitem[4]        eq 'courses'   ##'Roles' wanted
-                && !Apache::loncommon::show_course();  ##
-
-
+                && !&Apache::loncommon::show_course(); ##
+        
+            
         if ($$menuitem[3] eq 'Help') { # special treatment for helplink
-            $menu .= Apache::loncommon::top_nav_help('Help');
+            $menu .= '<li>'.&Apache::loncommon::top_nav_help('Help').'</li>';
         } else {
-            $menu .= prep_menuitem(\@$menuitem);
+            if (ref($menuitem) eq 'ARRAY') { 
+                my @items = @{$menuitem};
+                $items[0] = 'javascript:'.$menuitem;
+                $menu .= &prep_menuitem(\@items);
+            }
         }
-     }
+    }
 
-     return "<ol class=\"LC_smallMenu LC_right\">$menu</ol>";
+    return "<ol class=\"LC_primary_menu LC_right\">$menu</ol>";
 }
 
 
 sub secondary_menu {
     my $menu;
 
+    my $crstype = &Apache::loncommon::course_type();
+    my $canedit = &Apache::lonnet::allowed('mdc', $env{'request.course.id'});
+    my $canviewgrps = &Apache::lonnet::allowed('vcg', $env{'request.course.id'}
+                   . ($env{'request.course.sec'} ? "/$env{'request.course.sec'}"
+                                                 : '')); 
+    my $showlink = &show_return_link();
+    my %groups = &Apache::lonnet::get_active_groups(
+                     $env{'user.domain'}, $env{'user.name'},
+                     $env{'course.' . $env{'request.course.id'} . '.domain'},
+                     $env{'course.' . $env{'request.course.id'} . '.num'});
     foreach my $menuitem (@secondary_menu) {
         # evaluate conditions 
         next if    $$menuitem[4]   ne 'always'
                 && !$env{'request.course.id'};
         next if    $$menuitem[4]   eq 'showreturn'
-                && !show_return_link() 
+                && !$showlink
                 && !($env{'request.state'} eq 'construct');
         next if    $$menuitem[4]   =~ /^mdc/
-                && !Apache::lonnet::allowed('mdc', $env{'request.course.id'});
-        next if    $$menuitem[4]   =~ /nogrp$/
-                && Apache::loncommon::course_type() eq 'Group';
-        next if    $$menuitem[4]   =~ /group$/
-                && Apache::loncommon::course_type() ne 'Group';
-        next if    $$menuitem[4]   eq 'remotenav'
+                && !$canedit;
+        next if    $$menuitem[4]  eq 'mdcCourse'
+                && $crstype eq 'Community';
+        next if    $$menuitem[4]  eq 'mdcCommunity'
+                && $crstype ne 'Community';
+        next if    $$menuitem[4]  =~ /^remotenav/
                 && $env{'environment.remotenavmap'} ne 'on';
-        next if    $$menuitem[4]   eq 'noremotenav'
+        next if    $$menuitem[4]  =~ /noremotenav/
                 && $env{'environment.remotenavmap'} eq 'on';
         next if    $$menuitem[4]   =~ /showgroups$/
-                && !Apache::lonnet::allowed('vcg', $env{'request.course.id'}
-                   . ($env{'request.course.sec'} ? "/$env{'request.course.sec'}"
-                                                 : ''))
-                && !Apache::lonnet::get_active_groups(
-                   $env{'user.domain'}, $env{'user.name'},
-                   $env{'course.' . $env{'request.course.id'} . '.domain'},
-                   $env{'course.' . $env{'request.course.id'} . '.num'});
+                && $canviewgrps
+                && !%groups;
 
-
-        if($$menuitem[3] eq 'Roles' && $env{'request.course.id'}) { 
+        if ($$menuitem[3] eq 'Roles' && $env{'request.course.id'}) {
             # special treatment for role selector
             my $roles_selector = roles_selector(
                         $env{'course.' . $env{'request.course.id'} . '.domain'},
@@ -236,15 +238,25 @@ sub secondary_menu {
             $menu .= $roles_selector ? "<li>$roles_selector</li>"
                                      : '';
         } else {
-            $menu .= prep_menuitem(\@$menuitem);
+            if ($env{'environment.remotenavmap'} eq 'on') {
+                my @items = @{$menuitem}; 
+                if ($menuitem->[4] eq 'remotenav') {
+                    $items[0] = "javascript:gonav('$menuitem->[0]');";
+                } else {
+                    $items[0] = "javascript:go('$menuitem->[0]');";
+                }
+                $menu .= &prep_menuitem(\@items);
+            } else {
+                $menu .= &prep_menuitem(\@$menuitem);
+            }
         }
     }
     if ($menu =~ /\[url\].*\[symb\]/) {
-        my $escurl  = escape( Apache::lonenc::check_encrypt(
-                            $env{'request.noversionuri'}));
+        my $escurl  = &escape( &Apache::lonenc::check_encrypt(
+                             $env{'request.noversionuri'}));
 
-        my $escsymb = escape( Apache::lonenc::check_encrypt(
-                            $env{'request.symb'})); 
+        my $escsymb = &escape( &Apache::lonenc::check_encrypt(
+                             $env{'request.symb'})); 
 
         if (    $env{'request.state'} eq 'construct'
             and (   $env{'request.noversionuri'} eq '' 
@@ -253,13 +265,13 @@ sub secondary_menu {
             ($escurl = $env{'request.filename'}) =~ 
                 s{^/home/([^/]+)/public_html/(.*)$}{/priv/$1/$2};
 
-            $escurl  = escape($escurl);
+            $escurl  = &escape($escurl);
         }    
         $menu =~ s/\[url\]/$escurl/g;
         $menu =~ s/\[symb\]/$escsymb/g;
     }
 
-    return "<ul id=\"LC_TabMainMenuContent\">$menu</ul>";
+    return "<ul id=\"LC_secondary_menu\">$menu</ul>";
 }
 
 
@@ -280,7 +292,7 @@ sub initlittle {
                                        'login' => 'Log In',
 				       'launch' => 'Launch Remote Control',
                                        'groups' => 'Groups',
-                                       'gdoc' => 'Group Documents',
+                                       'gdoc' => 'Community Documents',
                                        );
 }
 
@@ -355,7 +367,7 @@ sub menubuttons {
         my %lt=&initlittle();
 
         my $domain=&Apache::loncommon::determinedomain();
-        my $function =&Apache::loncommon::get_users_function();
+        my $function=&Apache::loncommon::get_users_function();
         my $link=&Apache::loncommon::designparm($function.'.link',$domain);
         my $alink=&Apache::loncommon::designparm($function.'.alink',$domain);
         my $vlink=&Apache::loncommon::designparm($function.'.vlink',$domain);
@@ -363,7 +375,7 @@ sub menubuttons {
 
         if ($env{'user.name'} eq 'public' && $env{'user.domain'} eq 'public') {
             return (<<ENDINLINEMENU);
-            <ol class="LC_smallMenu LC_right">
+            <ol class="LC_primary_menu LC_right">
                 <li>$logo</li>
                 <li><a href="/adm/roles" target="_top">$lt{'login'}</a></li>
             </ol>
@@ -381,9 +393,10 @@ ENDINLINEMENU
 	    $navmaps=(<<ENDNAV);
 <li><a href="$link" target="_top">$lt{'nav'}</a></li>
 ENDNAV
-            my $is_group = (&Apache::loncommon::course_type() eq 'Group');
+            my $is_community = 
+                (&Apache::loncommon::course_type() eq 'Community');
 	    if (&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) {
-                my $text = ($is_group) ? $lt{'gdoc'} : $lt{'docs'};
+                my $text = ($is_community) ? $lt{'gdoc'} : $lt{'docs'};
 		$docs=(<<ENDDOCS);
 <li><a href="/adm/coursedocs" target="_top">$text</a></li>
 ENDDOCS
@@ -415,7 +428,7 @@ ENDCRELOAD
     my $utility = &utilityfunctions();
 
     #Prepare the message link that indicates the arrival of new mail
-    my $messagelink = Apache::lonmsg::mynewmail() ? "Message (new)" : "Message";
+    my $messagelink = &Apache::lonmsg::mynewmail() ? "Message (new)" : "Message";
        $messagelink = '<a href="javascript:go(\'/adm/communicate\');">'
                       . mt($messagelink) .'</a>';
 
@@ -427,14 +440,14 @@ ENDCRELOAD
 $utility
 // ]]>
 </script>
-<ol class="LC_smallMenu LC_right">
+<ol class="LC_primary_menu LC_right">
 	<li>$logo</li>
 	<li>$messagelink</li>
 	<li>$roles</li>
 	<li>$helplink</li>
 	<li><a href="/adm/logout" target="_top">$lt{'exit'}</a></li>
 </ol>
-<ul id="LC_TabMainMenuContent">
+<ul id="LC_secondary_menu">
 <li><a href="/adm/menu" target="_top">$lt{'main'}</a></li>
 $reloadlink
 $navmaps
@@ -519,7 +532,7 @@ sub innerregister {
         $newmail= 'swmenu.setstatus("you have","messages");';
     } 
 
-    my $breadcrumb;
+    my ($breadcrumb,$separator);
     if ($noremote
 	     && ($env{'request.symb'}) 
 	     && ($env{'request.course.id'})) {
@@ -529,10 +542,13 @@ sub innerregister {
 
         my $maptitle = &Apache::lonnet::gettitle($mapurl);
         my $restitle = &Apache::lonnet::gettitle(&Apache::lonnet::symbread());
-        my @crumbs = ({text  => "Course Content", 
-                       href  => "Javascript:gonav('/adm/navmaps')"}, 
-                      {text  => '...',
-                       no_mt => 1});
+        my @crumbs = ({text  => "Course Contents", 
+                       href  => "Javascript:gonav('/adm/navmaps')"});
+
+        if ($mapurl ne $env{'course.'.$env{'request.course.id'}.'.url'}) { 
+            push(@crumbs, {text  => '...',
+                           no_mt => 1});
+        }
 
         push @crumbs, {text => $maptitle, no_mt => 1} if ($maptitle 
                                                    && $maptitle ne 'default.sequence' 
@@ -540,9 +556,14 @@ sub innerregister {
 
         push @crumbs, {text => $restitle, no_mt => 1} if $restitle; 
 
-        Apache::lonhtmlcommon::clear_breadcrumbs();
-        Apache::lonhtmlcommon::add_breadcrumb(@crumbs);
-        $breadcrumb .= Apache::lonhtmlcommon::breadcrumbs(undef,undef,0);
+        &Apache::lonhtmlcommon::clear_breadcrumbs();
+        &Apache::lonhtmlcommon::add_breadcrumb(@crumbs);
+        $breadcrumb .= &Apache::lonhtmlcommon::breadcrumbs(undef,undef,0);
+	unless (($env{'request.state'} eq 'edit') || ($newmail) ||
+		($env{'request.state'} eq 'construct') ||
+		($env{'form.register'})) {
+            $separator = &Apache::loncommon::head_subbox();
+        }
         #
     }
     if ($env{'request.state'} eq 'construct') {
@@ -831,6 +852,7 @@ $tablestart
 $inlinebuttons
 $tableend
 $newmail
+$separator
 <script type="text/javascript">
 // END LON-CAPA Internal
 </script>
@@ -1317,12 +1339,6 @@ sub rawconfig {
         $prt=~s/\$requested_domain/$requested_domain/g;
         if ($category_names{$cat}!~/\w/) { $cat='oth'; }
         my $type = &Apache::loncommon::course_type();
-#
-# I don't think we support this
-#
-#        if ($type eq 'Group') {
-#            $desc = &convert_menu_function($desc,$type);
-#        }
         if ($pro eq 'clear') {
 	    $output.=&clear($row,$col);
         } elsif ($pro eq 'any') {
@@ -1620,7 +1636,7 @@ function catalog_info() {
 }
 
 function chat_win() {
-   lonchat=window.open('/res/adm/pages/chatroom.html',"LONchat",'height=320,width=280,resizable=yes,location=no,menubar=no,toolbar=no');
+   lonchat=window.open('/res/adm/pages/chatroom.html',"LONchat",'height=320,width=480,resizable=yes,location=no,menubar=no,toolbar=no');
 }
 
 function group_chat(group) {
@@ -1714,22 +1730,6 @@ sub get_nav_status {
     return $navstatus;
 }
 
-#FIXME this needs to move into mydesk.tab and the other locations 
-# the text is generated
-#
-# We currently do not support this anyway.
-#
-#sub convert_menu_function {
-#    my ($rolename,$type) = @_;
-#    if ($type eq 'Group') {
-#        $rolename =~ s/student/member/g;
-#        $rolename =~ s/group/team/g;
-#        $rolename =~ s/course/group/g;
-#        $rolename =~ s/Course/Group/g;
-#    }
-#    return $rolename;
-#}
-
 sub hidden_button_check {
     my $hidden;
     if ($env{'request.course.id'} eq '') {
@@ -1744,6 +1744,10 @@ sub hidden_button_check {
 
 sub roles_selector {
     my ($cdom,$cnum) = @_;
+    my $crstype = $env{'course.'.$env{'request.course.id'}.'.type'};
+    if ($crstype eq '') {
+        $crstype = 'Course';
+    }
     my $now = time;
     my (%courseroles,%seccount);
     my $is_cc;
@@ -1793,12 +1797,18 @@ sub roles_selector {
             }
         }
     }
+    my $switchtext;
+    if ($crstype eq 'Community') {
+        $switchtext = &mt('Switch community role to...')
+    } else {
+        $switchtext = &mt('Switch course role to...')
+    }
     my @roles_order = ('cc','in','ta','ep','ad','st');
     if (keys(%courseroles) > 1) {
         $role_selector = &jump_to_role($cdom,$cnum,\%seccount,\%courseroles);
         $role_selector .= '<form name="rolechooser" method="post" action="/adm/roles">
                           <select name="switchrole" onchange="javascript:adhocRole('."'switchrole'".')">';
-        $role_selector .= '<option value="">'.&mt('Switch course role to...').'</option>';
+        $role_selector .= '<option value="">'.$switchtext.'</option>';
         foreach my $role (@roles_order) {
             if (defined($courseroles{$role})) {
                 $role_selector .= "\n".'<option value="'.$role.'">'.&Apache::lonnet::plaintext($role).'</option>';