Passed
Push — main ( 203f91...e5e48e )
by N.
03:27
created

Kontrollera::kontrollera_nya_moduler()   A

Complexity

Conditions 4
Paths 5

Size

Total Lines 38
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 18
CRAP Score 4.016

Importance

Changes 0
Metric Value
cc 4
eloc 18
nc 5
nop 0
dl 0
loc 38
ccs 18
cts 20
cp 0.9
crap 4.016
rs 9.6666
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * Klass Kontrollera.
5
 * @author Niklas Dougherty
6
 */
7
8
declare(strict_types=1);
9
10
namespace Tips\Klasser\Moduler;
11
12
use PDO;
13
use PDOStatement;
14
15
/**
16
 * Klass Kontrollera.
17
 */
18
class Kontrollera extends Annonsera {
19
	/**
20
	 * Kontrollera nya moduler.
21
	 */
22 4
	public function kontrollera_nya_moduler(): void {
23
		/**
24
		 * Denna kontroll har ingen mening vid generering.
25
		 */
26 4
		if (defined("GENERERA")) {
27
			return;
28
		}
29
30 4
		$moduler = []; // aktiva moduler
31 4
		$modulbeteckning = []; // modulnamn
32
33 4
		$glob = (array) glob(MODULER . '/*.php');
34 4
		$befintliga_moduler = array_map(fn ($filnamn): string => basename((string) $filnamn, '.php'), $glob);
35
36 4
		$this->hämta_moduler($befintliga_moduler, $moduler, $modulbeteckning);
37
38 4
		$antal_moduler = count($modulbeteckning);
39 4
		$nya_moduler = array_diff($befintliga_moduler, $modulbeteckning);
40
41
		/**
42
		 * Lägg till nya moduler i filsystem.
43
		 */
44 4
		foreach ($nya_moduler as $ny_modul) {
45
			$moduler[] = [$antal_moduler++, $ny_modul, 0];
46
		}
47
48
		/**
49
		 * Nyskapa struktur.
50
		 */
51 4
		$this->utdelning->spel->db->instans->query("DELETE FROM `moduler`");
52
53 4
		foreach ($moduler as $modul) {
54 4
			$sats = $this->utdelning->spel->db->instans->prepare("INSERT INTO `moduler`
55 4
				(`prioritet`, `namn`, `aktiv`) VALUES (:prioritet, :namn, :aktiv)");
56 4
			$sats->bindValue(':prioritet', $modul[0], PDO::PARAM_INT);
57 4
			$sats->bindValue(':namn', $modul[1], PDO::PARAM_STR);
58 4
			$sats->bindValue(':aktiv', $modul[2], PDO::PARAM_BOOL);
59 4
			$sats->execute();
60
		}
61
	}
62
63
	/**
64
	 * Hämta moduler från databas.
65
	 * @param string[] $befintliga_moduler
66
	 * @param array<int, mixed[]> $moduler
67
	 * @param string[] $modulbeteckning
68
	 */
69 4
	private function hämta_moduler(array $befintliga_moduler, array &$moduler, array &$modulbeteckning): void {
70 4
		$index = 1;
71
		/** @var PDOStatement $sats */
72 4
		$sats = $this->utdelning->spel->db->instans->query('SELECT * FROM `moduler` ORDER BY `prioritet`');
73
74 4
		foreach ($sats->fetchAll(PDO::FETCH_ASSOC) as $rad) {
75 4
			if (isset($_REQUEST['uppdatera_moduler'])) {
76 1
				$rad['aktiv'] = isset($_REQUEST['modul'][$rad['namn']]) &&
77 1
					$_REQUEST['modul'][$rad['namn']]['aktiv'] === '1' ? 1 : 0;
78
			}
79
80 4
			if (in_array($rad['namn'], $befintliga_moduler, true)) {
81 4
				$moduler[] = [$index, $rad['namn'], $rad['aktiv']];
82 4
				$modulbeteckning[] = $rad['namn'];
83 4
				$index++;
84
			}
85
		}
86
	}
87
}
88