Display names on markers.
authorStéphane Jacob <sj@m4x.org>
Wed, 18 May 2011 20:10:01 +0000 (22:10 +0200)
committerStéphane Jacob <sj@m4x.org>
Wed, 18 May 2011 20:10:01 +0000 (22:10 +0200)
Signed-off-by: Stéphane Jacob <sj@m4x.org>
Makefile
htdocs/css/default.css
htdocs/css/keynote.css
htdocs/css/openweb.css
htdocs/javascript/.gitignore
htdocs/javascript/maps.js
modules/geoloc.php

index 7f8b363..4cc834f 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -243,9 +243,14 @@ $(JSTREE_PATH):
 ##
 ## Maps auxiliary scripts
 ##
-maps:
+maps: htdocs/javascript/markerclusterer_packed.js htdocs/javascript/markerwithlabel_packed.js
+
+htdocs/javascript/markerclusterer_packed.js:
        wget http://google-maps-utility-library-v3.googlecode.com/svn/trunk/markerclusterer/src/markerclusterer_packed.js -O htdocs/javascript/markerclusterer_packed.js
 
+htdocs/javascript/markerwithlabel_packed.js:
+       wget http://google-maps-utility-library-v3.googlecode.com/svn/tags/markerwithlabel/1.1.4/src/markerwithlabel_packed.js -O htdocs/javascript/markerwithlabel_packed.js
+
 ##
 ## lists rpc
 ##
index bdf3fb8..4ed87df 100644 (file)
@@ -398,6 +398,15 @@ div.long td.rt { width: 82%; }
     padding: 0 6px 0 0;
 }
 
+.marker_label {
+    border: 1px solid black;
+    background-color: white;
+    white-space: nowrap;
+}
+
+.marker_label a {
+    color: black;
+}
 
 /*******************************************************************************
     7   fiche.php & fiche_referent.php
index 73894fd..f0dd75a 100644 (file)
@@ -451,6 +451,16 @@ div.long td.rt { width: 85%; }
     padding: 0 6px 0 0;
 }
 
+.marker_label {
+    border: 1px solid black;
+    background-color: white;
+    white-space: nowrap;
+}
+
+.marker_label a {
+    color: black;
+}
+
 /*******************************************************************************
     7   fiche.php & fiche_referent.php
         [ cas de la fiche ]
index 0682da6..a2d59d1 100644 (file)
@@ -385,6 +385,16 @@ div.long td.rt { width: 65%; }
     padding: 0 6px 0 0;
 }
 
+.marker_label {
+    border: 1px solid black;
+    background-color: white;
+    white-space: nowrap;
+}
+
+.marker_label a {
+    color: black;
+}
+
 /*******************************************************************************
     7   fiche.php & fiche_referent.php
         [ cas de la fiche ]
index 47ad449..e018ffa 100644 (file)
@@ -6,3 +6,6 @@
 /core.js
 /json2.js
 !/jquery.autocomplete.js
+
+# Google Maps auxiliary scripts
+/*_packed.js
index 895679c..af9b2f8 100644 (file)
@@ -19,6 +19,7 @@
  ***************************************************************************/
 
 // http://code.google.com/apis/maps/documentation/javascript/
+// http://code.google.com/p/google-maps-utility-library-v3/wiki/Libraries
 
 function map_initialize(latitude, longitude)
 {
@@ -38,7 +39,25 @@ function map_initialize(latitude, longitude)
 
         for (var i = 0; i < count; ++i) {
             var latLng = new google.maps.LatLng(dots[i].latitude, dots[i].longitude);
-            var marker = new google.maps.Marker({'position': latLng});
+
+            if (dots[i].hrpid.search(',') > -1) {
+                var hrpids = dots[i].hrpid.split(',');
+                var names = dots[i].name.split(',');
+                var link_array = new Array();
+
+                for (var j = 0; j < hrpids.length; ++j) {
+                    link_array[j] = '<a href="profile/' + hrpids[j] + '">' + names[j] + '</a>';
+                }
+                var link = link_array.join('<br />');
+            } else {
+                var link = '<a href="profile/' + dots[i].hrpid + '">' + dots[i].name + '</a>';
+            }
+
+            var marker = new MarkerWithLabel({
+                'position': latLng,
+                'labelContent': link,
+                'labelClass': 'marker_label'
+            });
             markers.push(marker);
         }
         var mc = new MarkerClusterer(map, markers);
index 5b44c23..62bb42e 100644 (file)
@@ -33,11 +33,11 @@ class GeolocModule extends PLModule
     {
         global $globals;
         $page->changeTpl('geoloc/index.tpl');
-        $page->addJsLink('maps.js');
-        $page->addJsLink('markerclusterer_packed.js');
-
         $map_url = $globals->maps->dynamic_map . '?&sensor=false&v=' . $globals->maps->api_version . '&language=' . $globals->maps->language;
         $page->addJsLink($map_url, false);
+        $page->addJsLink('maps.js');
+        $page->addJsLink('markerclusterer_packed.js');
+        $page->addJsLink('markerwithlabel_packed.js');
         $page->assign('pl_extra_header', '<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />');
 
         $page->assign('latitude', 0);
@@ -46,9 +46,13 @@ class GeolocModule extends PLModule
 
     function handler_map_ajax($page)
     {
-        $data = XDB::rawFetchAllAssoc('SELECT  latitude, longitude
-                                         FROM  profile_addresses
-                                        WHERE  type = \'home\' AND latitude IS NOT NULL AND longitude IS NOT NULL');
+        $data = XDB::rawFetchAllAssoc('SELECT  pa.latitude, pa.longitude, GROUP_CONCAT(DISTINCT p.hrpid SEPARATOR \',\') AS hrpid,
+                                               GROUP_CONCAT(DISTINCT CONCAT(pd.private_name, \' (\', pd.promo, \')\') SEPARATOR \',\') AS name
+                                         FROM  profile_addresses AS pa
+                                   INNER JOIN  profiles          AS p  ON (pa.pid = p.pid)
+                                   INNER JOIN  profile_display   AS pd ON (pd.pid = pa.pid)
+                                        WHERE  pa.type = \'home\' AND pa.latitude IS NOT NULL AND pa.longitude IS NOT NULL
+                                     GROUP BY  pa.latitude, pa.longitude');
         $page->jsonAssign('data', $data);
 
         return PL_JSON;