Passed
Push — main ( e5ef3a...f1ef56 )
by N.
04:15
created

Garderingar   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 65
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
eloc 26
dl 0
loc 65
ccs 26
cts 26
cp 1
rs 10
c 0
b 0
f 0
wmc 7

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
A parse() 0 4 2
A garderingar() 0 37 4
1
<?php
2
3
/**
4
 * Klass Garderingar.
5
 * @author Niklas Dougherty
6
 */
7
8
declare(strict_types=1);
9
10
namespace Tips\Moduler\Ajax\SystemAjax;
11
12
use PDO;
13
use Tips\Klasser\Spel;
14
use Tips\Klasser\DBPreferenser;
15
use Tips\Moduler\System\Konstanter;
16
17
/**
18
 * Klass Garderingar.
19
 */
20
class Garderingar {
21
	use Konstanter;
22
23
	protected Spel $spel;
24
	protected DBPreferenser $db_preferenser;
25
26
	/**
27
	 * Initiera.
28
	 */
29 1
	public function __construct() {
30 1
		$this->spel = new Spel();
31 1
		$this->db_preferenser = new DBPreferenser($this->spel->db);
32
	}
33
34
	/**
35
	 * Spara garderingar.
36
	 * Manuella garderingar som komplement till R-system.
37
	 */
38 1
	protected function garderingar(): void {
39 1
		$antal_garderingar = array_fill(0, self::SYSTEM_MAX_ANTAL_FÄLT, 0);
0 ignored issues
show
Bug introduced by
The constant Tips\Moduler\Ajax\System...:SYSTEM_MAX_ANTAL_FÄLT was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
40
41 1
		$garderingar = $this->parse($_REQUEST['garderingar']);
42 1
		$andel_garderingar = $this->parse($_REQUEST['andel_garderingar']);
43
44
		/**
45
		 * Filtrera indata samt uppdatera andelar.
46
		 */
47 1
		foreach ($garderingar as $index => $gardering) {
48 1
			$gardering = (array) filter_var_array((array) $gardering, FILTER_SANITIZE_SPECIAL_CHARS);
49 1
			$garderingar[$index] = $gardering;
50
51
			/**
52
			 * Räkna upp antal om gardering finns.
53
			 */
54 1
			foreach ($gardering as $gard) {
55 1
				if ($gard != TOM_STRÄNGVEKTOR) {
56 1
					$antal_garderingar[$index]++;
57
				}
58
			}
59
60 1
			$andel_garderingar[$index] = min($andel_garderingar[$index], $antal_garderingar[$index]);
61
		}
62
63
		/**
64
		 * Spara garderingar.
65
		 */
66 1
		$sats = $this->spel->db->instans->prepare("REPLACE INTO `system`
67
			(`omgång`, `speltyp`, `sekvens`, `garderingar`, `andel_garderingar`)
68 1
			VALUES (:omgang, :speltyp, :sekvens, :garderingar, :andel_garderingar)");
69 1
		$sats->bindValue(':omgang', $this->spel->omgång, PDO::PARAM_INT);
70 1
		$sats->bindValue(':speltyp', $this->spel->speltyp->value, PDO::PARAM_INT);
71 1
		$sats->bindValue(':sekvens', $this->spel->sekvens, PDO::PARAM_INT);
72 1
		$sats->bindValue(':garderingar', implode(',', array_merge([], ...array_merge([], ...$garderingar))), PDO::PARAM_STR);
73 1
		$sats->bindValue(':andel_garderingar', implode(',', $andel_garderingar), PDO::PARAM_STR);
74 1
		echo $sats->execute();
75
	}
76
77
	/**
78
	 * Hantera extrahering av post-data.
79
	 * @return mixed[]
80
	 */
81 1
	private function parse(mixed $request): array {
82 1
		$request = is_string($request) ? $request : '';
83 1
		parse_str($request, $resultat);
84 1
		return (array) array_values($resultat)[0];
85
	}
86
}
87