Projekt

Obecné

Profil

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

    
3
namespace App\Controller;
4

    
5
use App\Utils\Utils;
6
use App\Entity\DataSet;
7
use App\Form\DatasetFormBuilder;
8
use App\Repository\IOpenDataManager;
9
use Symfony\Component\HttpFoundation\Request;
10
use Symfony\Component\Routing\Annotation\Route;
11
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
12

    
13
class HeatmapController extends AbstractController {
14
    /**
15
     * Map page controller.
16
     *
17
     * @param IOpenDataManager $manager connection to database autowired
18
     *
19
     * @Route("/heatmap", name="heatmap")
20
     */
21
    public function index(Request $request, IOpenDataManager $manager) {
22
        $dataSet = new DataSet();
23
        $datasetFormBuilder = new DatasetFormBuilder($manager);
24
        $formBuilder = $datasetFormBuilder->getBuilder();
25

    
26
        $form = $formBuilder->getForm();
27
        $form->submit($request->query->all());
28
        $isSubmitted = $form->isSubmitted();
29
        if ($isSubmitted) {
30
            $dataSet = $form->getData();
31
            //check availability
32
            $notExist = false;
33
            if ($dataSet->getType() && count($dataSet->getType()) > 0) {
34
                foreach ($dataSet->getType() as $value) {
35
                    if (!$manager->isCollectionAvailable($value, $dataSet->getDate())) {
36
                        $notExist = true;
37
                        break;
38
                    }
39
                }
40
            } else {
41
                $notExist = true;
42
            }
43
            if ($notExist) {
44
                // Not? Populate form with empty data
45
                $formBuilder = $datasetFormBuilder->getBuilder();
46
                $form = $formBuilder->getForm();
47
            }
48
        }
49
        //ziskej barvy o datasetech a namapuj je na jejich jmena
50

    
51
        return $this->render(
52
            'heatmap.html.twig',
53
            [
54
                'form' => $form->createView(),
55
                'submitted' => $isSubmitted,
56
                'data_to_display' => $dataSet,
57
                'dataset_colors' => Utils::prepareDatasetsColors($manager->getAvailableCollections()),
58
            ]
59
        );
60
    }
61

    
62
    /**
63
     * Provides specific dataset information i.e. position, number and other informations depending on data type.
64
     *
65
     * @param IOpenDataManager $manager connection to database autowired
66
     * @param string           $name    dataset name
67
     * @param string           $date    dataset date in format YYYY-mm-dd
68
     * @param string           $time    dataset time, number between 0 - 23
69
     *
70
     * @return json with dataset information
71
     *
72
     * @Route("heatmap/opendata/{name}/{date}/{time}", name="opendata")
73
     */
74
    public function opendata(IOpenDataManager $manager, $name = 'NONE', $date = '2020-01-01', $time = '1') {
75
        return $this->json([
76
            'items' => $manager->getCollectionDataByName($name, $date, $time),
77
            'max' => $manager->getMaxCollectionNumberAtDay($name, $date),
78
        ]);
79
    }
80

    
81
    /**
82
     * Provides available datasets in given date.
83
     *
84
     * @param IOpenDataManager $manager connection to database autowired
85
     * @param string           $date    dataset date in format YYYY-mm-dd
86
     *
87
     * @return json with available datasets names
88
     *
89
     * @Route("heatmap/available/{date}", name="available")
90
     */
91
    public function availableDatasets(IOpenDataManager $manager, $date = '2020-01-01') {
92
        return $this->json($manager->getAvailableCollectionsByDay($date));
93
    }
94

    
95
    /**
96
     * Provides dates with at least one available dataset.
97
     *
98
     * @param IOpenDataManager $manager connection to database
99
     *
100
     * @return json with dates with at least one available dataset in format YYYY-mm-dd
101
     *
102
     * @Route("heatmap/dates", name="dates")
103
     */
104
    public function datesWithAvailableDatasets(IOpenDataManager $manager) {
105
        return $this->json($manager->getDatesWithAvailableCollection());
106
    }
107

    
108
    /**
109
     * Provides for dataset with given name all locations.
110
     *
111
     * @param IOpenDataManager $manager connection to database autowired
112
     * @param string           $name    dataset name
113
     *
114
     * @return json with all locations for dataset with given name as [x => lat, y => lng]
115
     *
116
     * @Route("heatmap/positions/{name}", name="positions")
117
     */
118
    public function dataSourcePoistions(IOpenDataManager $manager, $name = 'NONE') {
119
        return $this->json($manager->getDataSourcePositions($name));
120
    }
121

    
122
    /**
123
     * Provides last available date for each available dataset type.
124
     *
125
     * @param IOpenDataManager $manager connection to database autowired
126
     *
127
     * @return json with last available date for each available dataset type as [collection-type-name => YYYY-mm-dd]
128
     *
129
     * @Route("heatmap/last", name="last")
130
     */
131
    public function lastAvailableCollections(IOpenDataManager $manager) {
132
        return $this->json($manager->getLastAvailableCollections());
133
    }
134
}
(2-2/3)