1 | <?php |
||
16 | class LeafletService implements MappingService { |
||
17 | |||
18 | private $imageFinder; |
||
19 | |||
20 | private $addedDependencies = []; |
||
21 | |||
22 | 2 | public function __construct( ImageRepository $imageFinder ) { |
|
23 | 2 | $this->imageFinder = $imageFinder; |
|
24 | 2 | } |
|
25 | |||
26 | 30 | public function getName(): string { |
|
27 | 30 | return 'leaflet'; |
|
28 | } |
||
29 | |||
30 | 27 | public function getAliases(): array { |
|
31 | 27 | return [ 'leafletmaps', 'leaflet' ]; // TODO: main name should not be in here? |
|
32 | } |
||
33 | |||
34 | 22 | public function getParameterInfo(): array { |
|
35 | 22 | $params = MapsFunctions::getCommonParameters(); |
|
36 | |||
37 | 22 | $params['zoom'] = [ |
|
38 | 'type' => ParameterTypes::INTEGER, |
||
39 | 'range' => [ 0, 20 ], |
||
40 | 'default' => false, |
||
41 | 'message' => 'maps-par-zoom' |
||
42 | ]; |
||
43 | |||
44 | 22 | $params['defzoom'] = [ |
|
45 | 22 | 'type' => ParameterTypes::INTEGER, |
|
46 | 'range' => [ 0, 20 ], |
||
47 | 22 | 'default' => self::getDefaultZoom(), |
|
48 | 22 | 'message' => 'maps-leaflet-par-defzoom' |
|
49 | ]; |
||
50 | |||
51 | 22 | $params['layers'] = [ |
|
52 | 22 | 'aliases' => 'layer', |
|
53 | 22 | 'type' => 'string', |
|
54 | 'islist' => true, |
||
55 | 22 | 'values' => array_keys( $GLOBALS['egMapsLeafletAvailableLayers'], true, true ), |
|
56 | 22 | 'default' => $GLOBALS['egMapsLeafletLayers'], |
|
57 | 22 | 'message' => 'maps-leaflet-par-layers', |
|
58 | ]; |
||
59 | |||
60 | 22 | $params['image layers'] = [ |
|
61 | 'aliases' => [ 'image layer', 'imagelayers', 'imagelayer' ], |
||
62 | 'type' => 'string', |
||
63 | 'islist' => true, |
||
64 | 'default' => [], |
||
65 | 'message' => 'maps-leaflet-par-image-layers', |
||
66 | ]; |
||
67 | |||
68 | 22 | $params['overlays'] = [ |
|
69 | 22 | 'aliases' => [ 'overlaylayers' ], |
|
70 | 'type' => ParameterTypes::STRING, |
||
71 | 'islist' => true, |
||
72 | 22 | 'values' => array_keys( $GLOBALS['egMapsLeafletAvailableOverlayLayers'], true, true ), |
|
73 | 22 | 'default' => $GLOBALS['egMapsLeafletOverlayLayers'], |
|
74 | 22 | 'message' => 'maps-leaflet-par-overlaylayers', |
|
75 | ]; |
||
76 | |||
77 | 22 | $params['resizable'] = [ |
|
78 | 22 | 'type' => ParameterTypes::BOOLEAN, |
|
79 | 22 | 'default' => $GLOBALS['egMapsResizableByDefault'], |
|
80 | 22 | 'message' => 'maps-par-resizable' |
|
81 | ]; |
||
82 | |||
83 | 22 | $params['fullscreen'] = [ |
|
84 | 'aliases' => [ 'enablefullscreen' ], |
||
85 | 'type' => ParameterTypes::BOOLEAN, |
||
86 | 'default' => false, |
||
87 | 'message' => 'maps-par-enable-fullscreen', |
||
88 | ]; |
||
89 | |||
90 | 22 | $params['scrollwheelzoom'] = [ |
|
91 | 'aliases' => [ 'scrollzoom' ], |
||
92 | 'type' => ParameterTypes::BOOLEAN, |
||
93 | 'default' => true, |
||
94 | 'message' => 'maps-par-scrollwheelzoom', |
||
95 | ]; |
||
96 | |||
97 | 22 | $params['cluster'] = [ |
|
98 | 'aliases' => [ 'markercluster' ], |
||
99 | 'type' => ParameterTypes::BOOLEAN, |
||
100 | 'default' => false, |
||
101 | 'message' => 'maps-par-markercluster', |
||
102 | ]; |
||
103 | |||
104 | 22 | $params['clustermaxzoom'] = [ |
|
105 | 'type' => ParameterTypes::INTEGER, |
||
106 | 'default' => 20, |
||
107 | 'message' => 'maps-par-clustermaxzoom', |
||
108 | ]; |
||
109 | |||
110 | 22 | $params['clusterzoomonclick'] = [ |
|
111 | 'type' => ParameterTypes::BOOLEAN, |
||
112 | 'default' => true, |
||
113 | 'message' => 'maps-par-clusterzoomonclick', |
||
114 | ]; |
||
115 | |||
116 | 22 | $params['clustermaxradius'] = [ |
|
117 | 'type' => ParameterTypes::INTEGER, |
||
118 | 'default' => 80, |
||
119 | 'message' => 'maps-par-maxclusterradius', |
||
120 | ]; |
||
121 | |||
122 | 22 | $params['clusterspiderfy'] = [ |
|
123 | 'type' => ParameterTypes::BOOLEAN, |
||
124 | 'default' => true, |
||
125 | 'message' => 'maps-leaflet-par-clusterspiderfy', |
||
126 | ]; |
||
127 | |||
128 | 22 | $params['geojson'] = [ |
|
129 | 'type' => ParameterTypes::STRING, |
||
130 | 'default' => '', |
||
131 | 'message' => 'maps-displaymap-par-geojson', |
||
132 | ]; |
||
133 | |||
134 | 22 | $params['clicktarget'] = [ |
|
135 | 'type' => ParameterTypes::STRING, |
||
136 | 'default' => '', |
||
137 | 'message' => 'maps-leaflet-par-clicktarget', |
||
138 | ]; |
||
139 | |||
140 | 22 | return $params; |
|
141 | } |
||
142 | |||
143 | /** |
||
144 | * @since 3.0 |
||
145 | */ |
||
146 | 22 | public function getDefaultZoom() { |
|
147 | 22 | return $GLOBALS['egMapsLeafletZoom']; |
|
148 | } |
||
149 | |||
150 | 22 | public function newMapId(): string { |
|
151 | 22 | static $mapsOnThisPage = 0; |
|
152 | |||
153 | 22 | $mapsOnThisPage++; |
|
154 | |||
155 | 22 | return 'map_leaflet_' . $mapsOnThisPage; |
|
156 | } |
||
157 | |||
158 | 22 | public function getResourceModules( array $params ): array { |
|
159 | 22 | $modules = []; |
|
160 | |||
161 | 22 | $modules[] = 'ext.maps.leaflet.loader'; |
|
162 | |||
163 | 22 | if ( $params['resizable'] ) { |
|
164 | $modules[] = 'ext.maps.resizable'; |
||
165 | } |
||
166 | |||
167 | 22 | if ( $params['cluster'] ) { |
|
168 | $modules[] = 'ext.maps.leaflet.markercluster'; |
||
169 | } |
||
170 | |||
171 | 22 | if ( $params['fullscreen'] ) { |
|
172 | $modules[] = 'ext.maps.leaflet.fullscreen'; |
||
173 | } |
||
174 | |||
175 | 22 | if ( array_key_exists( 'geojson', $params ) ) { |
|
176 | 22 | $modules[] = 'ext.maps.leaflet.editor'; |
|
177 | } |
||
178 | |||
179 | 22 | if ( array_key_exists( 'ajaxquery', $params ) && $params['ajaxquery'] !== '' ) { |
|
180 | $modules[] = 'ext.maps.leaflet.leafletajax'; |
||
181 | } |
||
182 | |||
183 | 22 | return $modules; |
|
184 | } |
||
185 | |||
186 | 22 | public function getDependencyHtml( array $params ): string { |
|
187 | 22 | $dependencies = []; |
|
188 | |||
189 | 22 | foreach ( $this->getDependencies( $params ) as $dependency ) { |
|
190 | if ( !in_array( $dependency, $this->addedDependencies ) ) { |
||
191 | $dependencies[] = $dependency; |
||
192 | $this->addedDependencies[] = $dependency; |
||
193 | } |
||
194 | } |
||
195 | |||
196 | 22 | return implode( '', $dependencies ); |
|
197 | } |
||
198 | |||
199 | 22 | private function getDependencies( array $params ): array { |
|
200 | 22 | return $this->getLayerDependencies( $params ); |
|
201 | } |
||
202 | |||
203 | 22 | private function getLayerDependencies( array $params ) { |
|
221 | |||
222 | 19 | public function newMapDataFromProcessingResult( ProcessingResult $processingResult ): MapData { |
|
223 | 19 | return $this->newMapDataFromParameters( $processingResult->getParameterArray() ); |
|
224 | } |
||
225 | |||
226 | 22 | public function newMapDataFromParameters( array $params ): MapData { |
|
227 | 22 | if ( $params['geojson'] !== '' ) { |
|
228 | 3 | $fetcher = MapsFactory::globalInstance()->newGeoJsonFetcher(); |
|
229 | |||
230 | 3 | $result = $fetcher->fetch( $params['geojson'] ); |
|
231 | |||
241 | |||
242 | 22 | private function getJsImageLayers( array $imageLayers ) { |
|
260 | |||
261 | } |
||
262 |