0byt3m1n1
Path:
/
data
/
applications
/
aps
/
tikiwiki
/
7.0-0
/
standard
/
htdocs
/
[
Home
]
File: tiki-map.php
<?php // (c) Copyright 2002-2011 by authors of the Tiki Wiki CMS Groupware Project // // All Rights Reserved. See copyright.txt for details and a complete list of authors. // Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details. // $Id: tiki-map.php 33195 2011-03-02 17:43:40Z changi67 $ $_SERVER["SCRIPT_NAME"] = basename(__FILE__); require_once ('tiki-setup.php'); // was lib/setup/menus.php but only used here function setDisplayMenu($name) { global $smarty; if ( getCookie($name, 'menu', isset($_COOKIE['menu']) ? null : 'o') == 'o' ) { $smarty->assign('mnu_'.$name, 'display:block;'); $smarty->assign('icn_'.$name, 'o'); } else { $smarty->assign('mnu_'.$name, 'display:none;'); } } setDisplayMenu('nlmenu'); setDisplayMenu('evmenu'); setDisplayMenu('chartmenu'); setDisplayMenu('mymenu'); setDisplayMenu('wfmenu'); setDisplayMenu('usrmenu'); setDisplayMenu('friendsmenu'); setDisplayMenu('wikimenu'); setDisplayMenu('homeworkmenu'); setDisplayMenu('srvmenu'); setDisplayMenu('trkmenu'); setDisplayMenu('quizmenu'); setDisplayMenu('formenu'); setDisplayMenu('dirmenu'); setDisplayMenu('admmnu'); setDisplayMenu('faqsmenu'); setDisplayMenu('galmenu'); setDisplayMenu('cmsmenu'); setDisplayMenu('blogmenu'); setDisplayMenu('filegalmenu'); setDisplayMenu('mapsmenu'); setDisplayMenu('layermenu'); setDisplayMenu('shtmenu'); setDisplayMenu('prjmenu'); // end from lib/setup/menus.php include_once ('lib/stats/statslib.php'); include_once ('lib/map/map_query.php'); if (!function_exists('ms_newMapObj')) { $msg = tra("You must first setup MapServer"); $smarty->assign('msg', $msg); $smarty->display('error.tpl'); die; } $access->check_feature(array('feature_maps','ajax_xajax')); $access->check_permission('tiki_p_map_view'); //setting up xajax require_once ("lib/ajax/xajax/xajax_core/xajaxAIO.inc.php"); $xajax = new xajax("x_maps.php"); //$xajax->setFlag('debug',true); //$xajax->configure('statusMessages',true); $xajax->register(XAJAX_FUNCTION, "map_redraw"); $smarty->assign('xajax_javascript', $xajax->getJavascript("lib/ajax/xajax")); //handling the layer manager menu: visible by default if never used before if (getCookie('layermenu', "menu") != 'o' && getCookie('layermenu', "menu") != 'c') { $smarty->assign('mnu_layermenu', 'display:block;'); } $smarty->assign('tiki_p_map_edit', $tiki_p_map_edit); if (isset($_REQUEST['mapfile'])) { // Validate to prevent displaying any file if (strstr($_REQUEST["mapfile"], '..')) { $smarty->assign('errortype', 401); $msg = tra("You do not have permission to do that"); $smarty->assign('msg', $msg); $smarty->display('error.tpl'); die; } $mapfile = $_REQUEST['mapfile']; } else { $mapfile = $prefs['default_map']; } $map_path = preg_replace("/\/?$/", "/", $prefs['map_path']); //checking the mapfile if (!is_file($map_path . $mapfile) || preg_match("/(\/\.)/", $map_path . $mapfile)) { $msg = tra("invalid mapfile name") . $map_path . $mapfile; $smarty->assign('msg', $msg); $smarty->display('error.tpl'); die; } // user defined error handling function to handle errors in loading mapfile function userErrorHandler($errno, $errmsg, $filename, $linenum, $vars) { global $smarty; global $style_base; global $map_path; global $mapfile; global $tiki_p_map_edit; $msg = tra("An error as occured with the mapfile:") . " " . $mapfile . "<br /><br />" . $errmsg . "<br />"; $pos = strpos($errmsg, ":("); if ($errmsg[$pos + 2] == 'l') { $line = substr($errmsg, $pos + 6); } else { $line = substr($errmsg, $pos + 2); } $pos = strpos($line, ")"); $line = substr($line, 0, $pos); if ($errmsg[$pos + 2] != 'l') $line++; $fcontents = file($map_path . $mapfile); $msg.= "<pre>"; if ($line >= 4) { $msg.= " " . $fcontents[$line - 4]; $msg.= " " . $fcontents[$line - 3]; $msg.= " " . $fcontents[$line - 2]; } $msg.= "-->" . $fcontents[$line - 1]; if ($line + 3 < count($fcontents)) { $msg.= " " . $fcontents[$line + 0]; $msg.= " " . $fcontents[$line + 1]; $msg.= " " . $fcontents[$line + 2]; $msg.= " " . $fcontents[$line + 3]; } $msg.= "<pre/><br />"; if ($tiki_p_map_edit == 'y') { $msg.= '<a class="link" href="tiki-map_edit.php?mapfile=' . $mapfile . '&mode=editing">'; $msg.= '<img src="pics/icons/wrench.png" alt="' . tra("edit") . '" title="' . tra("edit") . '" width="16" height="16" />'; $msg.= '</a>'; } $smarty->assign('msg', $msg); $smarty->display('error.tpl'); die; } $old_error_handler = set_error_handler("userErrorHandler"); $map = ms_newMapObj($map_path . $mapfile); restore_error_handler(); $page = $map->name . " Map"; $smarty->assign("page", $page); if ($tikilib->page_exists($page)) { $pagelink = '<a href="tiki-index.php?page=' . $page . '">' . $page . '</a>'; } else { $pagelink = $page . '<a href="tiki-editpage.php?page=' . $page . '">?</a>'; } $smarty->assign("pagelink", $pagelink); $layerbol = FALSE; if (isset($_REQUEST['oldsize'])) { $layerbol = TRUE; } if (isset($_REQUEST['size']) && is_numeric($_REQUEST['size']) && ($_REQUEST['size'] > 0) && ($_REQUEST['size'] < 2000)) { $xsize = floor($_REQUEST['size']); $ysize = floor(($_REQUEST['size'] * $map->height / $map->width)); $size = $_REQUEST['size']; } else { $xsize = $map->width; $ysize = $map->height; $size = $map->width; } $map->Set("width", $xsize); $map->Set("height", $ysize); $map->scalebar->Set("width", $xsize); //Mapview. Get first view, to check if view is !/empty $map_view = $map->getMetaData("VIEW1"); $smarty->assign('map_view', $map_view); $number_of_views = 30; $counter = 0; $view_name[] = ""; $view_values[] = 0; for ($i = 1; $i < $number_of_views; $i++) { $viewdata = $map->getMetaData("VIEW" . $i); if (!empty($viewdata)) { $v_data = explode(',', $viewdata, 5); $view_name[$i] = $v_data[0]; $v_minx = $v_data[1]; $v_miny = $v_data[2]; $v_maxx = $v_data[3]; $v_maxy = $v_data[4]; $view_values[$i] = array($v_minx, $v_miny, $v_maxx, $v_maxy); $counter++; } } $smarty->assign('view_name', $view_name); $smarty->assign('view_values', $view_values); if (isset($_REQUEST['minx']) && isset($_REQUEST['miny']) && isset($_REQUEST['maxx']) && isset($_REQUEST['maxy'])) { if (isset($_REQUEST['Go'])) { if (empty($map_view) || !(in_array($_REQUEST['view'], $view_name)) || empty($_REQUEST['view'])) { $my_extent = ms_newrectObj(); $my_extent->setextent($map->extent->minx, $map->extent->miny, $map->extent->maxx, $map->extent->maxy); } else { //set view extents for ($view_count = 1; $view_count < $counter + 1; $view_count++) { if ($_REQUEST['view'] == $view_name[$view_count]) { $j = $view_count; $view_minx = $view_values[$j][0]; $view_miny = $view_values[$j][1]; $view_maxx = $view_values[$j][2]; $view_maxy = $view_values[$j][3]; $my_extent = ms_newrectObj(); $my_extent->setextent($view_minx, $view_miny, $view_maxx, $view_maxy); $view = $_REQUEST['view']; } } } } else { $my_extent = ms_newrectObj(); $my_extent->setextent($_REQUEST['minx'], $_REQUEST['miny'], $_REQUEST['maxx'], $_REQUEST['maxy']); } } else { if (isset($_REQUEST['view']) && in_array($_REQUEST['view'], $view_name)) { //set view extents for ($view_count = 1; $view_count < $counter + 1; $view_count++) { if ($_REQUEST['view'] == $view_name[$view_count]) { // $view=$_REQUEST['view']; $j = $view_count; $view_minx = $view_values[$j][0]; $view_miny = $view_values[$j][1]; $view_maxx = $view_values[$j][2]; $view_maxy = $view_values[$j][3]; $my_extent = ms_newrectObj(); $my_extent->setextent($view_minx, $view_miny, $view_maxx, $view_maxy); $view = $_REQUEST['view']; } } } else { $my_extent = ms_newrectObj(); $my_extent->setextent($map->extent->minx, $map->extent->miny, $map->extent->maxx, $map->extent->maxy); } } $query = FALSE; if (isset($_REQUEST['zoom'])) { $zoom = $_REQUEST['zoom']; $my_point = ms_newpointObj(); if (isset($_REQUEST['x']) && isset($_REQUEST['y']) && $zoom != 0) { if (isset($_REQUEST['oldsize'])) { $my_point->setXY(floor($_REQUEST['x'] * $size / $_REQUEST['oldsize']), floor($_REQUEST['y'] * $size / $_REQUEST['oldsize'])); } else { $my_point->setXY(floor($_REQUEST['x']), floor($_REQUEST['y'])); } } else { $my_point->setXY(($map->width) / 2, ($map->height) / 2); } if ($zoom == 0) { // It is a query $map->zoompoint(1, $my_point, $map->width, $map->height, $my_extent); if (isset($_REQUEST['x']) && isset($_REQUEST['y'])) { //get the real world coordinates $x = $_REQUEST['x']; $y = $_REQUEST['y']; $width = $map->width - 1; $height = $map->height - 1; $minx = $map->extent->minx; $maxx = $map->extent->maxx; $miny = $map->extent->miny; $maxy = $map->extent->maxy; $dx = $maxx - $minx; $dy = $maxy - $miny; $factorx = $dx / $width; $factory = $dy / $height; $corx = $x * $factorx + $minx; $cory = $maxy - $y * $factory; $query = TRUE; } } else { $map->zoompoint($zoom, $my_point, $map->width, $map->height, $my_extent); } } else { $zoom = 1; } $count_group = 0; //define which layer is visible, has labels and can be queried for ($j = 0; $j < $map->numlayers; $j++) { $my_layer = $map->getLayer($j); if (isset($_REQUEST[str_replace(" ", "_", $my_layer->name) ])) { if ($_REQUEST[str_replace(" ", "_", $my_layer->name) ] == 1) { $my_layer->Set("status", MS_ON); } } else { // test to see if we are not on the first drawing if ($layerbol) { $my_layer->Set("status", MS_OFF); } } //Display labels if ($my_layer->labelitem != "") { $layer_label[$j] = "On"; if (isset($_REQUEST[str_replace(" ", "_", $my_layer->name) . "_label"])) { $my_layers_label_checked[$j] = "checked"; } else { $my_layers_label_checked[$j] = ""; $my_layer->Set("labelmaxscale", 0); } } else { $layer_label[$j] = "Off"; } if ($my_layer->tolerance != - 1) { $layer_query[$j] = "On"; } else { $layer_query[$j] = "Off"; } } // We have a query so let's get the results. if ($query) { $map_querymsg = map_query($map, $corx, $cory); $smarty->assign('map_querymsg', $map_querymsg); } if (@$_REQUEST['maponly'] == 'frame') { $scalebar = $map->scalebar; $scalebar->set("status", MS_EMBED); $scalebar->set("transparent", TRUE); } $image = $map->drawquery(); $image_url = $image->saveWebImage(); //the user wants an image only if (isset($_REQUEST['maponly']) && $_REQUEST['maponly'] == 'yes') { header("Content-type: image/png"); $image_file = str_replace($image->imageurl, $image->imagepath, $image_url); readfile($image_file); $image->free(); die; } if (@$_REQUEST['maponly'] != 'frame') { $image_ref = $map->drawReferenceMap(); $image_ref_url = $image_ref->saveWebImage(); $image_leg = $map->drawLegend(); $image_leg_url = $image_leg->saveWebImage(); $image_scale = $map->drawScaleBar(); $image_scale_url = $image_scale->saveWebImage(); $image_leg->free(); $image_ref->free(); $image_scale->free(); } $image->free(); $minx = $map->extent->minx; $miny = $map->extent->miny; $maxx = $map->extent->maxx; $maxy = $map->extent->maxy; $smarty->assign('mapfile', $mapfile); $smarty->assign('image_url', $image_url); if (@$_REQUEST['maponly'] != 'frame') { $smarty->assign('image_ref_url', $image_ref_url); $smarty->assign('image_leg_url', $image_leg_url); $smarty->assign('image_scale_url', $image_scale_url); } $smarty->assign('minx', $minx); $smarty->assign('miny', $miny); $smarty->assign('maxx', $maxx); $smarty->assign('maxy', $maxy); $smarty->assign('size', $size); $smarty->assign('xsize', $xsize); $smarty->assign('ysize', $ysize); $smarty->assign('possiblesizes', array(200, 300, 400, 600, 800, 1000)); $smarty->assign('displaysizes', array(200, 300, 400, 600, 800, 1000)); $smarty->assign_by_ref('layer_label', $layer_label); $smarty->assign_by_ref('my_layers_label_checked', $my_layers_label_checked); $smarty->assign_by_ref('layer_query', $layer_query); // is the user registered? if (isset($_REQUEST['view_user'])) { $userwatch = $_REQUEST['view_user']; } else { if ($user) { $userwatch = $user; } else { $userwatch = ""; } } for ($j = 0; $j < $map->numlayers; $j++) { $my_layers[$j] = $map->getLayer($j); //getting layer by group if (!empty($my_layers[$j]->group)) { $my_layer_group[$j] = $my_layers[$j]->group; $smarty->assign('unique_layer_group', array_unique($my_layer_group)); } //Metadata handling $link = $my_layers[$j]->getMetadata("WIKI"); if ($link != "") { if ($tikilib->page_exists($link)) { $layer_wiki[$j] = '<a href="tiki-index.php?page=' . $link . '"><small>' . $my_layers[$j]->name . '</small></a>'; } else { $layer_wiki[$j] = '<small>' . $my_layers[$j]->name . '<a href="tiki-editpage.php?page=' . $link . '">?</a></small>'; } } else { $layer_wiki[$j] = '<small>' . $my_layers[$j]->name . '</small>'; } if ($userwatch != "") { $layer_download[$j] = $my_layers[$j]->getMetadata("DOWNLOAD"); } else { $layer_download[$j] = ""; } //Layer display Handling if ($my_layers[$j]->status == MS_ON) { $my_layers_checked[$j] = "checked"; $bolcheck = 1; } else { $my_layers_checked[$j] = ""; $bolcheck = 0; } } $smarty->assign_by_ref('my_layers', $my_layers); $smarty->assign_by_ref('my_layers_checked', $my_layers_checked); $smarty->assign_by_ref('layer_wiki', $layer_wiki); $smarty->assign_by_ref('layer_download', $layer_download); $smarty->assign('userwatch', $userwatch); for ($i = - 2; $i <= 2; $i++) { switch ($i) { case "-2": $zoom_values[] = $i; $zoom_display[] = 'Zoom out'; break; case "0": $zoom_values[] = $i; $zoom_display[] = 'query'; break; case "1": $zoom_values[] = $i; $zoom_display[] = 'pan'; break; case "2": $zoom_values[] = $i; $zoom_display[] = 'Zoom in'; break; } } $smarty->assign('zoom', $zoom); $smarty->assign_by_ref('zoom_values', $zoom_values); $smarty->assign_by_ref('zoom_display', $zoom_display); //add a hit $statslib->stats_hit($mapfile, "map"); //get some stats info $data = nl2br(file_get_contents($map_path . $mapfile)); $ip = ""; $lastUser = tra("unknown"); $lastModif = ""; if (strpos($data, "##TIKIMAPS HEADER: END##") != FALSE) { $searchdata = substr($data, 0, strpos($data, "##TIKIMAPS HEADER: END##")); if (strpos($searchdata, "#IP: ") != FALSE) { $IP = substr($searchdata, strpos($searchdata, "#IP: ") + 4); $ip = substr($IP, 0, strpos($IP, "<br")); } if (strpos($searchdata, "#Modified by: ") != FALSE) { $IP = substr($searchdata, strpos($searchdata, "#Modified by: ") + 13); $lastUser = substr($IP, 0, strpos($IP, "<br")); } if (strpos($searchdata, "#GMT Date: ") != FALSE) { $IP = substr($searchdata, strpos($searchdata, "#GMT Date: ") + 10); $IP = substr($IP, 0, strpos($IP, "<br")); $lastModif = gmmktime(substr($IP, 10, 2), substr($IP, 12, 2), substr($IP, 14, 2), substr($IP, 5, 2), substr($IP, 7, 2), substr($IP, 1, 4)); } } $smarty->assign('ip', $ip); $smarty->assign('lastUser', $lastUser); $smarty->assign('lastModif', $lastModif); $mapstats = $statslib->object_hits($mapfile, "map"); $mapstats7days = $statslib->object_hits($mapfile, "map", 7); $smarty->assign('mapstats', $mapstats); $smarty->assign('mapstats7days', $mapstats7days); //display the template if (@$_REQUEST['maponly'] != 'frame') { $section = 'maps'; include_once ('tiki-section_options.php'); $smarty->assign('mid', 'map/tiki-map.tpl'); $smarty->display("tiki.tpl"); } else { $smarty->assign("maponly", "frame"); $smarty->display('map/tiki-map_frame.tpl'); }