/** * Calculate the end time for a paper and record it in the database * @param integer $invigilator_id ID of the invigilator setting the end time for the paper * @param string $time Time at which to end the exam as an interval from midnight in interval_spec format * @return DateTime DateTime object representing new end time */ public function save($invigilator_id, $time = NULL) { $this->msg = ''; $query = 'INSERT INTO log_lab_end_time (labID, invigilatorID, paperID, start_time, end_time) VALUES (?, ?, ?, ?, ?)'; $stmt = $this->db->prepare($query); if (is_null($time)) { $start_time_datetime = new DateTime(); $end_datetime = $this->calculate_end_datetime($start_time_datetime); $start_date = time(); } else { if ($this->start_timestamp === false) { $this->start_timestamp = $start_date = time(); } else { $start_date = $this->start_timestamp; } $dispzone = new DateTimeZone($this->property_object->get_timezone()); $end_datetime = new DateTime("now", $dispzone); $end_datetime->setTime(0, 0, 0); $dateinterval = new DateInterval($time); $end_datetime->add($dateinterval); $curtz1 = new DateTime(); $curtz = $curtz1->getTimezone(); $end_datetime->setTimezone($curtz); } $end_time = $end_datetime->getTimestamp(); $tz = $this->property_object->get_timezone(); $lab_id = $this->get_lab_id(); $paper_id = $this->get_paper_id(); $stmt->bind_param('iiiii', $lab_id, $invigilator_id, $paper_id, $start_date, $end_time); $stmt->execute(); $stmt->close(); // Update cached end time $this->end_datetime_cached = $end_datetime; return $end_datetime; }