Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
63.16% covered (warning)
63.16%
24 / 38
63.64% covered (warning)
63.64%
7 / 11
CRAP
0.00% covered (danger)
0.00%
0 / 1
Base
63.16% covered (warning)
63.16%
24 / 38
63.64% covered (warning)
63.64%
7 / 11
46.20
0.00% covered (danger)
0.00%
0 / 1
 parseData
n/a
0 / 0
n/a
0 / 0
0
 __construct
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 readDataFile
100.00% covered (success)
100.00%
9 / 9
100.00% covered (success)
100.00%
1 / 1
4
 getDataAsArray
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
6
 getHash
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
6
 getData
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
6
 loadData
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
 getItemList
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
2
 setItemList
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 fetchId
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
4
 setAccessInstance
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 access
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3/**
4 * @package 115Mandant
5 * @copyright BerlinOnline Stadtportal GmbH & Co. KG
6 **/
7
8namespace BO\Zmsdldb\File;
9
10use BO\Zmsdldb\Exception;
11
12/**
13  * Common methods shared by access classes
14  *
15  */
16abstract class Base
17{
18    protected $data = [];
19    /**
20     * lazy loaded item list, use getItemList() to access this
21     *
22     * @var \BO\Zmsdldb\Collection\Base $itemList
23     */
24    private $itemList = null;
25
26    /**
27     * @var String $dataFile
28     */
29    protected $dataFile = '';
30
31    /**
32     * @var String $locale Format like 'en'
33     *
34     */
35    protected $locale = 'de';
36
37    /**
38     * @var \BO\Zmsdldb\AbstractAccess $accessInstance
39     */
40    private $accessInstance = null;
41
42    abstract protected function parseData($data);
43
44    public function __construct($dataFile, $locale = "de")
45    {
46        $this->dataFile = $dataFile;
47        $this->locale = $locale;
48    }
49
50    public function readDataFile()
51    {
52        if (empty($this->data)) {
53            $jsonFile = $this->dataFile;
54            if (!is_readable($jsonFile)) {
55                throw new Exception("Cannot read $jsonFile");
56            }
57            $data = json_decode(file_get_contents($jsonFile), true);
58            if (!$data) {
59                throw new Exception("Could not decide $jsonFile");
60            }
61            $this->data = $data;
62        }
63        return $this->data;
64    }
65
66    /** @psalm-api */
67    public function getDataAsArray()
68    {
69        try {
70            $data = $this->readDataFile();
71
72            return $data['data'];
73        } catch (\Exception $e) {
74            throw $e;
75        }
76    }
77
78    /** @psalm-api */
79    public function getHash()
80    {
81        try {
82            $data = $this->readDataFile();
83
84            return $data['hash'];
85        } catch (\Exception $e) {
86            throw $e;
87        }
88    }
89
90    /** @psalm-api */
91    public function getData()
92    {
93        try {
94            $data = $this->readDataFile();
95
96            return $data;
97        } catch (\Exception $e) {
98            throw $e;
99        }
100    }
101
102    /**
103     * @return void
104     */
105    public function loadData()
106    {
107        try {
108            $data = $this->readDataFile();
109            $this->itemList = $this->parseData($data);
110        } catch (\Exception $e) {
111            throw $e;
112        }
113    }
114
115    /**
116     * @return \BO\Zmsdldb\Collection\Base
117     */
118    public function getItemList()
119    {
120        if (null === $this->itemList) {
121            $this->loadData();
122        }
123        return $this->itemList;
124    }
125
126    protected function setItemList($list): static
127    {
128        $this->itemList = $list;
129        return $this;
130    }
131
132    /**
133     * @return \BO\Zmsdldb\Entity\Base|false
134     */
135    public function fetchId(string $itemId)
136    {
137        $itemList = $this->getItemList();
138
139        if (! $itemId || !$itemList instanceof \BO\Zmsdldb\Collection\Base || !$itemList->offsetExists($itemId)) {
140            return false;
141        }
142
143        return $itemList[$itemId];
144    }
145
146    public function setAccessInstance(\BO\Zmsdldb\AbstractAccess $accessInstance): void
147    {
148        $this->accessInstance = $accessInstance;
149    }
150
151    public function access(): \BO\Zmsdldb\AbstractAccess
152    {
153        return $this->accessInstance;
154    }
155}