[ 'class' => 'team', ], 'cup' => [ 'number' => '#76', 'name' => '5on5 Open Cup', 'bestof' => '5', ], 'team' => [ 'orange' => [ 'name' => 'Narancs Csapat', 'ban' => [ 'mira', 'jackal' ], 'score' => [ true, true, true ] ], 'blue' => [ 'name' => 'Kék csapat', 'ban' => [ 'rook', 'blitz' ], 'score' => [ true, true, true ] ] ] ]; public function setClass(string $class): self { if (!in_array($class, $this->allowedStripeClasses)) { throw new \InvalidArgumentException("Given class " . $class . " not allowed. Allowed classes: " . implode(', ', $this->allowedStripeClasses)); } $this->state['stripe']['class'] = $class; return $this; } private function setSimpleStripe() { unset($this->state['team']); } public function setScore(string $team, int $number, bool $score) { $this->state['team'][$team]['score'][$number] = $score; } public function setCup(string $number, string $name, int $bestOf = 1) { $this->state['cup']['number'] = $number; $this->state['cup']['name'] = $name; $this->state['cup']['bestof'] = $bestOf; } /** * @param string $color Csapat szín validáció * * Dob egy Exception-t ha nem orange / blue */ private function testColor(string $color) { if (!in_array($color, $this->allowedColors)) { throw new \InvalidArgumentException("Given colour " . $color . " not allowed. Allowed colours: " . implode(', ', $this->allowedColors)); } } public function setTeamName(string $team_color = self::TEAM_BLUE, $name = '') { $this->testColor($team_color); $this->state['team'][$team_color]['name'] = $name; } public function addTeamBan(string $team_color = self::TEAM_BLUE, $operator = '') { $this->testColor($team_color); if (!in_array($operator, $this->allowedOperators)) { //FIXME: védő és támadó operátorok külön throw new \InvalidArgumentException("Given operator not allowed: " . $operator . " Allowed operators: " . implode(', ', $this->allowedOperators)); } if (isset($this->state['team'][$team_color]['ban']) && count($this->state['team'][$team_color]['ban']) > 1) { throw new \InvalidArgumentException("Team " . $team_color . " already has 2 operators."); } $this->state['team'][$team_color]['ban'][] = $operator; } public function __get($name) { if ($this->__isset($name)) { return $this->state[$name]; } return null; } public function __isset($name) { return isset($this->state[$name]); } public function loadFromJson(string $json) { $state = json_decode($json); $this->loadFromArray($state); } public function loadFromArray(array $state) { unset($this->state); $this->state = []; if (!empty($state['team']['orange']['score'][0])) { $this->setScore('orange', 0, true); } if (!empty($state['team']['orange']['score'][1])) { $this->setScore('orange', 1, true); } if (!empty($state['team']['orange']['score'][2])) { $this->setScore('orange', 2, true); } if (!empty($state['team']['blue']['score'][0])) { $this->setScore('blue', 0, true); } if (!empty($state['team']['blue']['score'][1])) { $this->setScore('blue', 1, true); } if (!empty($state['team']['blue']['score'][2])) { $this->setScore('blue', 2, true); } if (!empty($state['stripe']["class"])) { $this->setClass($state['stripe']["class"]); } if (!empty($state['cup']['name']) || !empty($state['cup']['number']) || !empty($state['cup']['bestof'])) { $cupNum = $state['cup']['number'] ?? ''; $cupName = $state['cup']['name'] ?? ''; $bestOf = (int) $state['cup']['bestof'] ?? 1; $this->setCup($cupNum, $cupName, $bestOf); } if (!empty($state['team'])) { foreach ([self::TEAM_BLUE, self::TEAM_ORANGE] as $color) { if (!empty($state['team'][$color]['name'])) { $this->setTeamName($color, $state['team'][$color]['name']); } if (!empty($state['team'][$color]['ban']) && is_array($state['team'][$color]['ban'])) { foreach ($state['team'][$color]['ban'] as $operator) { $this->addTeamBan($color, $operator); } } } } } public function getJson() { return json_encode($this->state); } public function getOperators() { return $this->allowedOperators; } public function getState() { return $this->state; } public function getType() { if (empty($this->state['stripe']['class'])) { return null; } return $this->state['stripe']['class']; } }