# The LearningOnline Network with CAPA # Navigate Maps Handler # # $Id: lonnavdisplay.pm,v 1.5 2008/10/20 03:25:49 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # # This file is part of the LearningOnline Network with CAPA (LON-CAPA). # # LON-CAPA is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # LON-CAPA is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with LON-CAPA; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # /home/httpd/html/adm/gpl.txt # # http://www.lon-capa.org/ # ### package Apache::lonnavdisplay; use strict; use Apache::Constants qw(:common :http); use Apache::lonmenu(); use Apache::loncommon(); use Apache::lonnavmaps(); use Apache::lonhtmlcommon(); use Apache::lonnet; use Apache::lonlocal; use Time::HiRes qw( gettimeofday tv_interval ); sub handler { my $r = shift; real_handler($r); } sub real_handler { my $r = shift; #my $t0=[&gettimeofday()]; # Handle header-only request if ($r->header_only) { if ($env{'browser.mathml'}) { &Apache::loncommon::content_type($r,'text/xml'); } else { &Apache::loncommon::content_type($r,'text/html'); } $r->send_http_header; return OK; } # Send header, don't cache this page if ($env{'browser.mathml'}) { &Apache::loncommon::content_type($r,'text/xml'); } else { &Apache::loncommon::content_type($r,'text/html'); } &Apache::loncommon::no_cache($r); my %toplinkitems=(); &Apache::lonnavmaps::add_linkitem(\%toplinkitems,'blank','', "Select Action"); if ($ENV{QUERY_STRING} eq 'collapseExternal') { &Apache::lonnet::put('environment',{'remotenavmap' => 'off'}); &Apache::lonnet::appenv({'environment.remotenavmap' => 'off'}); my $menu=&Apache::lonmenu::reopenmenu(); my $navstatus=&Apache::lonmenu::get_nav_status(); if ($menu) { $menu=(<
'); $r->print(' '); } if ($env{'environment.remotenavmap'} ne 'on') { $r->print(&launch_win('link','yes',\%toplinkitems)); } if ($env{'environment.remotenavmap'} eq 'on') { &Apache::lonnavmaps::add_linkitem(\%toplinkitems,'closenav', 'collapse()', "Close navigation window"); } # Check to see if the student is jumping to next open, do-able problem if ($ENV{QUERY_STRING} =~ /^jumpToFirstHomework/) { # Find the next homework problem that they can do. my $iterator = $navmap->getIterator(undef, undef, undef, 1); my $curRes; my $foundDoableProblem = 0; my $minimumduedate; my $now = time(); while ($curRes = $iterator->next()) { if (ref($curRes) && $curRes->is_problem()) { my $status = $curRes->status(); my $thisduedate=$curRes->duedate(); if ($thisduedate > $now && $curRes->completable()) { $foundDoableProblem = 1; if (!defined($minimumduedate) || $thisduedate<$minimumduedate) { # Pop open all previous maps my $stack = $iterator->getStack(); 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); # Mark as both "here" and "jump" $env{'form.postsymb'} = $curRes->symb(); $minimumduedate=$thisduedate; } } } } # If we found no problems, print a note to that effect. if (!$foundDoableProblem) { $r->print("" .&mt("All homework assignments have been completed.") ."".&mt("Uncompleted Problems")."
"); $env{'form.filter'} = ''; $env{'form.condition'} = 1; $resource_no_folder_link = 1; } else { &Apache::lonnavmaps::add_linkitem(\%toplinkitems,'uncompleted', 'location.href="navmaps?sort='.$env{'form.sort'}. '&showOnlyHomework=1"', "Show only uncompleted problems"); } my %selected=($env{'form.sort'} => 'selected=on'); my $sort_html=(""); # renderer call my $renderArgs = { 'cols' => [0,1,2,3], 'sort' => $env{'form.sort'}, 'url' => '/adm/navmaps', 'navmap' => $navmap, 'suppressNavmap' => 1, 'suppressEmptySequences' => $suppressEmptySequences, 'filterFunc' => $filterFunc, 'resource_no_folder_link' => $resource_no_folder_link, 'sort_html'=> $sort_html, 'r' => $r, 'caller' => 'navmapsdisplay', 'linkitems' => \%toplinkitems}; my $render = &Apache::lonnavmaps::render($renderArgs); # If no resources were printed, print a reassuring message so the # user knows there was no error. if ($renderArgs->{'counter'} == 0) { if ($showOnlyHomework) { $r->print("".&mt("All homework is currently completed.")."
"); } else { # both jumpToFirstHomework and normal use the same: course must be empty $r->print("".&mt("This course is empty.")."
"); } } #my $td=&tv_interval($t0); #$r->print("