--- loncom/interface/lonmenu.pm	2013/07/03 16:44:20	1.417
+++ loncom/interface/lonmenu.pm	2014/06/22 19:46:48	1.428
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Routines to control the menu
 #
-# $Id: lonmenu.pm,v 1.417 2013/07/03 16:44:20 raeburn Exp $
+# $Id: lonmenu.pm,v 1.428 2014/06/22 19:46:48 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -261,7 +261,7 @@ sub primary_menu {
                     push(@primsub,$item);
                 }
                 if (@primsub > 0) {
-                    $menu{$position} .= &create_submenu($link,$target,$title,\@primsub);
+                    $menu{$position} .= &create_submenu($link,$target,$title,\@primsub,1);
                 } elsif ($link) {
                     $menu{$position} .= '<li><a href="'.$link.'" target="'.$target.'">'.&mt($title).'</a></li>';
                 }
@@ -283,8 +283,14 @@ sub primary_menu {
             $menu{$position} .= prep_menuitem($menuitem);
         }
     }
-    return ("<ol class=\"LC_primary_menu LC_floatleft\">$menu{'left'}</ol>",
-            "<ol class=\"LC_primary_menu LC_floatright LC_right\">$menu{'right'}</ol>");
+    my @output = ('','');
+    if ($menu{'left'} ne '') {
+        $output[0] = "<ol class=\"LC_primary_menu LC_floatleft\">$menu{'left'}</ol>";
+    }
+    if ($menu{'right'} ne '') {
+        $output[1] = "<ol class=\"LC_primary_menu LC_floatright LC_right\">$menu{'right'}</ol>";
+    }
+    return @output;
 }
 
 #returns hashref {user=>'',dom=>''} containing:
