--- loncom/interface/lonmenu.pm	2013/09/07 19:58:01	1.421
+++ loncom/interface/lonmenu.pm	2014/12/20 15:35:40	1.430
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Routines to control the menu
 #
-# $Id: lonmenu.pm,v 1.421 2013/09/07 19:58:01 raeburn Exp $
+# $Id: lonmenu.pm,v 1.430 2014/12/20 15:35:40 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -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:
@@ -508,8 +514,11 @@ 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.'">';
+                     $borderbot.'"><a href="'.$href.'"'.$target.'>';
             if ($translate) {
                 $menu .= &mt($item->[1]);
             } else {
@@ -743,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('',currentURL)&Save a link for this resource in my personal Stored Links repository&&1
 ENDMENUITEMS
                 $got_wishlist = 1;
             }
@@ -759,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/) {
@@ -787,7 +803,7 @@ ENDMENUITEMS
                 if (($env{'user.adv'}) && (!$env{'request.enc'})) {
                     # wishlist is only available for users with access to 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('',currentURL)&Save a link for this resource in your personal Stored Links repository&&1
 ENDMENUITEMS
                     $got_wishlist = 1;
                 }
@@ -1217,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;
@@ -1231,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);
@@ -1267,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')) {
@@ -1378,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'},
@@ -1480,8 +1506,26 @@ sub utilityfunctions {
 
     my $countdown = &countdown_toggle_js();
 
+    my $hostvar = '
+function setLCHost() {
+    var lcHostname="";
+';
+    if ($httphost =~ m{^https?\://}) {
+        $hostvar .= '    var lcServer="'.$httphost.'";'."\n".
+                    '    var hostReg = /^https?:\/\/([^\/]+)$/i;'."\n".
+                    '    var match = hostReg.exec(lcServer);'."\n".
+                    '    if (match.length) {'."\n".
+                    '        if (match[1] == location.hostname) {'."\n".
+                    '            lcHostname=lcServer;'."\n".
+                    '        }'."\n".
+                    '    }'."\n";
+    }
+    
+    $hostvar .= '    return lcHostname;'."\n".
+'}'."\n";
+
 return (<<ENDUTILITY)
-    var host="$httphost";
+    $hostvar
     var currentURL=unescape("$esc_url");
     var reloadURL=unescape("$esc_url");
     var currentSymb=unescape("$esc_symb");
@@ -1492,7 +1536,8 @@ $jumptores
 
 function gopost(url,postdata) {
    if (url!='') {
-      this.document.server.action=host+url;
+      var lcHostname = setLCHost();
+      this.document.server.action=lcHostname+url;
       this.document.server.postdata.value=postdata;
       this.document.server.command.value='';
       this.document.server.url.value='';
@@ -1503,7 +1548,8 @@ function gopost(url,postdata) {
 
 function gocmd(url,cmd) {
    if (url!='') {
-      this.document.server.action=host+url;
+      var lcHostname = setLCHost();
+      this.document.server.action=lcHostname+url;
       this.document.server.postdata.value='';
       this.document.server.command.value=cmd;
       this.document.server.url.value=currentURL;
@@ -1555,22 +1601,29 @@ function golist(url) {
    if (url!='' && url!= null) {
        currentURL = null;
        currentSymb= null;
-       top.location.href=host+url;
+       var lcHostname = setLCHost();
+       top.location.href=lcHostname+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(host+'/res/adm/pages/chatroom.html',"LONchat",'height=320,width=480,resizable=yes,location=no,menubar=no,toolbar=no');
+   var lcHostname = setLCHost();
+   lonchat=window.open(lcHostname+'/res/adm/pages/chatroom.html',"LONchat",'height=320,width=480,resizable=yes,location=no,menubar=no,toolbar=no');
 }
 
 function group_chat(group) {
-   var url = host+'/adm/groupchat?group='+group;
+   var lcHostname = setLCHost();
+   var url = lcHostname+'/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');
 }
@@ -1590,12 +1643,13 @@ function annotate() {
 
 function open_StoredLinks_Import(rat) {
    var newWin;
+   var lcHostname = setLCHost();
    if (rat) {
-       newWin = window.open(host+'/adm/wishlist?inhibitmenu=yes&mode=import&rat='+rat,
+       newWin = window.open(lcHostname+'/adm/wishlist?inhibitmenu=yes&mode=import&rat='+rat,
                             'wishlistImport','scrollbars=1,resizable=1,menubar=0');
    }
    else {
-       newWin = window.open(host+'/adm/wishlist?inhibitmenu=yes&mode=import',
+       newWin = window.open(lcHostname+'/adm/wishlist?inhibitmenu=yes&mode=import',
                             'wishlistImport','scrollbars=1,resizable=1,menubar=0');
    }
    newWin.focus();