database->fetch($sql, $id); } public const SKUPINA_COOKIE = 'obvodSkupina'; /** * Základní informace o obvodech. * @return array */ public function getObvody(?string $skupina = null): array { if ($skupina === null || $skupina === '') { return $this->database->fetchAll('SELECT * FROM OBVOD ORDER BY CISLO'); } return $this->database->fetchAll( 'SELECT * FROM OBVOD WHERE SKUPINA = ? ORDER BY CISLO', $skupina, ); } /** * @return list */ public function getSkupiny(): array { $radky = $this->database->fetchAll( "SELECT DISTINCT SKUPINA FROM OBVOD WHERE SKUPINA IS NOT NULL AND LTRIM(RTRIM(SKUPINA)) <> '' ORDER BY SKUPINA", ); return array_map(static fn(Row $radek): string => (string) $radek->SKUPINA, $radky); } /** * Předchozí a další existující obvod podle čísla. * Čísla nemusí jít po sobě. * * @return array{predchozi: int|null, dalsi: int|null} */ public function getSousede(int $id): array { $prazdne = ['predchozi' => null, 'dalsi' => null]; $radky = $this->database->fetchAll('SELECT ID FROM OBVOD ORDER BY CISLO, ID'); $ids = array_map(static fn(Row $radek): int => (int) $radek->ID, $radky); $index = array_search($id, $ids, true); if ($index === false) { return $prazdne; } return [ 'predchozi' => $index > 0 ? $ids[$index - 1] : null, 'dalsi' => $index < count($ids) - 1 ? $ids[$index + 1] : null, ]; } public function vyberSkupinu(?string $pozadovana, ?string $ulozena): string { $skupiny = $this->getSkupiny(); if ($pozadovana !== null && in_array($pozadovana, $skupiny, true)) { return $pozadovana; } if ($ulozena !== null && in_array($ulozena, $skupiny, true)) { return $ulozena; } return $skupiny[0] ?? ''; } }