Passed
Push — main ( f1b4ad...6ccac6 )
by N.
04:46
created

GridOmgang::visa()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 43
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 18
CRAP Score 3

Importance

Changes 0
Metric Value
cc 3
eloc 17
nc 3
nop 0
dl 0
loc 43
ccs 18
cts 18
cp 1
crap 3
rs 9.7
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * Klass GridOmgang.
5
 * @author Niklas Dougherty
6
 */
7
8
declare(strict_types=1);
9
10
namespace Tips\Klasser\Omgang;
11
12
use PDO;
13
use Tips\Klasser\Tips;
14
15
/**
16
 * Klass GridOmgang.
17
 * Välj omgångsnummer medelst rullgardinsmeny, pilar eller manuell inmatning.
18
 */
19
final class GridOmgang {
20
	/**
21
	 * Init.
22
	 */
23 1
	public function __construct(private Tips $tips) {
24 1
	}
25
26
	/**
27
	 * Visa omgång.
28
	 */
29 1
	public function visa(): string {
30
		/**
31
		 * Hämta antal kompletta omgångar.
32
		 */
33 1
		$antal_kompletta = $this->antal_kompletta();
34
35
		/**
36
		 * Initialisera variabler.
37
		 */
38 1
		$omgångar = []; // håller alla omgångar
39 1
		$grid_omgång = ''; // malltext
40 1
		$antal_omgångar = $omgång = 0;
41
42
		/**
43
		 * Hämta alla omgångar från databas.
44
		 * Inkluderar inkompletta.
45
		 */
46 1
		$sats = $this->tips->spel->db->instans->prepare("SELECT `omgång` FROM `matcher`
47 1
				WHERE `speltyp`={$this->tips->spel->speltyp->value} ORDER BY `omgång` DESC");
48 1
		$sats->execute();
49 1
		$sats->bindColumn('omgång', $omgång, PDO::PARAM_INT);
50
51
		/**
52
		 * Bilda meny.
53
		 */
54 1
		while ($sats->fetch(PDO::FETCH_OBJ)) {
55 1
			$antal_omgångar++;
56 1
			$vald = $this->tips->spel->omgång === $omgång ? ' selected="selected"' : '';
57 1
			$grid_omgång .= t(8, "<option$vald>$omgång</option>"); // bygg meny
58 1
			$omgångar[] = $omgång;
59
		}
60
61
		/**
62
		 * Bilda navigeringspilar.
63
		 */
64 1
		$index = (int) array_search($this->tips->spel->omgång, $omgångar, true);
65 1
		$föregående = strval($omgångar[$index + 1] ?? '');
66 1
		$nästa = strval($omgångar[$index - 1] ?? '');
67
68
		/**
69
		 * Eka ut resultatet i HTML.
70
		 */
71 1
		return (new RenderaOmgang($this->tips))->rendera_html($grid_omgång, $föregående, $nästa, $antal_kompletta, $antal_omgångar);
72
	}
73
74
	/**
75
	 * Hämta antal kompletta.
76
	 */
77 1
	private function antal_kompletta(): int {
78
		/**
79
		 * Hämta antal omgångar från databas.
80
		 * Enbart omgångar med kompletta odds och resultat.
81
		 */
82 1
		$sats = $this->tips->spel->db->instans->prepare("SELECT COUNT(`odds`.`omgång`) FROM `odds`
83
			LEFT JOIN `streck` ON `odds`.`omgång`=`streck`.`omgång`
84
			LEFT JOIN `matcher` ON `odds`.`omgång`=`matcher`.`omgång`
85 1
			WHERE `odds`.`speltyp`={$this->tips->spel->speltyp->value} AND
86 1
			`odds`.`komplett` AND `streck`.`komplett` AND `matcher`.`komplett`");
87 1
		$sats->execute();
88 1
		$antal_kompletta = (int) $sats->fetchColumn();
89 1
		$sats->closeCursor();
90
91
		/**
92
		 * Returnera.
93
		 */
94 1
		return $antal_kompletta;
95
	}
96
}
97