예제 #1
0
/**
 * Output the google map
 *
 * @param string $text text for the "toggle" link that shows/hides the map. Set empty to omit (then Map is always displayed)
 * @param string $id used to set the IDs for the toggle href element ($id_toggle) and the map element ($id_data)
 * @param string $hide initial map state: "hide", "show", or "colorbox"
 * @param object $obj optional image/album object. Pass string for generic map and use callback to set points
 * @param function $callback optional callback function to set map options.
 */
function printGoogleMap($text = NULL, $id = NULL, $hide = NULL, $obj = NULL, $callback = NULL)
{
    global $_zp_current_album, $_zp_current_image, $_x, $_y, $_z, $_n;
    /* controls of parameters */
    if (is_null($obj)) {
        if (is_null($_zp_current_image)) {
            $obj = $_zp_current_album;
        } else {
            $obj = $_zp_current_image;
        }
    }
    if (is_null($obj)) {
        return false;
    }
    if (is_object($obj)) {
        $type = $obj->table;
        $typeid = $obj->getID();
    } else {
        $type = $obj;
        $typeid = '';
    }
    if (is_null($text)) {
        $text = gettext('Google Map');
    }
    if (empty($text)) {
        $hide = 'show';
    }
    if (is_null($hide)) {
        $hide = getOption('gmap_display');
    }
    if (!is_string($hide)) {
        if ($hide) {
            $hide = 'hide';
        } else {
            $hide = 'show';
        }
    }
    /* map configuration */
    $mapControls = getOption('gmap_control_type');
    if ($mapControls == 'none') {
        $mapTypeControl = false;
    } else {
        $mapTypeControl = true;
        $map_control_type = $mapControls;
        $allowedMapTypes = array();
        if (getOption('gmap_map_hybrid')) {
            $allowedMapTypes[] = 'HYBRID';
        }
        if (getOption('gmap_map_roadmap')) {
            $allowedMapTypes[] = 'ROADMAP';
        }
        if (getOption('gmap_map_satellite')) {
            $allowedMapTypes[] = 'SATELLITE';
        }
        if (getOption('gmap_map_terrain')) {
            $allowedMapTypes[] = 'TERRAIN';
        }
    }
    $config['center'] = '0, 0';
    $config['zoom'] = 'auto';
    $config['cluster'] = true;
    $config['zoomControlStyle'] = getOption('gmap_zoom_size');
    if ($mapTypeControl) {
        $config['map_type'] = getOption('gmap_starting_map');
        $config['map_types_available'] = $allowedMapTypes;
    } else {
        $config['disableMapTypeControl'] = true;
    }
    $config['map_width'] = getOption('gmap_width') . "px";
    $config['map_height'] = getOption('gmap_height') . "px";
    $config['clusterMaxZoom'] = getOption('gmap_cluster_max_zoom');
    $config['clusterAverageCenter'] = true;
    $config['onclick'] = "iw.close();";
    $config['minifyJS'] = !TEST_RELEASE;
    $map = new Googlemaps($config);
    /* add markers from geocoded pictures */
    switch ($type) {
        case 'images':
            if (getImageGeodata($obj, $map)) {
                break;
            } else {
                $map = NULL;
                return false;
            }
        case 'albums':
            if (getAlbumGeodata($obj, $map)) {
                break;
            } else {
                $map = NULL;
                return false;
            }
        default:
            break;
    }
    if ($_n == 1) {
        $map->zoom = 13;
    }
    if ($_n) {
        $_x = $_x / $_n;
        $_y = $_y / $_n;
        $_z = $_z / $_n;
        $lon = number_format(atan2($_y, $_x) * 180 / M_PI, 12, '.', '');
        $hyp = sqrt($_x * $_x + $_y * $_y);
        $lat = number_format(atan2($_z, $hyp) * 180 / M_PI, 12, '.', '');
        $map->center = $lat . ', ' . $lon;
    }
    if (!is_null($callback)) {
        call_user_func($callback, $map);
    }
    /* map display */
    if (is_null($id)) {
        $id = $type . $typeid . '_googlemap';
    }
    $id_toggle = $id . '_toggle';
    $id_data = $id . '_data';
    switch ($hide) {
        case 'show':
            $map->create_map();
            ?>
			<script type="text/javascript">
				//<![CDATA[
			<?php 
            echo $map->output_js_contents;
            echo omsAdditions();
            ?>

				function image(album, image) {
					window.location = '<?php 
            echo WEBPATH;
            ?>
/index.php?album=' + album + '&image=' + image;
				}
				//]]>
			</script>
			<div id="<?php 
            echo $id_data;
            ?>
">
				<?php 
            echo $map->output_html;
            ?>
			</div>
			<?php 
            break;
        case 'hide':
            $map->create_map();
            ?>
			<script type="text/javascript">
				//<![CDATA[
			<?php 
            echo $map->output_js_contents;
            echo omsAdditions();
            ?>

				function image(album, image) {
					window.location = '<?php 
            echo WEBPATH;
            ?>
/index.php?album=' + album + '&image=' + image;
				}

				function toggle_<?php 
            echo $id_data;
            ?>
() {
					if ($('#<?php 
            echo $id_data;
            ?>
').hasClass('hidden_map')) {
						$('#<?php 
            echo $id_data;
            ?>
').removeClass('hidden_map');
					} else {
						$('#<?php 
            echo $id_data;
            ?>
').addClass('hidden_map');
					}
				}
				//]]>
			</script>
			<a id="<?php 
            echo $id_toggle;
            ?>
" href="javascript:toggle_<?php 
            echo $id_data;
            ?>
();" title="<?php 
            echo gettext('Display or hide the Google Map.');
            ?>
">
				<?php 
            echo $text;
            ?>
			</a>
			<div id="<?php 
            echo $id_data;
            ?>
" class="hidden_map">
				<?php 
            echo $map->output_html;
            ?>
			</div>
			<?php 
            break;
        case 'colorbox':
            if (zp_has_filter('theme_head', 'colorbox::css')) {
                $map->create_map();
                $map_data["output_js_contents"] = $map->output_js_contents;
                $map_data["output_html"] = $map->output_html;
                if (getOption('gmap_sessions')) {
                    $param = '';
                    $_SESSION['GoogleMapVars'] = $map_data;
                } else {
                    $serializedData = serialize($map_data);
                    if (function_exists('bzcompress')) {
                        $data = bzcompress($serializedData);
                    } else {
                        $data = gzcompress($serializedData);
                    }
                    $param = '?map_data=' . base64_encode($data);
                }
                ?>
				<a href="<?php 
                echo WEBPATH . '/' . ZENFOLDER . '/' . PLUGIN_FOLDER . '/googleMap/map.php' . $param;
                ?>
" title="<?php 
                echo $text;
                ?>
" class="google_map">
					<?php 
                echo $text;
                ?>
				</a>
				<script type="text/javascript">
					//<![CDATA[
					$(document).ready(function () {
						$(".google_map").colorbox({
							iframe: true,
							innerWidth: '<?php 
                echo (int) (getOption('gmap_width') + 20);
                ?>
px',
							innerHeight: '<?php 
                echo (int) ($cbox_h = getOption('gmap_height') + 20);
                ?>
px',
							close: '<?php 
                echo gettext("close");
                ?>
'
						});
					});
					//]]>
				</script>
				<?php 
            }
            break;
    }
}
예제 #2
0
/**
 * Output the google map
 *
 * @param string $text text for the "toggle" link that shows/hides the map. Set empty to omit
 * @param string $id used to set the IDs for the toggle href element ($id_toggle) and the map element ($id_data)
 * @param string $hide initial map state: "hide", "show", or "colrobox"
 * @param object $obj optional image/album object. Pass string for generic map and use callback to set points
 * @param function $callback optional callback function to set map options.
 */
function printGoogleMap($text = NULL, $id = NULL, $hide = NULL, $obj = NULL, $callback = NULL)
{
    global $_zp_current_album, $_zp_current_image;
    if (is_null($obj)) {
        if (is_null($_zp_current_image)) {
            $obj = $_zp_current_album;
        } else {
            $obj = $_zp_current_image;
        }
    }
    if (is_null($obj)) {
        $MAP_OBJECT = NULL;
        return false;
    }
    if (is_object($obj)) {
        $type = $obj->table;
        $typeid = $obj->getID();
    } else {
        $type = $obj;
        $typeid = '';
    }
    if (is_null($text)) {
        $text = gettext('Google Map');
    }
    if (empty($text)) {
        $hide = 'show';
    }
    if (is_null($hide)) {
        $hide = getOption('gmap_display');
    }
    if (!is_string($hide)) {
        if ($hide) {
            $hide = 'hide';
        } else {
            $hide = 'show';
        }
    }
    $MAP_OBJECT = new GoogleMapAPI($type . $typeid);
    $MAP_OBJECT->_minify_js = defined('RELEASE');
    $MAP_OBJECT->setZoomLevel(getOption('gmap_zoom'));
    $MAP_OBJECT->setWidth(getOption('gmap_width'));
    $MAP_OBJECT->setHeight(getOption('gmap_height'));
    $MAP_OBJECT->setMapType(getOption('gmap_starting_map'));
    $mapcontrol = getOption('gmap_control');
    if ($mapcontrol == 'none') {
        $MAP_OBJECT->disableTypeControls();
    } else {
        $MAP_OBJECT->enableMapControls();
        $MAP_OBJECT->setTypeControlsStyle($mapcontrol);
        $MAP_OBJECT->setControlSize(getOption('gmap_control_size'));
        $mapsallowed = array();
        if (getOption('gmap_map')) {
            $mapsallowed[] = 'ROADMAP';
        }
        if (getOption('gmap_hybrid')) {
            $mapsallowed[] = 'HYBRID';
        }
        if (getOption('gmap_satellite')) {
            $mapsallowed[] = 'SATELLITE';
        }
        if (getOption('gmap_terrain')) {
            $mapsallowed[] = 'TERRAIN';
        }
        $MAP_OBJECT->setTypeControlTypes($mapsallowed);
    }
    switch ($type) {
        case 'images':
            if (getImageGeodata($obj, $MAP_OBJECT)) {
                break;
            }
            $MAP_OBJECT = NULL;
            return false;
        case 'albums':
            if (getAlbumGeodata($obj, $MAP_OBJECT)) {
                break;
            }
            $MAP_OBJECT = NULL;
            return false;
        default:
            break;
    }
    $type = $type . $typeid . '_';
    if (is_null($id)) {
        $id = $type . 'googlemap';
    }
    $id_toggle = $id . '_toggle';
    $id_data = $id . '_data';
    if (!is_null($callback)) {
        call_user_func($callback, $MAP_OBJECT);
    }
    echo $MAP_OBJECT->getMapJS();
    switch ($hide) {
        case 'colorbox':
            $w = str_replace('px', '', $MAP_OBJECT->width) + 20;
            $h = str_replace('px', '', $MAP_OBJECT->height) + 20;
            if (function_exists('bzcompress')) {
                $method = 'bzip2';
                $data = bzcompress(serialize($MAP_OBJECT));
            } else {
                $method = 'gzip';
                $data = gzcompress(serialize($MAP_OBJECT));
            }
            $param = base64_encode($data);
            ?>
			<a href="javascript:<?php 
            echo $id_data;
            ?>
Colorbox();" title="<?php 
            echo $text;
            ?>
" class="google_map">
				<?php 
            echo $text;
            ?>
			</a>
			<div id="<?php 
            echo $id_data;
            ?>
" class="hidden_map">
				<div id="<?php 
            echo $id_data;
            ?>
_map">
					<?php 
            echo $MAP_OBJECT->printOnLoad();
            echo $MAP_OBJECT->printMap();
            ?>
				</div>
			</div>
			<script type="text/javascript">
				// <!-- <![CDATA[
				function <?php 
            echo $id_data;
            ?>
Colorbox() {
					$('#<?php 
            echo $id_data;
            ?>
').removeClass('hidden_map');
					$.colorbox({href:"#<?php 
            echo $id_data;
            ?>
_map", inline:true, open:true});
					$('#<?php 
            echo $id_data;
            ?>
').addClass('hidden_map');
				}
				$(document).ready(function(){
					$("#<?php 
            echo $id_data;
            ?>
_map").colorbox({iframe:true, innerWidth:'<?php 
            echo $w;
            ?>
px', innerHeight:'<?php 
            echo $h;
            ?>
px'});
				});
				// ]]> -->
			</script>
			<?php 
            break;
        case 'hide':
            ?>
			<script type="text/javascript">
				// <!-- <![CDATA[
				function toggle_<?php 
            echo $id_data;
            ?>
() {
					if ($('#<?php 
            echo $id_data;
            ?>
').hasClass('hidden_map')) {
						$('#<?php 
            echo $id_data;
            ?>
').removeClass('hidden_map');
					} else {
						$('#<?php 
            echo $id_data;
            ?>
').addClass('hidden_map');
					}
				}
				// ]]> -->
			</script>
			<a id="<?php 
            echo $id_toggle;
            ?>
" href="javascript:toggle_<?php 
            echo $id_data;
            ?>
();" title="<?php 
            echo gettext('Display or hide the Google Map.');
            ?>
">
				<?php 
            echo $text;
            ?>
			</a>
			<div id="<?php 
            echo $id_data;
            ?>
" class="hidden_map">
				<?php 
            echo $MAP_OBJECT->printOnLoad();
            echo $MAP_OBJECT->printMap();
            ?>
			</div>
			<?php 
            break;
        case 'show':
            ?>
			<a id="<?php 
            echo $id_toggle;
            ?>
" href="javascript:toggleMap('<?php 
            echo $id_data;
            ?>
');" title="<?php 
            echo gettext('Display or hide the Google Map.');
            ?>
">
				<?php 
            echo $text;
            ?>
			</a>
			<div id="<?php 
            echo $id_data;
            ?>
">
				<?php 
            echo $MAP_OBJECT->printOnLoad();
            echo $MAP_OBJECT->printMap();
            ?>
			</div>
			<?php 
            break;
    }
}