assign('msg',tra("The php extension MapScript of the Mapserver has not been loaded")); $smarty->display("error.tpl"); die; } if(@$feature_maps != 'y') { $smarty->assign('msg',tra("Feature disabled")); $smarty->display("error.tpl"); die; } if($tiki_p_map_view != 'y') { $smarty->assign('msg',tra("You do not have permissions to view the maps")); $smarty->display("error.tpl"); die; } //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('msg', tra("You do not have permission to do that")); $smarty->display('error.tpl'); die; } $mapfile = $_REQUEST['mapfile']; } else { $mapfile = $default_map; } $map_path = preg_replace("/\/?$/","/",$map_path); //checking the mapfile if (!is_file($map_path.$mapfile) || preg_match("/(\/\.)/", $map_path.$mapfile)) { $smarty->assign('msg',tra("invalid mapfile name")); $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."

".$errmsg."
"; $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 .="
";
  
  if ($line>=4) {
    $msg.="   ".$fcontents[$line-4];
    $msg.="   ".$fcontents[$line-3];
    $msg.="   ".$fcontents[$line-2];
  }
  $msg.="-->".$fcontents[$line-1];
  if ($line+3';
     $msg.=''.tra(';
     $msg.='';
  }
  
  $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=''.$page.'';
} else
{
  $pagelink=$page.'?';
}
$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'];
                      }
                   }//end of for loop
          }//end of if else loop
    } 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'];
		  }
		}//end of for loop
	} else {
    $my_extent = ms_newrectObj();
    $my_extent->setextent($map->extent->minx,$map->extent->miny,$map->extent->maxx,$map->extent->maxy);
	}
}

$query=FALSE;
$map_querymsg='';


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_point= ms_newpointObj();
      $query_point->setXY($corx,$cory);
      $map_querymsg.='';
      $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

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";
  }
  
  if ($query && ($my_layer->status==MS_ON)) // We have a query
  {
    if (@$my_layer->queryByPoint($query_point,MS_MULTIPLE,0)==MS_SUCCESS)
    {
      $my_layer->open();
      $map_querymsg.='';
      for($k=0;$k<$my_layer->getNumResults();$k++)
      {       
        $my_resultcache=$my_layer->getResult($k);
        $my_shape=$my_layer->getShape($my_resultcache->tileindex,$my_resultcache->shapeindex);
        $my_array=$my_shape->values;
        $map_querymsg.='';
        $col=0;
        foreach ($my_array as $key => $value)
        {
          if ($col %2) {
            $map_querymsg.='';
          } else {
            $map_querymsg.='';
          }
          $col++;            
        }
      }
      $my_layer->close();
    }   
  }

} 


$map_querymsg.="
'.tra('Query point:').' '.$corx.' / '.$cory.'
'.tra('layer:').' '.$my_layer->name.'
'.tra('Record:').' '.$my_resultcache->shapeindex.'
'.$key.''.$value.'
'.$key.''.$value.'
"; $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; } $image->free(); if (@$_REQUEST['maponly']!='frame') { $image_ref = $map->drawReferenceMap(); $image_ref_url = $image_ref->saveWebImage(); $image_ref->free(); $image_leg = $map->drawLegend(); $image_leg_url = $image_leg->saveWebImage(); $image_leg->free(); $image_scale = $map->drawScaleBar(); $image_scale_url = $image_scale->saveWebImage(); $image_scale->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]=''.$my_layers[$j]->name.''; } else { $layer_wiki[$j]=''.$my_layers[$j]->name.'?'; } } else { $layer_wiki[$j]=''.$my_layers[$j]->name.''; } 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=-4;$i<=4;$i++) { switch($i) { case "-4": case "-3": case "-2": $zoom_values[]=$i; $zoom_display[]='zoom out '.$i.'x'; break; case "0": $zoom_values[]=$i; $zoom_display[]='query'; break; case "1": $zoom_values[]=$i; $zoom_display[]='pan'; break; case "2": case "3": case "4": $zoom_values[]=$i; $zoom_display[]='zoom in '.$i.'x'; 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,"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') { $smarty->assign('mid','map/tiki-map.tpl'); $smarty->display("tiki.tpl"); } else { $smarty->assign("maponly","frame"); $smarty->display('map/tiki-map_frame.tpl'); } ?>