--- loncom/interface/lonmenu.pm 2012/08/03 01:37:23 1.369.2.16 +++ loncom/interface/lonmenu.pm 2012/08/03 17:35:32 1.369.2.17 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Routines to control the menu # -# $Id: lonmenu.pm,v 1.369.2.16 2012/08/03 01:37:23 raeburn Exp $ +# $Id: lonmenu.pm,v 1.369.2.17 2012/08/03 17:35:32 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -131,6 +131,26 @@ Inputs: 4 - (a) link and (b) target for This gets called in order to register a URL in the body of the document +=item loadevents() + +=item unloadevents() + +=item startupremote() + +=item setflags() + +=item maincall() + +=item load_remote_msg() + +=item get_menu_name() + +=item reopenmenu() + +=item open() + +Open the menu + =item clear() =item switch() @@ -458,6 +478,34 @@ sub create_submenu { return $menu; } +sub registerurl { + my ($forcereg) = @_; + my $result = ''; + if ($env{'request.noversionuri'} =~ m{^/res/adm/pages/}) { return ''; } + my $force_title=''; + if ($env{'request.state'} eq 'construct') { + $force_title=&Apache::lonxml::display_title(); + } + if (($env{'environment.remote'} eq 'off') || + ((($env{'request.publicaccess'}) || + (!&Apache::lonnet::is_on_map( + &unescape($env{'request.noversionuri'})))) && + (!$forcereg))) { + return + $result + .'' + .$force_title; + } +# Graphical display after login only + if ($env{'request.registered'} && !$forcereg) { return ''; } + $result.=&innerregister($forcereg); + return $result.$force_title; +} + sub innerregister { my ($forcereg,$bread_crumbs) = @_; my $const_space = ($env{'request.state'} eq 'construct'); @@ -467,8 +515,19 @@ sub innerregister { $env{'request.registered'} = 1; + my $noremote = ($env{'environment.remote'} eq 'off'); + undef(@inlineremote); + my $reopen=&Apache::lonmenu::reopenmenu(); + + my $newmail=''; + + if (&Apache::lonmsg::newmail() && !$noremote) { + # We have new mail and remote is up + $newmail= 'swmenu.setstatus("you have","messages");'; + } + my $resurl; if ( $env{'request.symb'} && $env{'request.course.id'} ) { @@ -507,10 +566,48 @@ sub innerregister { &Apache::lonhtmlcommon::clear_breadcrumbs(); &Apache::lonhtmlcommon::add_breadcrumb({text => 'View Resource'}); } + my $timesync = ( $noremote ? '' : 'swmenu.syncclock(1000*'.time.');' ); # ============================================================================= # ============================ This is for URLs that actually can be registered - return '' unless ( ($env{'request.noversionuri'}!~m{^/(res/)*adm/}) - || $forcereg ); + unless ( ($env{'request.noversionuri'}!~m{^/(res/)*adm/}) + || ($forcereg)) { + unless ($noremote) { +# Not registered, graphical + return (< +// + +ENDDONOTREGTHIS + + } + return ''; + } # -- This applies to homework problems for users with grading privileges my $crs='/'.$env{'request.course.id'}; @@ -792,7 +889,7 @@ 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 $got_wishlist = 1; - } + } } } my $buttons=''; @@ -813,44 +910,94 @@ ENDMENUITEMS } } } - + if ($noremote) { my $addremote=0; foreach (@inlineremote) { if ($_ ne '') { $addremote=1; last;} } - if ($addremote) { + if ($addremote) { - &Apache::lonhtmlcommon::clear_breadcrumb_tools(); + &Apache::lonhtmlcommon::clear_breadcrumb_tools(); - &Apache::lonhtmlcommon::add_breadcrumb_tool( - 'navigation', @inlineremote[21,23]); + &Apache::lonhtmlcommon::add_breadcrumb_tool( + 'navigation', @inlineremote[21,23]); + + my $countdown = &countdown_timer(); + if (&hidden_button_check() eq 'yes') { + if ($countdown) { + &Apache::lonhtmlcommon::add_breadcrumb_tool('tools',$countdown); + } + } else { + my @tools = @inlineremote[93,91,81,82,83]; + if ($countdown) { + unshift(@tools,$countdown); + } + &Apache::lonhtmlcommon::add_breadcrumb_tool( + 'tools',@tools); - my $countdown = &countdown_timer(); - if (&hidden_button_check() eq 'yes') { - if ($countdown) { - &Apache::lonhtmlcommon::add_breadcrumb_tool('tools',$countdown); + #publish button in construction space + if ($env{'request.state'} eq 'construct'){ + &Apache::lonhtmlcommon::add_breadcrumb_tool( + 'advtools', $inlineremote[63]); + } else { + &Apache::lonhtmlcommon::add_breadcrumb_tool( + 'tools', $inlineremote[63]); + } + unless ($env{'request.noversionuri'}=~ m{^/adm/(navmaps|viewclasslist)(\?|$)}) { + &Apache::lonhtmlcommon::add_breadcrumb_tool( + 'advtools', @inlineremote[61,71,72,73,74,92]); + } + } } } else { - my @tools = @inlineremote[93,91,81,82,83]; - if ($countdown) { - unshift(@tools,$countdown); - } - &Apache::lonhtmlcommon::add_breadcrumb_tool( - 'tools',@tools); + my $requri=&Apache::lonnet::clutter(&Apache::lonnet::fixversion((split(/\?/,$env{'request.noversionuri'}))[0])); + $requri=&Apache::lonenc::check_encrypt(&unescape($requri)); + my $cursymb=&Apache::lonenc::check_encrypt($env{'request.symb'}); + my $navstatus=&get_nav_status(); + my $clearcstr; - #publish button in construction space - if ($env{'request.state'} eq 'construct'){ - &Apache::lonhtmlcommon::add_breadcrumb_tool( - 'advtools', $inlineremote[63]); - } else { - &Apache::lonhtmlcommon::add_breadcrumb_tool( - 'tools', $inlineremote[63]); - } - - unless ($env{'request.noversionuri'}=~ m{^/adm/(navmaps|viewclasslist)(\?|$)}) { - &Apache::lonhtmlcommon::add_breadcrumb_tool( - 'advtools', @inlineremote[61,71,72,73,74,92]); - } + if ($env{'user.adv'}) { $clearcstr='clearbut(6,1)'; } + return < +// + +ENDREGTHIS } - } return &Apache::lonhtmlcommon::scripttag('', 'start') . &Apache::lonhtmlcommon::breadcrumbs(undef,undef,0) @@ -893,10 +1040,22 @@ sub edit_course_upload { return $cfile; } +sub loadevents() { + if ($env{'request.state'} eq 'construct' || + $env{'request.noversionuri'} =~ m{^/res/adm/pages/}) { return ''; } + return 'LONCAPAreg();'; +} + +sub unloadevents() { + if ($env{'request.state'} eq 'construct' || + $env{'request.noversionuri'} =~ m{^/res/adm/pages/}) { return ''; } + return 'LONCAPAstale();'; +} + sub startupremote { my ($lowerurl)=@_; - if ($env{'environment.remote'} eq 'off') { - return (''); + unless ($env{'environment.remote'} eq 'on') { + return (''); } # # The Remote actually gets launched! @@ -974,7 +1133,7 @@ ENDSETFLAGS } sub maincall() { - if ($env{'environment.remote'} eq 'off') { return ''; } + unless ($env{'environment.remote'} eq 'on') { return ''; } return(< // '."\n" .'// 13)) { return ''; } + return "\n".qq(window.status+='.';swmenu.clearbut($row,$col);); + } else { + $inlineremote[10*$row+$col]=''; + return ''; + } } # ============================================ Switch a button or create a link @@ -1073,6 +1237,14 @@ sub switch { my $idx=10*$row+$col; $category_members{$cat}.=':'.$idx; + if ($env{'environment.remote'} eq 'on') { + if (($row<1) || ($row>13)) { return ''; } +# Remote + $img=~s/\.png$/\.gif/; + return "\n". + qq(window.status+='.';swmenu.switchbutton($row,$col,"$img","$top","$bot","$act","$desc");); + } + # Inline Menu if ($nobreak==2) { return ''; } my $text=$top.' '.$bot; @@ -1134,6 +1306,13 @@ sub secondlevel { return $output; } +sub openmenu { + my $menuname = &get_menu_name(); + unless ($env{'environment.remote'} eq 'on') { return ''; } + my $nothing = &Apache::lonhtmlcommon::javascript_nothing(); + return "window.open(".$nothing.",'".$menuname."');"; +} + sub inlinemenu { undef(@inlineremote); undef(%category_members); @@ -1176,7 +1355,13 @@ sub rawconfig { # my $textualoverride=shift; my $output=''; - return '' unless $textualoverride; + if ($env{'environment.remote'} eq 'on') { + $output.= + "window.status='Opening Remote Control';var swmenu=".&openmenu(). +"\nwindow.status='Configuring Remote Control ';"; + } else { + unless ($textualoverride) { return ''; } + } my $uname=$env{'user.name'}; my $udom=$env{'user.domain'}; my $adv=$env{'user.adv'}; @@ -1351,6 +1536,12 @@ sub rawconfig { $uname,$udom,$rol,$crs,$pub,$con,$row,$col,$prt,$img,$top,$bot,$act,$desc,$cat); } } + if ($env{'environment.remote'} eq 'on') { + $output.="\nwindow.status='Synchronizing Time';swmenu.syncclock(1000*".time.");\nwindow.status='Remote Control Configured.';"; + if (&Apache::lonmsg::newmail()) { + $output.='swmenu.setstatus("you have","messages");'; + } + } return $output; } @@ -1379,7 +1570,7 @@ sub check_for_rcrs { # ======================================================================= Close sub close { - if ($env{'environment.remote'} eq 'off') { return ''; } + unless ($env{'environment.remote'} eq 'on') { return ''; } my $menuname = &get_menu_name(); return(< @@ -1664,6 +1855,16 @@ sub constspaceform { ENDCONSTSPACEFORM } +sub get_nav_status { + my $navstatus="swmenu.w_loncapanav_flag="; + if ($env{'environment.remotenavmap'} eq 'on') { + $navstatus.="1"; + } else { + $navstatus.="-1"; + } + return $navstatus; +} + sub hidden_button_check { if ( $env{'request.course.id'} eq '' || $env{'request.role.adv'} ) {