Diff for /loncom/interface/lonplacementtest.pm between versions 1.1 and 1.5

version 1.1, 2016/04/02 04:30:21 version 1.5, 2016/05/30 03:16:28
Line 1 Line 1
 # The LearningOnline Network with CAPA  # The LearningOnline Network with CAPA
 # Handler to manage dependencies for HTML files uploaded directly  # Handler for a Placement Test course container 
 # to a course.  
 #  #
 # $Id$  # $Id$
 #  #
Line 20 Line 19
 #  #
 # You should have received a copy of the GNU General Public License  # You should have received a copy of the GNU General Public License
 # along with LON-CAPA; if not, write to the Free Software  # along with LON-CAPA; if not, write to the Free Software
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA#  # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
   #
 # /home/httpd/html/adm/gpl.txt  # /home/httpd/html/adm/gpl.txt
 #  #
 # http://www.lon-capa.org/  # http://www.lon-capa.org/
Line 120  sub check_completion { Line 120  sub check_completion {
     my $incomplete;      my $incomplete;
     if (@resources) {      if (@resources) {
         my $firstsymb = $resources[0]->symb();          my $firstsymb = $resources[0]->symb();
         my %bytitle;          my (%bytitle,%bysymb);
         foreach my $res (@resources) {          foreach my $res (@resources) {
             my $currsymb = $res->symb();              my $currsymb = $res->symb();
             my $title = $res->compTitle;              my $title = $res->compTitle;
             unless (exists($bytitle{$title})) {              unless (exists($bytitle{$title})) {
                 $bytitle{$title} = 0;                  $bytitle{$title} = 0;
             }              }
               unless (exists($bysymb{$currsymb})) {
                   $bysymb{$currsymb} = 0;
               }
             my $notdone = 0;              my $notdone = 0;
             my $done = 0;              my $done = 0;
             my %storetries;              my %storetries;
Line 140  sub check_completion { Line 143  sub check_completion {
                 if ($tries < $maxtries) {                  if ($tries < $maxtries) {
                     $notdone ++;                      $notdone ++;
                     my $tries = $res->tries($part);                      my $tries = $res->tries($part);
                     my @response_ids = $res->responseIds($part);                      if ($makenew) {
                     if (@response_ids) {                          my @response_ids = $res->responseIds($part);
                         foreach my $id (@response_ids) {                          if (@response_ids) {
                             $storetries{"resource.$part.$id.awarded"}=0;                              foreach my $id (@response_ids) {
                             $storetries{"resource.$part.$id.awarddetail"}='ASSIGNED_SCORE';                                  $storetries{"resource.$part.$id.awarded"}=0;
                                   $storetries{"resource.$part.$id.awarddetail"}='ASSIGNED_SCORE';
                               }
                               $storetries{"resource.$part.tries"}=$maxtries;
                               $storetries{"resource.$part.solved"}='incorrect_by_override';
                               $storetries{"resource.$part.award"}='ASSIGNED_SCORE';
                               $storetries{"resource.$part.awarded"}=0;
                         }                          }
                         $storetries{"resource.$part.tries"}=$maxtries;  
                         $storetries{"resource.$part.solved"}='incorrect_by_override';  
                         $storetries{"resource.$part.award"}='ASSIGNED_SCORE';  
                         $storetries{"resource.$part.awarded"}=0;  
                     }                      }
                 } else {                  } else {
                     my $awarded = $res->awarded($part);                      my $awarded = $res->awarded($part);
Line 169  sub check_completion { Line 174  sub check_completion {
                 $totaldone += $done;                  $totaldone += $done;
             }              }
             $bytitle{$title} += $points;              $bytitle{$title} += $points;
               $bysymb{$currsymb} += $points;
             $totalpoints += $points;              $totalpoints += $points;
         }          }
         if ($makenew) {          if ($makenew) {
Line 178  sub check_completion { Line 184  sub check_completion {
                                                              4,$newmax,'int_pos',                                                               4,$newmax,'int_pos',
                                                              $env{'user.name'},                                                               $env{'user.name'},
                                                              $env{'user.domain'});                                                               $env{'user.domain'});
             my %grades = (              my $user = $env{'user.name'}.':'.$env{'user.domain'};
                              uname   => $env{'user.name'},              if ($user) {
                              domain  => $env{'user.domain'},                  my %grades = (
                              total   => $totalpoints,                                 $user => {
                              bytitle => \%bytitle,                                            role            => $env{'request.role'},
                          );                                            id              => $env{'environment.id'},
             my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};                                            status          => $env{'environment.inststatus'},
             my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};                                            lastname        => $env{'environment.lastname'},
             if (($cnum ne '') && ($cdom ne '')) {                                            firstname       => $env{'environment.firstname'},
                 &Apache::lonnet::auto_export_grades($cnum,$cdom,\%grades);                                            permanentemail  => $env{'environment.permanentemail'},
                                             section         => $env{'request.course.sec'},
                                             total           => $totalpoints,
                                             category        => '',
                                             gradebookcolumn => '',
                                             context         => $map,
                                           },
                                );
                   $grades{$user}{bytitle} = \%bytitle;
                   $grades{$user}{bysymb} = \%bysymb;
                   my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
                   my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
                   my $scope = 'map';
                   my $instcode = $env{'course.'.$env{'request.course.id'}.'.internal.coursecode'};
                   my $crstype = $env{'course.'.$env{'request.course.id'}.'.type'};
                   my $context = 'completion';
                   if (($cnum ne '') && ($cdom ne '')) {
                       my %info = (
                                     scope    => $scope,
                                     instcode => $instcode,
                                     crstype  => $crstype,
                                     context  => $context, 
                                  ); 
                       my $response = &Apache::lonnet::auto_export_grades($cdom,$cnum,\%info,\%grades);
                       my $outcome;
                       if (ref($response) eq 'HASH') {
                           if ($response->{$user}) {
                               $outcome = 'ok';
                           } else {
                               $outcome = 'fail';
                           }
                       } else {
                           $outcome = $response;
                       }
                       unless ($outcome eq 'ok') {
                           &Apache::lonnet::logthis("Placement Test grade export for $env{'user.name'}:$env{'user.domain'} in $env{'request.course.id'} was: $outcome"); 
                       }
                   }
             }              }
         }          }
     }      }
Line 203  sub check_completion { Line 246  sub check_completion {
     return ($totalpoints,$incomplete);      return ($totalpoints,$incomplete);
 }  }
   
   sub is_lastres {
       my ($symb,$navmap) = @_;
       return unless (ref($navmap));
       my $numforward = 0;
       my $currRes = $navmap->getBySymb($symb);
       if (ref($currRes)) {
           my $it = $navmap->getIterator($currRes,undef,undef,1);
           while ( my $res=$it->next()) {
               if (ref($res)) {
                   unless ($res->symb() eq $symb) {
                       $numforward ++;
                   }
               }
           }
       }
       if (!$numforward) {
           return 1;
       }
       return;
   }
   
   sub has_tries {
       my ($symb,$navmap) = @_;
       return unless (ref($navmap));
       my $currRes = $navmap->getBySymb($symb);
       if (ref($currRes)) {
           if ($currRes->is_problem()) {
               if ($currRes->tries < $currRes->maxtries) {
                   return 1;
               }
           }
       }
       return;
   }
   
 sub showresult {  sub showresult {
     my ($complete) = @_;      my ($complete,$inhibitmenu) = @_;
     my ($score) = &Apache::lonplacementtest::check_completion(1,undef,1);      my ($score) = &Apache::lonplacementtest::check_completion(1,undef,1);
     my %aclt = &test_action_text();      my %aclt = &test_action_text();
     my $brcrum = [{'href' => '/adm/flip?postdata=firstres%3a',      my $output;
                    'text' => 'Test Status'},];      if ($inhibitmenu) {
     my $output = &Apache::loncommon::start_page('Placement Test Completed',          $output = '<hr />';
                                           undef,{bread_crumbs=>$brcrum});      } else {
           my $brcrum = [{'href' => '/adm/flip?postdata=firstres%3a',
                          'text' => 'Test Status'},];
           $output = &Apache::loncommon::start_page('Placement Test Completed',
                                                    undef,{bread_crumbs=>$brcrum});
       }
     if ($complete) {      if ($complete) {
         $output .= '<p class="LC_info">'.&mt('Test is complete').'</p>';          $output .= '<p class="LC_info">'.&mt('Test is complete').'</p>';
     }      }
     return $output      $output .= '<p>'.&mt('You scored [quant,_1,point].',$score).'</p>'
           .'<p>'.&mt('You scored [quant,_1,point].',$score).'</p>'                .&Apache::lonhtmlcommon::actionbox(
           .&Apache::lonhtmlcommon::actionbox(                    ['<a href="/adm/flip?postdata=firstres%3a">'.$aclt{'newt'}.'</a></li>',
               ['<a href="/adm/flip?postdata=firstres%3a">'.$aclt{'newt'}.'</a></li>',                     '<a href="/adm/logout">'.$aclt{'exit'}.'</a></li>',
                '<a href="/adm/logout">'.$aclt{'exit'}.'</a></li>',                    ]);
               ])      unless ($inhibitmenu) {
           .&Apache::loncommon::end_page();          $output .= &Apache::loncommon::end_page();
       }
       return $output;
 }  }
   
 sub showincomplete {  sub showincomplete {
     my ($incomplete) = @_;      my ($incomplete,$inhibitmenu) = @_;
     my %aclt = &test_action_text();      my %aclt = &test_action_text();
       my $output;
     if ($incomplete == 100) {      if ($incomplete == 100) {
         my $brcrum = [{'href' => '/adm/flip?postdata=firstres%3a',          if ($inhibitmenu) {
                        'text' => 'Test Status'},];              $output = '<hr />';
         return &Apache::loncommon::start_page('Placement Test Unattempted',          } else {
                                               undef,{bread_crumbs=>$brcrum})              my $brcrum = [{'href' => '/adm/flip?postdata=firstres%3a',
               .'<p class="LC_warning">'.&mt('Your Placement Test is incomplete.').'<p></p>'                             'text' => 'Test Status'},];
               .&mt('Currently, you have not submitted any answers for any of the questions.')              $output = &Apache::loncommon::start_page('Placement Test Unattempted',
               .'</p>'                                                       undef,{bread_crumbs=>$brcrum});
               .&Apache::lonhtmlcommon::actionbox(          }
                   ['<a href="/adm/flip?postdata=firstres%3a">'.$aclt{'begin'}.'</a></li>',          $output .= '<p class="LC_warning">'.&mt('Your Placement Test is incomplete.').'<p></p>'
                    '<a href="/adm/logout">'.$aclt{'exit'}.'</a></li>',                    .&mt('Currently, you have not submitted any answers for any of the questions.')
                   ])                    .'</p>'
               .&Apache::loncommon::end_page();                     .&Apache::lonhtmlcommon::actionbox(
                         ['<a href="/adm/flip?postdata=firstres%3a">'.$aclt{'begin'}.'</a></li>',
                          '<a href="/adm/logout">'.$aclt{'exit'}.'</a></li>',
                         ]);
     } elsif ($incomplete) {      } elsif ($incomplete) {
         my $brcrum = [{'href' => '/adm/flip?postdata=endplacement%3a',          if ($inhibitmenu) {
                        'text' => 'Test Status'},];              $output = '<hr />';
         return &Apache::loncommon::start_page('Incomplete Placement Test',          } else {
                                               undef,{bread_crumbs=>$brcrum})                my $brcrum = [{'href' => '/adm/flip?postdata=endplacement%3a',
               .'<p class="LC_warning">'.&mt('Your Placement Test is incomplete.').'<p></p>'                             'text' => 'Test Status'},];
               .&mt('Currently, you have not provided an answer for [_1]% of the questions.',$incomplete)              $output .=  &Apache::loncommon::start_page('Incomplete Placement Test',
               .'</p>'                                                        undef,{bread_crumbs=>$brcrum});
               .&Apache::lonhtmlcommon::actionbox(          }
                   ['<a href="/adm/flip?postdata=endplacement%3a">'.$aclt{'endt'}.'</a></li>',          $output .= '<p class="LC_warning">'.&mt('Your Placement Test is incomplete.').'<p></p>'
                    '<a href="/adm/flip?postdata=firstanswerable%3a">'.$aclt{'comp'}.'</a></li>',                    .&mt('Currently, you have not provided an answer for [_1]% of the questions.',$incomplete)
                    '<a href="/adm/logout">'.$aclt{'exit'}.'</a></li>',                    .'</p>'
                   ])                    .&Apache::lonhtmlcommon::actionbox(
               .&Apache::loncommon::end_page();                        ['<a href="/adm/flip?postdata=endplacement%3a">'.$aclt{'endt'}.'</a></li>',
                          '<a href="/adm/flip?postdata=firstanswerable%3a">'.$aclt{'comp'}.'</a></li>',
                          '<a href="/adm/logout">'.$aclt{'exit'}.'</a></li>',
                         ]);
       }
       unless ($inhibitmenu) {
           $output .= &Apache::loncommon::end_page();
     }      }
       return $output;
 }  }
   
 sub test_action_text {  sub test_action_text {

Removed from v.1.1  
changed lines
  Added in v.1.5


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>