@@ -184,7 +184,7 @@ |
||
184 | 184 | |
185 | 185 | /** |
186 | 186 | * Access the map editing field for the purpose of adding guide points |
187 | - * @return [LatLongField] instance of location editing field |
|
187 | + * @return FormField instance of location editing field |
|
188 | 188 | */ |
189 | 189 | public function getMapField() { |
190 | 190 | if (!isset($this->mapField)) { |
@@ -18,7 +18,7 @@ discard block |
||
18 | 18 | 'MapPinIcon' => 'Image' |
19 | 19 | ); |
20 | 20 | |
21 | - static $defaults = array ( |
|
21 | + static $defaults = array( |
|
22 | 22 | 'Lat' =>0, |
23 | 23 | 'Lon' => 0, |
24 | 24 | 'Zoom' => 4, |
@@ -154,7 +154,7 @@ discard block |
||
154 | 154 | |
155 | 155 | // add any KML map layers |
156 | 156 | if (Object::has_extension($this->owner->ClassName, 'MapLayerExtension')) { |
157 | - foreach($this->owner->MapLayers() as $layer) { |
|
157 | + foreach ($this->owner->MapLayers() as $layer) { |
|
158 | 158 | $map->addKML($layer->KmlFile()->getAbsoluteURL()); |
159 | 159 | // we have a layer, so turn on autozoom |
160 | 160 | $autozoom = true; |
@@ -2,173 +2,173 @@ discard block |
||
2 | 2 | |
3 | 3 | class MapExtension extends DataExtension implements Mappable { |
4 | 4 | |
5 | - /* |
|
5 | + /* |
|
6 | 6 | * Template suffix for rendering MapInfoWindow aka map bubble |
7 | 7 | */ |
8 | - private static $map_info_window_suffix = '_MapInfoWindow'; |
|
9 | - |
|
10 | - private static $db = array( |
|
11 | - 'Lat' => 'Decimal(18,15)', |
|
12 | - 'Lon' => 'Decimal(18,15)', |
|
13 | - 'ZoomLevel' => 'Int', |
|
14 | - 'MapPinEdited' => 'Boolean' |
|
15 | - ); |
|
16 | - |
|
17 | - static $has_one = array( |
|
18 | - 'MapPinIcon' => 'Image' |
|
19 | - ); |
|
20 | - |
|
21 | - static $defaults = array ( |
|
22 | - 'Lat' =>0, |
|
23 | - 'Lon' => 0, |
|
24 | - 'Zoom' => 4, |
|
25 | - 'MapPinEdited' => false |
|
26 | - ); |
|
27 | - |
|
28 | - /* |
|
8 | + private static $map_info_window_suffix = '_MapInfoWindow'; |
|
9 | + |
|
10 | + private static $db = array( |
|
11 | + 'Lat' => 'Decimal(18,15)', |
|
12 | + 'Lon' => 'Decimal(18,15)', |
|
13 | + 'ZoomLevel' => 'Int', |
|
14 | + 'MapPinEdited' => 'Boolean' |
|
15 | + ); |
|
16 | + |
|
17 | + static $has_one = array( |
|
18 | + 'MapPinIcon' => 'Image' |
|
19 | + ); |
|
20 | + |
|
21 | + static $defaults = array ( |
|
22 | + 'Lat' =>0, |
|
23 | + 'Lon' => 0, |
|
24 | + 'Zoom' => 4, |
|
25 | + 'MapPinEdited' => false |
|
26 | + ); |
|
27 | + |
|
28 | + /* |
|
29 | 29 | Map editing field |
30 | 30 | */ |
31 | - private $mapField = null; |
|
31 | + private $mapField = null; |
|
32 | 32 | |
33 | 33 | |
34 | - /* |
|
34 | + /* |
|
35 | 35 | Add a Location tab containing the map |
36 | 36 | */ |
37 | - public function updateCMSFields(FieldList $fields) { |
|
38 | - // These fields need removed, as they may have already been created by the form scaffolding |
|
39 | - $fields->removeByName('Lat'); |
|
40 | - $fields->removeByName('Lon'); |
|
41 | - $fields->removeByName('ZoomLevel'); |
|
42 | - $fields->removeByName('MapPinIcon'); |
|
43 | - $fields->removeByName('MapPinEdited'); |
|
44 | - |
|
45 | - $fields->addFieldToTab("Root.Location", |
|
46 | - $this->getMapField() |
|
47 | - ); |
|
48 | - |
|
49 | - $fields->addFieldToTab('Root.Location', $uf = new UploadField('MapPinIcon', |
|
50 | - _t('Mappable.MAP_PIN', 'Map Pin Icon. Leave this blank for default pin to show'))); |
|
51 | - $uf->setFolderName('mapicons'); |
|
52 | - } |
|
53 | - |
|
54 | - |
|
55 | - public function getMappableLatitude() { |
|
56 | - return $this->owner->Lat; |
|
57 | - } |
|
58 | - |
|
59 | - public function getMappableLongitude() { |
|
60 | - return $this->owner->Lon; |
|
61 | - } |
|
62 | - |
|
63 | - |
|
64 | - /** |
|
65 | - * Renders the map info window for the DataObject. |
|
66 | - * |
|
67 | - * Be sure to define a template for that, named by the decorated class suffixed with _MapInfoWindow |
|
68 | - * e.g. MyPage_MapInfoWindow |
|
69 | - * |
|
70 | - * You can change the suffix globally by editing the MapExtension.map_info_window_suffix config val |
|
71 | - * |
|
72 | - * @return string |
|
73 | - */ |
|
74 | - public function getMappableMapContent() { |
|
75 | - $defaultTemplate = 'MapInfoWindow'; |
|
76 | - $classTemplate = |
|
77 | - SSViewer::get_templates_by_class( |
|
78 | - $this->owner->ClassName, |
|
79 | - Config::inst()->get('MapExtension', 'map_info_window_suffix') |
|
80 | - ); |
|
81 | - |
|
82 | - $template = count($classTemplate) ? $classTemplate : $defaultTemplate; |
|
83 | - return MapUtil::sanitize($this->owner->renderWith($template)); |
|
84 | - } |
|
85 | - |
|
86 | - |
|
87 | - /* |
|
37 | + public function updateCMSFields(FieldList $fields) { |
|
38 | + // These fields need removed, as they may have already been created by the form scaffolding |
|
39 | + $fields->removeByName('Lat'); |
|
40 | + $fields->removeByName('Lon'); |
|
41 | + $fields->removeByName('ZoomLevel'); |
|
42 | + $fields->removeByName('MapPinIcon'); |
|
43 | + $fields->removeByName('MapPinEdited'); |
|
44 | + |
|
45 | + $fields->addFieldToTab("Root.Location", |
|
46 | + $this->getMapField() |
|
47 | + ); |
|
48 | + |
|
49 | + $fields->addFieldToTab('Root.Location', $uf = new UploadField('MapPinIcon', |
|
50 | + _t('Mappable.MAP_PIN', 'Map Pin Icon. Leave this blank for default pin to show'))); |
|
51 | + $uf->setFolderName('mapicons'); |
|
52 | + } |
|
53 | + |
|
54 | + |
|
55 | + public function getMappableLatitude() { |
|
56 | + return $this->owner->Lat; |
|
57 | + } |
|
58 | + |
|
59 | + public function getMappableLongitude() { |
|
60 | + return $this->owner->Lon; |
|
61 | + } |
|
62 | + |
|
63 | + |
|
64 | + /** |
|
65 | + * Renders the map info window for the DataObject. |
|
66 | + * |
|
67 | + * Be sure to define a template for that, named by the decorated class suffixed with _MapInfoWindow |
|
68 | + * e.g. MyPage_MapInfoWindow |
|
69 | + * |
|
70 | + * You can change the suffix globally by editing the MapExtension.map_info_window_suffix config val |
|
71 | + * |
|
72 | + * @return string |
|
73 | + */ |
|
74 | + public function getMappableMapContent() { |
|
75 | + $defaultTemplate = 'MapInfoWindow'; |
|
76 | + $classTemplate = |
|
77 | + SSViewer::get_templates_by_class( |
|
78 | + $this->owner->ClassName, |
|
79 | + Config::inst()->get('MapExtension', 'map_info_window_suffix') |
|
80 | + ); |
|
81 | + |
|
82 | + $template = count($classTemplate) ? $classTemplate : $defaultTemplate; |
|
83 | + return MapUtil::sanitize($this->owner->renderWith($template)); |
|
84 | + } |
|
85 | + |
|
86 | + |
|
87 | + /* |
|
88 | 88 | If the marker pin is not at position 0,0 mark the pin as edited. This provides the option of |
89 | 89 | filtering out (0,0) point which is often irrelevant for plots |
90 | 90 | */ |
91 | - public function onBeforeWrite() { |
|
92 | - $latzero = ($this->owner->Lat == 0); |
|
93 | - $lonzero = ($this->owner->Lon == 0); |
|
94 | - $latlonzero = $latzero && $lonzero; |
|
95 | - |
|
96 | - // if both latitude and longitude still default, do not set the map location as edited |
|
97 | - if (!$latlonzero) { |
|
98 | - $this->owner->MapPinEdited = true; |
|
99 | - } |
|
100 | - } |
|
91 | + public function onBeforeWrite() { |
|
92 | + $latzero = ($this->owner->Lat == 0); |
|
93 | + $lonzero = ($this->owner->Lon == 0); |
|
94 | + $latlonzero = $latzero && $lonzero; |
|
95 | + |
|
96 | + // if both latitude and longitude still default, do not set the map location as edited |
|
97 | + if (!$latlonzero) { |
|
98 | + $this->owner->MapPinEdited = true; |
|
99 | + } |
|
100 | + } |
|
101 | 101 | |
102 | 102 | |
103 | - /* |
|
103 | + /* |
|
104 | 104 | If a user has uploaded a map pin icon display that, otherwise |
105 | 105 | */ |
106 | - public function getMappableMapPin() { |
|
107 | - $result = false; |
|
108 | - if ($this->owner->MapPinIconID != 0) { |
|
109 | - $mapPin = $this->owner->MapPinIcon(); |
|
110 | - $result = $mapPin->getAbsoluteURL(); |
|
111 | - } else { |
|
112 | - // check for a cached map pin already having been provided for the layer |
|
113 | - if ($this->owner->CachedMapPinURL) { |
|
114 | - $result = $this->owner->CachedMapPinURL; |
|
115 | - } |
|
116 | - } |
|
117 | - return $result; |
|
118 | - } |
|
119 | - |
|
120 | - |
|
121 | - /* |
|
106 | + public function getMappableMapPin() { |
|
107 | + $result = false; |
|
108 | + if ($this->owner->MapPinIconID != 0) { |
|
109 | + $mapPin = $this->owner->MapPinIcon(); |
|
110 | + $result = $mapPin->getAbsoluteURL(); |
|
111 | + } else { |
|
112 | + // check for a cached map pin already having been provided for the layer |
|
113 | + if ($this->owner->CachedMapPinURL) { |
|
114 | + $result = $this->owner->CachedMapPinURL; |
|
115 | + } |
|
116 | + } |
|
117 | + return $result; |
|
118 | + } |
|
119 | + |
|
120 | + |
|
121 | + /* |
|
122 | 122 | Check for non zero coordinates, on the assumption that (0,0) will never be the desired coordinates |
123 | 123 | */ |
124 | - public function HasGeo() { |
|
125 | - $isOrigin = ($this->owner->Lat == 0) && ($this->owner->Lon == 0); |
|
126 | - $result = !$isOrigin; |
|
127 | - if ($this->owner->hasExtension('MapLayerExtension')) { |
|
128 | - if ($this->owner->MapLayers()->count() > 0) { |
|
129 | - $result = true; |
|
130 | - } |
|
131 | - } |
|
132 | - |
|
133 | - |
|
134 | - $this->owner->extend('updateHasGeo', $result); |
|
135 | - /** |
|
136 | - * FIXME - move this to PointsOfInterest module |
|
124 | + public function HasGeo() { |
|
125 | + $isOrigin = ($this->owner->Lat == 0) && ($this->owner->Lon == 0); |
|
126 | + $result = !$isOrigin; |
|
127 | + if ($this->owner->hasExtension('MapLayerExtension')) { |
|
128 | + if ($this->owner->MapLayers()->count() > 0) { |
|
129 | + $result = true; |
|
130 | + } |
|
131 | + } |
|
132 | + |
|
133 | + |
|
134 | + $this->owner->extend('updateHasGeo', $result); |
|
135 | + /** |
|
136 | + * FIXME - move this to PointsOfInterest module |
|
137 | 137 | if ($this->owner->hasExtension('PointsOfInterestLayerExtension')) { |
138 | 138 | if ($this->owner->PointsOfInterestLayers()->count() > 0) { |
139 | 139 | $result = true; |
140 | 140 | } |
141 | 141 | } |
142 | - */ |
|
142 | + */ |
|
143 | 143 | |
144 | - return $result; |
|
145 | - } |
|
144 | + return $result; |
|
145 | + } |
|
146 | 146 | |
147 | 147 | |
148 | - /* |
|
148 | + /* |
|
149 | 149 | Render a map at the provided lat,lon, zoom from the editing functions, |
150 | 150 | */ |
151 | - public function BasicMap() { |
|
152 | - $map = $this->owner->getRenderableMap()-> |
|
153 | - setZoom($this->owner->ZoomLevel)-> |
|
154 | - setAdditionalCSSClasses('fullWidthMap')-> |
|
155 | - setShowInlineMapDivStyle(true); |
|
156 | - |
|
157 | - $autozoom = false; |
|
158 | - |
|
159 | - // add any KML map layers |
|
160 | - if (Object::has_extension($this->owner->ClassName, 'MapLayerExtension')) { |
|
161 | - foreach($this->owner->MapLayers() as $layer) { |
|
162 | - $map->addKML($layer->KmlFile()->getAbsoluteURL()); |
|
163 | - // we have a layer, so turn on autozoom |
|
164 | - $autozoom = true; |
|
165 | - } |
|
166 | - $map->setEnableAutomaticCenterZoom(true); |
|
167 | - } |
|
168 | - |
|
169 | - $this->owner->extend('updateBasicMap', $map); |
|
170 | - |
|
171 | - /** |
|
151 | + public function BasicMap() { |
|
152 | + $map = $this->owner->getRenderableMap()-> |
|
153 | + setZoom($this->owner->ZoomLevel)-> |
|
154 | + setAdditionalCSSClasses('fullWidthMap')-> |
|
155 | + setShowInlineMapDivStyle(true); |
|
156 | + |
|
157 | + $autozoom = false; |
|
158 | + |
|
159 | + // add any KML map layers |
|
160 | + if (Object::has_extension($this->owner->ClassName, 'MapLayerExtension')) { |
|
161 | + foreach($this->owner->MapLayers() as $layer) { |
|
162 | + $map->addKML($layer->KmlFile()->getAbsoluteURL()); |
|
163 | + // we have a layer, so turn on autozoom |
|
164 | + $autozoom = true; |
|
165 | + } |
|
166 | + $map->setEnableAutomaticCenterZoom(true); |
|
167 | + } |
|
168 | + |
|
169 | + $this->owner->extend('updateBasicMap', $map); |
|
170 | + |
|
171 | + /** |
|
172 | 172 | FIXME - move to POI module |
173 | 173 | if (Object::has_extension($this->owner->ClassName, 'PointsOfInterestLayerExtension')) { |
174 | 174 | foreach($this->owner->PointsOfInterestLayers() as $layer) { |
@@ -190,37 +190,36 @@ discard block |
||
190 | 190 | } |
191 | 191 | $map->setClusterer(true); |
192 | 192 | } |
193 | - |
|
194 | - **/ |
|
195 | - |
|
196 | - $map->setEnableAutomaticCenterZoom($autozoom); |
|
197 | - $map->setShowInlineMapDivStyle(true); |
|
198 | - |
|
199 | - return $map; |
|
200 | - } |
|
201 | - |
|
202 | - |
|
203 | - /** |
|
204 | - * Access the map editing field for the purpose of adding guide points |
|
205 | - * @return [LatLongField] instance of location editing field |
|
206 | - */ |
|
207 | - public function getMapField() { |
|
208 | - if (!isset($this->mapField)) { |
|
209 | - $this->mapField = new LatLongField(array( |
|
210 | - new TextField('Lat', 'Latitude'), |
|
211 | - new TextField('Lon', 'Longitude'), |
|
212 | - new TextField('ZoomLevel', 'Zoom') |
|
213 | - ) |
|
214 | - ); |
|
215 | - } |
|
216 | - return $this->mapField; |
|
217 | - } |
|
218 | - |
|
219 | - |
|
220 | - /** |
|
221 | - * Template helper, used to decide whether or not to use compressed assets |
|
222 | - */ |
|
223 | - public function UseCompressedAssets() { |
|
224 | - return Config::inst()->get('Mappable', 'use_compressed_assets'); |
|
225 | - } |
|
193 | + **/ |
|
194 | + |
|
195 | + $map->setEnableAutomaticCenterZoom($autozoom); |
|
196 | + $map->setShowInlineMapDivStyle(true); |
|
197 | + |
|
198 | + return $map; |
|
199 | + } |
|
200 | + |
|
201 | + |
|
202 | + /** |
|
203 | + * Access the map editing field for the purpose of adding guide points |
|
204 | + * @return [LatLongField] instance of location editing field |
|
205 | + */ |
|
206 | + public function getMapField() { |
|
207 | + if (!isset($this->mapField)) { |
|
208 | + $this->mapField = new LatLongField(array( |
|
209 | + new TextField('Lat', 'Latitude'), |
|
210 | + new TextField('Lon', 'Longitude'), |
|
211 | + new TextField('ZoomLevel', 'Zoom') |
|
212 | + ) |
|
213 | + ); |
|
214 | + } |
|
215 | + return $this->mapField; |
|
216 | + } |
|
217 | + |
|
218 | + |
|
219 | + /** |
|
220 | + * Template helper, used to decide whether or not to use compressed assets |
|
221 | + */ |
|
222 | + public function UseCompressedAssets() { |
|
223 | + return Config::inst()->get('Mappable', 'use_compressed_assets'); |
|
224 | + } |
|
226 | 225 | } |
@@ -8,15 +8,15 @@ |
||
8 | 8 | |
9 | 9 | public static function parse_googlestreetview($arguments, $caption = null, $parser = null) { |
10 | 10 | // each of latitude, longitude and heading are required at a bare minimum |
11 | - if(!isset($arguments['latitude'])){ |
|
11 | + if (!isset($arguments['latitude'])) { |
|
12 | 12 | return ''; |
13 | 13 | } |
14 | 14 | |
15 | - if(!isset($arguments['longitude'])){ |
|
15 | + if (!isset($arguments['longitude'])) { |
|
16 | 16 | return ''; |
17 | 17 | } |
18 | 18 | |
19 | - if(!isset($arguments['heading'])){ |
|
19 | + if (!isset($arguments['heading'])) { |
|
20 | 20 | return ''; |
21 | 21 | } |
22 | 22 |
@@ -2,78 +2,78 @@ |
||
2 | 2 | |
3 | 3 | class GoogleStreetViewShortCodeHandler { |
4 | 4 | |
5 | - /* Counter used to ensure unique div ids to allow for multiple StreetViews on on page */ |
|
6 | - private static $gsv_ctr = 1; |
|
5 | + /* Counter used to ensure unique div ids to allow for multiple StreetViews on on page */ |
|
6 | + private static $gsv_ctr = 1; |
|
7 | 7 | |
8 | 8 | |
9 | - public static function parse_googlestreetview($arguments, $caption = null, $parser = null) { |
|
10 | - // each of latitude, longitude and heading are required at a bare minimum |
|
11 | - if(!isset($arguments['latitude'])){ |
|
12 | - return ''; |
|
13 | - } |
|
9 | + public static function parse_googlestreetview($arguments, $caption = null, $parser = null) { |
|
10 | + // each of latitude, longitude and heading are required at a bare minimum |
|
11 | + if(!isset($arguments['latitude'])){ |
|
12 | + return ''; |
|
13 | + } |
|
14 | 14 | |
15 | - if(!isset($arguments['longitude'])){ |
|
16 | - return ''; |
|
17 | - } |
|
15 | + if(!isset($arguments['longitude'])){ |
|
16 | + return ''; |
|
17 | + } |
|
18 | 18 | |
19 | - if(!isset($arguments['heading'])){ |
|
20 | - return ''; |
|
21 | - } |
|
19 | + if(!isset($arguments['heading'])){ |
|
20 | + return ''; |
|
21 | + } |
|
22 | 22 | |
23 | - // defaults - these can be overriden by using zoom and pitch in the shortcode |
|
24 | - $defaults = array( |
|
25 | - 'Zoom' => 1, |
|
26 | - 'Pitch' => 0 |
|
27 | - ); |
|
23 | + // defaults - these can be overriden by using zoom and pitch in the shortcode |
|
24 | + $defaults = array( |
|
25 | + 'Zoom' => 1, |
|
26 | + 'Pitch' => 0 |
|
27 | + ); |
|
28 | 28 | |
29 | - // ensure JavaScript for the map service is only downloaded once |
|
30 | - $arguments['DownloadJS'] = !MapUtil::get_map_already_rendered(); |
|
31 | - MapUtil::set_map_already_rendered(true); |
|
29 | + // ensure JavaScript for the map service is only downloaded once |
|
30 | + $arguments['DownloadJS'] = !MapUtil::get_map_already_rendered(); |
|
31 | + MapUtil::set_map_already_rendered(true); |
|
32 | 32 | |
33 | - // convert parameters to CamelCase as per standard template conventions |
|
34 | - $arguments['Latitude'] = $arguments['latitude']; |
|
35 | - $arguments['Longitude'] = $arguments['longitude']; |
|
36 | - $arguments['Heading'] = $arguments['heading']; |
|
33 | + // convert parameters to CamelCase as per standard template conventions |
|
34 | + $arguments['Latitude'] = $arguments['latitude']; |
|
35 | + $arguments['Longitude'] = $arguments['longitude']; |
|
36 | + $arguments['Heading'] = $arguments['heading']; |
|
37 | 37 | |
38 | - // optional parameter caption |
|
39 | - if (isset($arguments['caption'])) { |
|
40 | - $arguments['Caption'] = $arguments['caption']; |
|
41 | - } |
|
38 | + // optional parameter caption |
|
39 | + if (isset($arguments['caption'])) { |
|
40 | + $arguments['Caption'] = $arguments['caption']; |
|
41 | + } |
|
42 | 42 | |
43 | - // optional parameter pitch |
|
44 | - if (isset($arguments['pitch'])) { |
|
45 | - $arguments['Pitch'] = $arguments['pitch']; |
|
46 | - } |
|
43 | + // optional parameter pitch |
|
44 | + if (isset($arguments['pitch'])) { |
|
45 | + $arguments['Pitch'] = $arguments['pitch']; |
|
46 | + } |
|
47 | 47 | |
48 | - // optional parameter zoom |
|
49 | - if (isset($arguments['zoom'])) { |
|
50 | - $arguments['Zoom'] = $arguments['zoom']; |
|
51 | - } |
|
48 | + // optional parameter zoom |
|
49 | + if (isset($arguments['zoom'])) { |
|
50 | + $arguments['Zoom'] = $arguments['zoom']; |
|
51 | + } |
|
52 | 52 | |
53 | - // the id of the dom element to be used to render the street view |
|
54 | - $arguments['DomID'] = 'google_streetview_'.self::$gsv_ctr; |
|
53 | + // the id of the dom element to be used to render the street view |
|
54 | + $arguments['DomID'] = 'google_streetview_'.self::$gsv_ctr; |
|
55 | 55 | |
56 | - // incrememt the counter to ensure a unique id for each map canvas |
|
57 | - self::$gsv_ctr++; |
|
56 | + // incrememt the counter to ensure a unique id for each map canvas |
|
57 | + self::$gsv_ctr++; |
|
58 | 58 | |
59 | - // merge defaults and arguments |
|
60 | - $customised = array_merge($defaults, $arguments); |
|
59 | + // merge defaults and arguments |
|
60 | + $customised = array_merge($defaults, $arguments); |
|
61 | 61 | |
62 | - // Include google maps JS at the end of the page |
|
63 | - //Requirements::javascriptTemplate("mappable/javascript/google/streetview.google.template.js", $customised); |
|
62 | + // Include google maps JS at the end of the page |
|
63 | + //Requirements::javascriptTemplate("mappable/javascript/google/streetview.google.template.js", $customised); |
|
64 | 64 | |
65 | 65 | |
66 | - //get streetview template template |
|
67 | - $template = new SSViewer('GoogleStreetView'); |
|
66 | + //get streetview template template |
|
67 | + $template = new SSViewer('GoogleStreetView'); |
|
68 | 68 | |
69 | - //return the template customised with the parmameters |
|
70 | - return $template->process(new ArrayData($customised)); |
|
71 | - } |
|
69 | + //return the template customised with the parmameters |
|
70 | + return $template->process(new ArrayData($customised)); |
|
71 | + } |
|
72 | 72 | |
73 | - /** |
|
74 | - * This is only used for testing, otherwise the sequence of tests change the number returned |
|
75 | - */ |
|
76 | - public static function resetCounter() { |
|
77 | - self::$gsv_ctr = 1; |
|
78 | - } |
|
73 | + /** |
|
74 | + * This is only used for testing, otherwise the sequence of tests change the number returned |
|
75 | + */ |
|
76 | + public static function resetCounter() { |
|
77 | + self::$gsv_ctr = 1; |
|
78 | + } |
|
79 | 79 | } |
@@ -7,11 +7,11 @@ |
||
7 | 7 | |
8 | 8 | public static function parse_googlemap($arguments, $caption = null, $parser = null) { |
9 | 9 | // each of latitude and longitude are required at a bare minimum |
10 | - if(!isset($arguments['latitude'])){ |
|
10 | + if (!isset($arguments['latitude'])) { |
|
11 | 11 | return ''; |
12 | 12 | } |
13 | 13 | |
14 | - if(!isset($arguments['longitude'])){ |
|
14 | + if (!isset($arguments['longitude'])) { |
|
15 | 15 | return ''; |
16 | 16 | } |
17 | 17 |
@@ -2,73 +2,73 @@ |
||
2 | 2 | |
3 | 3 | class GoogleMapShortCodeHandler { |
4 | 4 | |
5 | - /* Counter used to ensure unique div ids to allow for multiple maps on on page */ |
|
6 | - private static $gsv_ctr = 1; |
|
7 | - |
|
8 | - public static function parse_googlemap($arguments, $caption = null, $parser = null) { |
|
9 | - // each of latitude and longitude are required at a bare minimum |
|
10 | - if(!isset($arguments['latitude'])){ |
|
11 | - return ''; |
|
12 | - } |
|
13 | - |
|
14 | - if(!isset($arguments['longitude'])){ |
|
15 | - return ''; |
|
16 | - } |
|
17 | - |
|
18 | - // defaults - can be overriden by using zoom and FIXME in the shortcode |
|
19 | - $defaults = array( |
|
20 | - 'Zoom' => 5, |
|
21 | - 'MapType' => 'road' |
|
22 | - ); |
|
23 | - |
|
24 | - // ensure JavaScript for the map service is only downloaded once |
|
25 | - $arguments['DownloadJS'] = !MapUtil::get_map_already_rendered(); |
|
26 | - MapUtil::set_map_already_rendered(true); |
|
27 | - |
|
28 | - // convert parameters to CamelCase as per standard template conventions |
|
29 | - $arguments['Latitude'] = $arguments['latitude']; |
|
30 | - $arguments['Longitude'] = $arguments['longitude']; |
|
31 | - |
|
32 | - // optional parameter caption |
|
33 | - if (isset($arguments['caption'])) { |
|
34 | - $arguments['Caption'] = $arguments['caption']; |
|
35 | - } |
|
36 | - |
|
37 | - if (isset($arguments['maptype'])) { |
|
38 | - $arguments['MapType'] = $arguments['maptype']; |
|
39 | - } |
|
40 | - |
|
41 | - // optional parameter zoom |
|
42 | - if (isset($arguments['zoom'])) { |
|
43 | - $arguments['Zoom'] = $arguments['zoom']; |
|
44 | - } |
|
45 | - |
|
46 | - // the id of the dom element to be used to render the street view |
|
47 | - $arguments['DomID'] = 'google_sc_map_'.self::$gsv_ctr; |
|
48 | - |
|
49 | - // fullscreen |
|
50 | - $arguments['AllowFullScreen'] = Config::inst()->get('Mappable', 'allow_full_screen'); |
|
51 | - |
|
52 | - // incrememt the counter to ensure a unique id for each map canvas |
|
53 | - self::$gsv_ctr++; |
|
54 | - |
|
55 | - // merge defaults and arguments |
|
56 | - $customised = array_merge($defaults, $arguments); |
|
57 | - |
|
58 | - // include JavaScript to be appended at the end of the page, namely params for map rendering |
|
59 | - //Requirements::javascriptTemplate("mappable/javascript/google/map.google.template.js", $customised); |
|
60 | - |
|
61 | - //get map view template and render the HTML |
|
62 | - $template = new SSViewer('GoogleMapShortCode'); |
|
63 | - |
|
64 | - //return the template customised with the parmameters |
|
65 | - return $template->process(new ArrayData($customised)); |
|
66 | - } |
|
67 | - |
|
68 | - /** |
|
69 | - * This is only used for testing, otherwise the sequence of tests change the number returned |
|
70 | - */ |
|
71 | - public static function resetCounter() { |
|
72 | - self::$gsv_ctr = 1; |
|
73 | - } |
|
5 | + /* Counter used to ensure unique div ids to allow for multiple maps on on page */ |
|
6 | + private static $gsv_ctr = 1; |
|
7 | + |
|
8 | + public static function parse_googlemap($arguments, $caption = null, $parser = null) { |
|
9 | + // each of latitude and longitude are required at a bare minimum |
|
10 | + if(!isset($arguments['latitude'])){ |
|
11 | + return ''; |
|
12 | + } |
|
13 | + |
|
14 | + if(!isset($arguments['longitude'])){ |
|
15 | + return ''; |
|
16 | + } |
|
17 | + |
|
18 | + // defaults - can be overriden by using zoom and FIXME in the shortcode |
|
19 | + $defaults = array( |
|
20 | + 'Zoom' => 5, |
|
21 | + 'MapType' => 'road' |
|
22 | + ); |
|
23 | + |
|
24 | + // ensure JavaScript for the map service is only downloaded once |
|
25 | + $arguments['DownloadJS'] = !MapUtil::get_map_already_rendered(); |
|
26 | + MapUtil::set_map_already_rendered(true); |
|
27 | + |
|
28 | + // convert parameters to CamelCase as per standard template conventions |
|
29 | + $arguments['Latitude'] = $arguments['latitude']; |
|
30 | + $arguments['Longitude'] = $arguments['longitude']; |
|
31 | + |
|
32 | + // optional parameter caption |
|
33 | + if (isset($arguments['caption'])) { |
|
34 | + $arguments['Caption'] = $arguments['caption']; |
|
35 | + } |
|
36 | + |
|
37 | + if (isset($arguments['maptype'])) { |
|
38 | + $arguments['MapType'] = $arguments['maptype']; |
|
39 | + } |
|
40 | + |
|
41 | + // optional parameter zoom |
|
42 | + if (isset($arguments['zoom'])) { |
|
43 | + $arguments['Zoom'] = $arguments['zoom']; |
|
44 | + } |
|
45 | + |
|
46 | + // the id of the dom element to be used to render the street view |
|
47 | + $arguments['DomID'] = 'google_sc_map_'.self::$gsv_ctr; |
|
48 | + |
|
49 | + // fullscreen |
|
50 | + $arguments['AllowFullScreen'] = Config::inst()->get('Mappable', 'allow_full_screen'); |
|
51 | + |
|
52 | + // incrememt the counter to ensure a unique id for each map canvas |
|
53 | + self::$gsv_ctr++; |
|
54 | + |
|
55 | + // merge defaults and arguments |
|
56 | + $customised = array_merge($defaults, $arguments); |
|
57 | + |
|
58 | + // include JavaScript to be appended at the end of the page, namely params for map rendering |
|
59 | + //Requirements::javascriptTemplate("mappable/javascript/google/map.google.template.js", $customised); |
|
60 | + |
|
61 | + //get map view template and render the HTML |
|
62 | + $template = new SSViewer('GoogleMapShortCode'); |
|
63 | + |
|
64 | + //return the template customised with the parmameters |
|
65 | + return $template->process(new ArrayData($customised)); |
|
66 | + } |
|
67 | + |
|
68 | + /** |
|
69 | + * This is only used for testing, otherwise the sequence of tests change the number returned |
|
70 | + */ |
|
71 | + public static function resetCounter() { |
|
72 | + self::$gsv_ctr = 1; |
|
73 | + } |
|
74 | 74 | } |
@@ -27,7 +27,7 @@ |
||
27 | 27 | $gmap = MapUtil::get_map($this->owner, $this->MarkerTemplateValues); |
28 | 28 | $w = $width ? $width : MapUtil::$map_width; |
29 | 29 | $h = $height ? $height : MapUtil::$map_height; |
30 | - $gmap->setSize($w,$h); |
|
30 | + $gmap->setSize($w, $h); |
|
31 | 31 | return $gmap; |
32 | 32 | } |
33 | 33 |
@@ -8,27 +8,27 @@ |
||
8 | 8 | */ |
9 | 9 | class MappableDataObjectSet extends Extension { |
10 | 10 | |
11 | - /** |
|
12 | - * Optional template values for the map info windows |
|
13 | - */ |
|
14 | - private $MarkerTemplateValues = null; |
|
11 | + /** |
|
12 | + * Optional template values for the map info windows |
|
13 | + */ |
|
14 | + private $MarkerTemplateValues = null; |
|
15 | 15 | |
16 | - /** |
|
17 | - * Pass through values to the markers so that when rendering the map info windows, these |
|
18 | - * parameters are available to the template. This is of course optional |
|
19 | - * |
|
20 | - * @param array $values hash array of template key to template value |
|
21 | - */ |
|
22 | - public function setMarkerTemplateValues($values) { |
|
23 | - $this->MarkerTemplateValues = $values; |
|
24 | - } |
|
16 | + /** |
|
17 | + * Pass through values to the markers so that when rendering the map info windows, these |
|
18 | + * parameters are available to the template. This is of course optional |
|
19 | + * |
|
20 | + * @param array $values hash array of template key to template value |
|
21 | + */ |
|
22 | + public function setMarkerTemplateValues($values) { |
|
23 | + $this->MarkerTemplateValues = $values; |
|
24 | + } |
|
25 | 25 | |
26 | - public function getRenderableMap($width = null, $height = null) { |
|
27 | - $gmap = MapUtil::get_map($this->owner, $this->MarkerTemplateValues); |
|
28 | - $w = $width ? $width : MapUtil::$map_width; |
|
29 | - $h = $height ? $height : MapUtil::$map_height; |
|
30 | - $gmap->setSize($w,$h); |
|
31 | - return $gmap; |
|
32 | - } |
|
26 | + public function getRenderableMap($width = null, $height = null) { |
|
27 | + $gmap = MapUtil::get_map($this->owner, $this->MarkerTemplateValues); |
|
28 | + $w = $width ? $width : MapUtil::$map_width; |
|
29 | + $h = $height ? $height : MapUtil::$map_height; |
|
30 | + $gmap->setSize($w,$h); |
|
31 | + return $gmap; |
|
32 | + } |
|
33 | 33 | |
34 | 34 | } |
@@ -40,7 +40,7 @@ discard block |
||
40 | 40 | $gmap = MapUtil::get_map(new ArrayList(array($this->owner)), $this->MarkerTemplateValues); |
41 | 41 | $w = $width ? $width : MapUtil::$map_width; |
42 | 42 | $h = $height ? $height : MapUtil::$map_height; |
43 | - $gmap->setSize($w,$h); |
|
43 | + $gmap->setSize($w, $h); |
|
44 | 44 | $gmap->setZoom($zoom); |
45 | 45 | $gmap->setEnableAutomaticCenterZoom(false); |
46 | 46 | if ($this->owner->MapPinEdited) { |
@@ -89,7 +89,7 @@ discard block |
||
89 | 89 | $urlparts['markers'] = "icon:$pin|$lat,$lng"; |
90 | 90 | } |
91 | 91 | |
92 | - $src = htmlentities($apiurl . '?' . http_build_query($urlparts)); |
|
92 | + $src = htmlentities($apiurl.'?'.http_build_query($urlparts)); |
|
93 | 93 | return '<img src="'.$src.'" width="'.$w.'" height="'.$h.'" alt="'.$this->owner->Title.'" />'; |
94 | 94 | } |
95 | 95 |
@@ -8,93 +8,93 @@ |
||
8 | 8 | */ |
9 | 9 | class MappableData extends Extension { |
10 | 10 | |
11 | - /** |
|
12 | - * Optional template values for the map info windows |
|
13 | - */ |
|
14 | - private $MarkerTemplateValues = null; |
|
15 | - |
|
16 | - /** |
|
17 | - * URL of static maps api |
|
18 | - * @var string |
|
19 | - */ |
|
20 | - private static $staticmap_api_url = '//maps.googleapis.com/maps/api/staticmap'; |
|
21 | - |
|
22 | - /** |
|
23 | - * Default zoom for static map |
|
24 | - * @var int |
|
25 | - */ |
|
26 | - private static $staticmap_default_zoom = 13; |
|
27 | - |
|
28 | - /** |
|
29 | - * Pass through values to the markers so that when rendering the map info windows, these |
|
30 | - * parameters are available to the template. This is of course optional |
|
31 | - * |
|
32 | - * @param array $values hash array of template key to template value |
|
33 | - */ |
|
34 | - public function setMarkerTemplateValues($values) { |
|
35 | - $this->MarkerTemplateValues = $values; |
|
36 | - } |
|
37 | - |
|
38 | - |
|
39 | - public function getRenderableMap($width = null, $height = null, $zoom = 9) { |
|
40 | - $gmap = MapUtil::get_map(new ArrayList(array($this->owner)), $this->MarkerTemplateValues); |
|
41 | - $w = $width ? $width : MapUtil::$map_width; |
|
42 | - $h = $height ? $height : MapUtil::$map_height; |
|
43 | - $gmap->setSize($w,$h); |
|
44 | - $gmap->setZoom($zoom); |
|
45 | - $gmap->setEnableAutomaticCenterZoom(false); |
|
46 | - if ($this->owner->MapPinEdited) { |
|
47 | - $gmap->setLatLongCenter(array( |
|
48 | - 'lat' => $this->owner->getMappableLatitude(), |
|
49 | - 'lng' => $this->owner->getMappableLongitude() |
|
50 | - )); |
|
51 | - } |
|
52 | - return $gmap; |
|
53 | - } |
|
54 | - |
|
55 | - |
|
56 | - /** |
|
57 | - * returns an <img> with a src set to a static map picture |
|
58 | - * |
|
59 | - * You can use MappableData.staticmap_api_url config var to set the domain of the static map. |
|
60 | - * You can use MappableData.staticmap_default_zoom config var to set the default zoom for the static map. |
|
61 | - * |
|
62 | - * @uses Mappable::getMappableMapPin() to draw a special marker, be sure this image is publicly available |
|
63 | - * |
|
64 | - * @param int $width |
|
65 | - * @param int $height |
|
66 | - * @return string |
|
67 | - */ |
|
68 | - public function StaticMap($width, $height, $zoom = null, $mapType = 'roadmap') { |
|
69 | - $lat = $this->owner->getMappableLatitude(); |
|
70 | - $lng = $this->owner->getMappableLongitude(); |
|
71 | - $pin = $this->owner->getMappableMapPin(); |
|
72 | - |
|
73 | - // use provided zoom or set a default |
|
74 | - if ($zoom == null) { |
|
75 | - $zoom = Config::inst()->get('MappableData', 'staticmap_default_zoom'); |
|
76 | - } |
|
77 | - |
|
78 | - //https://maps.googleapis.com/maps/api/staticmap?center=Berkeley,CA&zoom=14&size=400x400&key=YOUR_API_KEY |
|
79 | - //maps.googleapis.com/maps/api/staticmap'; |
|
80 | - |
|
81 | - $apiurl = Config::inst()->get('MappableData', 'staticmap_api_url'); |
|
82 | - |
|
83 | - $urlparts = array( |
|
84 | - 'center' => "$lat,$lng", |
|
85 | - 'markers' => "$lat,$lng", |
|
86 | - 'zoom' => $zoom, |
|
87 | - 'size' => "{$width}x{$height}", |
|
88 | - 'sensor' => 'false', //@todo: make sensor param configurable |
|
89 | - 'maptype' => $mapType |
|
90 | - ); |
|
91 | - if ($pin) { |
|
92 | - $urlparts['markers'] = "icon:$pin|$lat,$lng"; |
|
93 | - } |
|
94 | - |
|
95 | - $src = htmlentities($apiurl . '?' . http_build_query($urlparts)); |
|
96 | - |
|
97 | - return '<img src="'.$src.'" width="'.$width.'" height="'.$height.'" alt="'.$this->owner->Title.'" />'; |
|
98 | - } |
|
11 | + /** |
|
12 | + * Optional template values for the map info windows |
|
13 | + */ |
|
14 | + private $MarkerTemplateValues = null; |
|
15 | + |
|
16 | + /** |
|
17 | + * URL of static maps api |
|
18 | + * @var string |
|
19 | + */ |
|
20 | + private static $staticmap_api_url = '//maps.googleapis.com/maps/api/staticmap'; |
|
21 | + |
|
22 | + /** |
|
23 | + * Default zoom for static map |
|
24 | + * @var int |
|
25 | + */ |
|
26 | + private static $staticmap_default_zoom = 13; |
|
27 | + |
|
28 | + /** |
|
29 | + * Pass through values to the markers so that when rendering the map info windows, these |
|
30 | + * parameters are available to the template. This is of course optional |
|
31 | + * |
|
32 | + * @param array $values hash array of template key to template value |
|
33 | + */ |
|
34 | + public function setMarkerTemplateValues($values) { |
|
35 | + $this->MarkerTemplateValues = $values; |
|
36 | + } |
|
37 | + |
|
38 | + |
|
39 | + public function getRenderableMap($width = null, $height = null, $zoom = 9) { |
|
40 | + $gmap = MapUtil::get_map(new ArrayList(array($this->owner)), $this->MarkerTemplateValues); |
|
41 | + $w = $width ? $width : MapUtil::$map_width; |
|
42 | + $h = $height ? $height : MapUtil::$map_height; |
|
43 | + $gmap->setSize($w,$h); |
|
44 | + $gmap->setZoom($zoom); |
|
45 | + $gmap->setEnableAutomaticCenterZoom(false); |
|
46 | + if ($this->owner->MapPinEdited) { |
|
47 | + $gmap->setLatLongCenter(array( |
|
48 | + 'lat' => $this->owner->getMappableLatitude(), |
|
49 | + 'lng' => $this->owner->getMappableLongitude() |
|
50 | + )); |
|
51 | + } |
|
52 | + return $gmap; |
|
53 | + } |
|
54 | + |
|
55 | + |
|
56 | + /** |
|
57 | + * returns an <img> with a src set to a static map picture |
|
58 | + * |
|
59 | + * You can use MappableData.staticmap_api_url config var to set the domain of the static map. |
|
60 | + * You can use MappableData.staticmap_default_zoom config var to set the default zoom for the static map. |
|
61 | + * |
|
62 | + * @uses Mappable::getMappableMapPin() to draw a special marker, be sure this image is publicly available |
|
63 | + * |
|
64 | + * @param int $width |
|
65 | + * @param int $height |
|
66 | + * @return string |
|
67 | + */ |
|
68 | + public function StaticMap($width, $height, $zoom = null, $mapType = 'roadmap') { |
|
69 | + $lat = $this->owner->getMappableLatitude(); |
|
70 | + $lng = $this->owner->getMappableLongitude(); |
|
71 | + $pin = $this->owner->getMappableMapPin(); |
|
72 | + |
|
73 | + // use provided zoom or set a default |
|
74 | + if ($zoom == null) { |
|
75 | + $zoom = Config::inst()->get('MappableData', 'staticmap_default_zoom'); |
|
76 | + } |
|
77 | + |
|
78 | + //https://maps.googleapis.com/maps/api/staticmap?center=Berkeley,CA&zoom=14&size=400x400&key=YOUR_API_KEY |
|
79 | + //maps.googleapis.com/maps/api/staticmap'; |
|
80 | + |
|
81 | + $apiurl = Config::inst()->get('MappableData', 'staticmap_api_url'); |
|
82 | + |
|
83 | + $urlparts = array( |
|
84 | + 'center' => "$lat,$lng", |
|
85 | + 'markers' => "$lat,$lng", |
|
86 | + 'zoom' => $zoom, |
|
87 | + 'size' => "{$width}x{$height}", |
|
88 | + 'sensor' => 'false', //@todo: make sensor param configurable |
|
89 | + 'maptype' => $mapType |
|
90 | + ); |
|
91 | + if ($pin) { |
|
92 | + $urlparts['markers'] = "icon:$pin|$lat,$lng"; |
|
93 | + } |
|
94 | + |
|
95 | + $src = htmlentities($apiurl . '?' . http_build_query($urlparts)); |
|
96 | + |
|
97 | + return '<img src="'.$src.'" width="'.$width.'" height="'.$height.'" alt="'.$this->owner->Title.'" />'; |
|
98 | + } |
|
99 | 99 | |
100 | 100 | } |
@@ -226,8 +226,9 @@ |
||
226 | 226 | $gmap = self::instance(); |
227 | 227 | if ($list) { |
228 | 228 | foreach ($list as $mappable) { |
229 | - if (self::ChooseToAddDataobject($mappable)) |
|
230 | - $gmap->addMarkerAsObject($mappable, $infowindowtemplateparams); |
|
229 | + if (self::ChooseToAddDataobject($mappable)) { |
|
230 | + $gmap->addMarkerAsObject($mappable, $infowindowtemplateparams); |
|
231 | + } |
|
231 | 232 | } |
232 | 233 | } |
233 | 234 | return $gmap; |
@@ -3,221 +3,221 @@ |
||
3 | 3 | class MapUtil |
4 | 4 | { |
5 | 5 | |
6 | - /** |
|
7 | - * @var string The Google Maps API key |
|
8 | - */ |
|
9 | - protected static $api_key; |
|
10 | - |
|
11 | - /** |
|
12 | - * @var int Number of active {@see GoogleMapsAPI} instances (for the HTML ID) |
|
13 | - */ |
|
14 | - protected static $instances = 0; |
|
15 | - |
|
16 | - /** |
|
17 | - * @var int The default width of a Google Map |
|
18 | - */ |
|
19 | - public static $map_width = '100%'; |
|
20 | - |
|
21 | - /** |
|
22 | - * @var int The default height of a Google Map |
|
23 | - */ |
|
24 | - public static $map_height = '400px'; |
|
25 | - |
|
26 | - /** |
|
27 | - * @var int Prefix for the div ID of the map |
|
28 | - */ |
|
29 | - public static $div_id = "google_map"; |
|
30 | - |
|
31 | - /** |
|
32 | - * @var boolean Automatic center/zoom for the map |
|
33 | - */ |
|
34 | - public static $automatic_center = true; |
|
35 | - |
|
36 | - /** |
|
37 | - * @var boolean Show the marker fields on the map |
|
38 | - */ |
|
39 | - public static $hide_marker = false; |
|
40 | - |
|
41 | - /** |
|
42 | - * @var boolean Show the marker fields on the map |
|
43 | - */ |
|
44 | - public static $map_type = 'google.maps.MapTypeId.ROADMAP'; |
|
45 | - |
|
46 | - /** |
|
47 | - * @var string $center Center of map (adress) |
|
48 | - */ |
|
49 | - public static $center = 'Paris, France'; |
|
50 | - |
|
51 | - /* Signals whether at least one map has already been rendered */ |
|
52 | - private static $map_already_rendered = false; |
|
53 | - |
|
54 | - /* Whether or not to allow full screen */ |
|
55 | - private static $allow_full_screen = null; |
|
56 | - |
|
57 | - |
|
58 | - public static function reset() { |
|
59 | - self::$api_key = null; |
|
60 | - self::$instances = 0; |
|
61 | - self::$map_width = '100%'; |
|
62 | - self::$map_height = '400px'; |
|
63 | - self::$div_id = "google_map"; |
|
64 | - self::$automatic_center = true; |
|
65 | - self::$hide_marker = false; |
|
66 | - self::$map_type = 'google.maps.MapTypeId.ROADMAP'; |
|
67 | - self::$center = 'Paris, France'; |
|
68 | - self::$map_already_rendered = false; |
|
69 | - self::$allow_full_screen = null; |
|
70 | - Config::inst()->update('Mappable', 'language', 'en'); |
|
71 | - } |
|
72 | - |
|
73 | - /** |
|
74 | - * Set the API key for Google Maps |
|
75 | - * |
|
76 | - * @param string $key |
|
77 | - */ |
|
78 | - public static function set_api_key($key) { |
|
79 | - self::$api_key = $key; |
|
80 | - } |
|
81 | - |
|
82 | - /** |
|
83 | - * @param boolean $new_map_already_rendered |
|
84 | - */ |
|
85 | - public static function set_map_already_rendered($new_map_already_rendered) { |
|
86 | - self::$map_already_rendered = $new_map_already_rendered; |
|
87 | - } |
|
88 | - |
|
89 | - public static function get_map_already_rendered() { |
|
90 | - return self::$map_already_rendered; |
|
91 | - } |
|
92 | - |
|
93 | - /** |
|
94 | - * Set the default size of the map |
|
95 | - * |
|
96 | - * @param int $width |
|
97 | - * @param int $height |
|
98 | - */ |
|
99 | - public static function set_map_size($width, $height) { |
|
100 | - self:: $map_width = $width; |
|
101 | - self::$map_height = $height; |
|
102 | - } |
|
103 | - |
|
104 | - /** |
|
105 | - * FIXME - NOT USED? |
|
106 | - * Set the type of the gmap |
|
107 | - * |
|
108 | - * @param string $mapType (can be 'google.maps.MapTypeId.ROADMAP', 'G_SATELLITE_MAP', |
|
109 | - * 'G_HYBRID_MAP', 'G_PHYSICAL_MAP') |
|
110 | - * |
|
111 | - * @return void |
|
112 | - */ |
|
113 | - public static function set_map_type($mapType) { |
|
114 | - self::$map_type = $mapType; |
|
115 | - } |
|
116 | - |
|
117 | - /** |
|
118 | - * Set the center of the gmap (an address, using text geocoder query) |
|
119 | - * |
|
120 | - * @param string $center GoogleMap center (an address) |
|
121 | - * |
|
122 | - * @return void |
|
123 | - */ |
|
124 | - public static function set_center($center) |
|
125 | - { |
|
126 | - self::$center = $center; |
|
127 | - } |
|
128 | - |
|
129 | - /** |
|
130 | - * Get a new GoogleMapAPI object and load it with the default settings |
|
131 | - * |
|
132 | - * @return MapAPI |
|
133 | - */ |
|
134 | - public static function instance() |
|
135 | - { |
|
136 | - self::$instances++; |
|
137 | - |
|
138 | - if (self::$allow_full_screen == null) { |
|
139 | - self::$allow_full_screen = Config::inst()->get('Mappable', 'allow_full_screen'); |
|
140 | - } |
|
141 | - |
|
142 | - $url = Director::absoluteBaseURL(); |
|
143 | - |
|
144 | - // remove http and https |
|
145 | - $url = str_replace('http://', '', $url); |
|
146 | - $url = str_replace('https://', '', $url); |
|
147 | - $parts = explode('/', $url); |
|
148 | - $host = $parts[0]; |
|
149 | - |
|
150 | - $key = self::$api_key; |
|
151 | - |
|
152 | - // if an array, get the key by an array keyed by host |
|
153 | - if (is_array($key)) { |
|
154 | - $key = $key[$host]; |
|
155 | - } |
|
156 | - |
|
157 | - $gmap = new MapAPI($key); |
|
158 | - $gmap->setDivId(self::$div_id."_".self::$instances); |
|
159 | - $gmap->setEnableAutomaticCenterZoom(self::$automatic_center); |
|
160 | - $gmap->setSize(self::$map_width, self::$map_height); |
|
161 | - $gmap->setDefaultHideMarker(self::$hide_marker); |
|
162 | - $gmap->setMapType(self::$map_type); |
|
163 | - $gmap->setCenter(self::$center); |
|
164 | - $gmap->setAllowFullScreen(self::$allow_full_screen); |
|
165 | - $language = Config::inst()->get('Mappable', 'language'); |
|
166 | - $gmap->setLang($language); |
|
167 | - return $gmap; |
|
168 | - } |
|
169 | - |
|
170 | - |
|
171 | - /** |
|
172 | - * Sanitize a string of HTML content for safe inclusion in the JavaScript |
|
173 | - * for a Google Map |
|
174 | - * |
|
175 | - * @return string |
|
176 | - */ |
|
177 | - public static function sanitize($content) { |
|
178 | - return addslashes(str_replace(array("\n", "\r", "\t"), '', $content)); |
|
179 | - } |
|
180 | - |
|
181 | - |
|
182 | - /** |
|
183 | - * Creates a new {@link GoogleMapsAPI} object loaded with the default settings |
|
184 | - * and places all of the items in a {@link SS_List} |
|
185 | - * e.g. {@link DataList} or {@link ArrayList} on the map |
|
186 | - * |
|
187 | - * @param SS_List list of objects to display on a map |
|
188 | - * @param array $infowindowtemplateparams Optional array of extra parameters to pass to the map info window |
|
189 | - * @return MapAPI |
|
190 | - */ |
|
191 | - public static function get_map(SS_List $list, $infowindowtemplateparams) { |
|
192 | - $gmap = self::instance(); |
|
193 | - if ($list) { |
|
194 | - foreach ($list as $mappable) { |
|
195 | - if (self::ChooseToAddDataobject($mappable)) |
|
196 | - $gmap->addMarkerAsObject($mappable, $infowindowtemplateparams); |
|
197 | - } |
|
198 | - } |
|
199 | - return $gmap; |
|
200 | - } |
|
201 | - |
|
202 | - /** |
|
203 | - * Determines if the current DataObject should be included to the map |
|
204 | - * Checks if it has Mappable interface implemented |
|
205 | - * If it has MapExtension included, the value of MapPinEdited is also checked |
|
206 | - * |
|
207 | - * @param DataObject $do |
|
208 | - * @return bool |
|
209 | - */ |
|
210 | - private static function ChooseToAddDataobject(DataObject $do) { |
|
211 | - $isMappable = $do->is_a('Mappable'); |
|
212 | - |
|
213 | - foreach ($do->getExtensionInstances() as $extension) { |
|
214 | - $isMappable = $isMappable || $extension instanceof Mappable; |
|
215 | - } |
|
216 | - |
|
217 | - $filterMapPinEdited = $do->hasExtension('MapExtension') |
|
218 | - ? $do->MapPinEdited |
|
219 | - : true; |
|
220 | - |
|
221 | - return $isMappable && $filterMapPinEdited; |
|
222 | - } |
|
6 | + /** |
|
7 | + * @var string The Google Maps API key |
|
8 | + */ |
|
9 | + protected static $api_key; |
|
10 | + |
|
11 | + /** |
|
12 | + * @var int Number of active {@see GoogleMapsAPI} instances (for the HTML ID) |
|
13 | + */ |
|
14 | + protected static $instances = 0; |
|
15 | + |
|
16 | + /** |
|
17 | + * @var int The default width of a Google Map |
|
18 | + */ |
|
19 | + public static $map_width = '100%'; |
|
20 | + |
|
21 | + /** |
|
22 | + * @var int The default height of a Google Map |
|
23 | + */ |
|
24 | + public static $map_height = '400px'; |
|
25 | + |
|
26 | + /** |
|
27 | + * @var int Prefix for the div ID of the map |
|
28 | + */ |
|
29 | + public static $div_id = "google_map"; |
|
30 | + |
|
31 | + /** |
|
32 | + * @var boolean Automatic center/zoom for the map |
|
33 | + */ |
|
34 | + public static $automatic_center = true; |
|
35 | + |
|
36 | + /** |
|
37 | + * @var boolean Show the marker fields on the map |
|
38 | + */ |
|
39 | + public static $hide_marker = false; |
|
40 | + |
|
41 | + /** |
|
42 | + * @var boolean Show the marker fields on the map |
|
43 | + */ |
|
44 | + public static $map_type = 'google.maps.MapTypeId.ROADMAP'; |
|
45 | + |
|
46 | + /** |
|
47 | + * @var string $center Center of map (adress) |
|
48 | + */ |
|
49 | + public static $center = 'Paris, France'; |
|
50 | + |
|
51 | + /* Signals whether at least one map has already been rendered */ |
|
52 | + private static $map_already_rendered = false; |
|
53 | + |
|
54 | + /* Whether or not to allow full screen */ |
|
55 | + private static $allow_full_screen = null; |
|
56 | + |
|
57 | + |
|
58 | + public static function reset() { |
|
59 | + self::$api_key = null; |
|
60 | + self::$instances = 0; |
|
61 | + self::$map_width = '100%'; |
|
62 | + self::$map_height = '400px'; |
|
63 | + self::$div_id = "google_map"; |
|
64 | + self::$automatic_center = true; |
|
65 | + self::$hide_marker = false; |
|
66 | + self::$map_type = 'google.maps.MapTypeId.ROADMAP'; |
|
67 | + self::$center = 'Paris, France'; |
|
68 | + self::$map_already_rendered = false; |
|
69 | + self::$allow_full_screen = null; |
|
70 | + Config::inst()->update('Mappable', 'language', 'en'); |
|
71 | + } |
|
72 | + |
|
73 | + /** |
|
74 | + * Set the API key for Google Maps |
|
75 | + * |
|
76 | + * @param string $key |
|
77 | + */ |
|
78 | + public static function set_api_key($key) { |
|
79 | + self::$api_key = $key; |
|
80 | + } |
|
81 | + |
|
82 | + /** |
|
83 | + * @param boolean $new_map_already_rendered |
|
84 | + */ |
|
85 | + public static function set_map_already_rendered($new_map_already_rendered) { |
|
86 | + self::$map_already_rendered = $new_map_already_rendered; |
|
87 | + } |
|
88 | + |
|
89 | + public static function get_map_already_rendered() { |
|
90 | + return self::$map_already_rendered; |
|
91 | + } |
|
92 | + |
|
93 | + /** |
|
94 | + * Set the default size of the map |
|
95 | + * |
|
96 | + * @param int $width |
|
97 | + * @param int $height |
|
98 | + */ |
|
99 | + public static function set_map_size($width, $height) { |
|
100 | + self:: $map_width = $width; |
|
101 | + self::$map_height = $height; |
|
102 | + } |
|
103 | + |
|
104 | + /** |
|
105 | + * FIXME - NOT USED? |
|
106 | + * Set the type of the gmap |
|
107 | + * |
|
108 | + * @param string $mapType (can be 'google.maps.MapTypeId.ROADMAP', 'G_SATELLITE_MAP', |
|
109 | + * 'G_HYBRID_MAP', 'G_PHYSICAL_MAP') |
|
110 | + * |
|
111 | + * @return void |
|
112 | + */ |
|
113 | + public static function set_map_type($mapType) { |
|
114 | + self::$map_type = $mapType; |
|
115 | + } |
|
116 | + |
|
117 | + /** |
|
118 | + * Set the center of the gmap (an address, using text geocoder query) |
|
119 | + * |
|
120 | + * @param string $center GoogleMap center (an address) |
|
121 | + * |
|
122 | + * @return void |
|
123 | + */ |
|
124 | + public static function set_center($center) |
|
125 | + { |
|
126 | + self::$center = $center; |
|
127 | + } |
|
128 | + |
|
129 | + /** |
|
130 | + * Get a new GoogleMapAPI object and load it with the default settings |
|
131 | + * |
|
132 | + * @return MapAPI |
|
133 | + */ |
|
134 | + public static function instance() |
|
135 | + { |
|
136 | + self::$instances++; |
|
137 | + |
|
138 | + if (self::$allow_full_screen == null) { |
|
139 | + self::$allow_full_screen = Config::inst()->get('Mappable', 'allow_full_screen'); |
|
140 | + } |
|
141 | + |
|
142 | + $url = Director::absoluteBaseURL(); |
|
143 | + |
|
144 | + // remove http and https |
|
145 | + $url = str_replace('http://', '', $url); |
|
146 | + $url = str_replace('https://', '', $url); |
|
147 | + $parts = explode('/', $url); |
|
148 | + $host = $parts[0]; |
|
149 | + |
|
150 | + $key = self::$api_key; |
|
151 | + |
|
152 | + // if an array, get the key by an array keyed by host |
|
153 | + if (is_array($key)) { |
|
154 | + $key = $key[$host]; |
|
155 | + } |
|
156 | + |
|
157 | + $gmap = new MapAPI($key); |
|
158 | + $gmap->setDivId(self::$div_id."_".self::$instances); |
|
159 | + $gmap->setEnableAutomaticCenterZoom(self::$automatic_center); |
|
160 | + $gmap->setSize(self::$map_width, self::$map_height); |
|
161 | + $gmap->setDefaultHideMarker(self::$hide_marker); |
|
162 | + $gmap->setMapType(self::$map_type); |
|
163 | + $gmap->setCenter(self::$center); |
|
164 | + $gmap->setAllowFullScreen(self::$allow_full_screen); |
|
165 | + $language = Config::inst()->get('Mappable', 'language'); |
|
166 | + $gmap->setLang($language); |
|
167 | + return $gmap; |
|
168 | + } |
|
169 | + |
|
170 | + |
|
171 | + /** |
|
172 | + * Sanitize a string of HTML content for safe inclusion in the JavaScript |
|
173 | + * for a Google Map |
|
174 | + * |
|
175 | + * @return string |
|
176 | + */ |
|
177 | + public static function sanitize($content) { |
|
178 | + return addslashes(str_replace(array("\n", "\r", "\t"), '', $content)); |
|
179 | + } |
|
180 | + |
|
181 | + |
|
182 | + /** |
|
183 | + * Creates a new {@link GoogleMapsAPI} object loaded with the default settings |
|
184 | + * and places all of the items in a {@link SS_List} |
|
185 | + * e.g. {@link DataList} or {@link ArrayList} on the map |
|
186 | + * |
|
187 | + * @param SS_List list of objects to display on a map |
|
188 | + * @param array $infowindowtemplateparams Optional array of extra parameters to pass to the map info window |
|
189 | + * @return MapAPI |
|
190 | + */ |
|
191 | + public static function get_map(SS_List $list, $infowindowtemplateparams) { |
|
192 | + $gmap = self::instance(); |
|
193 | + if ($list) { |
|
194 | + foreach ($list as $mappable) { |
|
195 | + if (self::ChooseToAddDataobject($mappable)) |
|
196 | + $gmap->addMarkerAsObject($mappable, $infowindowtemplateparams); |
|
197 | + } |
|
198 | + } |
|
199 | + return $gmap; |
|
200 | + } |
|
201 | + |
|
202 | + /** |
|
203 | + * Determines if the current DataObject should be included to the map |
|
204 | + * Checks if it has Mappable interface implemented |
|
205 | + * If it has MapExtension included, the value of MapPinEdited is also checked |
|
206 | + * |
|
207 | + * @param DataObject $do |
|
208 | + * @return bool |
|
209 | + */ |
|
210 | + private static function ChooseToAddDataobject(DataObject $do) { |
|
211 | + $isMappable = $do->is_a('Mappable'); |
|
212 | + |
|
213 | + foreach ($do->getExtensionInstances() as $extension) { |
|
214 | + $isMappable = $isMappable || $extension instanceof Mappable; |
|
215 | + } |
|
216 | + |
|
217 | + $filterMapPinEdited = $do->hasExtension('MapExtension') |
|
218 | + ? $do->MapPinEdited |
|
219 | + : true; |
|
220 | + |
|
221 | + return $isMappable && $filterMapPinEdited; |
|
222 | + } |
|
223 | 223 | } |
@@ -256,6 +256,10 @@ discard block |
||
256 | 256 | /* |
257 | 257 | Add a map layer to an existing instance |
258 | 258 | */ |
259 | + |
|
260 | + /** |
|
261 | + * @param Member $instance |
|
262 | + */ |
|
259 | 263 | private function addLayerToInstance(&$instance) { |
260 | 264 | // Create a layer |
261 | 265 | $kmlFile = new File(array('Name' => 'example.kml', 'Filename' => 'mappable/tests/kml/example.kml')); |
@@ -269,6 +273,9 @@ discard block |
||
269 | 273 | $layers->add($layer); |
270 | 274 | } |
271 | 275 | |
276 | + /** |
|
277 | + * @param Member $instance |
|
278 | + */ |
|
272 | 279 | private function addMapPinToInstance(&$instance) { |
273 | 280 | // Create a pin |
274 | 281 | $imageFile = new Image(array('Name' => 'mapicontest.png', 'Filename' => 'mappable/tests/images/mapicontest.png')); |
@@ -1,294 +1,294 @@ |
||
1 | 1 | <?php |
2 | 2 | |
3 | 3 | class MapExtensionTest extends SapphireTest { |
4 | - protected static $fixture_file = 'mappable/tests/mapextensions.yml'; |
|
4 | + protected static $fixture_file = 'mappable/tests/mapextensions.yml'; |
|
5 | 5 | |
6 | - public function setUpOnce() { |
|
7 | - $this->requiredExtensions = array( |
|
8 | - 'Member' => array('MapExtension', 'MapLayerExtension') |
|
9 | - ); |
|
10 | - parent::setupOnce(); |
|
11 | - } |
|
6 | + public function setUpOnce() { |
|
7 | + $this->requiredExtensions = array( |
|
8 | + 'Member' => array('MapExtension', 'MapLayerExtension') |
|
9 | + ); |
|
10 | + parent::setupOnce(); |
|
11 | + } |
|
12 | 12 | |
13 | 13 | |
14 | - public function testUpdateCMSFields() { |
|
14 | + public function testUpdateCMSFields() { |
|
15 | 15 | |
16 | - } |
|
16 | + } |
|
17 | 17 | |
18 | 18 | |
19 | - public function testGetMappableLatitude() { |
|
20 | - $instance = $this->getInstance(); |
|
21 | - $instance->Lat = 42.1; |
|
22 | - $instance->write(); |
|
23 | - $this->assertEquals( |
|
24 | - 42.1, |
|
25 | - $instance->getMappableLatitude() |
|
26 | - ); |
|
27 | - } |
|
19 | + public function testGetMappableLatitude() { |
|
20 | + $instance = $this->getInstance(); |
|
21 | + $instance->Lat = 42.1; |
|
22 | + $instance->write(); |
|
23 | + $this->assertEquals( |
|
24 | + 42.1, |
|
25 | + $instance->getMappableLatitude() |
|
26 | + ); |
|
27 | + } |
|
28 | 28 | |
29 | 29 | |
30 | - public function testGetMappableLongitude() { |
|
31 | - $instance = $this->getInstance(); |
|
32 | - $instance->Lon = 42.1; |
|
33 | - $this->assertEquals( |
|
34 | - 42.1, |
|
35 | - $instance->getMappableLongitude() |
|
36 | - ); |
|
37 | - } |
|
30 | + public function testGetMappableLongitude() { |
|
31 | + $instance = $this->getInstance(); |
|
32 | + $instance->Lon = 42.1; |
|
33 | + $this->assertEquals( |
|
34 | + 42.1, |
|
35 | + $instance->getMappableLongitude() |
|
36 | + ); |
|
37 | + } |
|
38 | 38 | |
39 | 39 | |
40 | - public function testgetMappableMapContent() { |
|
40 | + public function testgetMappableMapContent() { |
|
41 | 41 | |
42 | - } |
|
42 | + } |
|
43 | 43 | |
44 | 44 | |
45 | - public function testonBeforeWriteMapPinNotEdited() { |
|
46 | - $instance = $this->getInstance(); |
|
47 | - $this->Lat = 0; |
|
48 | - $this->Lon = 0; |
|
49 | - $instance->write(); |
|
50 | - $this->assertFalse($instance->MapPinEdited); |
|
51 | - } |
|
45 | + public function testonBeforeWriteMapPinNotEdited() { |
|
46 | + $instance = $this->getInstance(); |
|
47 | + $this->Lat = 0; |
|
48 | + $this->Lon = 0; |
|
49 | + $instance->write(); |
|
50 | + $this->assertFalse($instance->MapPinEdited); |
|
51 | + } |
|
52 | 52 | |
53 | - public function testonBeforeWriteMapPinEdited() { |
|
54 | - $instance = $this->getInstance(); |
|
53 | + public function testonBeforeWriteMapPinEdited() { |
|
54 | + $instance = $this->getInstance(); |
|
55 | 55 | |
56 | - // north |
|
57 | - $this->showMapPinEdited($instance, 10, 0); |
|
56 | + // north |
|
57 | + $this->showMapPinEdited($instance, 10, 0); |
|
58 | 58 | |
59 | - // north west |
|
60 | - $this->showMapPinEdited($instance, 10, -10); |
|
59 | + // north west |
|
60 | + $this->showMapPinEdited($instance, 10, -10); |
|
61 | 61 | |
62 | - // west |
|
63 | - $this->showMapPinEdited($instance, 0, -10); |
|
62 | + // west |
|
63 | + $this->showMapPinEdited($instance, 0, -10); |
|
64 | 64 | |
65 | - // south west |
|
66 | - $this->showMapPinEdited($instance, -10, -10); |
|
65 | + // south west |
|
66 | + $this->showMapPinEdited($instance, -10, -10); |
|
67 | 67 | |
68 | - // south |
|
69 | - $this->showMapPinEdited($instance, -10, 0); |
|
68 | + // south |
|
69 | + $this->showMapPinEdited($instance, -10, 0); |
|
70 | 70 | |
71 | - // south east |
|
72 | - $this->showMapPinEdited($instance, -10, 10); |
|
71 | + // south east |
|
72 | + $this->showMapPinEdited($instance, -10, 10); |
|
73 | 73 | |
74 | - // east |
|
75 | - $this->showMapPinEdited($instance, 0, 10); |
|
74 | + // east |
|
75 | + $this->showMapPinEdited($instance, 0, 10); |
|
76 | 76 | |
77 | - // north east |
|
78 | - $this->showMapPinEdited($instance, 10, 10); |
|
77 | + // north east |
|
78 | + $this->showMapPinEdited($instance, 10, 10); |
|
79 | 79 | |
80 | - } |
|
80 | + } |
|
81 | 81 | |
82 | 82 | |
83 | - // FIXME - use an actual file here |
|
84 | - public function testGetMappableMapPin() { |
|
85 | - $instance = $this->getInstance(); |
|
83 | + // FIXME - use an actual file here |
|
84 | + public function testGetMappableMapPin() { |
|
85 | + $instance = $this->getInstance(); |
|
86 | 86 | |
87 | - // no icon, so return false |
|
88 | - $this->assertFalse($instance->getMappableMapPin()); |
|
87 | + // no icon, so return false |
|
88 | + $this->assertFalse($instance->getMappableMapPin()); |
|
89 | 89 | |
90 | - // add a default map icon |
|
91 | - $this->addMapPinToInstance($instance); |
|
90 | + // add a default map icon |
|
91 | + $this->addMapPinToInstance($instance); |
|
92 | 92 | |
93 | - $pin1 = $instance->getMappableMapPin(); |
|
94 | - $this->assertStringEndsWith('assets/mapicontest.png', $pin1); |
|
93 | + $pin1 = $instance->getMappableMapPin(); |
|
94 | + $this->assertStringEndsWith('assets/mapicontest.png', $pin1); |
|
95 | 95 | |
96 | - // Test the cached pin - this is the case of a layer providing a cached pin |
|
97 | - // so that repeated calls are not made to load the same icon |
|
98 | - $iconURL = |
|
99 | - 'https://cdn3.iconfinder.com/data/icons/iconic-1/32/map_pin_fill-512.png'; |
|
96 | + // Test the cached pin - this is the case of a layer providing a cached pin |
|
97 | + // so that repeated calls are not made to load the same icon |
|
98 | + $iconURL = |
|
99 | + 'https://cdn3.iconfinder.com/data/icons/iconic-1/32/map_pin_fill-512.png'; |
|
100 | 100 | |
101 | - // Set mappable as having no icon, use the cached one instead |
|
102 | - // This simulates using a common icon to avoid DB queries |
|
103 | - $instance->MapPinIconID = 0; |
|
104 | - $instance->write(); |
|
105 | - $instance->CachedMapPinURL = $iconURL; |
|
106 | - $pin2 = $instance->getMappableMapPin(); |
|
107 | - $this->assertEquals($iconURL, $pin2); |
|
108 | - } |
|
101 | + // Set mappable as having no icon, use the cached one instead |
|
102 | + // This simulates using a common icon to avoid DB queries |
|
103 | + $instance->MapPinIconID = 0; |
|
104 | + $instance->write(); |
|
105 | + $instance->CachedMapPinURL = $iconURL; |
|
106 | + $pin2 = $instance->getMappableMapPin(); |
|
107 | + $this->assertEquals($iconURL, $pin2); |
|
108 | + } |
|
109 | 109 | |
110 | 110 | |
111 | 111 | |
112 | 112 | |
113 | 113 | |
114 | - public function testHasGeoWest() { |
|
115 | - $instance = $this->getInstance(); |
|
116 | - $instance->Lon = -20; |
|
117 | - $this->assertTrue($instance->HasGeo()); |
|
118 | - } |
|
119 | - |
|
120 | - public function testHasGeoEast() { |
|
121 | - $instance = $this->getInstance(); |
|
122 | - $instance->Lon = 20; |
|
123 | - $this->assertTrue($instance->HasGeo()); |
|
124 | - } |
|
125 | - |
|
126 | - public function testHasGeoNorth() { |
|
127 | - $instance = $this->getInstance(); |
|
128 | - $instance->Lat = 20; |
|
129 | - $this->assertTrue($instance->HasGeo()); |
|
130 | - } |
|
131 | - |
|
132 | - public function testHasGeoNorthWest() { |
|
133 | - $instance = $this->getInstance(); |
|
134 | - $instance->Lat = 20; |
|
135 | - $instance->Lon = -20; |
|
136 | - $this->assertTrue($instance->HasGeo()); |
|
137 | - } |
|
138 | - |
|
139 | - public function testHasGeoNortEast() { |
|
140 | - $instance = $this->getInstance(); |
|
141 | - $instance->Lat = 20; |
|
142 | - $instance->Lon = 20; |
|
143 | - $this->assertTrue($instance->HasGeo()); |
|
144 | - } |
|
145 | - |
|
146 | - public function testHasGeoSouth() { |
|
147 | - $instance = $this->getInstance(); |
|
148 | - $instance->Lat = -20; |
|
149 | - $this->assertTrue($instance->HasGeo()); |
|
150 | - } |
|
151 | - |
|
152 | - public function testHasGeoSouthWest() { |
|
153 | - $instance = $this->getInstance(); |
|
154 | - $instance->Lat = -20; |
|
155 | - $instance->Lon = -20; |
|
156 | - $this->assertTrue($instance->HasGeo()); |
|
157 | - } |
|
158 | - |
|
159 | - public function testHasGeoSouthEast() { |
|
160 | - $instance = $this->getInstance(); |
|
161 | - $instance->Lat = -20; |
|
162 | - $instance->Lon = 20; |
|
163 | - $this->assertTrue($instance->HasGeo()); |
|
164 | - } |
|
165 | - |
|
166 | - public function testHasGeoOrigin() { |
|
167 | - $instance = $this->getInstance(); |
|
168 | - $instance->Lat = 0; |
|
169 | - $instance->Lon = 0; |
|
170 | - $this->assertFalse($instance->HasGeo()); |
|
171 | - } |
|
172 | - |
|
173 | - public function testHasGeoOriginMapLayerExtension() { |
|
174 | - $instance = $this->getInstance(); |
|
175 | - |
|
176 | - // assert that origin has no geo (until layers added) |
|
177 | - $instance->Lat = 0; |
|
178 | - $instance->Lon = 0; |
|
179 | - $this->assertFalse($instance->HasGeo()); |
|
180 | - |
|
181 | - $this->addLayerToInstance($instance); |
|
182 | - |
|
183 | - // assert has geo even when at the origin of 0,0 |
|
184 | - $this->assertTrue($instance->HasGeo()); |
|
185 | - } |
|
186 | - |
|
187 | - public function testBasicMap() { |
|
188 | - $instance = $this->getInstance(); |
|
189 | - $instance->Lat = 37.1; |
|
190 | - $instance->Lon = 28; |
|
191 | - $instance->Zoom = 12; |
|
192 | - $instance->MapPinEdited = true; |
|
193 | - $html = $instance->BasicMap()->forTemplate(); |
|
194 | - |
|
195 | - $expected = "data-centre='{\"lat\":37.1,\"lng\":28}'"; |
|
196 | - $this->assertContains($expected, $html); |
|
197 | - $expected = "data-mapmarkers='[{\"latitude\":37.1,\"longitude\":28,\"html\":\"MEMBER: \",\"category\":\"default\",\"icon\":false}]'"; |
|
198 | - $this->assertContains($expected, $html); |
|
199 | - |
|
200 | - // This is only set automatically with layers |
|
201 | - $expected = 'data-enableautocentrezoom=false'; |
|
202 | - $this->assertContains($expected, $html); |
|
203 | - } |
|
204 | - |
|
205 | - public function testBasicMapWithLayer() { |
|
206 | - $instance = $this->getInstance(); |
|
207 | - $instance->Lat = 37.1; |
|
208 | - $instance->Lon = 28; |
|
209 | - $instance->Zoom = 12; |
|
210 | - $instance->MapPinEdited = true; |
|
211 | - $instance->write(); |
|
212 | - $this->addLayerToInstance($instance); |
|
213 | - $html = $instance->BasicMap()->forTemplate(); |
|
214 | - |
|
215 | - $expected = "data-centre='{\"lat\":37.1,\"lng\":28}'"; |
|
216 | - $this->assertContains($expected, $html); |
|
217 | - $expected = "data-mapmarkers='[{\"latitude\":37.1,\"longitude\":28,\"html\":\"MEMBER: \",\"category\":\"default\",\"icon\":false}]'"; |
|
218 | - $this->assertContains($expected, $html); |
|
219 | - |
|
220 | - // This is only set automatically with layers |
|
221 | - $expected = 'data-enableautocentrezoom=1'; |
|
222 | - $this->assertContains($expected, $html); |
|
223 | - } |
|
224 | - |
|
225 | - |
|
226 | - public function testGetMapField() { |
|
227 | - $instance = $this->getInstance(); |
|
228 | - $this->Lat = 37.1; |
|
229 | - $this->Lon = 28; |
|
230 | - $this->Zoom = 12; |
|
231 | - $mapField = $instance->getMapField(); |
|
232 | - $this->assertInstanceOf('LatLongField', $mapField); |
|
233 | - } |
|
234 | - |
|
235 | - |
|
236 | - public function testUseCompressedAssets() { |
|
237 | - $original = Config::inst()->get('Mappable', 'use_compressed_assets'); |
|
238 | - |
|
239 | - $instance = $this->getInstance(); |
|
240 | - Config::inst()->update('Mappable', 'use_compressed_assets', false); |
|
241 | - $this->assertFalse($instance->UseCompressedAssets()); |
|
242 | - |
|
243 | - $instance = $this->getInstance(); |
|
244 | - Config::inst()->update('Mappable', 'use_compressed_assets', true); |
|
245 | - $this->assertTrue($instance->UseCompressedAssets()); |
|
246 | - |
|
247 | - Config::inst()->update('Mappable', 'use_compressed_assets', $original); |
|
248 | - } |
|
249 | - |
|
250 | - |
|
251 | - private function getInstance() { |
|
252 | - $instance = new Member(); |
|
253 | - return $instance; |
|
254 | - } |
|
255 | - |
|
256 | - /* |
|
114 | + public function testHasGeoWest() { |
|
115 | + $instance = $this->getInstance(); |
|
116 | + $instance->Lon = -20; |
|
117 | + $this->assertTrue($instance->HasGeo()); |
|
118 | + } |
|
119 | + |
|
120 | + public function testHasGeoEast() { |
|
121 | + $instance = $this->getInstance(); |
|
122 | + $instance->Lon = 20; |
|
123 | + $this->assertTrue($instance->HasGeo()); |
|
124 | + } |
|
125 | + |
|
126 | + public function testHasGeoNorth() { |
|
127 | + $instance = $this->getInstance(); |
|
128 | + $instance->Lat = 20; |
|
129 | + $this->assertTrue($instance->HasGeo()); |
|
130 | + } |
|
131 | + |
|
132 | + public function testHasGeoNorthWest() { |
|
133 | + $instance = $this->getInstance(); |
|
134 | + $instance->Lat = 20; |
|
135 | + $instance->Lon = -20; |
|
136 | + $this->assertTrue($instance->HasGeo()); |
|
137 | + } |
|
138 | + |
|
139 | + public function testHasGeoNortEast() { |
|
140 | + $instance = $this->getInstance(); |
|
141 | + $instance->Lat = 20; |
|
142 | + $instance->Lon = 20; |
|
143 | + $this->assertTrue($instance->HasGeo()); |
|
144 | + } |
|
145 | + |
|
146 | + public function testHasGeoSouth() { |
|
147 | + $instance = $this->getInstance(); |
|
148 | + $instance->Lat = -20; |
|
149 | + $this->assertTrue($instance->HasGeo()); |
|
150 | + } |
|
151 | + |
|
152 | + public function testHasGeoSouthWest() { |
|
153 | + $instance = $this->getInstance(); |
|
154 | + $instance->Lat = -20; |
|
155 | + $instance->Lon = -20; |
|
156 | + $this->assertTrue($instance->HasGeo()); |
|
157 | + } |
|
158 | + |
|
159 | + public function testHasGeoSouthEast() { |
|
160 | + $instance = $this->getInstance(); |
|
161 | + $instance->Lat = -20; |
|
162 | + $instance->Lon = 20; |
|
163 | + $this->assertTrue($instance->HasGeo()); |
|
164 | + } |
|
165 | + |
|
166 | + public function testHasGeoOrigin() { |
|
167 | + $instance = $this->getInstance(); |
|
168 | + $instance->Lat = 0; |
|
169 | + $instance->Lon = 0; |
|
170 | + $this->assertFalse($instance->HasGeo()); |
|
171 | + } |
|
172 | + |
|
173 | + public function testHasGeoOriginMapLayerExtension() { |
|
174 | + $instance = $this->getInstance(); |
|
175 | + |
|
176 | + // assert that origin has no geo (until layers added) |
|
177 | + $instance->Lat = 0; |
|
178 | + $instance->Lon = 0; |
|
179 | + $this->assertFalse($instance->HasGeo()); |
|
180 | + |
|
181 | + $this->addLayerToInstance($instance); |
|
182 | + |
|
183 | + // assert has geo even when at the origin of 0,0 |
|
184 | + $this->assertTrue($instance->HasGeo()); |
|
185 | + } |
|
186 | + |
|
187 | + public function testBasicMap() { |
|
188 | + $instance = $this->getInstance(); |
|
189 | + $instance->Lat = 37.1; |
|
190 | + $instance->Lon = 28; |
|
191 | + $instance->Zoom = 12; |
|
192 | + $instance->MapPinEdited = true; |
|
193 | + $html = $instance->BasicMap()->forTemplate(); |
|
194 | + |
|
195 | + $expected = "data-centre='{\"lat\":37.1,\"lng\":28}'"; |
|
196 | + $this->assertContains($expected, $html); |
|
197 | + $expected = "data-mapmarkers='[{\"latitude\":37.1,\"longitude\":28,\"html\":\"MEMBER: \",\"category\":\"default\",\"icon\":false}]'"; |
|
198 | + $this->assertContains($expected, $html); |
|
199 | + |
|
200 | + // This is only set automatically with layers |
|
201 | + $expected = 'data-enableautocentrezoom=false'; |
|
202 | + $this->assertContains($expected, $html); |
|
203 | + } |
|
204 | + |
|
205 | + public function testBasicMapWithLayer() { |
|
206 | + $instance = $this->getInstance(); |
|
207 | + $instance->Lat = 37.1; |
|
208 | + $instance->Lon = 28; |
|
209 | + $instance->Zoom = 12; |
|
210 | + $instance->MapPinEdited = true; |
|
211 | + $instance->write(); |
|
212 | + $this->addLayerToInstance($instance); |
|
213 | + $html = $instance->BasicMap()->forTemplate(); |
|
214 | + |
|
215 | + $expected = "data-centre='{\"lat\":37.1,\"lng\":28}'"; |
|
216 | + $this->assertContains($expected, $html); |
|
217 | + $expected = "data-mapmarkers='[{\"latitude\":37.1,\"longitude\":28,\"html\":\"MEMBER: \",\"category\":\"default\",\"icon\":false}]'"; |
|
218 | + $this->assertContains($expected, $html); |
|
219 | + |
|
220 | + // This is only set automatically with layers |
|
221 | + $expected = 'data-enableautocentrezoom=1'; |
|
222 | + $this->assertContains($expected, $html); |
|
223 | + } |
|
224 | + |
|
225 | + |
|
226 | + public function testGetMapField() { |
|
227 | + $instance = $this->getInstance(); |
|
228 | + $this->Lat = 37.1; |
|
229 | + $this->Lon = 28; |
|
230 | + $this->Zoom = 12; |
|
231 | + $mapField = $instance->getMapField(); |
|
232 | + $this->assertInstanceOf('LatLongField', $mapField); |
|
233 | + } |
|
234 | + |
|
235 | + |
|
236 | + public function testUseCompressedAssets() { |
|
237 | + $original = Config::inst()->get('Mappable', 'use_compressed_assets'); |
|
238 | + |
|
239 | + $instance = $this->getInstance(); |
|
240 | + Config::inst()->update('Mappable', 'use_compressed_assets', false); |
|
241 | + $this->assertFalse($instance->UseCompressedAssets()); |
|
242 | + |
|
243 | + $instance = $this->getInstance(); |
|
244 | + Config::inst()->update('Mappable', 'use_compressed_assets', true); |
|
245 | + $this->assertTrue($instance->UseCompressedAssets()); |
|
246 | + |
|
247 | + Config::inst()->update('Mappable', 'use_compressed_assets', $original); |
|
248 | + } |
|
249 | + |
|
250 | + |
|
251 | + private function getInstance() { |
|
252 | + $instance = new Member(); |
|
253 | + return $instance; |
|
254 | + } |
|
255 | + |
|
256 | + /* |
|
257 | 257 | Add a map layer to an existing instance |
258 | 258 | */ |
259 | - private function addLayerToInstance(&$instance) { |
|
260 | - // Create a layer |
|
261 | - $kmlFile = new File(array('Name' => 'example.kml', 'Filename' => 'mappable/tests/kml/example.kml')); |
|
262 | - $layer = new MapLayer(); |
|
263 | - $layer->Title = 'Example KML Layer'; |
|
264 | - $layer->KmlFile = $kmlFile; |
|
265 | - $layer->write(); |
|
266 | - |
|
267 | - // add the layer to the Member object |
|
268 | - $layers = $instance->MapLayers(); |
|
269 | - $layers->add($layer); |
|
270 | - } |
|
271 | - |
|
272 | - private function addMapPinToInstance(&$instance) { |
|
273 | - // Create a pin |
|
274 | - $copied = copy('mappable/tests/images/mapicontest.png', 'assets/mapicontest.png'); |
|
275 | - $this->assertTrue($copied); |
|
276 | - $imageFile = new Image(array('Name' => 'mapicontest.png', 'Filename' => 'assets/mapicontest.png')); |
|
277 | - $imageFile->write(); |
|
278 | - $instance->MapPinIconID = $imageFile->ID; |
|
279 | - $instance->write(); |
|
280 | - } |
|
281 | - |
|
282 | - /** |
|
283 | - * @param integer $lat |
|
284 | - * @param integer $lon |
|
285 | - */ |
|
286 | - private function showMapPinEdited(&$instance, $lat, $lon) { |
|
287 | - $instance->Lat = $lat; |
|
288 | - $instance->Long = $lon; |
|
289 | - $instance->write(); |
|
290 | - $this->assertTrue($instance->MapPinEdited); |
|
291 | - } |
|
259 | + private function addLayerToInstance(&$instance) { |
|
260 | + // Create a layer |
|
261 | + $kmlFile = new File(array('Name' => 'example.kml', 'Filename' => 'mappable/tests/kml/example.kml')); |
|
262 | + $layer = new MapLayer(); |
|
263 | + $layer->Title = 'Example KML Layer'; |
|
264 | + $layer->KmlFile = $kmlFile; |
|
265 | + $layer->write(); |
|
266 | + |
|
267 | + // add the layer to the Member object |
|
268 | + $layers = $instance->MapLayers(); |
|
269 | + $layers->add($layer); |
|
270 | + } |
|
271 | + |
|
272 | + private function addMapPinToInstance(&$instance) { |
|
273 | + // Create a pin |
|
274 | + $copied = copy('mappable/tests/images/mapicontest.png', 'assets/mapicontest.png'); |
|
275 | + $this->assertTrue($copied); |
|
276 | + $imageFile = new Image(array('Name' => 'mapicontest.png', 'Filename' => 'assets/mapicontest.png')); |
|
277 | + $imageFile->write(); |
|
278 | + $instance->MapPinIconID = $imageFile->ID; |
|
279 | + $instance->write(); |
|
280 | + } |
|
281 | + |
|
282 | + /** |
|
283 | + * @param integer $lat |
|
284 | + * @param integer $lon |
|
285 | + */ |
|
286 | + private function showMapPinEdited(&$instance, $lat, $lon) { |
|
287 | + $instance->Lat = $lat; |
|
288 | + $instance->Long = $lon; |
|
289 | + $instance->write(); |
|
290 | + $this->assertTrue($instance->MapPinEdited); |
|
291 | + } |
|
292 | 292 | |
293 | 293 | |
294 | 294 |
@@ -19,19 +19,19 @@ discard block |
||
19 | 19 | // legacy handling for old parameters: $title, $heading, ... |
20 | 20 | // instead of new handling: $name, $title, $heading, ... |
21 | 21 | $args = func_get_args(); |
22 | - if(!isset($args[1]) || is_numeric($args[1])) { |
|
22 | + if (!isset($args[1]) || is_numeric($args[1])) { |
|
23 | 23 | $title = (isset($args[0])) ? $args[0] : null; |
24 | 24 | // Use "HeaderField(title)" as the default field name for a HeaderField; |
25 | 25 | // if it's just set to title then we risk causing accidental duplicate-field creation. |
26 | 26 | |
27 | 27 | // this means i18nized fields won't be easily accessible through fieldByName() |
28 | - $name = 'MapField' . $title; |
|
28 | + $name = 'MapField'.$title; |
|
29 | 29 | $headingLevel = (isset($args[1])) ? $args[1] : null; |
30 | 30 | $allowHTML = (isset($args[2])) ? $args[2] : null; |
31 | 31 | $form = (isset($args[3])) ? $args[3] : null; |
32 | 32 | } |
33 | 33 | |
34 | - if($headingLevel) $this->headingLevel = $headingLevel; |
|
34 | + if ($headingLevel) $this->headingLevel = $headingLevel; |
|
35 | 35 | $this->allowHTML = $allowHTML; |
36 | 36 | parent::__construct($name, $title, null, $allowHTML, $form); |
37 | 37 | } |
@@ -47,9 +47,9 @@ discard block |
||
47 | 47 | |
48 | 48 | Requirements::css('mappable/css/mapField.css'); |
49 | 49 | |
50 | - return '<div class="editableMap">' . $this->createTag( |
|
50 | + return '<div class="editableMap">'.$this->createTag( |
|
51 | 51 | "div", |
52 | 52 | $attributes |
53 | - ) . '</div>'; |
|
53 | + ).'</div>'; |
|
54 | 54 | } |
55 | 55 | } |
@@ -4,52 +4,52 @@ |
||
4 | 4 | */ |
5 | 5 | class MapField extends DatalessField { |
6 | 6 | |
7 | - /** |
|
8 | - * @var int $headingLevel The level of the <h1> to <h6> HTML tag. Default: 2 |
|
9 | - */ |
|
10 | - protected $headingLevel = 2; |
|
11 | - private $divId; |
|
7 | + /** |
|
8 | + * @var int $headingLevel The level of the <h1> to <h6> HTML tag. Default: 2 |
|
9 | + */ |
|
10 | + protected $headingLevel = 2; |
|
11 | + private $divId; |
|
12 | 12 | |
13 | - /** |
|
14 | - * @param string $name |
|
15 | - * @param string $title |
|
16 | - */ |
|
17 | - function __construct($name, $title = null, $headingLevel = 2, $allowHTML = false, $form = null) { |
|
18 | - $this->divId = $name; |
|
19 | - // legacy handling for old parameters: $title, $heading, ... |
|
20 | - // instead of new handling: $name, $title, $heading, ... |
|
21 | - $args = func_get_args(); |
|
22 | - if(!isset($args[1]) || is_numeric($args[1])) { |
|
23 | - $title = (isset($args[0])) ? $args[0] : null; |
|
24 | - // Use "HeaderField(title)" as the default field name for a HeaderField; |
|
25 | - // if it's just set to title then we risk causing accidental duplicate-field creation. |
|
13 | + /** |
|
14 | + * @param string $name |
|
15 | + * @param string $title |
|
16 | + */ |
|
17 | + function __construct($name, $title = null, $headingLevel = 2, $allowHTML = false, $form = null) { |
|
18 | + $this->divId = $name; |
|
19 | + // legacy handling for old parameters: $title, $heading, ... |
|
20 | + // instead of new handling: $name, $title, $heading, ... |
|
21 | + $args = func_get_args(); |
|
22 | + if(!isset($args[1]) || is_numeric($args[1])) { |
|
23 | + $title = (isset($args[0])) ? $args[0] : null; |
|
24 | + // Use "HeaderField(title)" as the default field name for a HeaderField; |
|
25 | + // if it's just set to title then we risk causing accidental duplicate-field creation. |
|
26 | 26 | |
27 | - // this means i18nized fields won't be easily accessible through fieldByName() |
|
28 | - $name = 'MapField' . $title; |
|
29 | - $headingLevel = (isset($args[1])) ? $args[1] : null; |
|
30 | - $allowHTML = (isset($args[2])) ? $args[2] : null; |
|
31 | - $form = (isset($args[3])) ? $args[3] : null; |
|
32 | - } |
|
27 | + // this means i18nized fields won't be easily accessible through fieldByName() |
|
28 | + $name = 'MapField' . $title; |
|
29 | + $headingLevel = (isset($args[1])) ? $args[1] : null; |
|
30 | + $allowHTML = (isset($args[2])) ? $args[2] : null; |
|
31 | + $form = (isset($args[3])) ? $args[3] : null; |
|
32 | + } |
|
33 | 33 | |
34 | - if($headingLevel) $this->headingLevel = $headingLevel; |
|
35 | - $this->allowHTML = $allowHTML; |
|
36 | - parent::__construct($name, $title, null, $allowHTML, $form); |
|
37 | - } |
|
34 | + if($headingLevel) $this->headingLevel = $headingLevel; |
|
35 | + $this->allowHTML = $allowHTML; |
|
36 | + parent::__construct($name, $title, null, $allowHTML, $form); |
|
37 | + } |
|
38 | 38 | |
39 | - function Field($properties = array()) { |
|
40 | - Requirements::javascript('framework/thirdparty/jquery/jquery.js'); |
|
41 | - Requirements::javascript('framework/thirdparty/jquery-livequery/jquery.livequery.js'); |
|
42 | - $attributes = array( |
|
43 | - 'class' => 'middleColumn', |
|
44 | - 'id' => $this->divId, |
|
45 | - 'style' => "width:100%;height:300px;margin:5px 0px 5px 5px;position:relative;" |
|
46 | - ); |
|
39 | + function Field($properties = array()) { |
|
40 | + Requirements::javascript('framework/thirdparty/jquery/jquery.js'); |
|
41 | + Requirements::javascript('framework/thirdparty/jquery-livequery/jquery.livequery.js'); |
|
42 | + $attributes = array( |
|
43 | + 'class' => 'middleColumn', |
|
44 | + 'id' => $this->divId, |
|
45 | + 'style' => "width:100%;height:300px;margin:5px 0px 5px 5px;position:relative;" |
|
46 | + ); |
|
47 | 47 | |
48 | - Requirements::css('mappable/css/mapField.css'); |
|
48 | + Requirements::css('mappable/css/mapField.css'); |
|
49 | 49 | |
50 | - return '<div class="editableMap">' . $this->createTag( |
|
51 | - "div", |
|
52 | - $attributes |
|
53 | - ) . '</div>'; |
|
54 | - } |
|
50 | + return '<div class="editableMap">' . $this->createTag( |
|
51 | + "div", |
|
52 | + $attributes |
|
53 | + ) . '</div>'; |
|
54 | + } |
|
55 | 55 | } |
@@ -31,7 +31,9 @@ |
||
31 | 31 | $form = (isset($args[3])) ? $args[3] : null; |
32 | 32 | } |
33 | 33 | |
34 | - if($headingLevel) $this->headingLevel = $headingLevel; |
|
34 | + if($headingLevel) { |
|
35 | + $this->headingLevel = $headingLevel; |
|
36 | + } |
|
35 | 37 | $this->allowHTML = $allowHTML; |
36 | 38 | parent::__construct($name, $title, null, $allowHTML, $form); |
37 | 39 | } |
@@ -9,58 +9,58 @@ |
||
9 | 9 | */ |
10 | 10 | interface Mappable { |
11 | 11 | |
12 | - /** |
|
13 | - * An accessor method for the latitude field. |
|
14 | - * @example |
|
15 | - * <code> |
|
16 | - * return $this->Lat; |
|
17 | - * </code> |
|
18 | - * |
|
19 | - * @return string |
|
20 | - */ |
|
21 | - public function getMappableLatitude(); |
|
12 | + /** |
|
13 | + * An accessor method for the latitude field. |
|
14 | + * @example |
|
15 | + * <code> |
|
16 | + * return $this->Lat; |
|
17 | + * </code> |
|
18 | + * |
|
19 | + * @return string |
|
20 | + */ |
|
21 | + public function getMappableLatitude(); |
|
22 | 22 | |
23 | 23 | |
24 | - /** |
|
25 | - * An accessor method for the longitude field. |
|
26 | - * @example |
|
27 | - * <code> |
|
28 | - * return $this->Long; |
|
29 | - * </code> |
|
30 | - * |
|
31 | - * @return string |
|
32 | - */ |
|
33 | - public function getMappableLongitude(); |
|
24 | + /** |
|
25 | + * An accessor method for the longitude field. |
|
26 | + * @example |
|
27 | + * <code> |
|
28 | + * return $this->Long; |
|
29 | + * </code> |
|
30 | + * |
|
31 | + * @return string |
|
32 | + */ |
|
33 | + public function getMappableLongitude(); |
|
34 | 34 | |
35 | 35 | |
36 | - /** |
|
37 | - * An accessor method for the path to the marker pin for this point on the map. |
|
38 | - * If null or false, use the default Google Maps icon. |
|
39 | - * @example |
|
40 | - * <code> |
|
41 | - * return "mysite/images/map_icon.png"; |
|
42 | - * </code> |
|
43 | - * |
|
44 | - * @return string |
|
45 | - */ |
|
46 | - public function getMappableMapPin(); |
|
36 | + /** |
|
37 | + * An accessor method for the path to the marker pin for this point on the map. |
|
38 | + * If null or false, use the default Google Maps icon. |
|
39 | + * @example |
|
40 | + * <code> |
|
41 | + * return "mysite/images/map_icon.png"; |
|
42 | + * </code> |
|
43 | + * |
|
44 | + * @return string |
|
45 | + */ |
|
46 | + public function getMappableMapPin(); |
|
47 | 47 | |
48 | 48 | |
49 | - /** |
|
50 | - * An accessor method that returns the content for the map bubble popup. |
|
51 | - * It is best to use the {@see ViewableData::renderWith()} method to take advantaging |
|
52 | - * of templating syntax when rendering the object's content. |
|
53 | - * |
|
54 | - * Note: it is critical that the content be sanitized for safe inclusino in the rendered |
|
55 | - * JavaScript code for the map. {@see GoogleMapsUtil::sanitize()} |
|
56 | - * |
|
57 | - * @example |
|
58 | - * <code> |
|
59 | - * return GoogleMapsUtil::sanitize($this->renderWith('MapBubble')); |
|
60 | - * </code> |
|
61 | - * |
|
62 | - * @return string |
|
63 | - */ |
|
64 | - public function getMappableMapContent(); |
|
49 | + /** |
|
50 | + * An accessor method that returns the content for the map bubble popup. |
|
51 | + * It is best to use the {@see ViewableData::renderWith()} method to take advantaging |
|
52 | + * of templating syntax when rendering the object's content. |
|
53 | + * |
|
54 | + * Note: it is critical that the content be sanitized for safe inclusino in the rendered |
|
55 | + * JavaScript code for the map. {@see GoogleMapsUtil::sanitize()} |
|
56 | + * |
|
57 | + * @example |
|
58 | + * <code> |
|
59 | + * return GoogleMapsUtil::sanitize($this->renderWith('MapBubble')); |
|
60 | + * </code> |
|
61 | + * |
|
62 | + * @return string |
|
63 | + */ |
|
64 | + public function getMappableMapContent(); |
|
65 | 65 | |
66 | 66 | } |