]> git.localhorst.tv Git - alttp.git/blobdiff - app/Models/Result.php
open tournament type
[alttp.git] / app / Models / Result.php
index 99f3791eacfc951acabb8d69d22053f592adbc80..c672a6a780856b1222b5e4e5ac6f7cb7ef93aa6b 100644 (file)
@@ -11,6 +11,37 @@ class Result extends Model
        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(Participant $a, Participant $b) {
+               return strcasecmp($a->user->username, $b->user->username);
+       }
+
+
        public function formatTime() {
                $hours = floor($this->time / 60 / 60);
                $minutes = floor(($this->time / 60) % 60);
@@ -45,6 +76,10 @@ class Result extends Model
                return $this->belongsTo(Participant::class);
        }
 
+       public function user() {
+               return $this->belongsTo(User::class);
+       }
+
        public function getHasFinishedAttribute() {
                return $this->time > 0 || $this->forfeit;
        }