Projekt

Obecné

Profil

Stáhnout (5.42 KB) Statistiky
| Větev: | Revize:
1 574d6347 horkym
<?php
2
3
require_once "db/db-web.php";
4 788fa6d8 horkym
require_once "location.php";
5 574d6347 horkym
6
class DAO {
7
  
8
    protected $dbh;
9 788fa6d8 horkym
  
10 574d6347 horkym
    public function setDB($dbh) {
11
        $this->dbh = $dbh;
12
    }
13
    
14 788fa6d8 horkym
    public function insertVehicles() {
15
        $query = "SELECT COUNT(*) AS total FROM vozidla";
16
        $stmt = $this->dbh->executeQuery($query);
17
        
18
        if ($stmt->fetchAssoc()["total"] < 1) {
19
            // Pokud v tabulce s vozidlama neni zadny zaznam, pridat vsechny moznosti.
20
            $query = "INSERT INTO vozidla (id, nazev) VALUES ";
21
            $query .= "('0', 'Neznámé vozidlo'), ";
22
            $query .= "('1', 'Motocykl'), ";
23
            $query .= "('2', 'Auto'), ";
24
            $query .= "('3', 'Auto s přívěsem'), ";
25
            $query .= "('4', 'Dodávka'), ";
26
            $query .= "('5', 'Dodávka s přívěsem'), ";
27
            $query .= "('6', 'Lehký nákladní automobil'), ";
28
            $query .= "('7', 'Lehký nákladní automobil s přívěsem'), ";
29
            $query .= "('8', 'Nákladní automobil'), ";
30
            $query .= "('9', 'Nákladní automobil s přívěsem'), ";
31
            $query .= "('10', 'Autobus');";
32
            $stmt = $this->dbh->executeQuery($query);
33
        }
34
    }
35
    
36
    public function controlTrafficData($dateStr) {
37
        $dateTo = new DateTime($dateStr);
38
        $dateTo->modify("+1 day");
39
        $query = "SELECT COUNT(*) AS total FROM zaznam_cas WHERE datetime_od >= '$dateStr' AND datetime_od < '".$dateTo->format('Y-m-d')."';";
40
        $stmt = $this->dbh->executeQuery($query);
41
        return $stmt->fetchAssoc()["total"] < 1;
42
    }
43
    
44 e1140d8a horkym
    public function insertTrafficData($insertRTT, $insertRT, $insertOneDay) {
45
        for ($i = 0; $i < 3; $i++) {
46 788fa6d8 horkym
            $query = "";
47
            $values = "";
48
            $counter = 0;
49
            $array = NULL;
50
            
51
            if ($i == 0) {
52
                $query = "INSERT INTO zaznam_cas VALUES ";
53
                $array = &$insertRTT;
54 e1140d8a horkym
            } else if ($i == 1) {
55 788fa6d8 horkym
                $query = "INSERT INTO zaznam VALUES ";
56
                $array = &$insertRT;
57 e1140d8a horkym
            } else {
58
                $query = "INSERT INTO zaznam_prum_den VALUES ";
59
                $array = &$insertOneDay;
60 788fa6d8 horkym
            }
61
            
62
            for ($j = 0; $j < count($array); $j++) {
63
                $values .= $array[$j].", ";
64
                $counter++;
65
                if ($counter == 500 || $j == (count($array) - 1)) {
66
                    $query_ = $query.substr($values, 0, strlen($values) - 2).";";
67
                    $stmt = $this->dbh->executeQuery($query_);
68
                    
69
                    $values = "";
70
                    $counter = 0;
71
                }
72
            }
73
        }
74
    }
75
    
76
    public function insertLocationData($location) {
77
        
78
        // --- Kontrola, zda je mesto v tabulce, pripadne jeho pridani. ---
79
        
80
        $townId = $this->conditionalInsertion($location, "mesto", -1);
81
        
82
        // --- Kontrola, zda je ulice v tabulce, pripadne jeji pridani. ---
83
        
84
        $streetId = $this->conditionalInsertion($location, "ulice", $townId);
85
        
86
        // --- Kontrola, zda je zarizeni v tabulce, pripadne jeho pridani. ---
87
        
88
        $query = "SELECT * FROM zarizeni WHERE id='".$location->device."';";
89
        $stmt = $this->dbh->executeQuery($query);
90
        
91
        if (!($stmt->fetchAssoc())) {
92
            // Zarizeni se v tabulce jeste nenachazi.
93
            $query = "INSERT INTO zarizeni VALUES ('".$location->device."', '".$location->name."', '0', '$streetId');";
94
            $stmt = $this->dbh->executeQuery($query);
95
        }
96
        
97
    }
98
    
99
    // Pro mesta a ulice.
100
    private function conditionalInsertion($location, $table, $townId) {
101
        $query = "SELECT id FROM $table WHERE nazev=";
102
        if ($townId < 0) {
103
            // Hledame mesto.
104
            $query .= "'".$location->town."';";
105
        } else {
106
            // Hledame ulici (s odkazem na konkretni mesto - ruzna mesta mohou mit shodny nazev nejake ulice).
107
            $query .= "'".$location->street."' AND mesto_id='$townId';";
108
        }
109
        $stmt = $this->dbh->executeQuery($query);
110
        
111
        $id = -1;
112
        if ($row = $stmt->fetchAssoc()) {
113
            // Zaznam uz je v tabulce.
114
            $id = $row["id"];
115
        } else {
116
            // Zaznam se v tabulce jeste nenachazi - nalezeni id pro novy zaznam.
117
            $id = $this->findFirstId($table);
118
            
119
            $query = "INSERT INTO $table VALUES ";
120
            if ($townId < 0) {
121
                $query .= "('$id', '".$location->town."');";
122
            } else {
123 3380c12b horkym
                // Jestlize ulice v DB jeste neexistuje, nastavit geolokaci (nema smysl zem. sirku a delku zjistovat driv - nejedna se o dulezite informace pro CRON).
124
                $location->setGeolocation();
125
                $query .= "('$id', '".$location->street."', '$townId', '".$location->lat."', '".$location->lng."');";
126 788fa6d8 horkym
            }
127
            
128
            // Vlozeni zaznamu do tabulky.
129
            $stmt = $this->dbh->executeQuery($query);
130
        }
131
        
132
        return $id;
133
    }
134
    
135
    public function findFirstId($table) {
136
        $query = "SELECT id FROM $table ORDER BY id DESC LIMIT 1;";
137
        $stmt = $this->dbh->executeQuery($query);
138
        
139
        $id = -1;
140
        if ($row = $stmt->fetchAssoc()) {
141
            // V tabulce je vice zaznamu.
142
            $id = $row["id"] + 1;
143
        } else {
144
            // Tabulka je prazdna.
145
            $id = 1;
146
        }
147
        
148
        return $id;
149
    }
150
    
151 574d6347 horkym
}
152
153
?>