X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;ds=sidebyside;f=modules%2Fgeoloc.php;h=fafbe4940090d33bad75a23e0e1418e6d8a9fc45;hb=6cce7840e69bc0b6647e1bc5ea3437a925cd63a0;hp=b8b452d9f6cd686c3f754fb0b4b976da626a7381;hpb=45dcbe4d0b623e195055d82543e3815d8b5419a4;p=platal.git diff --git a/modules/geoloc.php b/modules/geoloc.php index b8b452d..fafbe49 100644 --- a/modules/geoloc.php +++ b/modules/geoloc.php @@ -24,19 +24,75 @@ class GeolocModule extends PLModule function handlers() { return array( - 'map' => $this->make_hook('map', AUTH_COOKIE), + 'map' => $this->make_hook('map', AUTH_COOKIE, 'user'), + 'map_url' => $this->make_hook('map_url', AUTH_COOKIE, 'user') ); } - function handler_map($page) + static public function prepare_map(PlPage $page) { + global $globals; $page->changeTpl('geoloc/index.tpl'); - $page->addJsLink('https://maps-api-ssl.google.com/maps/api/js?v=3&sensor=false', false); + $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.js'); + $page->addJsLink('markerwithlabel.js'); $page->assign('pl_extra_header', ''); + } + + static public function assign_json_to_map(PlPage $page, $pids = null) + { + if (!is_null($pids)) { + $where = XDB::format(' AND pa.pid IN {?}', $pids); + } else { + $where = ''; + } + + if (!S::logged() || !S::user()->checkPerms('directory_ax')) { + $where .= " AND pa.pub = 'public'"; + $name_publicity = 'public'; + } else if (!S::user()->checkPerms('directory_private')) { + $where .= " AND pa.pub = 'ax'"; + $name_publicity = 'public'; + } else { + $name_publicity = 'private'; + } + + $data = XDB::rawFetchAllAssoc('SELECT pa.latitude, pa.longitude, GROUP_CONCAT(DISTINCT p.hrpid SEPARATOR \',\') AS hrpid, + GROUP_CONCAT(pd.promo SEPARATOR \',\') AS promo, + GROUP_CONCAT(DISTINCT pd.' . $name_publicity . '_name, \' (\', pd.promo, \')\' SEPARATOR \', \') AS name, + GROUP_CONCAT(DISTINCT pa.pid SEPARATOR \',\') AS pid + 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' . $where . ' + GROUP BY pa.latitude, pa.longitude'); + $page->jsonAssign('data', $data); + } + + function handler_map($page) + { + if (Get::b('ajax')) { + self::assign_json_to_map($page); + return PL_JSON; + } else { + self::prepare_map($page); + } + } + + function handler_map_url($page) + { + pl_content_headers('text/plain'); + + if (Post::has('text')) { + $address = new Address(array('text' => Post::t('text'))); + $gmapsGeocoder = new GMapsGeocoder(); + $gmapsGeocoder->getGeocodedAddress($address); + echo GMapsGeocoder::buildStaticMapURL($address->latitude, $address->longitude, Post::t('color')); + } - $page->assign('latitude', 0); - $page->assign('longitude', 0); + exit(); } }