Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 74
0.00% covered (danger)
0.00%
0 / 21
CRAP
0.00% covered (danger)
0.00%
0 / 1
Base
0.00% covered (danger)
0.00%
0 / 74
0.00% covered (danger)
0.00%
0 / 21
1056
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 1
6
 getPDOAccess
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getImportData
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getIterator
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
6
 getCurrentEntitys
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 removeEntityFromCurrentList
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 setCurrentEntitys
0.00% covered (danger)
0.00%
0 / 15
0.00% covered (danger)
0.00%
0 / 1
20
 createMetaObject
0.00% covered (danger)
0.00%
0 / 13
0.00% covered (danger)
0.00%
0 / 1
12
 getMetaObject
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 saveMetaObject
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 needsUpdate
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
6
 setImportData
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 setLocale
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getLocale
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 setImportHash
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getImportHash
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 createEntity
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
6
 clearEntity
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
20
 preImport
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 postImport
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 runImport
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
0
1<?php
2
3namespace BO\Zmsdldb\Importer\MySQL;
4
5use BO\Zmsdldb\PDOAccess;
6use BO\Zmsdldb\Importer\OptionsTrait;
7use BO\Zmsdldb\Importer\PDOTrait;
8use BO\Zmsdldb\Importer\ItemNeedsUpdateTrait;
9use BO\Zmsdldb\Importer\Options;
10use BO\Zmsdldb\Importer\MySQL\Entity\Meta as MetaEntity
11;
12
13abstract class Base implements Options
14{
15    use PDOTrait;
16    use OptionsTrait;
17
18    protected $entityClass = null;
19    protected $importData = [];
20    protected $hash = null;
21    protected $locale = 'de';
22    protected $metaObject = null;
23    protected $entitysToDelete = [];
24    protected $getCurrentEntitys = true;
25
26    public function __construct(PDOAccess $mySqlAccess, array $importData = [], string $locale = 'de', $options = 0)
27    {
28        try {
29            $this->setPDOAccess($mySqlAccess);
30            $this->setImportData($importData['data']);
31            $this->setImportHash($importData['hash']);
32            $this->setLocale($locale);
33
34            $this->setOptions($options);
35            $this->clearEntity();
36        } catch (\Exception $e) {
37            throw $e;
38        }
39    }
40
41    public function getPDOAccess(): PDOAccess
42    {
43        return $this->pdoAccess;
44    }
45
46    public function getImportData(): array
47    {
48        return $this->importData;
49    }
50
51    public function getIterator(): iterable
52    {
53        foreach ($this->importData as $item) {
54            yield $item;
55        }
56    }
57
58    public function getCurrentEntitys(): array
59    {
60        return $this->entitysToDelete;
61    }
62
63    public function removeEntityFromCurrentList(int $entityId)
64    {
65        unset($this->entitysToDelete[$entityId]);
66    }
67
68    public function setCurrentEntitys()
69    {
70        try {
71            if (false === $this->getCurrentEntitys) {
72                return true;
73            }
74            $this->entitysToDelete = [];
75            $sql = "SELECT 
76            m.object_id AS id, 
77            e.data_json AS data_json 
78            FROM meta AS m
79            JOIN " . $this->entityClass::getTableName() . " AS e ON e.id = m.object_id AND e.locale = ?
80            WHERE m.locale = ?";
81
82
83            $stm = $this->getPDOAccess()->prepare($sql);
84            $stm->setFetchMode(\PDO::FETCH_OBJ);
85            $stm->execute([$this->getLocale(),$this->getLocale()]);
86            $entitys = $stm->fetchAll();
87            foreach ($entitys as $entity) {
88                $entityObject = $this->createEntity(json_decode($entity->data_json, true));
89                $this->entitysToDelete[$entity->id] = $entityObject;
90            }
91        } catch (\Exception $e) {
92            throw $e;
93        }
94    }
95
96    public function createMetaObject()
97    {
98        try {
99            if (empty($this->metaObject)) {
100                $metaObject = new MetaEntity(
101                    $this->getPDOAccess(),
102                    [
103                        'object_id' => 0,
104                        'locale' => $this->getLocale(),
105                        'hash' => $this->getImportHash(),
106                        'type' => call_user_func($this->entityClass . '::getTableName')
107                    ]
108                );
109                $this->metaObject = $metaObject;
110            }
111        } catch (\Exception $e) {
112            throw $e;
113        }
114    }
115
116    public function getMetaObject(): MetaEntity
117    {
118        $this->createMetaObject();
119        return $this->metaObject;
120    }
121
122    public function saveMetaObject(): self
123    {
124        $this->getMetaObject()->save();
125        return $this;
126    }
127
128    public function needsUpdate()
129    {
130        $metaObject = $this->getMetaObject();
131        $needsUpdate = $metaObject->itemNeedsUpdateAlt();
132        if ($needsUpdate) {
133            $this->setCurrentEntitys();
134        }
135        return $needsUpdate;
136    }
137
138    public function setImportData(array $importData = []): self
139    {
140        $this->importData = $importData;
141        return $this;
142    }
143
144    public function setLocale(string $locale): self
145    {
146        $this->locale = $locale;
147        return $this;
148    }
149
150    public function getLocale(): string
151    {
152        return $this->locale;
153    }
154
155    public function setImportHash(string $hash): self
156    {
157        $this->hash = $hash;
158        return $this;
159    }
160
161    public function getImportHash(): string
162    {
163        return $this->hash;
164    }
165
166    public function createEntity(array $data = array(), bool $setup = true)
167    {
168        if (null === $this->entityClass) {
169            throw new \InvalidArgumentException(__METHOD__ . " invalid entity class");
170        }
171        return new $this->entityClass($this->getPDOAccess(), $data, $setup);
172    }
173
174    final public function clearEntity()
175    {
176        try {
177            $entity = null;
178            if ($this->checkOptionFlag(static::OPTION_CLEAR_ENTITIY_TABLE)) {
179                $entity = ($entity ?? $this->createEntity(['meta' => ['locale' => $this->getLocale()]], false));
180                $entity->clearEntity();
181            }
182            if ($this->checkOptionFlag(static::OPTION_CLEAR_ENTITIY_REFERENCES_TABLES)) {
183                $entity =  ($entity ?? $this->createEntity(['meta' => ['locale' => $this->getLocale()]], false));
184                $entity->clearEntityReferences();
185            }
186        } catch (\Exception $e) {
187            throw $e;
188        }
189    }
190
191    public function preImport()
192    {
193    }
194
195    public function postImport()
196    {
197    }
198
199    abstract public function runImport();
200}