Projekt

Obecné

Profil

Stáhnout (8.13 KB) Statistiky
| Větev: | Revize:
1 1123608c Cajova-Houba
<?php
2
/**
3
 * Created by PhpStorm.
4
 * User: Zdenda
5
 * Date: 20.4.2018
6
 * Time: 20:09
7
 */
8
9
namespace App\Http\Controllers;
10
11
use App\Model\Device;
12 b50f8ebd Cajova-Houba
use App\Model\Zarizeni;
13 d58f0fda Cajova-Houba
use App\Model\Zaznam;
14 1123608c Cajova-Houba
use Illuminate\Http\Request;
15 9bc023de Cajova-Houba
use phpDocumentor\Reflection\Types\Array_;
16
use phpDocumentor\Reflection\Types\Mixed_;
17 1123608c Cajova-Houba
18
class DeviceController extends Controller
19
{
20 f71bf8bd Cajova-Houba
    // nazvy moznych url parametru
21
    const ADDRESS_PARAM = 'address';
22
    const SHOW_DIRECTION_PARAM = 'showDirection';
23
    const DATE_FROM_PARAM = 'dateFrom';
24
    const DATE_TO_PARAM = 'dateTo';
25
    const TIME_FROM_PARAM = 'timeFrom';
26 4877913b Cajova-Houba
    const TIME_TO_PARAM = 'timeTo';
27 f71bf8bd Cajova-Houba
    const DIRECTION_PARAM = 'direction';
28
29
30 01f99166 Jan Kohlíček
    public function getDevice(Request $request)
31
    {
32 143e4121 Cajova-Houba
        $address = null;
33 01f99166 Jan Kohlíček
        $showDirection = 0;
34 4877913b Cajova-Houba
        if ($request->has(self::ADDRESS_PARAM)) {
35
            $address = $request->input(self::ADDRESS_PARAM);
36 1123608c Cajova-Houba
        }
37
38 4877913b Cajova-Houba
        if ($request->has(self::SHOW_DIRECTION_PARAM) && $request->input(self::SHOW_DIRECTION_PARAM) == '1') {
39 f71bf8bd Cajova-Houba
            $showDirection = 1;
40 1123608c Cajova-Houba
        }
41
42 f71bf8bd Cajova-Houba
        $device = Zarizeni::findByAddressJoinAddress($address, $showDirection);
43 a139ba77 Cajova-Houba
44
        return $device;
45 1123608c Cajova-Houba
    }
46
47
    /**
48
     * Vrati zarizeni podle id.
49
     * Url parametry:
50
     * dateFrom
51
     * dateTo
52
     * timeFrom
53
     * timeTo
54
     * direction
55
     *
56
     * @param Request $request
57
     * @param $id
58
     * @return \Symfony\Component\HttpFoundation\Response
59
     */
60 9bc023de Cajova-Houba
    public function getDeviceByIdWithTraffic(Request $request, $id)
61 01f99166 Jan Kohlíček
    {
62 9bc023de Cajova-Houba
        $device = $this->getDeviceById($id);
63
        if ($device != null) {
64
            $device->traffics = $this->findTrafficByDevice($request, $id);
65
            return json_encode($device);
66
        } else {
67
            return response('Not found.', 404);
68
        }
69
    }
70
71
    /**
72
     * Vrati zarizeni podle id, nebo null, pokud neni nalezeno.
73
     *
74
     * @param $id
75
     * @return Zarizeni
76
     */
77
    public function getDeviceById($id) {
78
        return Zarizeni::findByIdJoinAddress($id);
79
    }
80 1123608c Cajova-Houba
81 9bc023de Cajova-Houba
    /**
82
     * Vrati zaznamy o doprave pro dane zarizeni. Request obsahuje dodatecne url parametry.
83
     *
84
     * @param Request $request
85
     * @param $deviceId
86
     */
87
    public function findTrafficByDevice(Request $request, $deviceId) {
88 d58f0fda Cajova-Houba
        // nacti parametry
89 4877913b Cajova-Houba
        $params = $this->loadDateTimeDirectionConstraints($request);
90
        $dateFrom = $params[self::DATE_FROM_PARAM];
91
        $dateTo = $params[self::DATE_TO_PARAM];
92
        $timeFrom = $params[self::TIME_FROM_PARAM];
93
        $timeTo = $params[self::TIME_TO_PARAM];
94
        $direction = $params[self::DIRECTION_PARAM];
95 d58f0fda Cajova-Houba
96 9bc023de Cajova-Houba
        return Zaznam::findByDevice($deviceId, $dateFrom, $dateTo, $timeFrom, $timeTo, $direction);
97
    }
98
99
    /**
100
     * Nacte zarizeni spolecne se vsemi jeho zaznamy (podle url parametru) a vrati je jako stahnutelny csv soubor.
101
     * Csv bude obsahovat udaje o zarizeni na prvni radce, udaje o doprave na nasledujicich.
102
     *
103
     * Pokud zarizeni nebylo nalezeno, je vracena 404.
104
     *
105
     * @param Request $request
106
     * @param $id
107
     * @return Mixed_
108
     */
109
    public function getDeviceByIdAsCsv(Request $request, $id) {
110
        $device = $this->getDeviceById($id);
111
112 d58f0fda Cajova-Houba
        if ($device != null) {
113 9bc023de Cajova-Houba
            $devArray = json_decode(json_encode($device), true);
114
            // tmp file
115
            $tmpFileName = 'doprava-export-'.time().'.csv';
116
            $tmpFilePath = tempnam(sys_get_temp_dir(), $tmpFileName);
117
            $df = fopen($tmpFilePath, 'w');
118
119
            // hlavicka pro zarizeni
120
            fputcsv($df, array_keys($devArray));
121
            fputcsv($df, $devArray);
122
123
            // zaznamy o doprave
124
            $traffic = $this->findTrafficByDevice($request, $id);
125
            if ($traffic != null && count($traffic) > 0) {
126
127
                // hlavicka pro zaznamy
128
                $tr = $this->stdClassToArray($traffic[0]);
129
                fputcsv($df, array_keys($tr));
130
131
                // samotna data
132
                foreach ($traffic as $tr) {
133
                    $tr = $this->stdClassToArray($tr);
134
                    fputcsv($df, $tr);
135
                }
136
            }
137
            fclose($df);
138
            return response()->download($tmpFilePath, $tmpFileName, array())->deleteFileAfterSend(true);
139 0b27c108 Jan Kohlíček
        } else {
140 a139ba77 Cajova-Houba
            return response('Not found.', 404);
141 d58f0fda Cajova-Houba
        }
142 b50f8ebd Cajova-Houba
    }
143 1123608c Cajova-Houba
144 9bc023de Cajova-Houba
    /**
145
     * Konvertuje objekt typu stdClass na pole pomoci funkci json_decode(), json_encode().
146
     *
147
     * @param $object
148
     * @return Array_
149
     */
150
    private function stdClassToArray($object) {
151
        return json_decode(json_encode($object), true);
152
    }
153
154 01f99166 Jan Kohlíček
    public function getTrafficAverageByDevice(Request $request, $id)
155
    {
156 4877913b Cajova-Houba
        // nacti parametry
157
        $params = $this->loadDateTimeDirectionConstraints($request);
158
        $dateFrom = $params[self::DATE_FROM_PARAM];
159
        $dateTo = $params[self::DATE_TO_PARAM];
160
        $timeFrom = $params[self::TIME_FROM_PARAM];
161
        $timeTo = $params[self::TIME_TO_PARAM];
162
        $direction = $params[self::DIRECTION_PARAM];
163
164
        $device = Zarizeni::findByIdJoinAddress($id);
165
        if ($device != null) {
166 01f99166 Jan Kohlíček
            $device->dateFrom = $dateFrom;
167
            $device->dateTo = $dateTo;
168
169
            if ($direction != null) {
170
                $device->direction = intval($direction);
171
            }
172
173
            $device->traffics = Zaznam::averageByDevice($id, $dateFrom, $dateTo, $timeFrom, $timeTo, $direction);
174
            return json_encode($device);
175
        } else {
176 4877913b Cajova-Houba
            return response('Not found.', 404);
177
        }
178
    }
179
180 fadc220b Cajova-Houba
    /**
181
     * Vrati denni prumery pro jednotlive typy vozidel.
182
     *
183
     * @param Request $request Request s parametry.
184
     * @param $id Id zarizeni.
185
     * @return Mixed_
186
     */
187
    public function getTrafficDayAverage(Request $request, $id) {
188
        // nacteni parametru
189
        $params = $this->loadDateTimeDirectionConstraints($request);
190
        $dateFrom = $params[self::DATE_FROM_PARAM];
191
        $dateTo = $params[self::DATE_TO_PARAM];
192
        $direction = $params[self::DIRECTION_PARAM];
193
194
        $device = Zarizeni::findByIdJoinAddress($id);
195
        if ($device != null) {
196
            $device->dateFrom = $dateFrom;
197
            $device->dateTo = $dateTo;
198
199
            if ($direction != null) {
200
                $device->direction = intval($direction);
201
            }
202
203
            $device->traffics = Zaznam::averageByDay($id, $dateFrom, $dateTo, $direction);
204
            return json_encode($device);
205
        } else {
206
            return response('Not found.', 404);
207
        }
208
    }
209
210 01f99166 Jan Kohlíček
    public function getAll()
211
    {
212 b50f8ebd Cajova-Houba
        return Zarizeni::getAllJoinAddress();
213 1123608c Cajova-Houba
    }
214 d58f0fda Cajova-Houba
215 01f99166 Jan Kohlíček
    public function lastDay()
216
    {
217 d58f0fda Cajova-Houba
        return Zaznam::lastInsertedDate();
218
    }
219 73804802 Cajova-Houba
220 01f99166 Jan Kohlíček
    public function headerTest(Request $request)
221
    {
222 73804802 Cajova-Houba
        $authHeader = $request->header("jwt");
223
224 01f99166 Jan Kohlíček
        if ($authHeader != null) {
225 73804802 Cajova-Houba
            return $authHeader;
226
        } else {
227
            return $request->header("jwt");
228
        }
229
    }
230 4877913b Cajova-Houba
231
    /**
232
     * Funkce nacte z requestu url parametry dateFrom, dateTo, timeFrom, timeTo, direciton a vrati je jako pole.
233
     * Defaultni hodnoty jsou null.
234
     *
235
     * @param Request $request Request ze ktere budou nacitany parametry.
236 fadc220b Cajova-Houba
     * @return array Pole s nactenymi parametry.
237 4877913b Cajova-Houba
     */
238 01f99166 Jan Kohlíček
    private function loadDateTimeDirectionConstraints(Request $request)
239
    {
240 4877913b Cajova-Houba
        $params = array();
241
        $params[self::DATE_FROM_PARAM] = null;
242
        $params[self::DATE_TO_PARAM] = null;
243
        $params[self::TIME_FROM_PARAM] = null;
244
        $params[self::TIME_TO_PARAM] = null;
245
        $params[self::DIRECTION_PARAM] = null;
246
247
        if ($request->has(self::DATE_FROM_PARAM)) {
248
            $params[self::DATE_FROM_PARAM] = $request->input(self::DATE_FROM_PARAM);
249
        }
250
        if ($request->has(self::DATE_TO_PARAM)) {
251
            $params[self::DATE_TO_PARAM] = $request->input(self::DATE_TO_PARAM);
252
        }
253
        if ($request->has(self::TIME_FROM_PARAM)) {
254
            $params[self::TIME_FROM_PARAM] = $request->input(self::TIME_FROM_PARAM);
255
        }
256
        if ($request->has(self::TIME_TO_PARAM)) {
257
            $params[self::TIME_TO_PARAM] = $request->input(self::TIME_TO_PARAM);
258
        }
259
        if ($request->has(self::DIRECTION_PARAM)) {
260
            $params[self::DIRECTION_PARAM] = $request->input(self::DIRECTION_PARAM);
261
        }
262
263
        return $params;
264
    }
265 1123608c Cajova-Houba
}