[LON-CAPA-cvs] cvs: rat / lonpageflip.pm
raeburn
raeburn at source.lon-capa.org
Sun May 29 22:52:43 EDT 2016
raeburn Mon May 30 02:52:43 2016 EDT
Modified files:
/rat lonpageflip.pm
Log:
- Bug 6808. New course container -- "Placement" for Placement Tests.
- Placement Tets includes 'firstanswerable' as a direction to
take student to first unanaswered proble in an incomplete test.
Index: rat/lonpageflip.pm
diff -u rat/lonpageflip.pm:1.90 rat/lonpageflip.pm:1.91
--- rat/lonpageflip.pm:1.90 Mon Feb 22 03:36:52 2016
+++ rat/lonpageflip.pm Mon May 30 02:52:42 2016
@@ -2,7 +2,7 @@
#
# Page flip handler
#
-# $Id: lonpageflip.pm,v 1.90 2016/02/22 03:36:52 raeburn Exp $
+# $Id: lonpageflip.pm,v 1.91 2016/05/30 02:52:42 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -36,6 +36,7 @@
use Apache::Constants qw(:common :http REDIRECT);
use Apache::lonnet;
use Apache::loncommon();
+use Apache::lonnavmaps();
use Apache::lonuserstate;
use Apache::lonlocal;
use HTML::TokeParser;
@@ -255,6 +256,29 @@
}
}
+sub first_answerable_ressymb {
+ my $navmap = Apache::lonnavmaps::navmap->new;
+ return unless (ref($navmap));
+ my $iterator = $navmap->getIterator(undef,undef,undef,1);
+ return unless (ref($iterator));
+ my ($curRes,$result);
+ while ($curRes = $iterator->next()) {
+ if (ref($curRes) && $curRes->is_problem()) {
+ foreach my $part (@{$curRes->parts()}) {
+ if ($curRes->tries($part) < $curRes->maxtries($part)) {
+ $result = $curRes->link().'?symb='.$curRes->shown_symb();
+ last;
+ }
+ }
+ }
+ }
+ if ($result) {
+ return $result;
+ } else {
+ return &first_accessible_resource();
+ }
+}
+
# ================================================================ Main Handler
sub handler {
@@ -290,6 +314,17 @@
$last=$hash{'last_known'};
untie(%hash);
}
+ } elsif ($direction eq 'firstanswerable') {
+ my $furl = &first_answerable_ressymb();
+ &Apache::loncommon::content_type($r,'text/html');
+ $r->header_out(Location =>
+ &Apache::lonnet::absolute_url().$furl);
+ return REDIRECT;
+ } elsif ($direction eq 'endplacement') {
+ &Apache::loncommon::content_type($r,'text/html');
+ $r->send_http_header;
+ $r->print(&Apache::lonplacementtest::showresult());
+ return OK;
}
if ($env{'request.course.id'}) {
# Check if course needs to be re-initialized
@@ -490,7 +525,8 @@
'type' => 'Type',
'update' => 'Content updated',
'expupdate' => 'As a result of a recent update to the sequence of materials, it is not possible to complete the page flip.',
- 'gonav' => 'Go to the Contents page to select a resource to display.');
+ 'gonav' => 'Go to the Contents page to select a resource to display.',
+ );
if (&Apache::loncommon::course_type() eq 'Community') {
$lt{'nav'} = &mt('Community Contents');
}
@@ -531,23 +567,37 @@
.'<p>'.$lt{'expupdate'}.'<br />'
.$lt{'gonav'}.'</p>');
} else {
- $r->print(
- &Apache::loncommon::start_page('No Resource')
- .'<h2>'.$lt{'title'}.'</h2>'
- .'<p>'.$lt{'explain'}.'</p>');
+ if (($env{'course.'.$env{'request.course.id'}.'.type'} eq 'Placement') &&
+ (!$env{'request.role.adv'})) {
+ my ($score,$incomplete) = &Apache::lonplacementtest::check_completion(undef,undef,1);
+ if ($incomplete) {
+ $r->print(&Apache::lonplacementtest::showincomplete($incomplete));
+ } else {
+ $r->print(&Apache::lonplacementtest::showresult(1));
+ }
+ } else {
+ $r->print(
+ &Apache::loncommon::start_page('No Resource')
+ .'<h2>'.$lt{'title'}.'</h2>'
+ .'<p>'.$lt{'explain'}.'</p>');
+ }
}
}
- if ((!@possibilities) && ($reinitcheck)) {
- $r->print(
- &Apache::lonhtmlcommon::actionbox(
- ['<a href="/adm/navmaps">'.$lt{'nav'}.'</a></li>'
- ]));
- } else {
- $r->print(
- &Apache::lonhtmlcommon::actionbox(
- ['<a href="/adm/flip?postdata=return:">'.$lt{'back'}.'</a></li>',
- '<a href="/adm/navmaps">'.$lt{'nav'}.'</a></li>'
- ]));
+ unless (($env{'course.'.$env{'request.course.id'}.'.type'} eq 'Placement') ||
+ ($env{'request.role.adv'})) {
+ if ((!@possibilities) && ($reinitcheck)) {
+ $r->print(
+ &Apache::lonhtmlcommon::actionbox(
+ ['<a href="/adm/navmaps">'.$lt{'nav'}.'</a></li>'
+ ]));
+ } else {
+ $r->print(
+ &Apache::lonhtmlcommon::actionbox(
+ ['<a href="/adm/flip?postdata=return:">'.$lt{'back'}.'</a></li>',
+ '<a href="/adm/navmaps">'.$lt{'nav'}.'</a></li>'
+ ]));
+ }
+
}
$r->print(&Apache::loncommon::end_page());
More information about the LON-CAPA-cvs
mailing list