/**
* Gives the header part for the multi-map front end presentation
*
* @param int $p_languageId
* @param array $p_constarints
* @param array $p_options
* @param int $p_offset
* @param int $p_limit
* @param int $p_mapWidth
* @param int $p_mapHeight
* @param int $p_rank
* The rank of the current multi-map, used to make unique ids
*
* @return string
*/
public static function GetMultiMapTagHeader($p_languageId, $p_constraints, $p_options, $p_offset, $p_limit, $p_mapWidth, $p_mapHeight, $p_rank = 0)
{
global $Campsite;
$tag_string = '';
$tag_string_top = '';
$tag_string_gv3_async = false;
$tag_string_ini = '';
$tag_string_mid = '';
$tag_string_fin = '';
$points = null;
$pois_loaded = false;
$max_zoom = null;
$map_margin = null;
$load_common = true;
$area_points = null;
$area_points_empty_only = 'false';
$width_dyn = false;
$height_dyn = false;
if (is_array($p_options)) {
if (array_key_exists('pois_retrieved', $p_options)) {
$pois_loaded = $p_options['pois_retrieved'];
}
if (array_key_exists('max_zoom', $p_options)) {
$max_zoom = $p_options['max_zoom'];
}
if (array_key_exists('map_margin', $p_options)) {
$map_margin = $p_options['map_margin'];
}
if (array_key_exists('load_common', $p_options)) {
$load_common = $p_options['load_common'];
}
if (array_key_exists('area_points', $p_options)) {
$area_points = $p_options['area_points'];
}
if (array_key_exists('area_points_empty_only', $p_options)) {
if ($p_options['area_points_empty_only']) {
$area_points_empty_only = 'true';
}
}
if (array_key_exists('width_dyn', $p_options)) {
$width_dyn = $p_options['width_dyn'];
}
if (array_key_exists('height_dyn', $p_options)) {
$height_dyn = $p_options['height_dyn'];
}
}
$large_map_on_click = false;
$open_large_map = false;
$width_large_map = 800;
$height_large_map = 600;
$label_large_map = '';
if (is_array($p_options)) {
if (array_key_exists('large_map_on_click', $p_options)) {
$large_map_on_click = $p_options['large_map_on_click'];
}
if (array_key_exists('large_map_open', $p_options)) {
$open_large_map = $p_options['large_map_open'];
}
if ($large_map_on_click && !$open_large_map) {
$open_large_map = true;
}
if (array_key_exists('large_map_width', $p_options)) {
$width_large_map_param = 0 + $p_options['large_map_width'];
if (0 < $width_large_map_param) {
$width_large_map = $width_large_map_param;
}
}
if (array_key_exists('large_map_height', $p_options)) {
$height_large_map_param = 0 + $p_options['large_map_height'];
if (0 < $height_large_map_param) {
$height_large_map = $height_large_map_param;
}
}
if (array_key_exists('large_map_label', $p_options)) {
$label_large_map_param = '' . $p_options['large_map_label'];
if ('' != $label_large_map_param) {
$label_large_map = $label_large_map_param;
}
}
}
if (!$pois_loaded) {
$leftOperand = 'as_array';
$rightOperand = true;
$operator = new Operator('is', 'php');
$constraint = new ComparisonOperation($leftOperand, $operator, $rightOperand);
$p_constraints[] = $constraint;
$leftOperand = 'active_only';
$rightOperand = true;
$operator = new Operator('is', 'php');
$constraint = new ComparisonOperation($leftOperand, $operator, $rightOperand);
$p_constraints[] = $constraint;
$leftOperand = 'text_only';
$rightOperand = false;
$operator = new Operator('is', 'php');
$constraint = new ComparisonOperation($leftOperand, $operator, $rightOperand);
$p_constraints[] = $constraint;
$leftOperand = 'language';
$rightOperand = $p_languageId;
$operator = new Operator('is', 'php');
$constraint = new ComparisonOperation($leftOperand, $operator, $rightOperand);
$p_constraints[] = $constraint;
$leftOperand = 'constrained';
$rightOperand = true;
$operator = new Operator('is', 'php');
$constraint = new ComparisonOperation($leftOperand, $operator, $rightOperand);
$p_constraints[] = $constraint;
$poi_count = 0;
$points = array();
$point_objs = Geo_MapLocation::GetListExt($p_constraints, (array) null, $p_offset, $p_limit, $poi_count, false, $points);
} else {
$points = $p_constraints;
}
$f_language_id = $p_languageId;
$map_suffix = '_' . 'multimap' . '_' . $f_language_id . '_' . $p_rank;
$cnf_html_dir = $Campsite['HTML_DIR'];
$cnf_website_url = $Campsite['WEBSITE_URL'];
$geo_map_usage = Geo_Map::ReadMultiMapInfo();
if (0 < $p_mapWidth) {
$geo_map_usage['width'] = $p_mapWidth;
}
if (0 < $p_mapHeight) {
$geo_map_usage['height'] = $p_mapHeight;
}
$geo_map_usage_json = '';
$geo_map_usage_json .= json_encode($geo_map_usage);
$geo_map_info = Geo_Preferences::GetMapInfo($cnf_html_dir, $cnf_website_url, $geo_map_usage['prov']);
$geo_map_incl = Geo_Preferences::PrepareMapIncludes($geo_map_info['incl_obj']);
$geo_map_incl_async_arr = $geo_map_info['incl_obj_async'];
$geo_map_incl_async_init = $geo_map_info['incl_gv3_init'];
$tag_string_gv3_async = $geo_map_info['incl_gv3'];
$geo_map_json = '';
$geo_map_json .= json_encode($geo_map_info['json_obj']);
$geo_icons_info = Geo_Preferences::GetIconsInfo($cnf_html_dir, $cnf_website_url);
$geo_icons_json = '';
$geo_icons_json .= json_encode($geo_icons_info['json_obj']);
$geo_popups_info = Geo_Preferences::GetPopupsInfo($cnf_html_dir, $cnf_website_url);
$geo_popups_json = '';
$geo_popups_json .= json_encode($geo_popups_info['json_obj']);
$geo_focus_info = Geo_Preferences::GetFocusInfo($cnf_html_dir, $cnf_website_url);
$geo_focus_info['json_obj']['auto_focus'] = true;
if (null !== $max_zoom) {
$geo_focus_info['json_obj']['max_zoom'] = $max_zoom;
}
if (null !== $map_margin) {
$geo_focus_info['json_obj']['border'] = $map_margin;
}
$geo_focus_json = '';
$geo_focus_json .= json_encode($geo_focus_info['json_obj']);
$preview = true;
$poi_info = array('pois' => $points, 'map' => $geo_map_usage);
$poi_info_json = json_encode($poi_info);
$geocodingdir = $Campsite['WEBSITE_URL'] . '/js/geocoding/';
// map-provider specific includes shall be taken for all maps, since those maps can use different map providers
$tag_string_top .= $geo_map_incl;
$tag_string_top .= "\n";
$check_gv3 = 'false';
if ($tag_string_gv3_async) {
$check_gv3 = 'true';
}
$check_gv3_init = 'false';
if ('' != $geo_map_incl_async_init) {
$check_gv3_init = 'true';
}
$include_files_tags = '';
if (true) {
$include_files = Geo_Preferences::GetIncludeCSS($cnf_html_dir, $cnf_website_url);
$include_files_css = $include_files['css_files'];
foreach ($include_files_css as $css_file) {
$include_files_tags .= "<link rel=\"stylesheet\" type=\"text/css\" href=\"{$css_file}\" />\n";
}
}
$tag_string_ini .= $include_files_tags;
if (true) {
$tag_string_ini .= '
<script type="text/javascript" src="' . $Campsite['WEBSITE_URL'] . '/js/geocoding/map_popups.js"></script>
<script type="text/javascript" src="' . $Campsite['WEBSITE_URL'] . '/js/geocoding/openlayers/OpenLayers.js"></script>
<script type="text/javascript" src="' . $Campsite['WEBSITE_URL'] . '/js/geocoding/openlayers/OLlocals.js"></script>
<script type="text/javascript" src="' . $Campsite['WEBSITE_URL'] . '/js/geocoding/map_preview.js"></script>
';
}
$tag_string_mid .= '
<script type="text/javascript">
window.map_prepared = false;
';
if ('' != $geo_map_incl_async_init) {
$tag_string_mid .= '
if (undefined === window.' . $geo_map_incl_async_init . ') {
window.' . $geo_map_incl_async_init . ' = function () {
window.gv3_maps_loaded = true;
};
}
';
}
$tag_string_mid .= '
geo_object' . $map_suffix . ' = new geo_locations();
window.center_large_map' . $map_suffix . ' = function () {
try {
if (window.map_win_popup && window.map_win_popup.map_prepared) {
if ("' . $map_suffix . '" == window.map_win_popup.map_obj_specifier) {
window.map_win_popup.geo_object' . $map_suffix . '.map_showview();
}
}
} catch (e) {}
};
window.point_large_map_center' . $map_suffix . ' = function (index, select) {
try {
if (window.map_win_popup && window.map_win_popup.map_prepared) {
if ("' . $map_suffix . '" == window.map_win_popup.map_obj_specifier) {
window.map_win_popup.geo_object' . $map_suffix . '.center_poi(index);
if (select) {
window.map_win_popup.OpenLayers.HooksPopups.on_map_feature_select(window.map_win_popup.geo_object' . $map_suffix . ', index);
}
}
}
} catch (e) {}
};
window.geo_on_load_proc_check_async_map' . $map_suffix . ' = function()
{
var async_loaded = true;
if (' . $check_gv3 . ') {
var loaded_gv3 = false;
if ((undefined !== window.google) && (undefined !== window.google.maps) && (undefined !== window.google.maps.event)) {
loaded_gv3 = true;
}
if (' . $check_gv3_init . ') {
if ((undefined === window.gv3_maps_loaded) || (!window.gv3_maps_loaded)) {
loaded_gv3 = false;
}
}
if (!loaded_gv3) {async_loaded = false;}
}
if (0 < window.count_to_async_load' . $map_suffix . ') {
async_loaded = false;
}
if (async_loaded) {
setTimeout("geo_on_load_proc_phase2_map' . $map_suffix . '();", 250);
return;
}
setTimeout("geo_on_load_proc_check_async_map' . $map_suffix . '();", 250);
}
var geo_on_load_proc_map' . $map_suffix . ' = function()
{
var map_obj = document.getElementById ? document.getElementById("geo_map_mapcanvas' . $map_suffix . '") : null;
if (map_obj)
{
if (typeof(window.map_popup_win) == "undefined") {
map_obj.style.width = "' . $geo_map_usage['width'] . ($width_dyn ? '%' : 'px') . '";
map_obj.style.height = "' . $geo_map_usage['height'] . ($height_dyn ? '%' : 'px') . '";
} else {
// not setting the map size for the large map
}
';
$dyn_size_params = array();
if ($width_dyn) {
$dyn_size_params['width'] = $geo_map_usage['width'];
}
if ($height_dyn) {
$dyn_size_params['height'] = $geo_map_usage['height'];
}
if (0 < count($dyn_size_params)) {
$tag_string_mid .= '
if (typeof(window.map_popup_win) == "undefined") {
geo_object' . $map_suffix . '.set_size_percentage(' . json_encode($dyn_size_params) . ');
setInterval("geo_object' . $map_suffix . '.try_size_updated();", 1000);
}
';
}
$article_spec_arr = array('language_id' => $f_language_id, 'article_number' => 0);
$article_spec = json_encode($article_spec_arr);
$local_strings = array();
$local_strings['articles'] = getGS('Articles');
$local_strings_json = json_encode($local_strings);
$tag_string_mid .= "\n";
$tag_string_mid .= "geo_object{$map_suffix}.set_article_spec({$article_spec});";
$tag_string_mid .= "\n";
$tag_string_mid .= "geo_object{$map_suffix}.set_auto_focus({$geo_focus_json});";
$tag_string_mid .= "\n";
$tag_string_mid .= "geo_object{$map_suffix}.set_map_info({$geo_map_json});";
$tag_string_mid .= "\n";
$tag_string_mid .= "geo_object{$map_suffix}.set_map_usage({$geo_map_usage_json});";
$tag_string_mid .= "\n";
$tag_string_mid .= "geo_object{$map_suffix}.set_icons_info({$geo_icons_json});";
$tag_string_mid .= "\n";
$tag_string_mid .= "geo_object{$map_suffix}.set_popups_info({$geo_popups_json});";
$tag_string_mid .= "\n";
$tag_string_mid .= "geo_object{$map_suffix}.set_display_strings({$local_strings_json});";
$tag_string_mid .= "\n";
if ($area_points) {
$tag_string_mid .= "geo_object{$map_suffix}.set_area_constraints({$area_points}, {\"empty_only\":{$area_points_empty_only}});";
$tag_string_mid .= "\n";
}
if ($large_map_on_click) {
$tag_string_mid .= "if (typeof(window.map_popup_win) == \"undefined\") {\n";
$tag_string_mid .= " geo_object{$map_suffix}.set_action_subst(function(params) {";
$tag_string_mid .= " " . self::GetMultiMapTagOpen($p_languageId, $p_rank, "open_form") . "(params);\n";
$tag_string_mid .= " });\n";
$tag_string_mid .= "}\n";
$tag_string_mid .= "\n";
}
$tag_string_mid .= "if (typeof(window.map_popup_win) != \"undefined\") {\n";
$tag_string_mid .= " geo_object{$map_suffix}.set_map_large({width:{$width_large_map},height:{$height_large_map},map_holder:\"map_body_holder\"});\n";
$tag_string_mid .= "}\n";
$tag_string_mid .= "\n";
$tag_string_mid .= '
if (true && (typeof(window.map_popup_win) != "undefined")) {
';
$tag_async_load_bunch = '';
$count_to_async_load = 0;
foreach ($geo_map_incl_async_arr as $one_async_scr) {
if (!empty($one_async_scr)) {
$count_to_async_load += 1;
$tag_async_load_bunch .= '$.getScript("' . $one_async_scr . '", function() {window.count_to_async_load' . $map_suffix . ' -= 1;});';
}
}
$tag_string_mid .= '
window.count_to_async_load' . $map_suffix . ' = ' . $count_to_async_load . ';
window.gv3_maps_loaded = false;
' . $tag_async_load_bunch . '
if (true) {
setTimeout("geo_on_load_proc_check_async_map' . $map_suffix . '();", 250);
return;
}
}
setTimeout("geo_on_load_proc_phase2_map' . $map_suffix . '();", 250);
return;
}
};
var geo_on_load_proc_phase2_map' . $map_suffix . ' = function()
{
var res_state = false;
try {
res_state = OpenLayers.Util.test_ready();
} catch (e) {res_state = false;}
if (!res_state)
{
setTimeout("geo_on_load_proc_phase2_map' . $map_suffix . '();", 250);
return;
}
geo_object' . $map_suffix . '.main_openlayers_init("geo_map_mapcanvas' . $map_suffix . '");
geo_object' . $map_suffix . '.got_load_data(' . $poi_info_json . ', true);
window.map_prepared = true;
if (undefined !== window.deferred_action) {
try {window.deferred_action();} catch (e) {}
}
};
$(document).ready(function()
{
setTimeout("geo_on_load_proc_map' . $map_suffix . '();", 0);
});
</script>
';
// should we provide js for large-map openning
if ($open_large_map) {
$tag_string_fin .= self::GetLargeMapOpener($map_suffix, $width_large_map, $height_large_map, $label_large_map, $tag_string_ini . $tag_string_mid, self::GetMultiMapTagBody($p_languageId, $p_rank, true));
}
$tag_string .= $tag_string_top;
if ($load_common) {
$tag_string .= $tag_string_ini;
}
return $tag_string . $tag_string_mid . $tag_string_fin;
}