Spara::spara_genererade_tipsrader_db()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 50
Code Lines 29

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 31
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 29
nc 1
nop 0
dl 0
loc 50
ccs 31
cts 32
cp 0.9688
crap 1
rs 9.456
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * Klass Spara.
5
 * @author Niklas Dougherty
6
 */
7
8
declare(strict_types=1);
9
10
namespace Tips\Klasser\Spelade;
11
12
use PDO;
13
use Tips\Klasser\Utdelning;
14
use Tips\Klasser\Matcher;
15
use Tips\Klasser\Graf;
16
17
/**
18
 * Klass Spara.
19
 * Hämtar genererad data och sparar permanent i databas.
20
 * Renderar tipsgrafer.
21
 * Skriver rader till fil för uppladdning vid Svenska spel.
22
 */
23
class Spara {
24
	public Graf $graf;
25
	public int $antal_genererade = 0;		// antal genererade tipsrader
26
	public int $antal_utvalda_rader = 0;	// antal utvalda tipsrader
27
	public ?string $kommentar = null;		// spel- och moduldata
28
	protected string $tipsrader = '';		// tipsrader i kompakt strängformat
29
	protected string $mappnamn = '';		// mapp i vilken textfil sparas
30
	protected string $mapp = '';
31
	protected string $textfil = '';			// tipsrader i Svenska spels format
32
	protected string $bildfil = '';			// grafisk projektion av spelade rader
33
	/**
34
	 * @var string[] $tipsvektor
35
	 */
36
	public array $tipsvektor = [];
37
38
	/**
39
	 * Initiera.
40
	 * Lägg definitioner i konstruktorn.
41
	 */
42 20
	public function __construct(protected Utdelning $utdelning, protected Matcher $matcher) {
43 20
		$this->mappnamn = $this->utdelning->spel->filer->mappnamn(
44 20
			$this->utdelning->spel->omgång,
45 20
			$this->utdelning->spel->speltyp
46 20
		);
47 20
		$this->mapp = BAS . GENERERADE . $this->mappnamn;
48 20
		$this->textfil = "{$this->mapp}/{$this->utdelning->spel->filnamn}.txt";
49 20
		$this->bildfil = SPELADE . "/{$this->utdelning->spel->filnamn}.png";
50 20
		$this->graf = new Graf();
51
	}
52
53
	/**
54
	 * Spara genererade rader i databas.
55
	 */
56 1
	public function spara_genererade_tipsrader_db(): void {
57
		/**
58
		 * Hämta data från generering i temporär databas.
59
		 */
60 1
		$sats = $this->utdelning->spel->db->temp->prepare(
61 1
			"SELECT `tipsrader`, `datum`, `genererade`, `valda`, `kommentar`
62
			FROM `genererat` WHERE `omgång`=:omgang
63 1
			AND `speltyp`=:speltyp AND `sekvens`=:sekvens LIMIT 1"
64 1
		);
65 1
		$sats->bindValue(':omgang', $this->utdelning->spel->omgång, PDO::PARAM_INT);
66 1
		$sats->bindValue(':speltyp', $this->utdelning->spel->speltyp->value, PDO::PARAM_INT);
67 1
		$sats->bindValue(':sekvens', $this->utdelning->spel->sekvens, PDO::PARAM_INT);
68 1
		$sats->bindColumn('tipsrader', $this->tipsrader, PDO::PARAM_STR);
69 1
		$sats->bindColumn('datum', $datum, PDO::PARAM_INT);
70 1
		$sats->bindColumn('genererade', $this->antal_genererade, PDO::PARAM_INT);
71 1
		$sats->bindColumn('valda', $this->antal_utvalda_rader, PDO::PARAM_INT);
72 1
		$sats->bindColumn('kommentar', $this->kommentar, PDO::PARAM_STR);
73 1
		$sats->execute();
74 1
		$sats->fetch(PDO::FETCH_OBJ);
75
76
		/**
77
		 * Ersätt data från generering i databas.
78
		 */
79 1
		$sats = $this->utdelning->spel->db->instans->prepare("REPLACE INTO `spelade`
80
			(`omgång`, `speltyp`, `sekvens`, `tipsrader`, `datum`, `genererade`, `valda`, `kommentar`)
81 1
			VALUES (:omgang, :speltyp, :sekvens, :tipsrader, :datum, :genererade, :valda, :kommentar)");
82 1
		$sats->bindValue(':omgang', $this->utdelning->spel->omgång, PDO::PARAM_INT);
83 1
		$sats->bindValue(':speltyp', $this->utdelning->spel->speltyp->value, PDO::PARAM_INT);
84 1
		$sats->bindValue(':sekvens', $this->utdelning->spel->sekvens, PDO::PARAM_INT);
85 1
		$sats->bindValue(':tipsrader', $this->tipsrader, PDO::PARAM_STR);
86 1
		$sats->bindValue(':datum', $datum, PDO::PARAM_STR);
87 1
		$sats->bindValue(':genererade', $this->antal_genererade, PDO::PARAM_INT);
88 1
		$sats->bindValue(':valda', $this->antal_utvalda_rader, PDO::PARAM_INT);
89 1
		$sats->bindValue(':kommentar', $this->kommentar, PDO::PARAM_STR);
90
91
		/**
92
		 * Logga.
93
		 */
94 1
		$meddelande = match ($sats->execute()) {
95 1
			true => "✅ Sparade genererade tipsrader.",
96
			false => "❌ Kunde inte spara genererade tipsrader."
97 1
		};
98
99 1
		$this->utdelning->spel->db->logg->logga(self::class .
100 1
			": $meddelande ({$this->utdelning->spel->omgång}-{$this->utdelning->spel->sekvens}))");
101
102
		/**
103
		 * Packa upp tipsrader.
104
		 */
105 1
		$this->tipsvektor = bas36till3(explode(',', $this->tipsrader));
106
	}
107
}
108