--- loncom/interface/lonmenu.pm 2009/03/13 15:12:02 1.255
+++ loncom/interface/lonmenu.pm 2012/05/23 00:29:22 1.369.2.5
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Routines to control the menu
#
-# $Id: lonmenu.pm,v 1.255 2009/03/13 15:12:02 bisitz Exp $
+# $Id: lonmenu.pm,v 1.369.2.5 2012/05/23 00:29:22 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -26,15 +26,6 @@
# http://www.lon-capa.org/
#
#
-# There are two parameters controlling the action of this module:
-#
-# browser.interface - if this is 'textual', it overrides the second parameter
-# and goes to screen reader PDA mode
-#
-# environment.remote - if this is 'on', the routines controll the remote
-# control, otherwise they render the main window controls; ignored it
-# browser.interface is 'textual'
-#
=head1 NAME
@@ -42,55 +33,91 @@ Apache::lonmenu
=head1 SYNOPSIS
-Coordinates the response to clicking an image.
+Loads contents of /home/httpd/lonTabs/mydesk.tab,
+used to generate inline menu, and Main Menu page.
This is part of the LearningOnline Network with CAPA project
described at http://www.lon-capa.org.
-=head1 SUBROUTINES
+=head1 GLOBAL VARIABLES
=over
-=item show_course()
+=item @desklines
-Little texts
+Each element of this array contains a line of mydesk.tab that doesn't start with
+cat, prim or scnd.
+It gets filled in the BEGIN block of this module.
-=item initlittle()
+=item %category_names
-=item menubuttons()
+The keys of this hash are the abbreviations used in mydesk.tab in those lines that
+start with cat, the values are strings representing titles.
+It gets filled in the BEGIN block of this module.
-This gets called at the top of the body section
+=item %category_members
-=item show_return_link()
+TODO
-=item registerurl()
+=item %category_positions
-This gets called in the header section
+The keys of this hash are the abbreviations used in mydesk.tab in those lines that
+start with cat, its values are position vectors (column, row).
+It gets filled in the BEGIN block of this module.
-=item innerregister()
+=item $readdesk
+
+Indicates that mydesk.tab has been read.
+It is set to 'done' in the BEGIN block of this module.
+
+=item @primary_menu
+
+The elements of this array reference arrays that are made up of the components
+of those lines of mydesk.tab that start with prim:.
+It is used by primary_menu() to generate the corresponding menu.
+It gets filled in the BEGIN block of this module.
+
+=item %primary_sub_menu
+
+The keys of this hash reference are the names of items in the primary_menu array
+which have sub-menus. For each key, the corresponding value is a reference to
+an array containing components extracted from lines in mydesk.tab which begin
+with primsub:.
+This hash, which is used by primary_menu to generate sub-menus, is populated in
+the BEGIN block.
+
+=item @secondary_menu
-This gets called in order to register a URL, both with the Remote
-and in the body of the document
+The elements of this array reference arrays that are made up of the components
+of those lines of mydesk.tab that start with scnd.
+It is used by secondary_menu() to generate the corresponding menu.
+It gets filled in the BEGIN block of this module.
-=item loadevents()
+=back
+
+=head1 SUBROUTINES
-=item unloadevents()
+=over
-=item startupremote()
+=item prep_menuitems(\@menuitem)
-=item setflags()
+This routine wraps a menuitem in proper HTML. It is used by primary_menu() and
+secondary_menu().
-=item maincall()
+=item primary_menu()
-=item load_remote_msg()
+This routine evaluates @primary_menu and returns XHTML for the menu
+that contains following links: About, Message, Roles, Help, Logout
+@primary_menu is filled within the BEGIN block of this module with
+entries from mydesk.tab
-=item get_menu_name()
+=item secondary_menu()
-=item reopenmenu()
+Same as primary_menu() but operates on @secondary_menu.
-=item open()
+=item innerregister()
-Open the menu
+This gets called in order to register a URL in the body of the document
=item clear()
@@ -108,10 +135,6 @@ The javascript is usually similar to "go
=item rawconfig()
-=item close()
-
-=item footer()
-
=item utilityfunctions()
=item serverform()
@@ -120,11 +143,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()
@@ -143,287 +161,310 @@ use Apache::lonhtmlcommon();
use Apache::loncommon();
use Apache::lonenc();
use Apache::lonlocal;
+use Apache::lonmsg();
use LONCAPA qw(:DEFAULT :match);
+use HTML::Entities();
-use vars qw(@desklines %category_names %category_members %category_positions $readdesk);
-
+use vars qw(@desklines %category_names %category_members %category_positions
+ $readdesk @primary_menu %primary_submenu @secondary_menu %secondary_submenu);
my @inlineremote;
+sub prep_menuitem {
+ my ($menuitem) = @_;
+ return '' unless(ref($menuitem) eq 'ARRAY');
+ my $link;
+ if ($$menuitem[1]) { # graphical Link
+ $link = "";
+ } else { # textual Link
+ $link = &mt($$menuitem[3]);
+ }
+ return '
- '. - &mt('You have new messages').' | '; - } else { - $newmail= 'swmenu.setstatus("you have","messages");'; - } - } - if (($textual) - && ($env{'request.symb'}) - && ($env{'request.course.id'})) { - $newmail.= ''; - my ($mapurl,$rid,$resurl)= - &Apache::lonnet::decode_symb(&Apache::lonnet::symbread()); - my $coursetitle=$env{'course.'.$env{'request.course.id'}.'.description'}; - $newmail.=$coursetitle; - my $maptitle=&Apache::lonnet::gettitle($mapurl); - my $restitle=&Apache::lonnet::gettitle(&Apache::lonnet::symbread()); - if ($maptitle && ($maptitle ne 'default.sequence') && ($maptitle ne $coursetitle)) { - $newmail.=', '.$maptitle; - } - if ($restitle) { - $newmail.=': '.$restitle; - } - $newmail.=' | '; - } - if ($env{'request.state'} eq 'construct') { - $newmail = $titletable; - } else { - if ($noremote) { - $newmail.='