--- loncom/interface/lonmenu.pm 2009/03/02 11:51:25 1.254 +++ 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.254 2009/03/02 11:51:25 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.='