Blame view
app/Queries/Predictor/RelevantRounds.php
2.29 KB
e77200db5 Initial commit |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
<?php namespace FootyRoom\Queries\Predictor; class RelevantRounds { /** @var \FootyRoom\Queries\Predictor\Round */ public $previous; /** @var \FootyRoom\Queries\Predictor\Round */ public $selected; /** @var \FootyRoom\Queries\Predictor\Round */ public $next; /** @var \FootyRoom\Queries\Predictor\Round */ public $current; public function __construct(Round $selected, ?Round $previous, ?Round $next, ?Round $current) { $currentRoundId = $current ? $current->id : $selected->id; foreach (['previous', 'selected', 'next', 'current'] as $round) { if (!${$round}) continue; if (${$round}->id > $currentRoundId) { ${$round}->status = 'upcoming'; } elseif (${$round}->id < $currentRoundId) { ${$round}->status = 'finished'; } else { ${$round}->status = 'current'; } } $this->previous = $previous; $this->selected = $selected; $this->next = $next; $this->current = $current; } /** * Add player rounds information to each relevant round. */ public function addPlayerRounds(array $playerRounds): void { foreach ($playerRounds as $playerRound) { foreach (['previous', 'selected', 'next', 'current'] as $round) { if ($this->{$round} && $this->{$round}->id === $playerRound->phase) { $this->{$round}->player = $playerRound; break; } } } } /** * Get all relevant rounds ids. */ public function getRoundIds(): array { $roundIds = []; foreach (['previous', 'selected', 'next', 'current'] as $round) { if ($this->{$round}) { $roundIds[] = $this->{$round}->id; } } return $roundIds; } public function forResponse(): array { return [ 'previous' => $this->previous ? $this->previous->forResponse() : null, 'selected' => $this->selected ? $this->selected->forResponse(true) : null, 'next' => $this->next ? $this->next->forResponse() : null, 'current' => $this->current ? $this->current->forResponse() : null, ]; } } |