[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