@@ -313,6 +319,7 @@ sub getauthor{
 }
 
 sub secondary_menu {
+    my ($httphost) = @_;
     my $menu;
 
     my $crstype = &Apache::loncommon::course_type();
@@ -321,6 +328,9 @@ sub secondary_menu {
                                                : '');
     my $canedit       = &Apache::lonnet::allowed('mdc', $env{'request.course.id'});
     my $canviewroster = $env{'course.'.$env{'request.course.id'}.'.student_classlist_view'};
+    if ($canviewroster eq 'disabled') {
+        undef($canviewroster);
+    }
     my $canviewgrps   = &Apache::lonnet::allowed('vcg', $crs_sec); 
     my $canmodifyuser = &Apache::lonnet::allowed('cst', $crs_sec); 
     my $canviewwnew   = &Apache::lonnet::allowed('whn', $crs_sec); 
@@ -414,7 +424,8 @@ sub secondary_menu {
             ($roleswitcher_js,$roleswitcher_form,my $switcher) =
                 &roles_selector(
                         $env{'course.' . $env{'request.course.id'} . '.domain'},
-                        $env{'course.' . $env{'request.course.id'} . '.num'}
+                        $env{'course.' . $env{'request.course.id'} . '.num'},
+                        $httphost
                 );
             $menu .= $switcher;
         } else {
@@ -466,7 +477,7 @@ sub secondary_menu {
 }
 
 sub create_submenu {
-    my ($link,$target,$title,$submenu) = @_;
+    my ($link,$target,$title,$submenu,$translate) = @_;
     return unless (ref($submenu) eq 'ARRAY');
     my $disptarget;
     if ($target ne '') {
@@ -503,9 +514,17 @@ sub create_submenu {
             if ($count == $numsub) {
                 $borderbot = 'border-bottom:1px solid black;';
             }
+            unless (($href eq '') || ($href =~ /^\#/)) {
+                $target = ' target="_top"';
+            }
             $menu .= '<li style="margin:0;padding:0;'.
-                     $borderbot.'"><a href="'.$href.'">'.
-                     &mt($item->[1]).'</a></li>';
+                     $borderbot.'"><a href="'.$href.'"'.$target.'>';
+            if ($translate) {
+                $menu .= &mt($item->[1]);
+            } else {
+                $menu .= $item->[1];
+            }
+            $menu .= '</a></li>';
         }
     }
     $menu .= '</ul></li>';
@@ -733,7 +752,7 @@ ENDMENUITEMS
                 # wishlist is only available for users with access to resource-pool
                 # and links can only be set for resources within the resource-pool
                 $menuitems .= (<<ENDMENUITEMS);
-s&9&1&wishlist-link.png&Stored Links&wishlistlink[_2]&set_wishlistlink()&Save a link for this resource in your personal Stored Links repository&&1
+s&9&1&wishlist-link.png&Stored Links&wishlistlink[_2]&set_wishlistlink()&Save a link for this resource in my personal Stored Links repository&&1
 ENDMENUITEMS
                 $got_wishlist = 1;
             }
@@ -749,21 +768,28 @@ if(length($annotation) > 0){
 }
 $menuitems.="&Notes&&annotate()&";
 $menuitems.="Make notes and annotations about this resource&&1\n";
+my $is_mobile;
+if ($env{'browser.mobile'}) {
+    $is_mobile = 1;
+}
 
             unless ($env{'request.noversionuri'}=~/\/(bulletinboard|smppg|navmaps|syllabus|aboutme|viewclasslist|portfolio)(\?|$)/) {
 		if ((!$env{'request.enc'}) && ($env{'request.noversionuri'} !~ m{^/adm/wrapper/ext/}) && ($env{'request.noversionuri'} !~ m{^/uploaded/$match_domain/$match_courseid/docs/})) {
 		    $menuitems.=(<<ENDREALRES);
-s&6&3&catalog.png&Info&info[_1]&catalog_info()&Show Metadata
+s&6&3&catalog.png&Info&info[_1]&catalog_info('$is_mobile')&Show Metadata
 ENDREALRES
                 }
-                unless ($env{'request.noversionuri'} =~ m{^/uploaded/$match_domain/$match_courseid/docs/}) {
+                unless (($env{'request.noversionuri'} =~ m{^/uploaded/$match_domain/$match_courseid/docs/}) ||
+                        ($env{'request.noversionuri'} =~ m{^\Q/adm/wrapper/\E(ext|uploaded)/})) {  
                     $menuitems.=(<<ENDREALRES);
 s&8&1&eval.png&Evaluate&this[_1]&gopost('/adm/evaluate',currentURL,1)&Provide my evaluation of this resource
 ENDREALRES
                 }
-                $menuitems.=(<<ENDREALRES);
+                unless ($env{'request.noversionuri'} =~ m{^\Q/adm/wrapper/\E(ext|uploaded)/}) {
+                    $menuitems.=(<<ENDREALRES);
 s&8&2&fdbk.png&Communicate&discuss[_1]&gopost('/adm/feedback',currentURL,1)&Provide feedback messages or contribute to the course discussion about this resource
 ENDREALRES
+                }
 	    }
         }
 	if ($env{'request.uri'} =~ /^\/res/) {
@@ -1207,7 +1233,10 @@ sub rawconfig {
     my $pub=($env{'request.state'} eq 'published');
     my $con=($env{'request.state'} eq 'construct');
     my $rol=$env{'request.role'};
-    my $requested_domain = $env{'request.role.domain'};
+    my $requested_domain;
+    if ($rol) {
+       $requested_domain = $env{'request.role.domain'};
+    }
     foreach my $line (@desklines) {
         my ($row,$col,$pro,$prt,$img,$top,$bot,$act,$desc,$cat)=split(/\:/,$line);
         $prt=~s/\$uname/$uname/g;
@@ -1221,7 +1250,13 @@ sub rawconfig {
             next if ($crstype ne 'Community');
             $prt=~s/\$cmty/$crs/g;
         }
-        $prt=~s/\$requested_domain/$requested_domain/g;
+        if ($prt =~ m/\$requested_domain/) {
+            if ((!$requested_domain) && ($pro eq 'pbre') && ($env{'user.adv'})) {
+                $prt=~s/\$requested_domain/$env{'user.domain'}/g;
+            } else {
+                $prt=~s/\$requested_domain/$requested_domain/g;
+            }
+        }
         if ($category_names{$cat}!~/\w/) { $cat='oth'; }
         if ($pro eq 'clear') {
 	    $output.=&clear($row,$col);
@@ -1257,8 +1292,9 @@ sub rawconfig {
                     next;
                 }
             }
-	    if (&Apache::lonnet::allowed($priv,$prt)) {
-               $output.=&switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc,$cat);
+            if ((($priv eq 'bre') && (&Apache::lonnet::allowed($priv,$prt) eq 'F')) ||
+                (($priv ne 'bre') && (&Apache::lonnet::allowed($priv,$prt)))) {
+                $output.=&switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc,$cat);
             }
         } elsif ($pro eq 'course')  {
             if (($env{'request.course.fn'}) && ($crstype ne 'Community')) {
@@ -1368,7 +1404,7 @@ sub rawconfig {
 
 sub check_for_rcrs {
     my $showreqcrs = 0;
-    my @reqtypes = ('official','unofficial','community');
+    my @reqtypes = ('official','unofficial','community','textbook');
     foreach my $type (@reqtypes) {
         if (&Apache::lonnet::usertools_access($env{'user.name'},
                                               $env{'user.domain'},
@@ -1435,6 +1471,7 @@ END
 }
 
 sub utilityfunctions {
+    my ($httphost) = @_;
     my $currenturl=&Apache::lonnet::clutter(&Apache::lonnet::fixversion((split(/\?/,$env{'request.noversionuri'}))[0]));
     if ($currenturl =~ m{^/adm/wrapper/ext/}
         && $env{'request.external.querystring'} ) {
@@ -1470,7 +1507,7 @@ sub utilityfunctions {
     my $countdown = &countdown_toggle_js();
 
 return (<<ENDUTILITY)
-
+    var host="$httphost";
     var currentURL=unescape("$esc_url");
     var reloadURL=unescape("$esc_url");
     var currentSymb=unescape("$esc_symb");
@@ -1481,7 +1518,7 @@ $jumptores
 
 function gopost(url,postdata) {
    if (url!='') {
-      this.document.server.action=url;
+      this.document.server.action=host+url;
       this.document.server.postdata.value=postdata;
       this.document.server.command.value='';
       this.document.server.url.value='';
@@ -1492,7 +1529,7 @@ function gopost(url,postdata) {
 
 function gocmd(url,cmd) {
    if (url!='') {
-      this.document.server.action=url;
+      this.document.server.action=host+url;
       this.document.server.postdata.value='';
       this.document.server.command.value=cmd;
       this.document.server.url.value=currentURL;
@@ -1544,22 +1581,26 @@ function golist(url) {
    if (url!='' && url!= null) {
        currentURL = null;
        currentSymb= null;
-       top.location.href=url;
+       top.location.href=host+url;
    }
 }
 
 
 
-function catalog_info() {
-   openMyModal(window.location.pathname+'.meta',500,400,'yes');
+function catalog_info(isMobile) {
+    if (isMobile == 1) {
+        openMyModal(window.location.pathname+'.meta?modal=1',500,400,'yes');
+    } else {
+        loncatinfo=window.open(window.location.pathname+'.meta',"LONcatInfo",'height=500,width=400,resizable=yes,scrollbars=yes,location=no,menubar=no,toolbar=no');
+    }
 }
 
 function chat_win() {
-   lonchat=window.open('/res/adm/pages/chatroom.html',"LONchat",'height=320,width=480,resizable=yes,location=no,menubar=no,toolbar=no');
+   lonchat=window.open(host+'/res/adm/pages/chatroom.html',"LONchat",'height=320,width=480,resizable=yes,location=no,menubar=no,toolbar=no');
 }
 
 function group_chat(group) {
-   var url = '/adm/groupchat?group='+group;
+   var url = host+'/adm/groupchat?group='+group;
    var winName = 'LONchat_'+group;
    grpchat=window.open(url,winName,'height=320,width=280,resizable=yes,location=no,menubar=no,toolbar=no');
 }
@@ -1580,11 +1621,11 @@ function annotate() {
 function open_StoredLinks_Import(rat) {
    var newWin;
    if (rat) {
-       newWin = window.open('/adm/wishlist?inhibitmenu=yes&mode=import&rat='+rat,
+       newWin = window.open(host+'/adm/wishlist?inhibitmenu=yes&mode=import&rat='+rat,
                             'wishlistImport','scrollbars=1,resizable=1,menubar=0');
    }
    else {
-       newWin = window.open('/adm/wishlist?inhibitmenu=yes&mode=import',
+       newWin = window.open(host+'/adm/wishlist?inhibitmenu=yes&mode=import',
                             'wishlistImport','scrollbars=1,resizable=1,menubar=0');
    }
    newWin.focus();
@@ -1649,7 +1690,7 @@ sub hidden_button_check {
 }
 
 sub roles_selector {
-    my ($cdom,$cnum) = @_;
+    my ($cdom,$cnum,$httphost) = @_;
     my $crstype = &Apache::loncommon::course_type();
     my $now = time;
     my (%courseroles,%seccount,%courseprivs);
@@ -1742,7 +1783,7 @@ sub roles_selector {
             }
         }
     }
-    $switchtext = &mt('Switch role');
+    $switchtext = 'Switch role'; # do not translate here
     my @roles_order = ($ccrole,'in','ta','ep','ad','st');
     my $numdiffsec;
     if (keys(%seccount) == 1) {
@@ -1754,7 +1795,7 @@ sub roles_selector {
         my @submenu;
         $js = &jump_to_role($cdom,$cnum,\%seccount,\%courseroles,\%courseprivs,$priv);
         $form = 
-            '<form name="rolechooser" method="post" action="/adm/roles">'."\n".
+            '<form name="rolechooser" method="post" action="'.$httphost.'/adm/roles">'."\n".
             '  <input type="hidden" name="destinationurl" value="'.
             &HTML::Entities::encode($destinationurl).'" />'."\n".
             '  <input type="hidden" name="gotorole" value="1" />'."\n".