View source
<?php
require_once 'geofield_ymap.element.inc';
require_once 'geofield_ymap.widget.inc';
require_once 'geofield_ymap.formatter.inc';
require_once 'geofield_ymap.filter.inc';
function geofield_ymap_menu() {
$items = array();
$items['admin/config/system/geofield-ymap'] = array(
'title' => 'Geofield Yandex Maps',
'description' => 'Geofield Yandex Maps global settings',
'page callback' => 'drupal_get_form',
'page arguments' => array(
'geofield_ymap_settings_form',
),
'access arguments' => array(
'administer site configuration',
),
'file' => 'geofield_ymap.admin.inc',
);
return $items;
}
function geofield_ymap_page_build(&$page) {
if (variable_get('geofield_ymap_use_loader', FALSE)) {
drupal_add_js(array(
'geofieldYmap' => array(
'modulePath' => base_path() . geofield_ymap_get_module_path(),
'presetsPath' => variable_get('geofield_ymap_presets_path', ''),
'objectPreset' => variable_get('geofield_ymap_object_preset', ''),
'apiKey' => variable_get('geofield_ymap_api_key', ''),
),
), 'setting');
drupal_add_js(geofield_ymap_get_module_path() . '/js/geofield_ymap_loader.js');
}
}
function geofield_ymap_js_alter(&$javascript) {
$module_path = geofield_ymap_get_module_path();
$main_script = $module_path . '/js/geofield_ymap.js';
$loader_script = $module_path . '/js/geofield_ymap_loader.js';
if (isset($javascript[$loader_script]) && isset($javascript[$main_script])) {
unset($javascript[$loader_script]);
}
}
function geofield_ymap_library() {
$module_path = geofield_ymap_get_module_path();
$settings = array(
'geofieldYmap' => array(
'modulePath' => base_path() . $module_path,
'objectPreset' => variable_get('geofield_ymap_object_preset', ''),
),
);
$script_url = '//api-maps.yandex.ru/2.1/?lang=ru-RU&coordorder=longlat';
$script_url .= '&apikey=' . variable_get('geofield_ymap_api_key', '');
if (variable_get('geofield_ymap_debug_mode', FALSE)) {
$script_url .= '&mode=debug';
}
$library = array(
'geofield_ymap' => array(
'title' => 'Geofield Yandex Maps',
'version' => '1',
'js' => array(
array(
'data' => $settings,
'type' => 'setting',
),
array(
'data' => $script_url,
'type' => 'external',
),
array(
'data' => $module_path . '/js/geofield_ymap.js',
),
),
'css' => array(
array(
'data' => $module_path . '/geofield_ymap.css',
),
),
),
);
if ($presets_path = variable_get('geofield_ymap_presets_path', '')) {
$library['geofield_ymap']['js'][] = array(
'data' => $presets_path,
);
}
return $library;
}
function geofield_ymap_theme() {
return array(
'geofield_ymap' => array(
'render element' => 'element',
'file' => 'geofield_ymap.theme.inc',
),
);
}
function geofield_ymap_views_api() {
return array(
'api' => 3,
);
}
function geofield_ymap_items_to_geojson($items) {
if (!$items) {
return array();
}
geophp_load();
$features = array();
foreach ($items as $delte => $item) {
if (!empty($item['geom'])) {
$geoms = geoPHP::load($item['geom']);
foreach (geofield_ymap_split_objects($geoms) as $geom) {
$features[] = array(
'type' => 'Feature',
'geometry' => $geom
->out('json', TRUE),
);
}
}
}
return $features ? array(
'type' => 'FeatureCollection',
'features' => $features,
) : array();
}
function geofield_ymap_split_objects($geom) {
$geoms = array();
if (in_array($geom
->geometryType(), array(
'GeometryCollection',
'MultiPoint',
'MultiLineString',
'MultiPolygon',
))) {
foreach ($geom
->getComponents() as $component) {
$geoms = array_merge($geoms, geofield_ymap_split_objects($component));
}
}
else {
$geoms = array(
$geom,
);
}
return $geoms;
}
function geofield_ymap_get_module_path() {
static $module_path;
if (!$module_path) {
$module_path = drupal_get_path('module', 'geofield_ymap');
}
return $module_path;
}
function _geofield_ymap_get_map_types() {
return array(
'yandex#map' => t('Roadmap'),
'yandex#satellite' => t('Satelite'),
'yandex#hybrid' => t('Hybrid'),
'yandex#publicMap' => t('Public map'),
'yandex#publicMapHybrid' => t('Hybrid public map'),
);
}
function _geofield_ymap_json_encode($array) {
if (defined('JSON_UNESCAPED_UNICODE')) {
return json_encode($array, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
}
return json_encode($array);
}