From eefe686ae48701ccbee718329fb4493c2a5af26a Mon Sep 17 00:00:00 2001 From: Edmar Moretti Date: Fri, 19 Aug 2016 00:24:18 -0300 Subject: [PATCH] Opção de upload de sahpefile no novo sistema de administração --- admin/php/subirshapefile.php | 6 ++++-- admin1/dicionario/uploadshp.js | 2 +- admin1/upload/arquivo/exec.php | 401 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- admin1/upload/arquivo/index.js | 1 - admin1/upload/arquivo/index.php | 32 +++++++++++++++++++++----------- ferramentas/upload/dicionario.js | 2 +- 6 files changed, 202 insertions(+), 242 deletions(-) diff --git a/admin/php/subirshapefile.php b/admin/php/subirshapefile.php index c5009cf..43f4265 100755 --- a/admin/php/subirshapefile.php +++ b/admin/php/subirshapefile.php @@ -29,6 +29,8 @@ error_reporting(0); if (isset($_FILES['i3GEOuploadshp']['name'])) { $dirDestino = $_POST["dirDestino"]; + $dirDestino = str_replace(".","",$dirDestino); + if(empty($dirDestino)){ echo "Pasta nao encontrada"; exit; } @@ -45,8 +47,8 @@ if (isset($_FILES['i3GEOuploadshp']['name'])) flush(); sleep(1); $dirmap = $dirDestino; - if(!file_exists($dirmap)){ - echo "

Pasta não existe no servidor"; + if(!file_exists($dirmap) || $dirmap == dirname ( $locaplic ) || $dirmap == dirname ( $locaplic )."/"){ + echo "

Pasta não existe no servidor ou não permitido"; paraAguarde(); exit; } diff --git a/admin1/dicionario/uploadshp.js b/admin1/dicionario/uploadshp.js index 0614281..e9bba8c 100755 --- a/admin1/dicionario/uploadshp.js +++ b/admin1/dicionario/uploadshp.js @@ -1,6 +1,6 @@ i3GEOadmin.uploadshp.dicionario = { 'pastaArmazenamento' : [ { - pt : "Pasta no servidor onde os dados serão armazenados (caminho físico completo)", + pt : "Pasta no servidor onde os dados serão armazenados. Apenas pastas localizadas no mesmo local onde o i3Geo está instalado são permitidas. Exemplo, no caso da instalação ser /var/www e existir a pasta /var/www/data, digite apenas data.", en : "", es : "" } ], diff --git a/admin1/upload/arquivo/exec.php b/admin1/upload/arquivo/exec.php index 6f2eba9..728c986 100755 --- a/admin1/upload/arquivo/exec.php +++ b/admin1/upload/arquivo/exec.php @@ -1,248 +1,197 @@ + + + + + + + + + +

+Carregando o arquivo...

"; + ob_flush (); + flush (); + sleep ( 1 ); + $dirmap = $dirDestino; + if (! file_exists ( $dirmap ) || $dirmap == dirname ( $locaplic ) || $dirmap == dirname ( $locaplic )."/") { + echo "

Pasta não existe no servidor ou o local não é permitido"; exit (); - break; - case "LISTA" : - $usuarios = pegaDados ( "SELECT id_usuario,ativo,data_cadastro,email,login,nome_usuario from " . $esquemaadmin . "i3geousr_usuarios order by nome_usuario", $dbh, false ); - $papeis = pegaDados ( "SELECT P.id_papel, P.nome, P.descricao, UP.id_usuario FROM " . $esquemaadmin . "i3geousr_usuarios AS U JOIN " . $esquemaadmin . "i3geousr_papelusuario AS UP ON U.id_usuario = UP.id_usuario JOIN " . $esquemaadmin . "i3geousr_papeis AS P ON UP.id_papel = P.id_papel ", dbh, false ); - if ($usuarios === false || $papeis === false) { - $dbhw = null; - $dbh = null; - header ( "HTTP/1.1 500 erro ao consultar banco de dados" ); - exit (); - } - $o = array (); - foreach ( $usuarios as $usuario ) { - // pega os papeis registrados para cada operacao - $p = array (); - foreach ( $papeis as $papel ) { - if ($papel["id_usuario"] == $usuario["id_usuario"]) { - $p[$papel["id_papel"]] = $papel; - } - } - $usuario["papeis"] = $p; - $o[] = $usuario; - } - $papeis = pegaDados ( "SELECT * from " . $esquemaadmin . "i3geousr_papeis order by nome", $dbh ); - $dbhw = null; - $dbh = null; - if ($papeis === false) { - header ( "HTTP/1.1 500 erro ao consultar banco de dados" ); - exit(); - } - retornaJSON ( array ( - "usuarios" => $o, - "papeis" => $papeis - ) ); - break; - case "EXCLUIR" : - $retorna = excluir ( $id_usuario, $dbhw ); - $dbhw = null; - $dbh = null; - if ($retorna === false) { - header ( "HTTP/1.1 500 erro ao consultar banco de dados" ); - exit (); - } - retornaJSON ( $id_usuario ); + } + // verifica nomes + verificaNome ( $_FILES ['i3GEOuploadshp'] ['name'] ); + verificaNome ( $_FILES ['i3GEOuploadshx'] ['name'] ); + verificaNome ( $_FILES ['i3GEOuploaddbf'] ['name'] ); + + if ($_FILES ['i3GEOuploadprj'] ['name'] != "") { + verificaNome ( $_FILES ['i3GEOuploadprj'] ['name'] ); + } + + // remove acentos + $nomePrefixo = str_replace ( " ", "_", removeAcentos ( str_replace ( ".shp", "", $_FILES ['i3GEOuploadshp'] ['name'] ) ) ); + + $nomePrefixo = str_replace ( ".", "", $nomePrefixo ); + $nomePrefixo = strip_tags ( $nomePrefixo ); + $nomePrefixo = htmlspecialchars ( $nomePrefixo, ENT_QUOTES ); + + // sobe arquivo + $Arquivo = $_FILES ['i3GEOuploadshp'] ['tmp_name']; + if (file_exists ( $dirmap . "/" . $nomePrefixo . ".shp" )) { + echo "

Já existe um SHP com o nome "; + paraAguarde (); exit (); - break; - case "ENVIARSENHA" : - if($senha == "" || $email == ""){ - header ( "HTTP/1.1 500 erro ao enviar e-mail. Prrencha o valor de e-mail e senha" ); - exit (); - } - $retorna = enviarSenha ( $senha, $email ); - if ($retorna === false) { - header ( "HTTP/1.1 500 erro ao enviar e-mail $email" ); + } + $status = move_uploaded_file ( $Arquivo, $dirmap . "/" . $nomePrefixo . ".shp" ); + if ($status != 1) { + echo "

Ocorreu um erro no envio do arquivo SHP. Pode ser uma limitação quanto ao tamanho do arquivo ou permissão de escrita na pasta indicada."; + paraAguarde (); + exit (); + } + + $Arquivo = $_FILES ['i3GEOuploadshx'] ['tmp_name']; + $status = move_uploaded_file ( $Arquivo, $dirmap . "/" . $nomePrefixo . ".shx" ); + if ($status != 1) { + echo "

Ocorreu um erro no envio do arquivo SHX"; + paraAguarde (); + exit (); + } + + $Arquivo = $_FILES ['i3GEOuploaddbf'] ['tmp_name']; + $status = move_uploaded_file ( $Arquivo, $dirmap . "/" . $nomePrefixo . ".dbf" ); + if ($status != 1) { + echo "

Ocorreu um erro no envio do arquivo DBF"; + paraAguarde (); + exit (); + } + + if ($_FILES ['i3GEOuploadprj'] ['name'] != "") { + $Arquivo = $_FILES ['i3GEOuploadprj'] ['tmp_name']; + $status = move_uploaded_file ( $Arquivo, $dirmap . "/" . $nomePrefixo . ".prj" ); + if ($status != 1) { + echo "

Ocorreu um erro no envio do arquivo PRJ"; + paraAguarde (); exit (); } - retornaJSON ( true ); + } + + if (! file_exists ( $dirmap . "/" . $nomePrefixo . ".shp" )) { + echo "

Ocorreu algum problema no envio do arquivo "; + paraAguarde (); exit (); - break; -} -cpjson ( $retorno ); + } -function enviarSenha( $senha, $email ){ - $to = $email; - $subject = 'senha i3geo criada em '. date('l jS \of F Y h:i:s A'); - $message = $senha; - return mail($to, $subject, $message); -} -// $papeis deve ser um array -function adicionar($ativo, $data_cadastro, $email, $login, $nome_usuario, $senha, $papeis, $dbhw) { - global $esquemaadmin; - try { - $dataCol = array( - "nome_usuario" => '', - "login" => '', - "email" => '', - "ativo" => 0, - "data_cadastro" => '', - "senha" => '' - ); - $id_usuario = i3GeoAdminInsertUnico ( $dbhw, "i3geousr_usuarios", $dataCol, "nome_usuario", "id_usuario" ); - $data_cadastro = date('l jS \of F Y h:i:s A'); - $retorna = alterar ( $id_usuario, $ativo, $data_cadastro, $email, $login, $nome_usuario, $senha, $papeis, $dbhw ); - return $retorna; - } catch ( PDOException $e ) { - return false; + $checkphp = fileContemString ( $dirmap . "/" . $nomePrefixo . ".prj", " $nome_usuario, - "login" => $login, - "email" => $email, - "ativo" => $ativo - ); - // se a senha foi enviada, ela sera trocada - if ($senha != "") { - $dataCol ["senha"] = md5 ( $senha ); - } - $resultado = i3GeoAdminUpdate ( $dbhw, "i3geousr_usuarios", $dataCol, "WHERE id_usuario = $id_usuario" ); - if ($resultado === false) { - return false; - } - // apaga todos os papeis - $resultado = excluirPapeis ( $id_usuario, $dbhw ); - if ($resultado === false) { - return false; - } - if (! empty ( $papeis )) { - // atualiza papeis vinculados - foreach ( $papeis as $p ) { - $resultado = adicionaPapel ( $id_usuario, $p, $dbhw ); - if ($resultado === false) { - return false; - } + $checkphp = fileContemString ( $dirmap . "/" . $nomePrefixo . ".shx", "Arquivo enviado.

"; + echo "

"; + if ($i3GEOuploadCriaMapfile == "on") { + // verifica se o usuario marcou a opcao de cria mapfile + // nesse caso o aplicativo de upload esta sendo executado de dentro do sistema de administracao, e o mapfile devera + // ser criado e registrado no sistema + $nome = $nomePrefixo; + $codigo = $nomePrefixo; + $it = $nomePrefixo; + $en = $nomePrefixo; + $es = $nomePrefixo; + $sfileObj = ms_newShapefileObj ( $dirmap . "/" . $nomePrefixo . ".shp", - 1 ); + if (! isset ( $tipo ) || $tipo == "") { + $tipo = $sfileObj->type; + } + if ($tipo == 1) { + $tipoLayer = "point"; + } + if ($tipo == 3) { + $tipoLayer = "line"; } + if ($tipo == 5) { + $tipoLayer = "polygon"; + } + $funcao = "CRIARNOVOMAP"; + $output = "retorno"; + $data = $dirmap . "/" . $nomePrefixo . ".shp"; + include_once ($locaplic . "/admin/php/editormapfile.php"); + echo "

Criado!!!
"; + echo "Para editar clique: editar"; + echo ""; } - return $id_usuario; -} -function adicionaPapel($id_usuario, $id_papel, $dbhw) { - global $esquemaadmin; - $dataCol = array ( - "id_usuario" => $id_usuario, - "id_papel" => $id_papel - ); - $resultado = i3GeoAdminInsert ( $dbhw, "i3geousr_papelusuario", $dataCol ); - return $resultado; + echo "

Pode fechar essa janela.

"; +} else { + echo "

Erro ao enviar o arquivo. Talvez o tamanho do arquivo seja maior do que o permitido.

"; } -function excluir($id_usuario, $dbhw) { - global $esquemaadmin; - $resultado = i3GeoAdminExclui ( $esquemaadmin . "i3geousr_usuarios", "id_usuario", $id_usuario, $dbhw, false ); - if ($resultado === false) { - return false; + +function verificaNome($nome) { + if (strlen ( basename ( $nome ) ) > 200) { + exit (); } - if ($resultado === true) { - $resultado = excluirPapeis ( $id_usuario, $dbhw ); + $nome = strtolower ( $nome ); + $lista = explode ( ".", $nome ); + $extensao = $lista [count ( $lista ) - 1]; + if (($extensao != "dbf") && ($extensao != "shx") && ($extensao != "shp") && ($extensao != "prj")) { + echo "Nome de arquivo inválido. $nome"; + paraAguarde (); + exit (); } - return $resultado; -} -function excluirPapeis($id_usuario, $dbhw) { - global $esquemaadmin; - $resultado = i3GeoAdminExclui ( $esquemaadmin . "i3geousr_papelusuario", "id_usuario", $id_usuario, $dbhw, false ); - return $resultado; } ?> + + + + diff --git a/admin1/upload/arquivo/index.js b/admin1/upload/arquivo/index.js index d39f018..852bb55 100755 --- a/admin1/upload/arquivo/index.js +++ b/admin1/upload/arquivo/index.js @@ -31,7 +31,6 @@ i3GEOadmin.uploadshp = { .done( function(data, status){ var json = jQuery.parseJSON(data); - console.info(json) var html = Mustache.to_html( "{{#data}}" + $("#templateProj").html() + "{{/data}}", json diff --git a/admin1/upload/arquivo/index.php b/admin1/upload/arquivo/index.php index 70222b7..ef2dae9 100755 --- a/admin1/upload/arquivo/index.php +++ b/admin1/upload/arquivo/index.php @@ -42,25 +42,26 @@ include "../../head.php";
- +
-
- +
+
@@ -115,6 +115,16 @@ include "../../head.php";
+ diff --git a/ferramentas/upload/dicionario.js b/ferramentas/upload/dicionario.js index 9906664..bd20b75 100755 --- a/ferramentas/upload/dicionario.js +++ b/ferramentas/upload/dicionario.js @@ -1,7 +1,7 @@ //+$trad(1,i3GEOF.upload.dicionario)+ i3GEOF.upload.dicionario = { 'pastaArmazenamento' : [ { - pt : "Pasta no servidor onde os dados serão armazenados", + pt : "Pasta no servidor onde os dados serão armazenados. Apenas pastas localizadas no mesmo local onde o i3Geo está instalado são permitidas. Exemplo, no caso da instalação ser /var/www e existir a pasta /var/www/data, digite apenas data", en : "", es : "" } ], -- libgit2 0.21.2