--- loncom/interface/lonnavmaps.pm 2004/12/07 22:58:05 1.307 +++ loncom/interface/lonnavmaps.pm 2005/08/02 20:51:18 1.335 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Navigate Maps Handler # -# $Id: lonnavmaps.pm,v 1.307 2004/12/07 22:58:05 raeburn Exp $ +# $Id: lonnavmaps.pm,v 1.335 2005/08/02 20:51:18 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -30,6 +30,7 @@ package Apache::lonnavmaps; use strict; +use GDBM_File; use Apache::Constants qw(:common :http); use Apache::loncommon(); use Apache::lonmenu(); @@ -38,6 +39,7 @@ use Apache::lonlocal; use Apache::lonnet; use POSIX qw (floor strftime); use Data::Dumper; # for debugging, not always +use Time::HiRes qw( gettimeofday tv_interval ); # symbolic constants sub SYMB { return 1; } @@ -55,6 +57,7 @@ my %statusIconMap = $resObj->CLOSED => '', $resObj->OPEN => 'navmap.open.gif', $resObj->CORRECT => 'navmap.correct.gif', + $resObj->PARTIALLY_CORRECT => 'navmap.ellipsis.gif', $resObj->INCORRECT => 'navmap.wrong.gif', $resObj->ATTEMPTED => 'navmap.ellipsis.gif', $resObj->ERROR => '' @@ -79,7 +82,8 @@ my %colormap = $resObj->OPEN => '', $resObj->NOTHING_SET => '', $resObj->ATTEMPTED => '', - $resObj->ANSWER_SUBMITTED => '' + $resObj->ANSWER_SUBMITTED => '', + $resObj->PARTIALLY_CORRECT => '#006600' ); # And a special case in the nav map; what to do when the assignment # is not yet done and due in less then 24 hours @@ -108,7 +112,7 @@ sub launch_win { } sub close { - if ($ENV{'environment.remotenavmap'} ne 'on') { return ''; } + if ($env{'environment.remotenavmap'} ne 'on') { return ''; } return(< window.status='Accessing Nav Control'; @@ -122,8 +126,8 @@ ENDCLOSE } sub update { - if ($ENV{'environment.remotenavmap'} ne 'on') { return ''; } - if (!$ENV{'request.course.id'}) { return ''; } + if ($env{'environment.remotenavmap'} ne 'on') { return ''; } + if (!$env{'request.course.id'}) { return ''; } if ($ENV{'REQUEST_URI'}=~m|^/adm/navmaps|) { return ''; } return(< @@ -142,10 +146,10 @@ sub handler { sub real_handler { my $r = shift; - + #my $t0=[&gettimeofday()]; # Handle header-only request if ($r->header_only) { - if ($ENV{'browser.mathml'}) { + if ($env{'browser.mathml'}) { &Apache::loncommon::content_type($r,'text/xml'); } else { &Apache::loncommon::content_type($r,'text/html'); @@ -155,7 +159,7 @@ sub real_handler { } # Send header, don't cache this page - if ($ENV{'browser.mathml'}) { + if ($env{'browser.mathml'}) { &Apache::loncommon::content_type($r,'text/xml'); } else { &Apache::loncommon::content_type($r,'text/html'); @@ -164,7 +168,7 @@ sub real_handler { $r->send_http_header; my %toplinkitems=(); - + &add_linkitem(\%toplinkitems,'blank','',"Select Action"); if ($ENV{QUERY_STRING} eq 'collapseExternal') { &Apache::lonnet::put('environment',{'remotenavmap' => 'off'}); &Apache::lonnet::appenv('environment.remotenavmap' => 'off'); @@ -184,8 +188,9 @@ MENU $navstatus MENU } + my $html=&Apache::lonxml::xmlbegin(); $r->print(<<"ENDSUBM"); - + $html +MENU + } + } + if ($ENV{QUERY_STRING} eq 'turningOffExternal') { + $env{'environment.remotenavmap'}='off'; } # Create the nav map @@ -210,20 +229,20 @@ ENDSUBM if (!defined($navmap)) { my $requrl = $r->uri; - $ENV{'user.error.msg'} = "$requrl:bre:0:0:Course not initialized"; + $env{'user.error.msg'} = "$requrl:bre:0:0:Course not initialized"; return HTTP_NOT_ACCEPTABLE; } - - $r->print("\n"); + my $html=&Apache::lonxml::xmlbegin(); + $r->print("$html\n"); $r->print("".&mt('Navigate Course Contents').""); # ------------------------------------------------------------ Get query string - &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['register','sort','showOnlyHomework']); + &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['register','sort','showOnlyHomework','postsymb']); # ----------------------------------------------------- Force menu registration my $addentries=''; my $more_unload; my $body_only=''; - if ($ENV{'environment.remotenavmap'} eq 'on') { + if ($env{'environment.remotenavmap'} eq 'on') { $r->print(''); $r->rflush(); @@ -277,15 +296,15 @@ ENDSUBM if ($sequenceCount == 1) { # The automatic iterator creation in the render call # will pick this up. We know the condition because - # the defined($ENV{'form.filter'}) also ensures this + # the defined($env{'form.filter'}) also ensures this # is a fresh call. - $ENV{'form.filter'} = "$sequenceId"; + $env{'form.filter'} = "$sequenceId"; } } if ($ENV{QUERY_STRING} eq 'launchExternal') { $r->print(' -
'); $r->print(' @@ -294,10 +313,10 @@ ENDSUBM '); } - if ($ENV{'environment.remotenavmap'} ne 'on') { + if ($env{'environment.remotenavmap'} ne 'on') { $r->print(&launch_win('link','yes',\%toplinkitems)); } - if ($ENV{'environment.remotenavmap'} eq 'on') { + if ($env{'environment.remotenavmap'} eq 'on') { &add_linkitem(\%toplinkitems,'closenav','collapse()', "Close navigation window"); } @@ -324,10 +343,10 @@ ENDSUBM pop @$stack; # last resource in the stack is the problem # itself, which we don't need in the map stack my @mapPcs = map {$_->map_pc()} @$stack; - $ENV{'form.filter'} = join(',', @mapPcs); + $env{'form.filter'} = join(',', @mapPcs); # Mark as both "here" and "jump" - $ENV{'form.postsymb'} = $curRes->symb(); + $env{'form.postsymb'} = $curRes->symb(); } } } @@ -348,30 +367,30 @@ ENDSUBM # Display only due homework. my $showOnlyHomework = 0; - if ($ENV{'form.showOnlyHomework'} eq "1") { + if ($env{'form.showOnlyHomework'} eq "1") { $showOnlyHomework = 1; $suppressEmptySequences = 1; $filterFunc = sub { my $res = shift; return $res->completable() || $res->is_map(); }; &add_linkitem(\%toplinkitems,'everything', - 'location.href="navmaps?sort='.$ENV{'form.sort'}.'"', + 'location.href="navmaps?sort='.$env{'form.sort'}.'"', "Show Everything"); $r->print("

".&mt("Uncompleted Homework")."

"); - $ENV{'form.filter'} = ''; - $ENV{'form.condition'} = 1; + $env{'form.filter'} = ''; + $env{'form.condition'} = 1; $resource_no_folder_link = 1; } else { &add_linkitem(\%toplinkitems,'uncompleted', - 'location.href="navmaps?sort='.$ENV{'form.sort'}. + 'location.href="navmaps?sort='.$env{'form.sort'}. '&showOnlyHomework=1"', "Show Only Uncompleted Homework"); } - my %selected=($ENV{'form.sort'} => 'selected=on'); + my %selected=($env{'form.sort'} => 'selected=on'); my $sort_html=("
- +