Example #1
0
 function last_submission_to($entity)
 {
     if (!$entity->submitable()) {
         return false;
     }
     if ($entity->attribute_bool('keep best')) {
         static $query;
         DB::prepare_query($query, "SELECT * FROM `user_submission` LEFT JOIN `submission` ON `user_submission`.`submissionid` = `submission`.`submissionid`" . " WHERE `userid`=? AND `entity_path`=?" . " ORDER BY `status` DESC, `time` DESC" . " LIMIT 1");
         $query->execute(array($this->userid, $entity->path()));
         return Submission::fetch_one($query, '', false);
     } else {
         static $query;
         DB::prepare_query($query, "SELECT * FROM `user_submission` LEFT JOIN `submission` ON `user_submission`.`submissionid` = `submission`.`submissionid`" . " WHERE `userid`=? AND `entity_path`=?" . " ORDER BY `time` DESC" . " LIMIT 1");
         $query->execute(array($this->userid, $entity->path()));
         return Submission::fetch_one($query, '', false);
     }
 }
Example #2
0
 static function get_pending_submission($host)
 {
     static $query_check, $query_take, $query_fetch;
     DB::prepare_query($query_check, "SELECT COUNT(*) FROM `submission`" . " WHERE `status` = " . Status::PENDING . " AND `judge_start` < :old_start");
     DB::prepare_query($query_take, "UPDATE `submission` SET `judge_start` = :new_start, `judge_host` = :host" . " WHERE `status` = " . Status::PENDING . " AND `judge_start` < :old_start" . " LIMIT 1");
     DB::prepare_query($query_fetch, "SELECT * FROM `submission`" . " WHERE `status` = " . Status::PENDING . " AND `judge_start` = :new_start AND `judge_host` = :host");
     // are there pending submissions?
     // this step is to make things faster
     $params = array();
     $params['old_start'] = time() - REJUDGE_TIMEOUT;
     $query_check->execute($params);
     $num = $query_check->fetchColumn();
     DB::check_errors($query_check);
     $query_check->closeCursor();
     if ($num == 0) {
         return false;
     }
     // if so, take one
     $params['new_start'] = time();
     $params['host'] = $host;
     $query_take->execute($params);
     $num = $query_take->rowCount();
     DB::check_errors($query_take);
     $query_take->closeCursor();
     if ($num == 0) {
         echo "Submission stolen from under our nose\n";
         return false;
     }
     // and return it
     unset($params['old_start']);
     $query_fetch->execute($params);
     DB::check_errors($query_fetch);
     return Submission::fetch_one($query_fetch);
 }