--- loncom/interface/lonmenu.pm 2012/05/28 22:22:20 1.369.2.11 +++ loncom/interface/lonmenu.pm 2012/05/15 01:41:27 1.370 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Routines to control the menu # -# $Id: lonmenu.pm,v 1.369.2.11 2012/05/28 22:22:20 raeburn Exp $ +# $Id: lonmenu.pm,v 1.370 2012/05/15 01:41:27 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -26,6 +26,8 @@ # http://www.lon-capa.org/ # # +# There is one parameter controlling the action of this module: +# =head1 NAME @@ -33,8 +35,7 @@ Apache::lonmenu =head1 SYNOPSIS -Loads contents of /home/httpd/lonTabs/mydesk.tab, -used to generate inline menu, and Main Menu page. +Coordinates the response to clicking an image. This is part of the LearningOnline Network with CAPA project described at http://www.lon-capa.org. @@ -73,19 +74,10 @@ It is set to 'done' in the BEGIN block o =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:. +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 The elements of this array reference arrays that are made up of the components @@ -115,18 +107,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
  • 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 @@ -149,9 +129,6 @@ The javascript is usually similar to "go =item utilityfunctions() -Output from this routine is a number of javascript functions called by -items in the inline menu, and in some cases items in the Main Menu page. - =item serverform() =item constspaceform() @@ -182,7 +159,7 @@ 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 @secondary_menu); my @inlineremote; @@ -205,7 +182,7 @@ sub prep_menuitem { # primary_menu() evaluates @primary_menu and returns XHTML for the menu # that contains following links: -# About, Message, Personal, Roles, Help, Logout +# About, Message, Roles, Help, Logout # @primary_menu is filled within the BEGIN block of this module with # entries from mydesk.tab sub primary_menu { @@ -235,35 +212,8 @@ sub primary_menu { next if $$menuitem[4] eq 'courses' ##'Roles' wanted && !&Apache::loncommon::show_course(); ## - my $title = $menuitem->[3]; - if (defined($primary_submenu{$title})) { - my ($link,$target); - 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 .= '
  • '.&mt($title).'
  • '; - } - } - } elsif ($$menuitem[3] eq 'Help') { # special treatment for helplink + + if ($$menuitem[3] eq 'Help') { # special treatment for helplink if ($public) { my $origmail = $Apache::lonnet::perlvar{'lonSupportEMail'}; my $defdom = &Apache::lonnet::default_login_domain(); @@ -319,13 +269,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( @@ -341,10 +290,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' @@ -352,7 +297,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' @@ -361,45 +306,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 .= '
  • '.&mt($title).'
  • '; - } - } - } 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 ? "
  • $roles_selector
  • " + $menu .= $roles_selector ? "
  • $roles_selector
  • " : ''; } else { $menu .= &prep_menuitem(\@$menuitem); @@ -429,37 +348,6 @@ sub secondary_menu { return ""; } -sub create_submenu { - my ($link,$target,$title,$submenu) = @_; - return unless (ref($submenu) eq 'ARRAY'); - my $disptarget; - if ($target ne '') { - $disptarget = ' target="'.$target.'"'; - } - my $menu = '
  • '. - ''. - ''.&mt($title). - ''. - ' ▼'. - '
  • '; - return $menu; -} - sub innerregister { my ($forcereg,$bread_crumbs) = @_; my $const_space = ($env{'request.state'} eq 'construct'); @@ -780,7 +668,7 @@ ENDMENUITEMS if (&Apache::lonnet::allowed('bre', $env{'request.course.id'}) eq 'F') { # wishlist is only available for users with access to resource-pool $menuitems .= (<'); - } -# -# 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 -} - -sub setflags() { - return(< -// - -ENDSETFLAGS -} - -sub maincall() { - if ($env{'environment.remote'} eq 'off') { return ''; } - return(< -// - -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' - ,'' - ,''); - return(< -
    - -
    -

    -

    $link

    -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 - ''; - } - my $menuname = &get_menu_name(); - -# unless (shift eq 'unix') { -# resizing does not work on linux because of virtual desktop sizes -# $returnval.=(< -ENDOPEN - return ''; -} - - # ================================================================== Raw Config sub clear { @@ -1092,19 +813,9 @@ sub switch { } } else { # Inline Menu - my @tools = (93,91,81,82,83); - unless ($env{'request.state'} eq 'construct') { - push(@tools,63); - } - if (($env{'environment.icons'} eq 'iconsonly') && - (grep(/^$idx$/,@tools))) { - $inlineremote[$idx] = - ''.$pic.''; - } else { - $inlineremote[$idx] = + $inlineremote[$idx]= ''.$pic. ''.$top.' '; - } } return ''; } @@ -1365,28 +1076,6 @@ sub check_for_rcrs { return $showreqcrs; } -# ======================================================================= Close - -sub close { - if ($env{'environment.remote'} eq 'off') { return ''; } - my $menuname = &get_menu_name(); - return(< -// - -ENDCLOSE -} - sub dc_popup_js { my %lt = &Apache::lonlocal::texthash( more => '(More ...)', @@ -1412,27 +1101,6 @@ END } -sub countdown_toggle_js { - return <<"END"; - -function toggleCountdown() { - var countdownid = document.getElementById('duedatecountdown'); - var currstyle = countdownid.style.display; - if (currstyle == 'inline') { - countdownid.style.display = 'none'; - document.getElementById('ddcountcollapse').innerHTML=''; - document.getElementById('ddcountexpand').innerHTML='◄ '; - } else { - countdownid.style.display = 'inline'; - document.getElementById('ddcountcollapse').innerHTML='► '; - document.getElementById('ddcountexpand').innerHTML=''; - } - return; -} - -END -} - sub utilityfunctions { my $currenturl=&Apache::lonnet::clutter(&Apache::lonnet::fixversion((split(/\?/,$env{'request.noversionuri'}))[0])); if ($currenturl =~ m{^/adm/wrapper/ext/} @@ -1467,8 +1135,6 @@ sub utilityfunctions { my $esc_url=&escape($currenturl); my $esc_symb=&escape($currentsymb); - my $countdown = &countdown_toggle_js(); - return (< time) { - my ($collapse,$expand,$alttxt,$title,$currdisp); - my @interval=&Apache::lonnet::EXT("resource.0.interval"); - if (@interval > 1) { - $currdisp = 'inline'; - $collapse = '► '; - } else { - $currdisp = 'none'; - $expand = '◄ '; - } - unless ($env{'environment.icons'} eq 'iconsonly') { - $alttxt = &mt('Timer'); - $title = $alttxt.' '; - } - my $desc = &mt('Countdown to due date/time'); - return < - -$collapse - - - -$expand -$alttxt$title -END - } - } - return; -} - # ================================================================ Main Program BEGIN { @@ -2073,15 +1687,9 @@ BEGIN { } elsif ($configline=~/^prim\:/) { my @entries = (split(/\:/, $configline))[1..5]; push @primary_menu, \@entries; - } elsif ($configline=~/^primsub\:/) { - my ($parent,@entries) = (split(/\:/, $configline))[1..4]; - push (@{$primary_submenu{$parent}},\@entries); } 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); }