--- loncom/interface/lonmenu.pm	2012/05/25 03:23:36	1.369.2.7
+++ loncom/interface/lonmenu.pm	2012/05/22 16:44:06	1.374
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Routines to control the menu
 #
-# $Id: lonmenu.pm,v 1.369.2.7 2012/05/25 03:23:36 raeburn Exp $
+# $Id: lonmenu.pm,v 1.374 2012/05/22 16:44:06 bisitz Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -115,18 +115,6 @@ entries from mydesk.tab
 
 Same as primary_menu() but operates on @secondary_menu.
 
-=item create_submenu()
-
-Creates XHTML for unordered list of sub-menu items which belong to a
-particular top-level menu item. Uses hover pseudo class in css to display
-dropdown list when mouse hovers over top-level item. Support for IE6
-(no hover psuedo class) via LC_hoverable class for <li> tag for top-
-level item, which employs jQuery to handle behavior on mouseover.
-
-Inputs: 4 - (a) link and (b) target for anchor href in top level item,
-            (c) title for text wrapped by anchor tag in top level item.
-            (d) reference to array of arrays of sub-menu items.
-
 =item innerregister()
 
 This gets called in order to register a URL in the body of the document
@@ -179,9 +167,10 @@ use Apache::lonlocal;
 use Apache::lonmsg();
 use LONCAPA qw(:DEFAULT :match);
 use HTML::Entities();
+use Apache::lonwishlist();
 
 use vars qw(@desklines %category_names %category_members %category_positions 
-            $readdesk @primary_menu %primary_submenu @secondary_menu %secondary_submenu);
+            $readdesk @primary_menu %primary_submenu @secondary_menu);
 
 my @inlineremote;
 
