From b0c9f3d60df9226827a38fe7c747eaff926f27e6 Mon Sep 17 00:00:00 2001 From: Edmar Moretti Date: Thu, 25 Aug 2016 22:02:48 -0300 Subject: [PATCH] Correção nas operações de salvar e recuperar mapa do banco --- admin/php/mapas.php | 19 +++++++++++++------ classesphp/funcoes_gerais.php | 42 ++++++++++++++++++++++++++++++------------ ferramentas/salvamapa/geraminiatura.php | 8 +++++--- 3 files changed, 48 insertions(+), 21 deletions(-) diff --git a/admin/php/mapas.php b/admin/php/mapas.php index 4805835..378c0d3 100755 --- a/admin/php/mapas.php +++ b/admin/php/mapas.php @@ -189,6 +189,8 @@ function salvaMapfile(){ //a string que vai no metadata segue o padrao JSON //o parser para reconstruir os valores e feito em javascript, no cliente // + $_GET["arqmapfile"] = str_replace(".map","",$_GET["arqmapfile"]); + $_GET["arqmapfile"] = str_replace(".","",$_GET["arqmapfile"]).".map"; $customizacoesinit = array(); if(isset($_GET["preferenciasbase64"]) || isset($_GET["geometriasbase64"]) || isset($_GET["graficosbase64"]) || isset($_GET["tabelasbase64"])){ $customizacoesinit[] = '"preferenciasbase64":"'.$_GET["preferenciasbase64"].'"'; @@ -209,13 +211,15 @@ function salvaMapfile(){ $handle = fopen ($_GET["arqmapfile"], 'r'); $conteudo = fread ($handle, filesize ($_GET["arqmapfile"])); fclose ($handle); - $conteudo = base64_encode($conteudo); - if($conteudo == false){ - return array("id"=>"","status"=>"erro"); - } + //$conteudo = base64_encode($conteudo); + $conteudo = str_replace("'","_!_",$conteudo); + $conteudo = str_replace('"',"_!!_",$conteudo); + $conteudo = str_replace(array(""),"",$conteudo); + require_once("conexao.php"); if($convUTF){ - $_GET["nome_mapa"] = utf8_encode($_GET["nome_mapa"]); + $_GET["nome_mapa"] = utf8_encode($_GET["nome_mapa"]); + $conteudo = utf8_encode($conteudo); } $retorna = ""; if(empty($id_mapa)){ @@ -237,6 +241,9 @@ function salvaMapfile(){ else{ $id = $id_mapa; } + if (filter_var($id, FILTER_VALIDATE_INT) === false){ + return array("id"=>"","status"=>"Error!: "); + } $dataCol = array( "mapfile" => $conteudo, "publicado_mapa" => "sim", @@ -249,7 +256,7 @@ function salvaMapfile(){ return array("id"=>$id,"status"=>"ok"); } catch (PDOException $e){ - return array("id"=>"","status"=>"Error!: " . " "); + return array("id"=>"","status"=>"Error!: "); } } /* diff --git a/classesphp/funcoes_gerais.php b/classesphp/funcoes_gerais.php index 7258ed5..d1207c6 100755 --- a/classesphp/funcoes_gerais.php +++ b/classesphp/funcoes_gerais.php @@ -2910,31 +2910,49 @@ function cloneInlineSymbol($layern,$nmapa,$mapa){ //recupera um mapfile armazenado no banco de dados de administracao //ver admin/php/mapas.php salvaMapfile function restauraMapaAdmin($id_mapa,$dir_tmp){ - return; + if (filter_var($id_mapa, FILTER_VALIDATE_INT) === false){ + exit; + } include(dirname(__FILE__)."/../admin/php/conexao.php"); if(!empty($esquemaadmin)){ $esquemaadmin = str_replace(".","",$esquemaadmin)."."; } $q = $dbh->query("select * from ".$esquemaadmin."i3geoadmin_mapas where id_mapa=$id_mapa ",PDO::FETCH_ASSOC); $mapasalvo = $q->fetchAll(); + $dbh = null; + $dbhw = null; $mapasalvo = $mapasalvo[0]; $base = ""; if(strtoupper($mapasalvo["publicado"]) != "NAO"){ - $base = $dir_tmp."/".nomeRandomico().".map"; + $base = $dir_tmp."/".nomeRandomico()."_restaurado.map"; $baseh = fopen($base,'w'); - $registro = $mapasalvo["mapfile"]; + $mapfile = $mapasalvo["mapfile"]; + //$registro = $mapasalvo["mapfile"]; //verifica se existem parametros junto com o registro - $registro = explode(",",$registro); - $mapfile = $registro[0]; + //$registro = explode(",",$registro); + //$mapfile = $registro[0]; //adapta para versoes novas do mapserver - $mapfile = base64_decode($mapfile); - $mapfile = str_replace("TYPE ANNOTATION","TYPE POINT",$mapfile); + //verifica se esta em base 64 (versoes antigas) + if (!preg_match('/MAP/',$mapfile)) { + $mapfile = base64_decode($mapfile); + } + else { + //substitui strings especiais + $mapfile = str_replace("_!!_",'"',$mapfile); + $mapfile = str_replace("_!_","'",$mapfile); + } + $mapfile = str_ireplace("TYPE ANNOTATION","TYPE POINT",$mapfile); + $mapfile = str_replace(array(""),"",$mapfile); $s = fwrite($baseh,$mapfile); - fclose($baseh); - } - $dbh = null; - $dbhw = null; - return $base; + fclose($baseh); + if (@ms_newMapObj($base)){ + return $base; + } + else{ + unlink($base); + } + } + return false; } // //converte uma string de conexao do mapserver em um array com os componentes da conexao diff --git a/ferramentas/salvamapa/geraminiatura.php b/ferramentas/salvamapa/geraminiatura.php index 8d17547..e7746a1 100755 --- a/ferramentas/salvamapa/geraminiatura.php +++ b/ferramentas/salvamapa/geraminiatura.php @@ -15,8 +15,11 @@ if (filter_var($_GET["restauramapa"], FILTER_VALIDATE_INT) === false){ } $base = restauraMapaAdmin($_GET["restauramapa"],$dir_tmp); - + $nomeImagem = dirname($base)."/".str_replace(".map","","restauramapa".$_GET["restauramapa"])."_miniatura.png"; +//por seguranca +$nomeImagem = str_replace(".png","",$nomeImagem); +$nomeImagem = str_replace(".","",$nomeImagem).".png"; if(!file_exists($nomeImagem)){ $mapa = ms_newMapObj($base); @@ -45,8 +48,7 @@ if(!file_exists($nomeImagem)){ $sca = $mapa->scalebar; $sca->set("status",MS_OFF); $objImagemM = @$mapa->draw(); - $objImagemM->saveImage($nomeImagem); - + $objImagemM->saveImage($nomeImagem); } ob_clean(); header('Content-Length: '.filesize($nomeImagem)); -- libgit2 0.21.2