Tipsdata::bearbeta_tipsdata()   A
last analyzed

Complexity

Conditions 6
Paths 13

Size

Total Lines 31
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 42

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 6
eloc 15
nc 13
nop 4
dl 0
loc 31
ccs 0
cts 17
cp 0
crap 42
rs 9.2222
c 1
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
		$objekt = hämta_objekt($this->url($tips, $senaste));
24
25
		/**
26
		 * Säkerställ att data från Svenska spel finns.
27
		 */
28
		$draws = match (true) {
29
			$objekt === null => false,
30
			$senaste && isset($objekt->draws) && $objekt->draws => $objekt->draws[0],
31
			isset($objekt->draw) && $objekt->draw => $objekt->draw,
32
			default => false
33
		};
34
35
		/**
36
		 * Återvänd i annat fall.
37
		 */
38
		if (!$draws || !$draws->drawNumber) {
39
			$tips->spel->db->logg->logga(self::class . ": ❌ Inga tipsdata. ({$tips->spel->omgång})");
40
			return false;
41
		}
42
43
		/**
44
		 * Vi har tipsdata från Svenska spel. Ny omgång.
45
		 */
46
		$spel = new Spel();
47
		$spel->omgång = $draws->drawNumber;
48
		$spel->hämta_sekvenser();
49
		$spel->spara_spel();
50
51
		$tips = new Tips($spel);
52
53
		$this->bearbeta_tipsdata($tips, $draws->events, $draws->closeTime, $draws->drawComment);
54
55
		/**
56
		 * Logga och återvänd.
57
		 */
58
		$tips->spel->db->logg->logga(self::class . ": ✅ Hämtade tipsdata. ({$tips->spel->omgång})");
59
		return true;
60
	}
61
62
	/**
63
	 * Bestäm URL.
64
	 */
65
	private function url(Tips $tips, bool $senaste): string {
66
		return ($senaste) ? "{$this->site}/draws?accesskey={$this->api}" :
67
			"{$this->site}/draws/{$tips->spel->omgång}?accesskey={$this->api}";
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, string $close_time, string $comment): void {
75
		/**
76
		 * Extrahera JSON-data för omgång.
77
		 */
78
		$tips->utdelning->år = intval(substr($close_time, 0, 4));
79
		$tips->utdelning->vecka = intval(explode("-", $comment)[1]);
80
		$tips->matcher->spelstopp = strval($close_time);
81
82
		/**
83
		 * Plocka ut matcher, odds och streck.
84
		 */
85
		foreach ($events as $index => $event) {
86
			if (isset($event->description)) {
87
				$tips->matcher->match[$index] = $event->description;
88
			}
89
90
			if (isset($event->distribution)) {
91
				$tips->streck->prediktioner[$index] = array_map(
92
					'floatval',
93
					[$event->distribution->home, $event->distribution->draw, $event->distribution->away]
94
				);
95
			}
96
97
			/**
98
			 * Ge nollvektor om oddsdata saknas för match.
99
			 */
100
			if (isset($event->odds->home, $event->odds->draw, $event->odds->away)) {
101
				$tips->odds->prediktioner[$index] = $event->odds->home ? array_map(
102
					'flyttal',
103
					[$event->odds->home, $event->odds->draw, $event->odds->away]
104
				) : TOM_ODDSVEKTOR;
105
			}
106
		}
107
	}
108
}
109