@@ -236,32 +225,51 @@ sub primary_menu {
         
         my $title = $menuitem->[3];
         if (defined($primary_submenu{$title})) {
-            my ($link,$target);
+            my ($link,$target,$numsub);
             if ($menuitem->[0] ne '') {
                 $link = $menuitem->[0];
                 $target = '_top';
             } else {
                 $link = '#';
             }
-            my @primsub;
             if (ref($primary_submenu{$title}) eq 'ARRAY') {
-                foreach my $item (@{$primary_submenu{$title}}) {
-                    next if (($item->[2] eq 'wishlist') && 
-                             ((!&Apache::lonnet::allowed('bre',"/res/$env{'user.domain'}/")) &&
-                              (!&Apache::lonnet::allowed('bro',"/res/$env{'user.domain'}/"))));
-                    next if (($item->[2] eq 'reqcrs') && (!&check_for_rcrs()));
-                    next if ((($item->[2] eq 'portfolio') || 
-                             ($item->[2] eq 'blog')) && 
-                             (!&Apache::lonnet::usertools_access('','',$item->[2],
-                                                           undef,'tools')));
-                    push(@primsub,$item);
-                }
-                if (@primsub > 0) {
-                    $menu .= &create_submenu($link,$target,$title,\@primsub);
-                } elsif ($link) {
-                    $menu .= '<li><a href="'.$link.'" target="'.$target.'">'.&mt($title).'</a></li>';
+                $numsub = @{$primary_submenu{$title}};
+                if ($numsub) {
+                    $title =
+                        '<span class="LC_nobreak">'.&mt($title).
+                        '<span class="LC_fontsize_small">'.
+                        '&#9660;</span></span>';
                 }
             }
+            $menu .= '<li class="LC_hoverable">'.
+                     '<a href="'.$link.'" target="'.$target.'">'.$title.'</a>';
+            if ($numsub) {
+                $menu .= '<ul>';
+                foreach my $item (@{$primary_submenu{$menuitem->[3]}}) {
+                    if (ref($item) eq 'ARRAY') {
+                        if ($item->[2] eq 'wishlist') {
+                            next unless ((&Apache::lonnet::allowed('bre',"/res/$env{'user.domain'}/")) ||
+                                         (&Apache::lonnet::allowed('bro',"/res/$env{'user.domain'}/")));
+                        } elsif ($item->[2] eq 'reqcrs') {
+                            next unless(&check_for_rcrs());
+                        } elsif (($item->[2] eq 'portfolio') ||
+                                 ($item->[2] eq 'blog')) {
+                            if (!&Apache::lonnet::usertools_access(
+                                    $env{'user.name'},
+                                    $env{'user.domain'},
+                                    $item->[2],undef,'tools')) {
+                                next;
+                            }
+                        }
+                        $menu .= '<li style="margin:0;padding:0">'.
+                                 '<a href="'.$item->[0].
+                                 '" style="padding:0 0 0 10px">'.
+                                 &mt($item->[1]).'</a></li>';
+                    }
+                }
+                $menu .= '</ul>';
+            }
+            $menu .= '</li>';
         } elsif ($$menuitem[3] eq 'Help') { # special treatment for helplink
             if ($public) {
                 my $origmail = $Apache::lonnet::perlvar{'lonSupportEMail'};
@@ -318,13 +326,12 @@ sub secondary_menu {
                                                ? "/$env{'request.course.sec'}"
                                                : '');
     my $canedit       = &Apache::lonnet::allowed('mdc', $env{'request.course.id'});
-    my $canviewroster = $env{'course.'.$env{'request.course.id'}.'.student_classlist_view'};
-    my $canviewgrps   = &Apache::lonnet::allowed('vcg', $crs_sec);
-    my $canmodifyuser = &Apache::lonnet::allowed('cst', $crs_sec);
-    my $canviewwnew   = &Apache::lonnet::allowed('whn', $crs_sec);
+    my $canviewgrps   = &Apache::lonnet::allowed('vcg', $crs_sec); 
+    my $canmodifyuser = &Apache::lonnet::allowed('cst', $crs_sec); 
+    my $canviewwnew   = &Apache::lonnet::allowed('whn', $crs_sec); 
     my $canmodpara    = &Apache::lonnet::allowed('opa', $crs_sec);
     my $canvgr        = &Apache::lonnet::allowed('vgr', $crs_sec);
-    my $canmgr        = &Apache::lonnet::allowed('mgr', $crs_sec);
+    my $canmgr        = &Apache::lonnet::allowed('mgr', $crs_sec); 
     my $author        = &getauthor();
 
     my %groups = &Apache::lonnet::get_active_groups(
@@ -340,10 +347,6 @@ sub secondary_menu {
                 && !$env{'request.course.id'};
         next if    $$menuitem[4]   =~ /^mdc/
                 && !$canedit;
-        next if    $$menuitem[4]  eq 'mdcCourse'
-                && ($crstype eq 'Community');
-        next if    $$menuitem[4]  eq 'mdcCommunity'
-                && ($crstype eq 'Course');
         next if    $$menuitem[4]  eq 'nvgr'
                 && $canvgr;
         next if    $$menuitem[4]  eq 'vgr'
@@ -351,7 +354,7 @@ sub secondary_menu {
         next if    $$menuitem[4]   eq 'cst'
                 && !$canmodifyuser;
         next if    $$menuitem[4]   eq 'ncst'
-                && ($canmodifyuser || !$canviewroster);
+                && $canmodifyuser;
         next if    $$menuitem[4]   eq 'mgr'
                 && !$canmgr;
         next if    $$menuitem[4]   eq 'nmgr'
@@ -360,45 +363,19 @@ sub secondary_menu {
                 && !$canviewwnew;
         next if    $$menuitem[4]   eq 'opa'
                 && !$canmodpara;
-        next if    $$menuitem[4]   eq 'nvcg'
-                && ($canviewgrps || !%groups);
+        next if    $$menuitem[4]   =~ /showgroups$/
+                && !$canviewgrps
+                && !%groups;
         next if    $$menuitem[4]    eq 'author'
                 && !$author;
 
-        my $title = $menuitem->[3];
-        if (defined($secondary_submenu{$title})) {
-            my ($link,$target);
-            if ($menuitem->[0] ne '') {
-                $link = $menuitem->[0];
-                $target = '_top';
-            } else {
-                $link = '#';
-            }
-            my @scndsub;   
-            if (ref($secondary_submenu{$title}) eq 'ARRAY') {
-                foreach my $item (@{$secondary_submenu{$title}}) {
-                    if (ref($item) eq 'ARRAY') {
-                        next if ($item->[2] eq 'vgr' && !$canvgr);
-                        next if ($item->[2] eq 'opa' && !$canmodpara);
-                        next if ($item->[2] eq 'cst' && !$canmodifyuser);
-                        next if ($item->[2] eq 'mgr' && !$canmgr);
-                        next if ($item->[2] eq 'vcg' && !$canviewgrps);
-                        push(@scndsub,$item); 
-                    }
-                }
-                if (@scndsub > 0) {
-                    $menu .= &create_submenu($link,$target,$title,\@scndsub);
-                } elsif ($link) {
-                    $menu .= '<li><a href="'.$link.'" target="'.$target.'">'.&mt($title).'</a></li>';
-                }
-            }
-        } elsif ($$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'},
                         $env{'course.' . $env{'request.course.id'} . '.num'}  );
 
-            $menu .= $roles_selector ? "<li style=\"padding: 0 0.8em;\">$roles_selector</li>"
+            $menu .= $roles_selector ? "<li>$roles_selector</li>"
                                      : '';
         } else {
             $menu .= &prep_menuitem(\@$menuitem);
@@ -428,34 +405,6 @@ sub secondary_menu {
     return "<ul id=\"LC_secondary_menu\">$menu</ul>";
 }
 
-sub create_submenu {
-    my ($link,$target,$title,$submenu) = @_;
-    return unless (ref($submenu) eq 'ARRAY');
-    my $menu = '<li class="LC_hoverable">'.
-               '<a href="'.$link.'" target="'.$target.'">'. 
-               '<span class="LC_nobreak">'.&mt($title).
-               '<span class="LC_fontsize_small" style="font-weight:normal;">'.
-               ' &#9660;</span></span></a>'.
-               '<ul>';
-    my $count = 0;
-    my $numsub = scalar(@{$submenu});
-    foreach my $item (@{$submenu}) {
-        $count ++;
-        if (ref($item) eq 'ARRAY') {
-            my $borderbot;
-            if ($count == $numsub) {
-                $borderbot = 'border-bottom:1px solid black;';
-            }
-            $menu .= '<li style="margin:0;padding:0;'.
-                     $borderbot.'"><a href="'.$item->[0].'">'.
-                     '" style="padding:0;">'.
-                     &mt($item->[1]).'</a></li>';
-        }
-    }
-    $menu .= '</ul></li>';
-    return $menu;
-}
-
 sub innerregister {
     my ($forcereg,$bread_crumbs) = @_;
     my $const_space = ($env{'request.state'} eq 'construct');
@@ -736,9 +685,14 @@ c&6&3
 c&8&1
 c&8&2
 s&8&3&prt.png&Print&printout[_1]&gopost('/adm/printout',currentURL)&Prepare a printable document
-s&9&1&sbkm.png&Bookmark&set[_1]bookmark[_2]&set_bookmark()&Set a bookmark for this resource&&1
-
 ENDMENUITEMS
+            if (&Apache::lonnet::allowed('bre', $env{'request.course.id'}) eq 'F' && $env{'request.uri'} =~ /^\/res/) {
+                # 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
+ENDMENUITEMS
+            }
 
 my $currentURL = &Apache::loncommon::get_symb();
 my ($symb_old,$symb_old_enc) = &Apache::loncommon::clean_symb($currentURL);
@@ -768,6 +722,12 @@ ENDREALRES
 	    $menuitems .= (<<ENDMENUITEMS);
 s&8&3&prt.png&Print&printout[_1]&gopost('/adm/printout',currentURL)&Prepare a printable document
 ENDMENUITEMS
+            if (&Apache::lonnet::allowed('bre', $env{'request.course.id'}) eq 'F') {
+                # 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
+ENDMENUITEMS
+            }
 	}
         my $buttons='';
         foreach (split(/\n/,$menuitems)) {
@@ -858,164 +818,6 @@ sub edit_course_upload {
     return $cfile;
 }
 
-sub startupremote {
-    my ($lowerurl)=@_;
-    if ($env{'environment.remote'} eq 'off') {
-     return ('<meta HTTP-EQUIV="Refresh" CONTENT="0.5; url='.$lowerurl.'" />');
-    }
-#
-# The Remote actually gets launched!
-#
-    my $configmenu=&rawconfig();
-    my $esclowerurl=&escape($lowerurl);
-    my $message=&mt('"Waiting for Remote Control window to load: "+[_1]','waited');
-    return(<<ENDREMOTESTARTUP);
-<script type="text/javascript">
-// <![CDATA[
-var timestart;
-function wheelswitch() {
-    if (typeof(document.wheel) != 'undefined') {
-        if (typeof(document.wheel.spin) != 'undefined') {
-            var date=new Date();
-            var waited=Math.round(30-((date.getTime()-timestart)/1000));
-            document.wheel.spin.value=$message;
-        }
-    }
-   if (window.status=='|') {
-      window.status='/';
-   } else {
-      if (window.status=='/') {
-         window.status='-';
-      } else {
-         if (window.status=='-') {
-            window.status='\\\\';
-         } else {
-            if (window.status=='\\\\') { window.status='|'; }
-         }
-      }
-   }
-}
-
-// ---------------------------------------------------------- The wait function
-var canceltim;
-function wait() {
-   if ((menuloaded==1) || (tim==1)) {
-      window.status='Done.';
-      if (tim==0) {
-         clearTimeout(canceltim);
-         $configmenu
-         window.location='$lowerurl';
-      } else {
-          window.location='/adm/remote?action=collapse&url=$esclowerurl';
-      }
-   } else {
-      wheelswitch();
-      setTimeout('wait();',200);
-   }
-}
-
-function main() {
-   canceltim=setTimeout('tim=1;',30000);
-   window.status='-';
-   var date=new Date();
-   timestart=date.getTime();
-   wait();
-}
-
-// ]]>
-</script>
-ENDREMOTESTARTUP
-}
-
-sub setflags() {
-    return(<<ENDSETFLAGS);
-<script type="text/javascript">
-// <![CDATA[
-    menuloaded=0;
-    tim=0;
-// ]]>
-</script>
-ENDSETFLAGS
-}
-
-sub maincall() {
-    if ($env{'environment.remote'} eq 'off') { return ''; }
-    return(<<ENDMAINCALL);
-<script type="text/javascript">
-// <![CDATA[
-    main();
-// ]]>
-</script>
-ENDMAINCALL
-}
-
-sub load_remote_msg {
-    my ($lowerurl)=@_;
-
-    if ($env{'environment.remote'} eq 'off') { return ''; }
-
-    my $esclowerurl=&escape($lowerurl);
-    my $link=&mt('[_1]Continue[_2] on in Inline Menu mode'
-                ,'<a href="/adm/remote?action=collapse&amp;url='.$esclowerurl.'">'
-                ,'</a>');
-    return(<<ENDREMOTEFORM);
-<p>
-<form name="wheel">
-<input name="spin" type="text" size="60" />
-</form>
-</p>
-<p>$link</p>
-ENDREMOTEFORM
-}
-
-sub get_menu_name {
-    my $hostid = $Apache::lonnet::perlvar{'lonHostID'};
-    $hostid =~ s/\W//g;
-    return 'LCmenu'.$hostid;
-}
-
-
-sub reopenmenu {
-   if ($env{'environment.remote'} eq 'off') { return ''; }
-   my $menuname = &get_menu_name();
-   my $nothing = &Apache::lonhtmlcommon::javascript_nothing();
-   return('window.open('.$nothing.',"'.$menuname.'","",false);');
-}
-
-
-sub open {
-    my $returnval='';
-    if ($env{'environment.remote'} eq 'off') {
-        return
-        '<script type="text/javascript">'."\n"
-       .'// <![CDATA['."\n"
-       .'self.name="loncapaclient";'."\n"
-       .'// ]]>'."\n"
-       .'</script>';
-    }
-    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=(<<ENDOPEN);
-// <![CDATA[
-window.status='Opening LON-CAPA Remote Control';
-var menu=window.open("/res/adm/pages/menu.html?inhibitmenu=yes","$menuname",
-"height=375,width=150,scrollbars=no,menubar=no,top=5,left=5,screenX=5,screenY=5");
-self.name='loncapaclient';
-// ]]>
-ENDOPEN
-    return '<script type="text/javascript">'.$returnval.'</script>';
-}
-
-
 # ================================================================== Raw Config
 
 sub clear {
@@ -1331,28 +1133,6 @@ sub check_for_rcrs {
     return $showreqcrs;
 }
 
-# ======================================================================= Close
-
-sub close {
-    if ($env{'environment.remote'} eq 'off') { return ''; }
-    my $menuname = &get_menu_name();
-    return(<<ENDCLOSE);
-<script type="text/javascript">
-// <![CDATA[
-window.status='Accessing Remote Control';
-menu=window.open("/adm/rat/empty.html","$menuname",
-                 "height=350,width=150,scrollbars=no,menubar=no");
-window.status='Disabling Remote Control';
-menu.active=0;
-menu.autologout=0;
-window.status='Closing Remote Control';
-menu.close();
-window.status='Done.';
-// ]]>
-</script>
-ENDCLOSE
-}
-
 sub dc_popup_js {
     my %lt = &Apache::lonlocal::texthash(
                                           more => '(More ...)',
@@ -1406,15 +1186,6 @@ sub utilityfunctions {
     my $end_page_annotate = 
         &Apache::loncommon::end_page({'js_ready' => 1});
 
-    my $start_page_bookmark =
-        &Apache::loncommon::start_page('Bookmarks',undef,
-                                       {'only_body' => 1,
-                                        'js_ready'  => 1,
-                                        'bgcolor'   => '#BBBBBB',});
-
-    my $end_page_bookmark =
-        &Apache::loncommon::end_page({'js_ready' => 1});
-
     my $confirm_switch = &mt("Editing requires switching to the resource's home server.").'\n'.
                          &mt('Switch server?');
 
@@ -1531,13 +1302,6 @@ function group_chat(group) {
    grpchat=window.open(url,winName,'height=320,width=280,resizable=yes,location=no,menubar=no,toolbar=no');
 }
 
-function edit_bookmarks() {
-   go('');
-   w_BookmarkPal_flag=1;
-   bookmarkpal=window.open("/adm/bookmarks",
-               "BookmarkPal", "width=500,height=505,scrollbars=0");
-}
-
 function annotate() {
    w_Annotator_flag=1;
    annotator=window.open('','Annotator','width=365,height=265,scrollbars=0');
@@ -1551,6 +1315,19 @@ function annotate() {
    annotator.document.close();
 }
 
+function open_StoredLinks_Import(rat) {
+   var newWin;
+   if (rat) {
+       newWin = window.open('/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',
+                            'wishlistImport','scrollbars=1,resizable=1,menubar=0');
+   }
+   newWin.focus();
+}
+
 (function (\$) {
   \$(document).ready(function () {
     \$.single=function(a){return function(b){a[0]=b;return a}}(\$([1]));
@@ -1565,28 +1342,6 @@ function annotate() {
   });
 }(jQuery));
 
-function set_bookmark() {
-   go('');
-   clienttitle=document.title;
-   clienthref=location.pathname;
-   w_bmquery_flag=1;
-   bmquery=window.open('','bmquery','width=365,height=165,scrollbars=0');
-   bmquery.document.write(
-   '$start_page_bookmark'
-   +'<center><form method="post"'
-   +' name="newlink" action="/adm/bookmarks" target="bmquery" '
-   +'> <table width="340" height="150" '
-   +'bgcolor="#FFFFFF" align="center"><tr><td>Link Name:<br /><input '
-   +'type="text" name="title" size="45" value="'+clienttitle+'" />'
-   +'<br />Address:<br /><input type="text" name="address" size="45" '
-   +'value="'+clienthref+'" /><br /><center><input type="submit" '
-   +'value="Save" /> <input type="button" value="Close" '
-   +'onclick="javascript:window.close();" /></center></td>'
-   +'</tr></table></form></center>'
-   +'$end_page_bookmark' );
-   bmquery.document.close();
-}
-
 ENDUTILITY
 }
 
@@ -2009,9 +1764,6 @@ BEGIN {
                     } elsif ($configline=~/^scnd\:/) {
                         my @entries = (split(/\:/, $configline))[1..5];
                         push @secondary_menu, \@entries; 
-                    } elsif ($configline=~/^scndsub\:/) {
-                        my ($parent,@entries) = (split(/\:/, $configline))[1..4];
-                        push (@{$secondary_submenu{$parent}},\@entries);
                     } elsif ($configline) {
                         push(@desklines,$configline);
                     }