Projekt

Obecné

Profil

Stáhnout (2.15 KB) Statistiky
| Větev: | Revize:
1
<?php
2

    
3
namespace App\OpenData;
4

    
5
use MongoDB\Driver\Query;
6
use MongoDB\Driver\Command;
7
use MongoDB\Driver\Manager;
8

    
9
class OpenDataManager implements IOpenDataManager {
10
    private $manager;
11

    
12
    public function __construct() {
13
        $this->manager = new Manager(
14
            $_ENV['DATABASE_CONNECTION_STRING']
15
        );
16
    }
17

    
18
    public function getCollectionDataByName($name, $date, $hour) {
19
        $valh = $hour < 10 ? '0'.$hour : $hour;
20
        $openData = $this->manager->executeQuery('open-data-db.'.$name.$date, new Query(['date' => $date.$valh], []));
21

    
22
        $openData->setTypeMap([
23
            'array' => 'array',
24
            'document' => 'array',
25
            'root' => 'array',
26
        ]);
27

    
28
        return $openData->toArray();
29
    }
30

    
31
    public function getAvailableCollections() {
32
        $openData = $this->manager->executeQuery('open-data-db.DATASETS', new Query([], ['projection' => ['name' => 1, '_id' => 0]]));
33

    
34
        $openData->setTypeMap([
35
            'array' => 'array',
36
            'document' => 'array',
37
            'root' => 'array',
38
        ]);
39

    
40
        return $openData->toArray();
41
    }
42

    
43
    public function getAvailableCollectionsByDay($date) {
44
        $availableInDate = [];
45
        $available = $this->getAvailableCollections();
46
        $index = 0;
47
        foreach ($available as $key => $value) {
48
            $command = new Command(['listCollections' => 1, 'filter' => ['name' => $value['name'].$date]]);
49
            $result = $this->manager->executeCommand('open-data-db', $command)->toArray();
50

    
51
            if (false == empty($result) && false == array_key_exists($value['name'], $availableInDate)) {
52
                $availableInDate[$value['name']] = $index++;
53
            }
54
        }
55

    
56
        return $availableInDate;
57
    }
58

    
59
    public function getMaxCollectionNumberAtDay($name, $date) {
60
        $max = $this->manager->executeQuery('open-data-db.'.$name.$date, new Query([], ['sort' => ['number' => -1], 'limit' => 1]));
61

    
62
        $max->setTypeMap([
63
            'array' => 'array',
64
            'document' => 'array',
65
            'root' => 'array',
66
        ]);
67

    
68
        $result = $max->toArray();
69

    
70
        return empty($result) ? 1 : $result[0]['number'];
71
    }
72
}
(4-4/4)