Projekt

Obecné

Profil

« Předchozí | Další » 

Revize 9bc023de

Přidáno uživatelem Cajova-Houba před téměř 7 roky(ů)

refs #6975: Cors middleware zmenen z globalniho na lokalni (kvuli stahovani), pridan endpoint pro stazeni dat ve formatu csv.

Zobrazit rozdíly:

backend/app/Http/Controllers/DeviceController.php
12 12
use App\Model\Zarizeni;
13 13
use App\Model\Zaznam;
14 14
use Illuminate\Http\Request;
15
use phpDocumentor\Reflection\Types\Array_;
16
use phpDocumentor\Reflection\Types\Mixed_;
15 17

  
16 18
class DeviceController extends Controller
17 19
{
......
55 57
     * @param $id
56 58
     * @return \Symfony\Component\HttpFoundation\Response
57 59
     */
58
    public function getDeviceById(Request $request, $id)
60
    public function getDeviceByIdWithTraffic(Request $request, $id)
59 61
    {
62
        $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
    }
60 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

  
81
    /**
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) {
61 88
        // nacti parametry
62 89
        $params = $this->loadDateTimeDirectionConstraints($request);
63 90
        $dateFrom = $params[self::DATE_FROM_PARAM];
......
66 93
        $timeTo = $params[self::TIME_TO_PARAM];
67 94
        $direction = $params[self::DIRECTION_PARAM];
68 95

  
69
        $device = Zarizeni::findByIdJoinAddress($id);
96
        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

  
70 112
        if ($device != null) {
71
            $device->traffics = Zaznam::findByDevice($id, $dateFrom, $dateTo, $timeFrom, $timeTo, $direction);
72
            return json_encode($device);
113
            $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);
73 139
        } else {
74 140
            return response('Not found.', 404);
75 141
        }
76 142
    }
77 143

  
144
    /**
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

  
78 154
    public function getTrafficAverageByDevice(Request $request, $id)
79 155
    {
80 156
        // nacti parametry

Také k dispozici: Unified diff