use HasFactory;
+ public static function compareResult(Result $a, Result $b) {
+ $a_time = !$a->forfeit ? $a->time : 0;
+ $b_time = !$b->forfeit ? $b->time : 0;
+ if ($a_time) {
+ if ($b_time) {
+ if ($a_time < $b_time) return -1;
+ if ($b_time < $a_time) return 1;
+ return static::compareUsername($a, $b);
+ }
+ return -1;
+ }
+ if ($b_time) {
+ return 1;
+ }
+ if ($a->forfeit) {
+ if ($b->forfeit) {
+ return static::compareUsername($a, $b);
+ }
+ return -1;
+ }
+ if ($b->forfeit) {
+ return 1;
+ }
+ return static::compareUsername($a, $b);
+ }
+
+ public static function compareUsername(Result $a, Result $b) {
+ return strcasecmp($a->user->username, $b->user->username);
+ }
+
+
+ public function formatTime() {
+ $hours = floor($this->time / 60 / 60);
+ $minutes = floor(($this->time / 60) % 60);
+ $seconds = floor($this->time % 60);
+ return sprintf('%d:%02d:%02d', $hours, $minutes, $seconds);
+ }
+
public function updateResult($time, $forfeit) {
$this->time = $time;
$this->forfeit = $forfeit;
return $this->belongsTo(Participant::class);
}
+ public function user() {
+ return $this->belongsTo(User::class);
+ }
+
public function getHasFinishedAttribute() {
return $this->time > 0 || $this->forfeit;
}
protected $casts = [
'forfeit' => 'boolean',
'time' => 'double',
+ 'user_id' => 'string',
];
protected $appends = [