Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
n/a
0 / 0
n/a
0 / 0
CRAP
n/a
0 / 0
Zmsdldb
n/a
0 / 0
n/a
0 / 0
24
n/a
0 / 0
 getFixturesImportPath
n/a
0 / 0
n/a
0 / 0
1
 setImportPath
n/a
0 / 0
n/a
0 / 0
1
 startImport
n/a
0 / 0
n/a
0 / 0
4
 writeRequestList
n/a
0 / 0
n/a
0 / 0
7
 writeProviderList
n/a
0 / 0
n/a
0 / 0
2
 updateAvailability
n/a
0 / 0
n/a
0 / 0
5
 writeRequestRelationList
n/a
0 / 0
n/a
0 / 0
2
 writeLastUpdate
n/a
0 / 0
n/a
0 / 0
2
1<?php
2
3namespace BO\Zmsdb\Source;
4
5/**
6 * @codeCoverageIgnore
7 */
8class Zmsdldb extends \BO\Zmsdb\Base
9{
10    public static $importPath = '';
11    public static $repository = null;
12    public static $verbose = false;
13
14    public static function getFixturesImportPath()
15    {
16        $dir = dirname(__FILE__);
17        $importPath = realpath($dir . '/../../../tests/Zmsdb/fixtures/');
18        return $importPath;
19    }
20
21    public static function setImportPath($path)
22    {
23        self::$importPath = $path;
24    }
25
26    public function startImport($verbose = true, $updateAvailability = true)
27    {
28        if (!static::$importPath) {
29            throw new \Exception('No data path given');
30        }
31        if ($verbose) {
32            self::$verbose = $verbose;
33            print("Use source-path for dldb: " . static::$importPath . "\n\n");
34        }
35        self::$repository = new \BO\Zmsdldb\FileAccess();
36        self::$repository->loadFromPath(static::$importPath);
37
38        \BO\Zmsdb\Connection\Select::setTransaction();
39        $this->writeRequestList();
40        $providers = $this->writeProviderList();
41        $this->writeRequestRelationList();
42        $this->writeLastUpdate($verbose);
43        \BO\Zmsdb\Connection\Select::writeCommit();
44
45        if ($updateAvailability) {
46            $this->updateAvailability($providers);
47        }
48    }
49
50    protected function writeRequestList()
51    {
52        $startTime = microtime(true);
53        $requestQuery = (new \BO\Zmsdb\Request());
54        $requestQuery->writeDeleteListBySource('dldb');
55        foreach (self::$repository->fromService()->fetchList() as $request) {
56            if (isset($request['relation']) && isset($request['relation']['root_topic'])) {
57                $topic = self::$repository->fromTopic()->fetchId($request['relation']['root_topic']);
58                if ($topic && isset($topic['name'])) {
59                    $request['group'] = $topic['name'];
60                }
61            }
62            $requestQuery->writeImportEntity($request);
63        }
64        $time = round(microtime(true) - $startTime, 3);
65        if (self::$verbose) {
66            print("Requests: Took $time seconds\n\n");
67        }
68    }
69
70    protected function writeProviderList()
71    {
72        $startTime = microtime(true);
73        (new \BO\Zmsdb\Provider())->writeDeleteListBySource('dldb');
74        $providers = (new \BO\Zmsdb\Provider())->writeImportList(self::$repository->fromLocation()->fetchList());
75
76        $time = round(microtime(true) - $startTime, 3);
77        if (self::$verbose) {
78            print("Provider: Took $time seconds\n\n");
79        }
80
81        return $providers;
82    }
83
84    protected function updateAvailability($providers)
85    {
86        foreach ($providers as $provider) {
87            $providerData = $provider->data;
88
89            $scopes = (new \BO\Zmsdb\Scope())->readByProviderId($provider->getId());
90            foreach ($scopes as $scope) {
91                $availabilities = (new \BO\Zmsdb\Availability())->readList($scope->getId());
92
93                foreach ($availabilities as $availability) {
94                    if ((int) $availability->slotTimeInMinutes === (int) $providerData['slotTimeInMinutes']) {
95                        continue;
96                    }
97
98                    $availability->slotTimeInMinutes = $providerData['slotTimeInMinutes'];
99                    (new \BO\Zmsdb\Availability())
100                        ->updateEntity($availability->getId(), $availability, 2);
101                }
102            }
103        }
104    }
105
106    protected function writeRequestRelationList()
107    {
108        $startTime = microtime(true);
109        (new \BO\Zmsdb\RequestRelation())->writeDeleteListBySource('dldb');
110        (new \BO\Zmsdb\RequestRelation())->writeImportList(self::$repository->fromLocation()->fetchList());
111        $time = round(microtime(true) - $startTime, 3);
112        if (self::$verbose) {
113            print("RequestRelation: Took $time seconds\n\n");
114        }
115    }
116
117    protected function writeLastUpdate()
118    {
119        $startTime = microtime(true);
120        (new \BO\Zmsdb\Config())->replaceProperty('sources_dldb_last', date('c'));
121        $time = round(microtime(true) - $startTime, 3);
122        if (self::$verbose) {
123            print("LastImportTimeToConfig: Took $time seconds\n\n");
124        }
125    }
126}