Passed
Push — main ( d29be2...38376b )
by N.
03:16
created

Tipsdata::bearbeta_tipsdata()   A

Complexity

Conditions 6
Paths 13

Size

Total Lines 24
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 42

Importance

Changes 0
Metric Value
cc 6
eloc 12
nc 13
nop 2
dl 0
loc 24
ccs 0
cts 14
cp 0
crap 42
rs 9.2222
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * Klass Tipsdata.
5
 * @author Niklas Dougherty
6
 */
7
8
declare(strict_types=1);
9
10
namespace Tips\Klasser;
11
12
/**
13
 * Klass Tipsdata.
14
 * @SuppressWarnings("PHPMD.BooleanArgumentFlag")
15
 */
16
final class Tipsdata extends Tipsresultat {
17
	/**
18
	 * Hämta tipsdata.
19
	 * Rest med boolesk flagga för senaste spel (= okänd omgång).
20
	 * Tanken var att hämta data fär äldre spel, men dessa är ofta ofullständiga.
21
	 */
22
	public function hämta_tipsdata(Tips &$tips, bool $senaste = true): bool {
23
		$url = ($senaste) ? "{$this->site}/draws?accesskey={$this->api}" :
24
			"{$this->site}/draws/{$tips->spel->omgång}?accesskey={$this->api}";
25
		$objekt = hämta_objekt($url);
26
27
		/**
28
		 * Säkerställ att data från Svenska spel finns.
29
		 */
30
		$draws = match (true) {
31
			$objekt === null => false,
32
			$senaste && isset($objekt->draws) && $objekt->draws => $objekt->draws[0],
33
			isset($objekt->draw) && $objekt->draw => $objekt->draw,
34
			default => false
35
		};
36
37
		/**
38
		 * Återvänd i annat fall.
39
		 */
40
		if (!$draws || !$draws->drawNumber) {
41
			$tips->spel->db->logg->logga(self::class . ": ❌ Inga tipsdata. ({$tips->spel->omgång})");
42
			return false;
43
		}
44
45
		/**
46
		 * Vi har tipsdata från Svenska spel. Ny omgång.
47
		 */
48
		$spel = new Spel();
49
		$spel->omgång = $draws->drawNumber;
50
		$spel->hämta_sekvenser();
51
		$spel->spara_spel();
52
		$tips = new Tips($spel);
53
54
		/**
55
		 * Extrahera JSON-data för omgång.
56
		 */
57
		$tips->utdelning->år = intval(substr($draws->closeTime, 0, 4));
58
		$tips->utdelning->vecka = intval(explode("-", $draws->drawComment)[1]);
59
		$tips->matcher->spelstopp = strval($draws->closeTime);
60
61
		$this->bearbeta_tipsdata($tips, $draws->events);
62
63
		/**
64
		 * Logga och återvänd.
65
		 */
66
		$tips->spel->db->logg->logga(self::class . ": ✅ Hämtade tipsdata. ({$tips->spel->omgång})");
67
		return true;
68
	}
69
70
	/**
71
	 * Plocka ut data från JSON-objekt.
72
	 * @param object[] $events
73
	 */
74
	private function bearbeta_tipsdata(Tips &$tips, array $events): void {
75
		/**
76
		 * Plocka ut matcher, odds och streck.
77
		 */
78
		foreach ($events as $index => $event) {
79
			if (isset($event->description)) {
80
				$tips->matcher->match[$index] = $event->description;
81
			}
82
83
			if (isset($event->distribution)) {
84
				$tips->streck->prediktioner[$index] = array_map(
85
					'floatval',
86
					[$event->distribution->home, $event->distribution->draw, $event->distribution->away]
87
				);
88
			}
89
90
			/**
91
			 * Ge nollvektor om oddsdata saknas för match.
92
			 */
93
			if (isset($event->odds->home, $event->odds->draw, $event->odds->away)) {
94
				$tips->odds->prediktioner[$index] = $event->odds->home ? array_map(
95
					'flyttal',
96
					[$event->odds->home, $event->odds->draw, $event->odds->away]
97
				) : TOM_ODDSVEKTOR;
0 ignored issues
show
Bug introduced by
The constant Tips\Klasser\TOM_ODDSVEKTOR was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
98
			}
99
		}
100
	}
101
}
102