original_string: public function handle_if_time_expired($timestamp, $studentisonline) {
          global $DB;
  
          $timeclose = $this->get_access_manager($timestamp)->get_end_time($this->attempt);
  
          if ($timeclose === false || $this->is_preview()) {
              $this->update_timecheckstate(null);
              return; // No time limit
          }
          if ($timestamp < $timeclose) {
              $this->update_timecheckstate($timeclose);
              return; // Time has not yet expired.
          }
  
          // If the attempt is already overdue, look to see if it should be abandoned ...
          if ($this->attempt->state == self::OVERDUE) {
              $timeoverdue = $timestamp - $timeclose;
              $graceperiod = $this->quizobj->get_quiz()->graceperiod;
              if ($timeoverdue >= $graceperiod) {
                  $this->process_abandon($timestamp, $studentisonline);
              } else {
                  // Overdue time has not yet expired
                  $this->update_timecheckstate($timeclose + $graceperiod);
              }
              return; // ... and we are done.
          }
  
          if ($this->attempt->state != self::IN_PROGRESS) {
              $this->update_timecheckstate(null);
              return; // Attempt is already in a final state.
          }
  
          // Otherwise, we were in quiz_attempt::IN_PROGRESS, and time has now expired.
          // Transition to the appropriate state.
          switch ($this->quizobj->get_quiz()->overduehandling) {
              case 'autosubmit':
                  $this->process_finish($timestamp, false);
                  return;
  
              case 'graceperiod':
                  $this->process_going_overdue($timestamp, $studentisonline);
                  return;
  
              case 'autoabandon':
                  $this->process_abandon($timestamp, $studentisonline);
                  return;
          }
  
          // This is an overdue attempt with no overdue handling defined, so just abandon.
          $this->process_abandon($timestamp, $studentisonline);
          return;
      }
code: public function handle_if_time_expired($timestamp, $studentisonline) {
          global $DB;
  
          $timeclose = $this->get_access_manager($timestamp)->get_end_time($this->attempt);
  
          if ($timeclose === false || $this->is_preview()) {
              $this->update_timecheckstate(null);
              return; // No time limit
          }
          if ($timestamp < $timeclose) {
              $this->update_timecheckstate($timeclose);
              return; // Time has not yet expired.
          }
  
          // If the attempt is already overdue, look to see if it should be abandoned ...
          if ($this->attempt->state == self::OVERDUE) {
              $timeoverdue = $timestamp - $timeclose;
              $graceperiod = $this->quizobj->get_quiz()->graceperiod;
              if ($timeoverdue >= $graceperiod) {
                  $this->process_abandon($timestamp, $studentisonline);
              } else {
                  // Overdue time has not yet expired
                  $this->update_timecheckstate($timeclose + $graceperiod);
              }
              return; // ... and we are done.
          }
  
          if ($this->attempt->state != self::IN_PROGRESS) {
              $this->update_timecheckstate(null);
              return; // Attempt is already in a final state.
          }
  
          // Otherwise, we were in quiz_attempt::IN_PROGRESS, and time has now expired.
          // Transition to the appropriate state.
          switch ($this->quizobj->get_quiz()->overduehandling) {
              case 'autosubmit':
                  $this->process_finish($timestamp, false);
                  return;
  
              case 'graceperiod':
                  $this->process_going_overdue($timestamp, $studentisonline);
                  return;
  
              case 'autoabandon':
                  $this->process_abandon($timestamp, $studentisonline);
                  return;
          }
  
          // This is an overdue attempt with no overdue handling defined, so just abandon.
          $this->process_abandon($timestamp, $studentisonline);
          return;
      }
code_tokens: public function handle_if_time_expired ( $ timestamp , $ studentisonline ) { global $ DB ; $ timeclose = $ this -> get_access_manager ( $ timestamp ) -> get_end_time ( $ this -> attempt ) ; if ( $ timeclose === false || $ this -> is_preview ( ) ) { $ this -> update_timecheckstate ( null ) ; return ; // No time limit } if ( $ timestamp < $ timeclose ) { $ this -> update_timecheckstate ( $ timeclose ) ; return ; // Time has not yet expired. } // If the attempt is already overdue, look to see if it should be abandoned ... if ( $ this -> attempt -> state == self :: OVERDUE ) { $ timeoverdue = $ timestamp - $ timeclose ; $ graceperiod = $ this -> quizobj -> get_quiz ( ) -> graceperiod ; if ( $ timeoverdue >= $ graceperiod ) { $ this -> process_abandon ( $ timestamp , $ studentisonline ) ; } else { // Overdue time has not yet expired $ this -> update_timecheckstate ( $ timeclose + $ graceperiod ) ; } return ; // ... and we are done. } if ( $ this -> attempt -> state != self :: IN_PROGRESS ) { $ this -> update_timecheckstate ( null ) ; return ; // Attempt is already in a final state. } // Otherwise, we were in quiz_attempt::IN_PROGRESS, and time has now expired. // Transition to the appropriate state. switch ( $ this -> quizobj -> get_quiz ( ) -> overduehandling ) { case 'autosubmit' : $ this -> process_finish ( $ timestamp , false ) ; return ; case 'graceperiod' : $ this -> process_going_overdue ( $ timestamp , $ studentisonline ) ; return ; case 'autoabandon' : $ this -> process_abandon ( $ timestamp , $ studentisonline ) ; return ; } // This is an overdue attempt with no overdue handling defined, so just abandon. $ this -> process_abandon ( $ timestamp , $ studentisonline ) ; return ; }
docstring: Check this attempt, to see if there are any state transitions that should
  happen automatically.  This function will update the attempt checkstatetime.
  @param int $timestamp the timestamp that should be stored as the modifed
  @param bool $studentisonline is the student currently interacting with Moodle?
docstring_tokens: Check this attempt to see if there are any state transitions that should happen automatically . This function will update the attempt checkstatetime .