$log_metadata->create_new_record($current_address, $userObject->get_grade(), $userObject->get_year(), $attempt, $lab_name); } elseif ($log_metadata->get_record() == false) { //load the data and check for no records //we have no log_metadata record so make one $log_metadata->create_new_record($current_address, $userObject->get_grade(), $userObject->get_year(), $attempt, $lab_name); } $metadataID = $log_metadata->get_metadata_id(); // Foramtive or Progressive papers that have a duration set should use the timer. if ($propertyObj->get_paper_type() == '0' || $propertyObj->get_paper_type() == '1') { if ($propertyObj->get_exam_duration() != null) { $allow_timing = true; } // Summative exams only allow timing if ALL the modules of the paper allow it. } else { if ($propertyObj->get_paper_type() == '2') { $allow_timing = module_utils::modules_allow_timing($modIDs, $mysqli); } } /* * BP Determine the student's end_date timestamp for a summative exam that has been 'Started'. * This is also used further down to make sure that the timer does not close the window if the exam session hasn't been 'started' by an invigilator * If a summative exam session has been started then record late answers in log_late */ $paper_scheduled = $propertyObj->get_start_date() !== null; if ($propertyObj->get_exam_duration() != null and $propertyObj->get_paper_type() == '2' and !$is_question_preview_mode) { // Has this lab had an end time set? $log_lab_end_time = new LogLabEndTime($lab_id, $propertyObj, $mysqli); $summative_exam_session_started = $log_lab_end_time->get_session_end_date_datetime(); } // Check for submissions after the end date and set them to save in log_late if we are not in preview_mode or a summative exam session as not been started if ($is_preview_mode === false and time() > $propertyObj->get_end_date() and ($propertyObj->get_paper_type() == '1' or $propertyObj->get_paper_type() == '2' and $paper_scheduled and $summative_exam_session_started === false)) {