Diff for /loncom/homework/lonhomework.pm between versions 1.358 and 1.362

version 1.358, 2015/10/05 02:35:40 version 1.362, 2016/05/30 02:45:32
Line 561  sub check_access { Line 561  sub check_access {
     if ($status eq 'CAN_ANSWER' || $status eq 'CANNOT_ANSWER') {      if ($status eq 'CAN_ANSWER' || $status eq 'CANNOT_ANSWER') {
  my @interval=&Apache::lonnet::EXT("resource.$id.interval",$symb);   my @interval=&Apache::lonnet::EXT("resource.$id.interval",$symb);
  &Apache::lonxml::debug("looking for interval @interval");   &Apache::lonxml::debug("looking for interval @interval");
  if ($interval[0]) {   if ($interval[0]=~ /^\d+/) {
     my $first_access=&Apache::lonnet::get_first_access($interval[1],$symb);      my $first_access=&Apache::lonnet::get_first_access($interval[1],$symb);
     &Apache::lonxml::debug("looking for accesstime $first_access");      &Apache::lonxml::debug("looking for accesstime $first_access");
     if (!$first_access) {      if (!$first_access) {
  $status='NOT_YET_VIEWED';   $status='NOT_YET_VIEWED';
  my $due_date = &due_date($id,$symb);   my $due_date = &due_date($id,$symb);
  my $seconds_left = $due_date - time;   my $seconds_left = $due_date - time;
  if ($seconds_left > $interval[0] || $due_date eq '') {   my ($timelimit) = ($interval[0] =~ /^(\d+)/);
     $seconds_left = $interval[0];   if ($seconds_left > $timelimit || $due_date eq '') {
       $seconds_left = $timelimit;
  }   }
  $datemsg=&seconds_to_human_length($seconds_left);   $datemsg=&seconds_to_human_length($seconds_left);
     }      }
Line 604  sub due_date { Line 605  sub due_date {
  my $first_access=&Apache::lonnet::get_first_access($interval[1],$symb);   my $first_access=&Apache::lonnet::get_first_access($interval[1],$symb);
  &Apache::lonxml::debug("looking for first_access $first_access ($interval[1])");   &Apache::lonxml::debug("looking for first_access $first_access ($interval[1])");
  if (defined($first_access)) {   if (defined($first_access)) {
     my $interval = $first_access+$interval[0];      my ($timelimit) = ($interval[0] =~ /^(\d+)/);
       my $interval = $first_access+$timelimit;
     $date = (!$due_date || $interval < $due_date) ? $interval      $date = (!$due_date || $interval < $due_date) ? $interval
                                                           : $due_date;                                                            : $due_date;
  } else {   } else {
Line 1172  sub editxmlmode { Line 1174  sub editxmlmode {
 #    Render the page in whatever target desired.  #    Render the page in whatever target desired.
 #  #
 sub renderpage {  sub renderpage {
     my ($request,$file,$targets,$return_string) = @_;      my ($request,$file,$targets,$return_string,$donebuttonmsg) = @_;
   
     my @targets = @{$targets || [&get_target()]};      my @targets = @{$targets || [&get_target()]};
     &Apache::lonhomework::showhashsubset(\%env,'form.');      &Apache::lonhomework::showhashsubset(\%env,'form.');
Line 1225  sub renderpage { Line 1227  sub renderpage {
     if ($target eq 'analyze') {      if ($target eq 'analyze') {
  $result=&Apache::lonnet::hashref2str(\%Apache::lonhomework::analyze);   $result=&Apache::lonnet::hashref2str(\%Apache::lonhomework::analyze);
  undef(%Apache::lonhomework::analyze);   undef(%Apache::lonhomework::analyze);
     }      } elsif ($target eq 'web') {
                   if ($donebuttonmsg) {
                       $result =~ s{</body>}{};
                       $result.= &Apache::loncommon::confirmwrapper(&Apache::lonhtmlcommon::confirm_success($donebuttonmsg,1))."\n</body>";
                   }
               }
     #my $td=&tv_interval($t0);      #my $td=&tv_interval($t0);
     #if ( $Apache::lonxml::debug) {      #if ( $Apache::lonxml::debug) {
     #$result =~ s:</body>::;      #$result =~ s:</body>::;
Line 1430  sub zero_timer { Line 1437  sub zero_timer {
     my @interval=&Apache::lonnet::EXT("resource.0.interval",$symb);      my @interval=&Apache::lonnet::EXT("resource.0.interval",$symb);
     if (@interval > 1) {      if (@interval > 1) {
         if ($interval[1] eq 'course') {          if ($interval[1] eq 'course') {
             return;              return ('fail',&mt('Ending of timed events not supported for intervals set course-wide'));
         } else {          } else {
             my $now = time;              my $now = time;
             my $first_access=&Apache::lonnet::get_first_access($interval[1],$symb);              my $first_access=&Apache::lonnet::get_first_access($interval[1],$symb);
             if ($first_access > 0) {              if ($first_access > 0) {
                 my ($timelimit) = split(/_/,$interval[0]);                  my ($timelimit,$donesuffix) = split(/_/,$interval[0],2);
                 if ($first_access+$timelimit > $now) {                  if ($donesuffix =~ /^done(?:|\:[^\:]+\:)(.*)$/) {
                     my $done_time = $now - $first_access;                      my ($dummy,$proctor,$secret) = split(/_/,$1);
                     my $snum = 1;                      if (($proctor) && ($secret ne '')) {
                     if ($interval[1] eq 'map') {                          my $key = $env{'form.LC_interval_done_proctorpass'};
                         $snum = 2;                          $key =~ s/^\s+//;
                           $key =~ s/\s+$//;
                           if ($env{'form.LC_interval_done_proctorpass'} ne $secret) {
                               return ('fail',
                                      &mt('Incorrect key entered by proctor')); 
                           }
                       }
                       if ($first_access+$timelimit > $now) {
                           my $done_time = $now - $first_access;
                           my $snum = 1;
                           if ($interval[1] eq 'map') {
                               $snum = 2;
                           }
                           my $result =
                               &Apache::lonparmset::storeparm_by_symb_inner($symb,'0_interval',
                                                                            $snum,$done_time,
                                                                            'date_interval',
                                                                            $env{'user.name'},
                                                                            $env{'user.domain'});
                           if ($result eq '') {
                               # Record action in "User Notes"
                               &Apache::lonmsg::store_instructor_comment(
                                   'Pressed Done button for symb:<br />'.$symb,
                                   $env{'user.name'}, $env{'user.domain'});
                               return ('ok');
                           } else {
                               return ('fail',&mt('Error ending timed event: [_1]',$result));
                           } 
                       } else {
                           return ('fail',&mt('Timed event already ended'));
                     }                      }
                     my $result =                   } else {
                         &Apache::lonparmset::storeparm_by_symb_inner($symb,'0_interval',                      return ('fail',&mt('Timed event can not be ended before the time limit'));
                                                                      $snum,$done_time,  
                                                                      'date_interval',  
                                                                      $env{'user.name'},  
                                                                      $env{'user.domain'});  
                     return $result;  
                 }                  }
               } else {
                   return ('fail',&mt('Timer not yet started for this timed event'));
             }              }
         }          }
       } else {
           return ('fail',&mt('No timer in use'));
     }      }
     return;      return();
 }  }
   
 sub handler {  sub handler {
Line 1515  sub handler { Line 1550  sub handler {
     } else {      } else {
         # Set the event timer to zero if the "done button" was clicked.  The button is          # Set the event timer to zero if the "done button" was clicked.  The button is
         # part of the doneButton form created in lonmenu.pm          # part of the doneButton form created in lonmenu.pm
           my ($donebuttonresult,$donemsg);
         if ($symb && $env{'form.LC_interval_done'} eq 'true') {            if ($symb && $env{'form.LC_interval_done'} eq 'true') {  
             &zero_timer($symb);              ($donebuttonresult,$donemsg) = &zero_timer($symb);
             undef($env{'form.LC_interval_done'});              undef($env{'form.LC_interval_done'});
               undef($env{'form.LC_interval_done_proctorpass'});
         }          }
  # just render the page normally outside of construction space   # just render the page normally outside of construction space
  &Apache::lonxml::debug("not construct");   &Apache::lonxml::debug("not construct");
  &renderpage($request,$file);   &renderpage($request,$file,undef,undef,$donemsg);
     }      }
     #my $td=&tv_interval($t0);      #my $td=&tv_interval($t0);
     #&Apache::lonxml::debug("Spent $td seconds processing");      #&Apache::lonxml::debug("Spent $td seconds processing");

Removed from v.1.358  
changed lines
  Added in v.1.362


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