Projekt

Obecné

Profil

Stáhnout (5.02 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
    public function insertTrafficData($insertRTT, $insertRT) {
45
        for ($i = 0; $i < 2; $i++) {
46
            $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
            } else {
55
                $query = "INSERT INTO zaznam VALUES ";
56
                $array = &$insertRT;
57
            }
58
            
59
            for ($j = 0; $j < count($array); $j++) {
60
                $values .= $array[$j].", ";
61
                $counter++;
62
                if ($counter == 500 || $j == (count($array) - 1)) {
63
                    $query_ = $query.substr($values, 0, strlen($values) - 2).";";
64
                    $stmt = $this->dbh->executeQuery($query_);
65
                    
66
                    $values = "";
67
                    $counter = 0;
68
                }
69
            }
70
        }
71
    }
72
    
73
    public function insertLocationData($location) {
74
        
75
        // --- Kontrola, zda je mesto v tabulce, pripadne jeho pridani. ---
76
        
77
        $townId = $this->conditionalInsertion($location, "mesto", -1);
78
        
79
        // --- Kontrola, zda je ulice v tabulce, pripadne jeji pridani. ---
80
        
81
        $streetId = $this->conditionalInsertion($location, "ulice", $townId);
82
        
83
        // --- Kontrola, zda je zarizeni v tabulce, pripadne jeho pridani. ---
84
        
85
        $query = "SELECT * FROM zarizeni WHERE id='".$location->device."';";
86
        $stmt = $this->dbh->executeQuery($query);
87
        
88
        if (!($stmt->fetchAssoc())) {
89
            // Zarizeni se v tabulce jeste nenachazi.
90
            $query = "INSERT INTO zarizeni VALUES ('".$location->device."', '".$location->name."', '0', '$streetId');";
91
            $stmt = $this->dbh->executeQuery($query);
92
        }
93
        
94
    }
95
    
96
    // Pro mesta a ulice.
97
    private function conditionalInsertion($location, $table, $townId) {
98
        $query = "SELECT id FROM $table WHERE nazev=";
99
        if ($townId < 0) {
100
            // Hledame mesto.
101
            $query .= "'".$location->town."';";
102
        } else {
103
            // Hledame ulici (s odkazem na konkretni mesto - ruzna mesta mohou mit shodny nazev nejake ulice).
104
            $query .= "'".$location->street."' AND mesto_id='$townId';";
105
        }
106
        $stmt = $this->dbh->executeQuery($query);
107
        
108
        $id = -1;
109
        if ($row = $stmt->fetchAssoc()) {
110
            // Zaznam uz je v tabulce.
111
            $id = $row["id"];
112
        } else {
113
            // Zaznam se v tabulce jeste nenachazi - nalezeni id pro novy zaznam.
114
            $id = $this->findFirstId($table);
115
            
116
            $query = "INSERT INTO $table VALUES ";
117
            if ($townId < 0) {
118
                $query .= "('$id', '".$location->town."');";
119
            } else {
120
                $query .= "('$id', '".$location->street."', '$townId');";
121
            }
122
            
123
            // Vlozeni zaznamu do tabulky.
124
            $stmt = $this->dbh->executeQuery($query);
125
        }
126
        
127
        return $id;
128
    }
129
    
130
    public function findFirstId($table) {
131
        $query = "SELECT id FROM $table ORDER BY id DESC LIMIT 1;";
132
        $stmt = $this->dbh->executeQuery($query);
133
        
134
        $id = -1;
135
        if ($row = $stmt->fetchAssoc()) {
136
            // V tabulce je vice zaznamu.
137
            $id = $row["id"] + 1;
138
        } else {
139
            // Tabulka je prazdna.
140
            $id = 1;
141
        }
142
        
143
        return $id;
144
    }
145
    
146 574d6347 horkym
}
147
148
?>