Commit a92bc5f5bf3e346c5624c43511274dceb7a70992

Authored by Edmar Moretti
1 parent b1d268e2

Criação do formulário para upload de arquivos CSV para o servidor de banco de da…

…dos e criação automática do respectivo arquivo de configuração mapfile.
admin/admin.db
No preview for this file type
admin1/catalogo/mapfile/preview/index.php
... ... @@ -233,5 +233,204 @@ function nomeRand($n=10)
233 233 }
234 234 return $nomes;
235 235 }
  236 +function autoClasses(&$nlayer, $mapa, $locaplic = null) {
  237 + $postgis_mapa = $_SESSION ["postgis_mapa"];
  238 + ;
  239 + $substituicon = "nao";
  240 + if ($nlayer->connectiontype == MS_POSTGIS) {
  241 + if ($nlayer->connection == " ") {
  242 + $nlayer->set ( "connection", $postgis_mapa );
  243 + $substituicon = "sim";
  244 + }
  245 + }
  246 + //
  247 + // gera classes automaticamente (temas vetoriais)
  248 + if ($nlayer->getmetadata ( "classesitem" ) != "") {
  249 + $itemnome = $nlayer->getmetadata ( "classesnome" );
  250 + $itemid = $nlayer->getmetadata ( "classesitem" );
  251 + $itemcor = $nlayer->getmetadata ( "classescor" );
  252 + $itemsimbolo = $nlayer->getmetadata ( "classesimbolo" );
  253 + $itemtamanho = $nlayer->getmetadata ( "classestamanho" );
  254 + $classeoriginal = $nlayer->getclass ( 0 );
  255 + //
  256 + // pega a extensao geografica que devera ser utilizada
  257 + //
  258 + $prjMapa = $mapa->getProjection ();
  259 + $prjTema = $nlayer->getProjection ();
  260 + $ret = $nlayer->getmetadata ( "extensao" );
  261 + if ($ret == "") {
  262 + $ret = $nlayer->getextent ();
  263 + // reprojeta o retangulo
  264 + if (($prjTema != "") && ($prjMapa != $prjTema)) {
  265 + $projInObj = ms_newprojectionobj ( $prjTema );
  266 + $projOutObj = ms_newprojectionobj ( $prjMapa );
  267 + $ret->project ( $projInObj, $projOutObj );
  268 + }
  269 + } else {
  270 + $temp = explode ( " ", $ret );
  271 + $ret = ms_newRectObj ();
  272 + $ret->setextent ( $temp [0], $temp [1], $temp [2], $temp [3] );
  273 + }
  274 + //
  275 + $sopen = $nlayer->open ();
  276 + if ($sopen == MS_FAILURE) {
  277 + return "erro";
  278 + }
236 279  
  280 + $status = $nlayer->whichShapes ( $ret );
  281 + $parametrosClasses = array ();
  282 + if ($status == 0) {
  283 + while ( $shape = $nlayer->nextShape () ) {
  284 + $id = trim ( $shape->values [$itemid] );
  285 + if (! $parametrosClasses [$id]) {
  286 + $nome = "";
  287 + if ($itemnome != "")
  288 + $nome = trim ( $shape->values [$itemnome] );
  289 + $cor = "";
  290 + if ($itemcor != "")
  291 + $cor = explode ( ",", trim ( $shape->values [$itemcor] ) );
  292 + if (count ( $cor ) != 3)
  293 + $cor = explode ( " ", trim ( $shape->values [$itemcor] ) );
  294 + $tamanho = "";
  295 + if ($itemtamanho != "")
  296 + $tamanho = trim ( $shape->values [$itemtamanho] );
  297 + $simbolo = "";
  298 + if ($itemsimbolo != "")
  299 + $simbolo = trim ( $shape->values [$itemsimbolo] );
  300 + $parametrosClasses [$id] = array (
  301 + "nome" => $nome,
  302 + "cor" => $cor,
  303 + "tamanho" => $tamanho,
  304 + "simbolo" => $simbolo
  305 + );
  306 + }
  307 + }
  308 + $fechou = $nlayer->close ();
  309 + // echo "<pre>";var_dump($parametrosClasses);
  310 + if (count ( $parametrosClasses ) > 0) {
  311 + $ids = array_keys ( $parametrosClasses );
  312 + for($i = 0; $i < count ( $parametrosClasses ); ++ $i) {
  313 + $p = $parametrosClasses [$ids [$i]];
  314 + // echo "<pre>";var_dump($p);
  315 + $nclasse = ms_newClassObj ( $nlayer, $classeoriginal );
  316 + if ($p ["nome"] != "")
  317 + $nclasse->set ( "name", $p ["nome"] );
  318 + $estilo = $nclasse->getstyle ( 0 );
  319 + if ($p ["cor"] != "") {
  320 + $cor = $p ["cor"];
  321 + $ncor = $estilo->color;
  322 + if ($ncor == "")
  323 + $ncor = $estilo->outlinecolor;
  324 + $ncor->setrgb ( $cor [0], $cor [1], $cor [2] );
  325 + }
  326 + if ($p ["tamanho"] != "")
  327 + $estilo->set ( "size", $p ["tamanho"] );
  328 + if ($p ["simbolo"] != "")
  329 + $estilo->set ( "symbolname", $p ["simbolo"] );
  330 + $strE = "('[" . $itemid . "]'eq'" . $ids [$i] . "')";
  331 + $nclasse->setexpression ( $strE );
  332 + }
  333 + $classeoriginal->set ( "status", MS_DELETE );
  334 + }
  335 + }
  336 + if ($substituicon == "sim") {
  337 + $nlayer->set ( "connection", " " );
  338 + }
  339 + }
  340 + $pf = $nlayer->getmetadata ( "palletefile" );
  341 + if ($pf != "") {
  342 + if (! file_exists ( $pf )) {
  343 + return;
  344 + }
  345 + $ps = $nlayer->getmetadata ( "palletesteps" );
  346 + if ($ps == "")
  347 + $ps = 8;
  348 + //
  349 + // pega os valores do arquivo
  350 + //
  351 + $rules = array ();
  352 + $abre = fopen ( $pf, "r" );
  353 + $paletteRules = array ();
  354 + while ( ! feof ( $abre ) ) {
  355 + $line = trim ( fgets ( $abre ) );
  356 + $pos = strpos ( $line, "#" );
  357 + if ($pos === false || $pos > 0) {
  358 + $paletteEntry = explode ( " ", $line );
  359 + $rules [] = array (
  360 + "v0" => $paletteEntry [0],
  361 + "v1" => $paletteEntry [1],
  362 + "r0" => $paletteEntry [2],
  363 + "g0" => $paletteEntry [3],
  364 + "b0" => $paletteEntry [4],
  365 + "r1" => $paletteEntry [5],
  366 + "g1" => $paletteEntry [6],
  367 + "b1" => $paletteEntry [7]
  368 + );
  369 + }
  370 + }
  371 + fclose ( $abre );
  372 + foreach ( $rules as $rule ) {
  373 + $delta = ceil ( ($rule ["v1"] - $rule ["v0"]) / $ps );
  374 + $legenda = true;
  375 + for($value = $rule ["v0"]; $value < $rule ["v1"]; $value += $delta) {
  376 + $class = ms_newClassObj ( $nlayer );
  377 + $style = ms_newStyleObj ( $class );
  378 + if ($legenda) {
  379 + $class->set ( name, round ( $value, 0 ) );
  380 + $legenda = true;
  381 + }
  382 + $expression = "([pixel] > " . round ( $value, 0 ) . " AND [pixel] <= " . round ( $value + $delta, 0 ) . ")";
  383 + $class->setExpression ( $expression );
  384 + $rgb = getRGBpallete ( $rule, $value );
  385 + $style->color->setRGB ( $rgb [0], $rgb [1], $rgb [2] );
  386 + }
  387 + }
  388 + }
  389 + return;
  390 +}
  391 +function getRGBpallete($rule, $value) {
  392 + $escala = ($value - $rule ["v0"]) / ($rule ["v1"] - $rule ["v0"]);
  393 + $r = $rule ["r0"] + round ( ($rule ["r1"] - $rule ["r0"]) * $escala, 0 );
  394 + $g = $rule ["g0"] + round ( ($rule ["g1"] - $rule ["g0"]) * $escala, 0 );
  395 + $b = $rule ["b0"] + round ( ($rule ["b1"] - $rule ["b0"]) * $escala, 0 );
  396 + return array (
  397 + $r,
  398 + $g,
  399 + $b
  400 + );
  401 +}
  402 +function cloneInlineSymbol($layern, $nmapa, $mapa) {
  403 + $numclasses = $layern->numclasses;
  404 + for($ci = 0; $ci < $numclasses; $ci ++) {
  405 + $classe = $layern->getclass ( $ci );
  406 + $numestilos = $classe->numstyles;
  407 + for($ei = 0; $ei < $numestilos; $ei ++) {
  408 + $estilo = $classe->getstyle ( $ei );
  409 + if ($estilo->symbolname != "") {
  410 + $nomesimbolo = $estilo->symbolname;
  411 + $simbolo = $nmapa->getSymbolObjectById ( $nmapa->getSymbolByName ( $nomesimbolo ) );
  412 + if ($simbolo->inmapfile == MS_TRUE || file_exists ( $nomesimbolo )) {
  413 + $simbolon = new symbolObj ( $mapa, $nomesimbolo );
  414 + $simbolon->set ( "inmapfile", MS_TRUE );
  415 +
  416 + $simbolon->setImagePath ( $simbolo->imagepath );
  417 + $simbolon->setPoints ( $simbolo->getPointsArray () );
  418 + // $simbolon->setPattern($simbolo->getPatternArray());
  419 + $simbolon->set ( "type", $simbolo->type );
  420 + // $simbolon->set("antialias",$simbolo->antialias);
  421 + $simbolon->set ( "character", $simbolo->character );
  422 + $simbolon->set ( "filled", $simbolo->filled );
  423 +
  424 + // $simbolon->set("font",$simbolo->font);
  425 + // $simbolon->set("position",$simbolo->position);
  426 + $simbolon->set ( "sizex", $simbolo->sizex );
  427 + $simbolon->set ( "sizey", $simbolo->sizey );
  428 + $simbolon->set ( "transparent", $simbolo->transparent );
  429 + $simbolon->set ( "transparentcolor", $simbolo->transparentcolor );
  430 + // $simbolon->set("anchorpoint",$simbolo->anchorpoint);
  431 + }
  432 + }
  433 + }
  434 + }
  435 +}
237 436 ?>
... ...
admin1/dicionario/menup.js
... ... @@ -330,5 +330,10 @@ i3GEOadmin.menup.dicionario = {
330 330 pt : "Importar shapefile para Postgis",
331 331 en : "",
332 332 es : ""
  333 + } ],
  334 + 'csv2pg' : [ {
  335 + pt : "Importar CSV para Postgis",
  336 + en : "",
  337 + es : ""
333 338 } ]
334 339 };
... ...
admin1/dicionario/uploadshp.js
... ... @@ -146,5 +146,40 @@ i3GEOadmin.uploadshp.dicionario = {
146 146 pt : "Alias da conex&atilde;o com o banco de dados. Ser&aacute; utilizado apenas para o caso de constru&ccedil;&atilde;o do arquivo mapfile.",
147 147 en : "",
148 148 es : ""
  149 + } ],
  150 + 'txtTituloCsv2Pg' : [ {
  151 + pt : "Importação de arquivo CSV para Postgis",
  152 + en : "",
  153 + es : ""
  154 + } ],
  155 + 'txtDescCsv2Pg' : [ {
  156 + pt : "Faz o upload de um arquivo CSV e converte para o banco de dados Postgis existente no servidor web. Permite ainda a convers&atilde;o de colunas com a latitude e longitude em uma coluna do tipo geometria.",
  157 + en : "",
  158 + es : ""
  159 + } ],
  160 + 'txtAjudaCsv2Pg' : [ {
  161 + pt : "No formul&aacute;rio deve-se indicar o arquivo no formato CSV. O arquivo &eacute; enviado ao servidor e armazenado temporariamente para que a convers&atilde;o para Postgis seja poss&iacute;vel. O resultado do processo ser&aacute; uma tabela no banco de dados no esquema escolhido pelo usu&aacute;rio. O acesso ao banco &eacute; feito por meio do usu&aacute;rio administrativo da aplica&ccedil;&atilde;o i3Geo (o mesmo que gerencia o sistema de administra&ccedil;&atilde;o, veja em ms_configura.php). Esse usu&aacute;rio, definido pelo administrador do servidor, deve ter os direitos de escrita no esquema do banco de dados escolhido para importar os dados.",
  162 + en : "",
  163 + es : ""
  164 + } ],
  165 + 'txtArquivoCsv' : [ {
  166 + pt : "Escolha o arquivo texto no formato CSV",
  167 + en : "",
  168 + es : ""
  169 + } ],
  170 + 'sridOrigemCsv' : [ {
  171 + pt : "Código numérico SRID (projeção cartográfica) referente aos dados das colunas x e y caso sejam especificadas",
  172 + en : "",
  173 + es : ""
  174 + } ],
  175 + 'colunaX' : [ {
  176 + pt : "Nome da coluna no arquivo CSV que contém os valores de coordenadas do eixo x (longitude)",
  177 + en : "",
  178 + es : ""
  179 + } ],
  180 + 'colunaY' : [ {
  181 + pt : "Nome da coluna no arquivo CSV que contém os valores de coordenadas do eixo y (latitude)",
  182 + en : "",
  183 + es : ""
149 184 } ]
150 185 };
... ...
admin1/menu.js
... ... @@ -66,6 +66,8 @@ menuPrincipal = [
66 66 },{
67 67 html: "<a href='" + i3GEO.configura.locaplic + "/admin1/upload/shp2pg/index.php' >"+$trad("shp2pg",i3GEOadmin.menup.dicionario)+"</a>"
68 68 },{
  69 + html: "<a href='" + i3GEO.configura.locaplic + "/admin1/upload/csv2pg/index.php' >"+$trad("csv2pg",i3GEOadmin.menup.dicionario)+"</a>"
  70 + },{
69 71 html: "<a href='" + i3GEO.configura.locaplic + "/admin1/upload/simbolo/index.php' >"+$trad("uploadSimbolo",i3GEOadmin.menup.dicionario)+"</a>"
70 72 }
71 73 ]},{
... ...
admin1/upload/arquivo/exec.php
... ... @@ -213,6 +213,7 @@ if (isset ( $_FILES [&#39;i3GEOuploadshp&#39;] [&#39;name&#39;] )) {
213 213 $layer->setprojection("AUTO");
214 214 }
215 215 $mapa->save ( $_SESSION ["locaplic"] . "/temas/" . $codigo . ".map" );
  216 + \admin\php\funcoesAdmin\removeCabecalhoMapfile ( $_SESSION ["locaplic"] . "/temas/" . $codigo . ".map" );
216 217 echo "<div class='alert alert-success' role='alert'>Mapfile $nomePrefixo criado!!!</div>";
217 218 } else {
218 219 echo "<div class='alert alert-danger' role='alert'>Mapfile n&atilde;o pode ser criado criado!!!</div>";
... ...
admin1/upload/csv2pg/exec.php 0 → 100755
... ... @@ -0,0 +1,476 @@
  1 +<?php
  2 +/****************************************************************/
  3 +//
  4 +// checa login
  5 +// valida _GET e _POST, juntando em _GET
  6 +// pega algumas variaveis de uso mais comum
  7 +// session_start
  8 +//
  9 +include ("../../php/checaLogin.php");
  10 +\admin\php\login\checaLogin ();
  11 +// funcoes de administracao
  12 +include ($_SESSION ["locaplic"] . "/admin1/php/funcoesAdmin.php");
  13 +//
  14 +// carrega outras funcoes e extensoes do PHP
  15 +//
  16 +include ($_SESSION ["locaplic"] . "/classesphp/carrega_ext.php");
  17 +//
  18 +// conexao com o banco de administracao
  19 +// cria as variaveis $dbh e $dbhw alem de conexaoadmin
  20 +//
  21 +include ($_SESSION ["locaplic"] . "/admin1/php/conexao.php");
  22 +/**
  23 + * ************************************************************
  24 + */
  25 +if (\admin\php\funcoesAdmin\verificaOperacaoSessao ( "admin/html/subirshapefile" ) === false) {
  26 + header ( "HTTP/1.1 403 Vc nao pode realizar essa operacao" );
  27 + exit ();
  28 +}
  29 +if (! isset ( $idioma ) || $idioma == "") {
  30 + $idioma = "pt";
  31 +}
  32 +
  33 +if (isset ( $_GET ["tipo"] )) {
  34 + $tipo = $_GET ["tipo"];
  35 +}
  36 +if (! isset ( $_FILES ['i3GEOuploadcsv'] ['name'] )) {
  37 + return;
  38 +}
  39 +?>
  40 +<!DOCTYPE html>
  41 +<html lang="pt-br">
  42 +<head>
  43 +<META HTTP-EQUIV="Content-Type">
  44 +<meta charset='utf-8'>
  45 +<meta http-equiv='X-UA-Compatible' content='IE=edge'>
  46 +<meta name='viewport' content='width=device-width, initial-scale=1'>
  47 +<link rel='stylesheet' type='text/css' href='../../../pacotes/jquery/jquery-ui/jquery-ui.min.css'>
  48 +<link rel='stylesheet' type='text/css' href='//fonts.googleapis.com/css?family=Roboto:300,400,500,700'>
  49 +<link rel='stylesheet' type='text/css' href='//fonts.googleapis.com/icon?family=Material+Icons'>
  50 +<!-- Bootstrap core CSS -->
  51 +<link href='../../../pacotes/bootstrap/css/bootstrap.min.css' rel='stylesheet'>
  52 +<!-- Bootstrap Material Design -->
  53 +<link rel='stylesheet' type='text/css' href='../../../pacotes/bootstrap-material-design/dist/css/bootstrap-material-design.min.css'>
  54 +<link rel='stylesheet' type='text/css' href='../../../pacotes/bootstrap-material-design/dist/css/ripples.min.css'>
  55 +<!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
  56 +<link href='../../../pacotes/bootstrap/css/ie10-viewport-bug-workaround.css' rel='stylesheet'>
  57 +<!-- Custom styles for this template -->
  58 +<link href='../../../pacotes/font-awesome/css/font-awesome.min.css' rel='stylesheet'>
  59 +
  60 +<link href='../../../pacotes/bootstrap-accessibility-plugin/plugins/css/bootstrap-accessibility.css' rel='stylesheet'>
  61 +<script src='../../../admin1/headjs.php'></script>
  62 +<script src="../../../classesjs/classe_util.js"></script>
  63 +</head>
  64 +<body bgcolor="white" style="background-color: white; text-align: left;">
  65 + <p>
  66 +<?php
  67 +ob_flush ();
  68 +flush ();
  69 +sleep ( 2 );
  70 +if (isset ( $_FILES ['i3GEOuploadcsv'] ['name'] )) {
  71 + if (empty ( $_SESSION ["dir_tmp"] )) {
  72 + echo "<div class='alert alert-danger' role='alert'>Pasta n&atilde;o encontrada</div>";
  73 + exit ();
  74 + }
  75 + echo "<div class='alert alert-info' role='alert'>Carregando o arquivo...</div>";
  76 +
  77 + ob_flush ();
  78 + flush ();
  79 + sleep ( 2 );
  80 +
  81 + if (! file_exists ( $_SESSION ["dir_tmp"] ) || empty ( $_SESSION ["dir_tmp"] )) {
  82 + echo "<div class='alert alert-danger' role='alert'>Pasta tempor&aacute;ria n&atilde;o existe no servidor</div>";
  83 + exit ();
  84 + }
  85 + // verifica nomes
  86 + verificaNome ( $_FILES ['i3GEOuploadcsv'] ['name'] );
  87 + // remove acentos
  88 + $nomePrefixo = "csv2pg" . (rand ( 9000, 10000 )) * - 1;
  89 + // sobe arquivo
  90 + $Arquivo = $_FILES ['i3GEOuploadcsv'] ['tmp_name'];
  91 + $status = move_uploaded_file ( $Arquivo, $_SESSION ["dir_tmp"] . "/" . $nomePrefixo . ".csv" );
  92 + if ($status != 1) {
  93 + echo "<div class='alert alert-danger' role='alert'>Ocorreu um erro no envio do arquivo CSV. Pode ser uma limita&ccedil;&atilde;o quanto ao tamanho do arquivo ou permiss&atilde;o de escrita na pasta indicada.</div>";
  94 + exit ();
  95 + }
  96 + if (! file_exists ( $_SESSION ["dir_tmp"] . "/" . $nomePrefixo . ".csv" )) {
  97 + echo "<div class='alert alert-danger' role='alert'>Ocorreu algum problema no envio do arquivo</div>";
  98 + exit ();
  99 + }
  100 + $checkphp = \admin\php\funcoesAdmin\fileContemString ( $_SESSION ["dir_tmp"] . "/" . $nomePrefixo . ".csv", "<?php" );
  101 + if ($checkphp == true) {
  102 + echo "<div class='alert alert-danger' role='alert'>Arquivo csv invalido</div>";
  103 + unlink ( $_SESSION ["dir_tmp"] . "/" . $nomePrefixo . ".csv" );
  104 + exit ();
  105 + }
  106 + echo "<div class='alert alert-success' role='alert'>Arquivo enviado.</div>";
  107 + //
  108 + // gera o script para inclusao no banco
  109 + //
  110 + // pega a lista de colunas e identifica o separador utilizado
  111 + $handle = fopen ( $_SESSION ["dir_tmp"] . "/" . $nomePrefixo . ".csv", "r" );
  112 + $cabecalho = fgets ( $handle );
  113 + $buffer = str_replace ( '"', '', $cabecalho );
  114 + $buffer = str_replace ( "'", '', $buffer );
  115 + $buffer = str_replace ( "\n", '', $buffer );
  116 + $buffer = str_replace ( "\r", '', $buffer );
  117 + $colunas = explode ( ";", $buffer );
  118 + $separador = ";";
  119 + if (count ( $colunas ) == 1) {
  120 + $colunas = explode ( ",", $buffer );
  121 + $separador = ",";
  122 + }
  123 + echo "<div class='alert alert-success' role='alert'>Separador de colunas identificado: <b>" . $separador . "</b></p></div>";
  124 + echo "<div class='alert alert-success' role='alert'>Total de colunas: <b>" . count ( $colunas ) . "</b></p></div>";
  125 + fclose ( $handle );
  126 + echo "<div class='alert alert-success' role='alert'>Colunas: <p><pre>";
  127 + print_r ( $colunas );
  128 + echo "</pre></p></div>";
  129 + echo "<div class='alert alert-info' role='alert'>Testando o arquivo <p></div>";
  130 + ob_flush ();
  131 + flush ();
  132 + sleep ( 2 );
  133 + //
  134 + // testa as linhas e separadores
  135 + //
  136 + $handle = fopen ( $_SESSION ["dir_tmp"] . "/" . $nomePrefixo . ".csv", "r" );
  137 + $linhas = array ();
  138 + $ncolunas = count ( $colunas );
  139 + $linhas50 = array ();
  140 + while ( ! feof ( $handle ) ) {
  141 + $buffer = fgets ( $handle );
  142 + if ($buffer != $cabecalho) {
  143 + $buffer = str_replace ( "'", '', $buffer );
  144 + $buffer = str_replace ( "\n", '', $buffer );
  145 + $buffer = str_replace ( "\r", '', $buffer );
  146 + if ($buffer != "") {
  147 + $temp = explode ( $separador, $buffer );
  148 + if (count ( $linhas50 ) < 51) {
  149 + $linhas50 [] = $temp;
  150 + }
  151 + if (count ( $temp ) != $ncolunas) {
  152 + echo "<div class='alert alert-danger' role='alert'>Linha com erro. Processo abortado. <p><pre>";
  153 + print_r ( $temp );
  154 + echo "</pre></p></div>";
  155 + exit ();
  156 + }
  157 + }
  158 + }
  159 + }
  160 + fclose ( $handle );
  161 + //
  162 + // pega os tipos das colunas
  163 + //
  164 + $contador = 0;
  165 + foreach ( $colunas as $coluna ) {
  166 + $tipo = "numeric";
  167 + for($i = 1; $i < 50; $i ++) {
  168 + $s = $linhas50 [$i];
  169 + $v = $s [$contador];
  170 + if (! is_numeric ( $v )) {
  171 + $tipo = "varchar";
  172 + }
  173 + }
  174 + $tipoColuna [$colunas [$contador]] = $tipo;
  175 + $contador = $contador + 1;
  176 + }
  177 + echo "<div class='alert alert-success' role='alert'>Tipos das colunas: <p><pre>";
  178 + print_r ( $tipoColuna );
  179 + echo "</pre></p></div>";
  180 +
  181 + $sqinsert = array ();
  182 +
  183 + // verifica autorizacao para o esquema
  184 + if (empty ( $_POST ["i3GEOuploadEsquemaDestino"] ) || ! in_array ( $_POST ["i3GEOuploadEsquemaDestino"], $_SESSION ["i3geoUploadDataWL"] ["postgis"] ["esquemas"] )) {
  185 + echo "<div class='alert alert-danger' role='alert'>Esquema n&atilde;o permitido</div>";
  186 + exit ();
  187 + }
  188 +
  189 + $conexao = $_SESSION ["i3geoUploadDataWL"] ["postgis"] ["conexao"];
  190 + try {
  191 + $dbh = new PDO ( 'pgsql:dbname=' . $conexao ["dbname"] . ';user=' . $conexao ["user"] . ';password=' . $conexao ["password"] . ';host=' . $conexao ["host"] . ';port=' . $conexao ["port"] );
  192 + } catch ( PDOException $e ) {
  193 + echo "<div class='alert alert-danger' role='alert'>Falha ao conectar com o banco</div>";
  194 + exit ();
  195 + }
  196 + if (empty ( $_POST ["i3GEOuploadNomeTabela"] ) || empty ( $_POST ["i3GEOuploadEsquemaDestino"] )) {
  197 + exit ();
  198 + }
  199 + // gera o script para criar a tabela
  200 + // verifica se a tabela ja existe
  201 + $sql = "SELECT table_name FROM information_schema.tables where table_schema = '" . $_POST ["i3GEOuploadEsquemaDestino"] . "' AND table_name = '" . $_POST ["i3GEOuploadNomeTabela"] . "'";
  202 + $res = $dbh->query ( $sql, PDO::FETCH_ASSOC );
  203 + if (count ( $res->fetchAll () ) > 0) {
  204 + $tabelaExiste = true;
  205 + } else {
  206 + $tabelaExiste = false;
  207 + }
  208 + // encoding do banco de dados
  209 + $sql = "SELECT pg_encoding_to_char(encoding) FROM pg_database WHERE datname = '" . $conexao ["dbname"] . "'";
  210 + $res = $dbh->query ( $sql, PDO::FETCH_ASSOC );
  211 + $encodingdb = $res->fetchAll ();
  212 + $encodingdb = $encodingdb [0];
  213 + $encodingdb = $encodingdb ["pg_encoding_to_char"];
  214 + if ($encodingdb == "UTF8") {
  215 + $encodingdb = "UTF-8";
  216 + }
  217 + if ($encodingdb == "LATIN1") {
  218 + $encodingdb = "ISO-8859-1";
  219 + }
  220 + // a tabela nao existe e e do tipo create
  221 + $sqltabela = array ();
  222 +
  223 + if ($tabelaExiste == false && $_POST ["i3GEOuploadTipoOperacao"] == "criar") {
  224 + $sql = "CREATE TABLE " . $_POST ["i3GEOuploadEsquemaDestino"] . "." . $_POST ["i3GEOuploadNomeTabela"] . "(";
  225 + $temp = array ();
  226 + if (! empty ( $_POST ["i3GEOuploadColunaX"] ) && ! empty ( $_POST ["i3GEOuploadColunaY"] )) {
  227 + $temp [] = "the_geom geometry";
  228 + }
  229 + foreach ( $colunas as $coluna ) {
  230 + $temp [] = \admin\php\funcoesAdmin\removeAcentos ( strtolower ( $coluna ) ) . " " . $tipoColuna [$coluna];
  231 + }
  232 + $sql .= implode ( ",", $temp ) . ")WITH(OIDS=FALSE)";
  233 + $sqltabela [] = $sql;
  234 + $sqltabela [] = "ALTER TABLE " . $_POST ["i3GEOuploadEsquemaDestino"] . "." . $_POST ["i3GEOuploadNomeTabela"] . " OWNER TO " . $conexao ["user"];
  235 + if (! empty ( $_POST ["i3GEOuploadColunaX"] ) && ! empty ( $_POST ["i3GEOuploadColunaY"] )) {
  236 + $sqltabela [] = "CREATE INDEX " . $_POST ["i3GEOuploadNomeTabela"] . "_indx_thegeom ON " . $_POST ["i3GEOuploadEsquemaDestino"] . "." . $_POST ["i3GEOuploadNomeTabela"] . " USING gist (the_geom )";
  237 + }
  238 + if (! empty ( $_POST ["comentarioShp"] )) {
  239 + $enc = mb_detect_encoding ( $texto );
  240 + $_POST ["i3GEOuploadComentario"] = mb_convert_encoding ( $_POST ["i3GEOuploadComentario"], $encodingdb, $enc );
  241 + $sqltabela [] = "COMMENT ON TABLE " . $_POST ["i3GEOuploadEsquemaDestino"] . "." . $_POST ["i3GEOuploadNomeTabela"] . " IS '" . $_POST ["i3GEOuploadComentario"] . "'";
  242 + }
  243 + echo "<div class='alert alert-info' role='alert'>Sql tabela: <p><pre>";
  244 + print_r ( $sqltabela );
  245 + echo "</pre></p></div>";
  246 + }
  247 + if ($tabelaExiste == true && $_POST ["i3GEOuploadTipoOperacao"] == "criar") {
  248 + echo "<div class='alert alert-danger' role='alert'>A tabela existe. N&atilde;o pode ser criada.</div>";
  249 + exit ();
  250 + }
  251 + // se a tabela existe e e para atualizar os registros
  252 + if ($tabelaExiste == true && $_POST ["i3GEOuploadTipoOperacao"] == "atualizar") {
  253 + $sqltabela [] = "delete from " . $_POST ["i3GEOuploadEsquemaDestino"] . "." . $_POST ["i3GEOuploadNomeTabela"];
  254 + }
  255 +
  256 + // gera o script para inserir os dados
  257 + echo "<div class='alert alert-success' role='alert'>Preparando inclus&atilde;o de dados...</div>";
  258 + ob_flush ();
  259 + flush ();
  260 + sleep ( 1 );
  261 +
  262 + $linhas = array ();
  263 + $insert = "INSERT INTO " . $_POST ["i3GEOuploadEsquemaDestino"] . "." . $_POST ["i3GEOuploadNomeTabela"] . " (" . strtolower ( \admin\php\funcoesAdmin\removeAcentos ( implode ( ",", $colunas ) ) ) . ")";
  264 + if (! empty ( $_POST ["i3GEOuploadColunaX"] ) && ! empty ( $_POST ["i3GEOuploadColunaY"] )) {
  265 + $insert = "INSERT INTO " . $_POST ["i3GEOuploadEsquemaDestino"] . "." . $_POST ["i3GEOuploadNomeTabela"] . " (" . strtolower ( \admin\php\funcoesAdmin\removeAcentos ( implode ( ",", $colunas ) ) ) . ",the_geom)";
  266 + }
  267 +
  268 + $escapar = "'";
  269 +
  270 + //descobre o indice do array que contem a coluna com x e com y
  271 + $x = "";
  272 + $y = "";
  273 + if (! empty ( $_POST ["i3GEOuploadColunaX"] ) && ! empty ( $_POST ["i3GEOuploadColunaY"] )) {
  274 + for($i = 0; $i < count ( $colunas ); $i ++) {
  275 + if($colunas[$i] == $_POST ["i3GEOuploadColunaX"]){
  276 + $x = $i;
  277 + }
  278 + if($colunas[$i] == $_POST ["i3GEOuploadColunaY"]){
  279 + $y = $i;
  280 + }
  281 + }
  282 + }
  283 +
  284 + $handle = fopen ( $_SESSION ["dir_tmp"] . "/" . $nomePrefixo . ".csv", "r" );
  285 + $numcsv = 0;
  286 + while ( ! feof ( $handle ) ) {
  287 + $buffer = fgets ( $handle );
  288 + $numcsv = $numcsv + 1;
  289 + if ($buffer != $cabecalho) {
  290 + $buffer = str_replace ( "'", '', $buffer );
  291 + $buffer = str_replace ( '"', '', $buffer );
  292 + $buffer = str_replace ( "\n", '', $buffer );
  293 + $buffer = str_replace ( "\r", '', $buffer );
  294 + if ($buffer != "") {
  295 + $l = explode ( $separador, $buffer );
  296 + $vs = array ();
  297 + for($i = 0; $i < count ( $colunas ); $i ++) {
  298 + $escape = "";
  299 + if ($tipoColuna [$colunas [$i]] == "varchar") {
  300 + $texto = str_replace(array("'",'"'),"",$l [$i]);
  301 + $enc = mb_detect_encoding ( $texto );
  302 + $textosl = addcslashes ( $texto, $escapar );
  303 + if ($textosl != $texto) {
  304 + $escape = "E";
  305 + }
  306 + if ($enc != "" && $enc != $encodingdb) {
  307 + $textosl = "$escape'" . mb_convert_encoding ( $textosl, $encodingdb, $enc ) . "'";
  308 + } else {
  309 + $textosl = "$escape'" . $textosl . "'";
  310 + }
  311 + if ($textosl == "''") {
  312 + $textosl = 'null';
  313 + }
  314 + $vs [] = $textosl;
  315 + } else {
  316 + $valor = $l [$i];
  317 + if ($valor == "" || (empty ( $valor ) && $valor != 0)) {
  318 + $valor = 'nulo';
  319 + }
  320 + $vs [] = $valor;
  321 + }
  322 + }
  323 + if (! empty ( $_POST ["i3GEOuploadColunaX"] ) && ! empty ( $_POST ["i3GEOuploadColunaY"] )) {
  324 + $vx = str_replace(",",".",$l [$x]);
  325 + $vy = str_replace(",",".",$l [ $y]);
  326 + if ($_POST ["i3GEOuploadSridDestino"] == $_POST ["i3GEOuploadSridOrigem"]) {
  327 + $vs[] = "ST_PointFromText('POINT(". $vx . " " . $vy .")','".$_POST["i3GEOuploadSridDestino"]."')";
  328 + } else {
  329 + $vs[] = "ST_transform (ST_PointFromText('POINT(". $vx . " " . $vy .")','".$_POST["i3GEOuploadSridDestino"]."')," . $_POST["i3GEOuploadSridDestino"] . ")";
  330 + }
  331 + }
  332 + $str = implode ( ",", $vs );
  333 + $str = str_replace ( "nulo", 'null', $str );
  334 + $linhas [] = $insert . "VALUES(" . $escape . "" . $str . ")";
  335 + }
  336 + }
  337 + }
  338 + fclose ( $handle );
  339 +
  340 + if (! in_array ( $_POST ["i3GEOuploadColunaGid"], $colunas ) && $_POST ["i3GEOuploadTipoOperacao"] == "criar") {
  341 + $linhas [] = "alter table " . $_POST ["i3GEOuploadEsquemaDestino"] . "." . $_POST ["i3GEOuploadNomeTabela"] . " add " . $_POST ["i3GEOuploadColunaGid"] . " serial CONSTRAINT " . $_POST ["i3GEOuploadNomeTabela"] . "_gid_pkey PRIMARY KEY";
  342 + }
  343 +
  344 + if ($_POST ["i3GEOuploadApenasScript"] == "on") {
  345 + echo "<div class='alert alert-info' role='alert'>Sql de inser&ccedil;&atilde;o de dados: <p><pre>";
  346 + foreach ( $linhas as $linha ) {
  347 + echo ( $linha ) . "\n";
  348 + }
  349 + echo "</pre></p></div>";
  350 + } else {
  351 + // aqui o sql e executado verdadeiramente
  352 + // antes e feito um backup da tabela
  353 +
  354 + // $sqltabela sera vazio se a tabela ja existir
  355 + foreach ( $sqltabela as $linha ) {
  356 + try {
  357 + $dbh->query ( $linha );
  358 + } catch ( PDOException $e ) {
  359 + echo "<div class='alert alert-danger' role='alert'>N&atilde;o foi poss&iacute;vel criar a tabela<p><pre>";
  360 + exit ();
  361 + }
  362 + }
  363 + // para testar com acentuacao diferente
  364 + $conexao = $_SESSION ["i3geoUploadDataWL"] ["postgis"] ["conexao"];
  365 + $bdcon = pg_connect ( 'dbname=' . $conexao ["dbname"] . ' user=' . $conexao ["user"] . ' password=' . $conexao ["password"] . ' host=' . $conexao ["host"] . ' port=' . $conexao ["port"] . "options='-c client_encoding=LATIN1'" );
  366 + echo "<div class='alert alert-info' role='alert'>Sql de inser&ccedil;&atilde;o de dados com erros ou modificados: <p><pre>";
  367 + foreach ( $linhas as $linha ) {
  368 + try {
  369 +
  370 + $res = $dbh->query ( $linha );
  371 + if ($res == false) {
  372 + $res = pg_query ( $bdcon, $linha );
  373 + if ($res == false) {
  374 + $linha = remove_accents ( $linha );
  375 + $res = $dbh->query ( $linha );
  376 + if ($res == false) {
  377 + $res = pg_query ( $bdcon, $linha );
  378 + if ($res == false) {
  379 + echo "<p><span style=color:red >Erro em: </span>$linha</p>";
  380 + }
  381 + } else {
  382 + echo "<p><span style=color:red >Acentos removidos: $linha</span></p>";
  383 + }
  384 + }
  385 + }
  386 +
  387 + } catch ( PDOException $e ) {
  388 + echo "<div class='alert alert-danger' role='alert'>N&atilde;o foi poss&iacute;vel executar os SQLs<p><pre>";
  389 + }
  390 + }
  391 + echo "</pre></p></div>";
  392 + $sql = "select * from " . $_POST ["i3GEOuploadEsquemaDestino"] . "." . $_POST ["i3GEOuploadNomeTabela"];
  393 + $q = $dbh->query ( $sql, PDO::FETCH_ASSOC );
  394 + $r = $q->fetchAll ();
  395 +
  396 + echo "<div class='alert alert-info' role='alert'>";
  397 + echo "<p>Registros existentes no CSV: $numcsv</p>";
  398 +
  399 + echo "<p>Registros na tabela final: " . count ( $r ) . "</p>";
  400 + echo "<p>Diferen&ccedil;as podem ocorrer em fun&ccedil;&atilde;o de caracteres acentuados n&atilde;o suportados pelo banco de dados</p>";
  401 + echo "<p><b>Feito!!!</p>";
  402 + echo "</div>";
  403 + }
  404 + //
  405 + ob_flush ();
  406 + flush ();
  407 + sleep ( 2 );
  408 +
  409 + $nomeMapfile = $_SESSION ["locaplic"] . "/temas/" . $_POST ["i3GEOuploadNomeTabela"] . ".map";
  410 + if ($_POST ["i3GEOuploadCriaMapfile"] == "on" && file_exists ( $nomeMapfile )) {
  411 + echo "<div class='alert alert-danger' role='alert'>Arquivo mapfile com o nome " . $_POST ["i3GEOuploadNomeTabela"] . "j&aacute; existe.</div>";
  412 + $_POST ["i3GEOuploadCriaMapfile"] = "";
  413 + }
  414 + if ($_POST ["i3GEOuploadCriaMapfile"] == "on" && $_POST ["i3GEOuploadAliasConexao"] != "") {
  415 + $mapObj = ms_newMapObjFromString ( "MAP END" );
  416 + $layer = ms_newLayerObj ( $mapObj );
  417 + $mapObj->setProjection ( "init=epsg:" . $_POST ["i3GEOuploadSridDestino"] );
  418 + $layer->setProjection ( "init=epsg:" . $_POST ["i3GEOuploadSridDestino"] );
  419 +
  420 + $_POST ["i3GEOuploadAliasConexao"] = str_replace ( " ", "", $_POST ["i3GEOuploadAliasConexao"] );
  421 + if (! in_array ( $_POST ["i3GEOuploadAliasConexao"], array_keys ( $_SESSION ["postgis_mapa"] ) )) {
  422 + echo "<div class='alert alert-danger' role='alert'>Alias para a conex&atilde;o com o banco n&atilde;o definida</div>";
  423 + } else {
  424 + echo "<div class='alert alert-success' role='alert'>Criando mapfile...</div>";
  425 + ob_flush ();
  426 + flush ();
  427 + sleep ( 2 );
  428 + $tipoLayer = MS_LAYER_POINT;
  429 + include ($_SESSION ["locaplic"] . "/admin1/catalogo/mapfile/funcoes.php");
  430 + $cria = \admin\catalogo\mapfile\adicionar ( $_SESSION ["locaplic"], $_POST ["i3GEOuploadNomeTabela"], "", $_POST ["i3GEOuploadNomeTabela"], "", "", $_POST ["i3GEOuploadNomeTabela"], "", $_POST ["i3GEOuploadNomeTabela"], $_POST ["i3GEOuploadNomeTabela"], true, $dbhw );
  431 + if ($cria == true && file_exists ( $_SESSION ["locaplic"] . "/temas/" . $_POST ["i3GEOuploadNomeTabela"] . ".map" )) {
  432 + $mapa = ms_newMapObj ( $_SESSION ["locaplic"] . "/temas/" . $_POST ["i3GEOuploadNomeTabela"] . ".map" );
  433 + $layer = $mapa->getLayerByName ( $_POST ["i3GEOuploadNomeTabela"] );
  434 + $layer->set ( "data", "the_geom from (select * from " . $_POST ["i3GEOuploadEsquemaDestino"] . "." . $_POST ["i3GEOuploadNomeTabela"] . ") as foo using unique " . $_POST ["i3GEOuploadColunaGid"] . " using srid=" . $_POST ["i3GEOuploadSridDestino"] );
  435 + $layer->set ( "connection", $_POST ["i3GEOuploadAliasConexao"] );
  436 + $layer->setconnectiontype ( 6 );
  437 + $layer->set ( "type", $tipoLayer );
  438 + $c = $layer->getclass(0);
  439 + $s = $c->getsymbol(0);
  440 + $s->set("symbol","ponto");
  441 + $mapa->save ( $_SESSION ["locaplic"] . "/temas/" . $_POST ["i3GEOuploadNomeTabela"] . ".map" );
  442 + \admin\php\funcoesAdmin\removeCabecalhoMapfile ( $_SESSION ["locaplic"] . "/temas/" . $_POST ["i3GEOuploadNomeTabela"] . ".map" );
  443 + echo "<div class='alert alert-success' role='alert'>Mapfile " . $_POST ["i3GEOuploadNomeTabela"] . " criado!!!</div>";
  444 + } else {
  445 + echo "<div class='alert alert-danger' role='alert'>Mapfile n&atilde;o pode ser criado criado!!!</div>";
  446 + }
  447 + }
  448 + }
  449 + echo "<div class='alert alert-success' role='alert'>Pode fechar essa janela.</div>";
  450 +} else {
  451 + echo "<div class='alert alert-danger' role='alert'>Erro ao enviar o arquivo. Talvez o tamanho do arquivo seja maior do que o permitido.</div>";
  452 +}
  453 +if (file_exists ( $_SESSION ["locaplic"] . "/temas/" . $_POST ["i3GEOuploadNomeTabela"] . ".map" )) {
  454 + echo "<div class='alert alert-info' role='alert'><a href='#' onclick=\"abreEditor('" . $_POST ["i3GEOuploadNomeTabela"] . "')\" class='alert-link'>Editar mapfile</a></div>";
  455 +}
  456 +function verificaNome($nome) {
  457 + if (strlen ( basename ( $nome ) ) > 200) {
  458 + exit ();
  459 + }
  460 + $nome = strtolower ( $nome );
  461 + $lista = explode ( ".", $nome );
  462 + $extensao = $lista [count ( $lista ) - 1];
  463 + if (($extensao != "csv")) {
  464 + echo "Nome de arquivo inv&aacute;lido. $nome";
  465 + exit ();
  466 + }
  467 +}
  468 +?>
  469 +<script>
  470 +function abreEditor (codigo){
  471 + window.parent.location.href = "../../catalogo/mapfile/opcoes/index.php?codigo=" + codigo + "&id_tema";
  472 +}
  473 +</script>
  474 +
  475 +</body>
  476 +</html>
... ...
admin1/upload/csv2pg/index.js 0 → 100755
... ... @@ -0,0 +1,25 @@
  1 +/*
  2 +Licenca:
  3 +
  4 +GPL2
  5 +
  6 +i3Geo Interface Integrada de Ferramentas de Geoprocessamento para Internet
  7 +
  8 +Direitos Autorais Reservados (c) 2006 Minist&eacute;rio do Meio Ambiente Brasil
  9 +Desenvolvedor: Edmar Moretti edmar.moretti@gmail.com
  10 +
  11 +Este programa &eacute; software livre; voc&ecirc; pode redistribu&iacute;-lo
  12 +e/ou modific&aacute;-lo sob os termos da Licen&ccedil;a P&uacute;blica Geral
  13 +GNU conforme publicada pela Free Software Foundation;
  14 +
  15 +Este programa &eacute; distribu&iacute;do na expectativa de que seja &uacute;til,
  16 +por&eacute;m, SEM NENHUMA GARANTIA; nem mesmo a garantia impl&iacute;cita
  17 +de COMERCIABILIDADE OU ADEQUA&Ccedil;&Atilde;O A UMA FINALIDADE ESPEC&Iacute;FICA.
  18 +Consulte a Licen&ccedil;a P&uacute;blica Geral do GNU para mais detalhes.
  19 +Voc&ecirc; deve ter recebido uma c&oacute;pia da Licen&ccedil;a P&uacute;blica Geral do
  20 +GNU junto com este programa; se n&atilde;o, escreva para a
  21 +Free Software Foundation, Inc., no endere&ccedil;o
  22 +59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
  23 +
  24 + */
  25 +i3GEOadmin.csv2pg = {};
0 26 \ No newline at end of file
... ...
admin1/upload/csv2pg/index.php 0 → 100755
... ... @@ -0,0 +1,253 @@
  1 +<?php
  2 +define ( "ONDEI3GEO", "../../.." );
  3 +include ("exec.php");
  4 +include "../../head.php";
  5 +// monta o combo com a lista de pastas para armazenar os arquivos
  6 +$comboEsquemas = '<select name="i3GEOuploadEsquemaDestino" class="form-control" required ><option value=""></option>';
  7 +if (!empty ( $_SESSION ["i3geoUploadDataWL"] )) {
  8 + foreach ( $_SESSION ["i3geoUploadDataWL"]["postgis"]["esquemas"] as $c ) {
  9 + $comboEsquemas .= "<option value='$c'>$c</option>";
  10 + }
  11 +}
  12 +$comboEsquemas .= "</select>";
  13 +// monta o combo com a lista de alias para conexao com o banco de dados
  14 +$comboAliasConexao = '<select name="i3GEOuploadAliasConexao" class="form-control" ><option value=""></option>';
  15 +foreach ( array_keys($_SESSION ["postgis_mapa"]) as $c ) {
  16 + $comboAliasConexao .= "<option value='$c'>$c</option>";
  17 +}
  18 +$comboAliasConexao .= "</select>";
  19 +?>
  20 +<div class="container-fluid migalha">
  21 + <div class="row">
  22 + <div class="btn-group btn-breadcrumb">
  23 + <a class="btn btn-default" href="../../../init/index.php">
  24 + <span>i3Geo</span>
  25 + </a>
  26 + <a class="btn btn-default" href="../../index.php">
  27 + <span>Admin</span>
  28 + </a>
  29 + <a class="btn btn-default" style="pointer-events: none">
  30 + <span>Upload</span>
  31 + </a>
  32 + <a class="btn btn-default" style="pointer-events: none">
  33 + <span>CSV->Postgis</span>
  34 + </a>
  35 + </div>
  36 + </div>
  37 +</div>
  38 +<div class="container">
  39 + <div class="row center-block">
  40 + <div class="col-md-12">
  41 + <div class="well hidden" id="titulo">
  42 + <button data-toggle="modal" data-target="#ajudaPrincipal" class="btn btn-primary btn-fab btn-fab-mini pull-right">
  43 + <i class="material-icons">help</i>
  44 + </button>
  45 + <h2>
  46 + <small>{{{txtTituloCsv2Pg}}}</small>
  47 + </h2>
  48 + <blockquote>{{{txtDescCsv2Pg}}}</blockquote>
  49 + <!--Modal ajuda-->
  50 + <div id="ajudaPrincipal" class="modal fade" tabindex="-1">
  51 + <div class="modal-dialog">
  52 + <div class="modal-content">
  53 + <div class="modal-body">
  54 + <p>{{{txtAjudaCsv2Pg}}}</p>
  55 + </div>
  56 + </div>
  57 + </div>
  58 + </div>
  59 + </div>
  60 +
  61 + <form style="" target="i3GEOuploadiframe" action="exec.php" method="post" ENCTYPE="multipart/form-data" onsubmit="javascript:$('#modalUpload').modal('show');" class="form-horizontal" role="form"
  62 + method="post">
  63 + <div class="row center-block well hidden" id="corpo">
  64 + <div class="col-md-12">
  65 + <div class="form-group form-group-lg">
  66 + <label class="col-md-5 control-label">{{{txtArquivoCsv}}}</label>
  67 + <div class="col-md-7">
  68 + <div class="form-group form-group-lg col-md-12">
  69 + <div class="input-group-btn">
  70 + <button type="button" class="btn btn-primary pull-left" onclick="$(this).parent().find('input[type=file]').click();">CSV</button>
  71 + <input name="i3GEOuploadcsv" onchange="$(this).parent().parent().find('.form-control').html($(this).val().split(/[\\|/]/).pop());" style="display: none;" type="file">
  72 + <span class="form-control"></span>
  73 + </div>
  74 + </div>
  75 + </div>
  76 + </div>
  77 + </div>
  78 + <div class="col-md-12">
  79 + <div class="form-group form-group-lg">
  80 + <label class="col-md-5 control-label" for="i3GEOuploadEsquemaDestino">{{{esquemaArmazenamento}}}</label>
  81 + <div class="col-md-7">
  82 + <?php echo $comboEsquemas; ?>
  83 + </div>
  84 + </div>
  85 + <div class="form-group form-group-lg">
  86 + <label class="col-md-5 control-label" for="i3GEOuploadNomeTabela">{{{nomeTabela}}}</label>
  87 + <div class="col-md-7">
  88 + <input type="text" value="" class="form-control" name="i3GEOuploadNomeTabela" required>
  89 + <div class="input-group-btn">
  90 + <a role="button" class="btn btn-danger btn-fab btn-fab-mini" style="height: 20px; min-width: 20px; width: 20px;" onclick="listaTabelasUpload('i3GEOuploadNomeTabela')" href="javascript:void(0)">
  91 + <i class="material-icons md-18">list</i>
  92 + </a>
  93 + </div>
  94 + </div>
  95 + </div>
  96 + <div class="form-group form-group-lg">
  97 + <label class="col-md-5 control-label" for="i3GEOuploadSridOrigem">{{{sridOrigemCsv}}}</label>
  98 + <div class="col-md-7">
  99 + <input type="text" value="<?php echo $_SESSION["i3GeoProjDefault"]["epsg"]; ?>" class="form-control" name="i3GEOuploadSridOrigem" >
  100 + </div>
  101 + </div>
  102 + <div class="form-group form-group-lg">
  103 + <label class="col-md-5 control-label" for="i3GEOuploadSridDestino">{{{sridDestino}}}</label>
  104 + <div class="col-md-7">
  105 + <input type="text" value="<?php echo $_SESSION["i3GeoProjDefault"]["epsg"]; ?>" class="form-control" name="i3GEOuploadSridDestino" >
  106 + </div>
  107 + </div>
  108 + <div class="form-group form-group-lg">
  109 + <label class="col-md-5 control-label" for="i3GEOuploadColunaX">{{{colunaX}}}</label>
  110 + <div class="col-md-7">
  111 + <input type="text" value="" class="form-control" name="i3GEOuploadColunaX">
  112 + </div>
  113 + </div>
  114 + <div class="form-group form-group-lg">
  115 + <label class="col-md-5 control-label" for="i3GEOuploadColunaY">{{{colunaY}}}</label>
  116 + <div class="col-md-7">
  117 + <input type="text" value="" class="form-control" name="i3GEOuploadColunaY">
  118 + </div>
  119 + </div>
  120 + <div class="form-group form-group-lg">
  121 + <label class="col-md-5 control-label" for="i3GEOuploadComentario">{{{comentarioTabela}}}</label>
  122 + <div class="col-md-7">
  123 + <input type="text" value="" class="form-control" name="i3GEOuploadComentario">
  124 + </div>
  125 + </div>
  126 + <div class="form-group form-group-lg">
  127 + <label class="col-md-5 control-label" for="i3GEOuploadTipoOperacao">{{{tipoOperacao}}}</label>
  128 + <div class="col-md-7">
  129 + <select title="{{{tipoOperacao}}}" name="i3GEOuploadTipoOperacao" class="form-control">
  130 + <option value="criar">{{{tabelaNova}}}</option>
  131 + <option value="inserir">{{{tabelaInsert}}}</option>
  132 + <option value="atualizar">{{{tabelaUpdate}}}</option>
  133 + </select>
  134 + </div>
  135 + </div>
  136 + <div class="form-group form-group-lg">
  137 + <label class="col-md-5 control-label" style="margin-top: 0px;" for="i3GEOuploadColunaGid">{{{colunaGid}}}</label>
  138 + <div class="col-md-7">
  139 + <input type="text" value="" class="form-control" name="i3GEOuploadColunaGid" required >
  140 + </div>
  141 + </div>
  142 + <div class="form-group form-group-lg">
  143 + <label class="col-md-5 control-label" for="i3GEOuploadAliasConexao">{{{comboAliasConexao}}}</label>
  144 + <div class="col-md-7">
  145 + <?php echo $comboAliasConexao; ?>
  146 + </div>
  147 + </div>
  148 + <div class="form-group form-group-lg">
  149 + <label class="col-md-5 control-label" style="margin-top: 0px;" for="i3GEOuploadApenasScript">{{{apenasScript}}}</label>
  150 + <div class="col-md-7">
  151 + <div class=" checkbox">
  152 + <label> <input title="{{{apenasScript}}}" name="i3GEOuploadApenasScript" type="checkbox">
  153 + </label>
  154 + </div>
  155 + </div>
  156 + </div>
  157 + <div class="form-group form-group-lg">
  158 + <label class="col-md-5 control-label" style="margin-top: 0px;" for="i3GEOuploadCriaMapfile">{{{criaMapfile}}}</label>
  159 + <div class="col-md-7">
  160 + <div class=" checkbox">
  161 + <label> <input title="{{{criaMapfile}}}" name="i3GEOuploadCriaMapfile" type="checkbox">
  162 + </label>
  163 + </div>
  164 + </div>
  165 + </div>
  166 + <div class="col-md-12">
  167 + <div class="pull-right">
  168 + <button type="submit" class="btn btn-primary" role="button" style="color: #008579;">{{envia}}</button>
  169 + </div>
  170 + </div>
  171 + </div>
  172 + </div>
  173 + </form>
  174 + </div>
  175 + <div id="modalUpload" class="modal fade" tabindex="-1">
  176 + <div class="modal-dialog modal-lg">
  177 + <div class="modal-content">
  178 + <div class="modal-header">
  179 + <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  180 + <span aria-hidden="true">&times;</span>
  181 + </button>
  182 + </div>
  183 + <div class="modal-content">
  184 + <div class="modal-body modal-lg">
  185 + <iframe name=i3GEOuploadiframe style="text-align: left; border: 0px solid gray;" width="100%" height="500px"></iframe>
  186 + </div>
  187 + </div>
  188 + </div>
  189 + </div>
  190 + </div>
  191 + </div>
  192 +</div>
  193 +<script id="templateProj" type="x-tmpl-mustache">
  194 + <option value="{{{codigo}}}">{{{nome}}}</option>
  195 +</script>
  196 +<?php
  197 +if (empty ( $_SESSION ["i3geoUploadDataWL"] )) {
  198 + echo "<script>iniciaMenuPrincipal();i3GEOadmin.core.mostraErro('Nenhum esquema cadastrado para armazenar a tabela nas configura&ccedil;&otilde;es do i3Geo (ms_configura)');</script>";
  199 + exit ();
  200 +}
  201 +?>
  202 +<script type="text/javascript" src="index.js"></script>
  203 +<script type="text/javascript" src="../../dicionario/uploadshp.js"></script>
  204 +<script type="text/javascript" src="../../js/bdexplorer.js"></script>
  205 +<script>
  206 + $(document).ready(function(){
  207 + //vem de admin1/index.js
  208 + iniciaMenuPrincipal();
  209 + $('ul.dropdown-menu [data-toggle=dropdown]').on('click', function(event) {
  210 + event.preventDefault();
  211 + event.stopPropagation();
  212 + $(this).parent().siblings().removeClass('open');
  213 + $(this).parent().toggleClass('open');
  214 + });
  215 + //traducao
  216 + var t = $("#titulo");
  217 + //complementa dicionario
  218 + i3GEOadmin.csv2pg.dicionario = $.extend(
  219 + {},
  220 + i3GEOadmin.uploadshp.dicionario,
  221 + i3GEOadmin.core.dicionario
  222 + );
  223 +
  224 + i3GEOadmin.core.dicionario = null;
  225 +
  226 + i3GEOadmin.csv2pg.dicionario = i3GEO.idioma.objetoIdioma(i3GEOadmin.csv2pg.dicionario);
  227 +
  228 + t.html(
  229 + Mustache.to_html(
  230 + t.html(),
  231 + i3GEOadmin.csv2pg.dicionario
  232 + )
  233 + );
  234 + $.material.init();
  235 + i3GEOadmin.core.loginOn();
  236 + $(".hidden").removeClass('hidden');
  237 + var t = $("#corpo");
  238 + t.html(
  239 + Mustache.to_html(
  240 + t.html(),
  241 + i3GEOadmin.csv2pg.dicionario
  242 + )
  243 + );
  244 + });
  245 + function listaTabelasUpload(destino){
  246 + var esquema = $("form select[name='i3GEOuploadEsquemaDestino']").val();
  247 + if(esquema != ""){
  248 + i3GEOadmin.bdExplorer.listaTabelasUpload(esquema,destino);
  249 + }
  250 + }
  251 +</script>
  252 +</body>
  253 +</html>
0 254 \ No newline at end of file
... ...
admin1/upload/shp2pg/exec.php
... ... @@ -130,7 +130,7 @@ if (isset ( $_FILES [&#39;i3GEOuploadshp&#39;] [&#39;name&#39;] )) {
130 130 $shapefileObj = ms_newShapefileObj($_SESSION ["dir_tmp"] . "/" . $nomePrefixo . ".shp",-1);
131 131 $numshapes = $shapefileObj->numshapes;
132 132  
133   - echo "<div class='alert alert-info' role='alert'>Numshapes existentes no SHP: " . $numshapes . "</div>";
  133 + echo "<div class='alert alert-success' role='alert'>Numshapes existentes no SHP: " . $numshapes . "</div>";
134 134 ob_flush ();flush (); sleep ( 2 );
135 135  
136 136 $mapObj = ms_newMapObjFromString("MAP END");
... ... @@ -148,8 +148,8 @@ if (isset ( $_FILES [&#39;i3GEOuploadshp&#39;] [&#39;name&#39;] )) {
148 148 }
149 149 }
150 150  
151   - echo "<div class='alert alert-info' role='alert'>Tipo do SHP: " . $shapefileObj->type . "</div>";
152   - echo "<div class='alert alert-info' role='alert'>Colunas: <p><pre>";
  151 + echo "<div class='alert alert-success' role='alert'>Tipo do SHP: " . $shapefileObj->type . "</div>";
  152 + echo "<div class='alert alert-success' role='alert'>Colunas: <p><pre>";
153 153 print_r( $colunas );
154 154 echo "</pre></p></div>";
155 155  
... ... @@ -173,7 +173,7 @@ if (isset ( $_FILES [&#39;i3GEOuploadshp&#39;] [&#39;name&#39;] )) {
173 173 }
174 174 $tipoColuna[$coluna] = $tipo;
175 175 }
176   - echo "<div class='alert alert-info' role='alert'>Tipos das colunas: <p><pre>";
  176 + echo "<div class='alert alert-success' role='alert'>Tipos das colunas: <p><pre>";
177 177 print_r( $tipoColuna );
178 178 echo "</pre></p></div>";
179 179  
... ... @@ -248,7 +248,7 @@ if (isset ( $_FILES [&#39;i3GEOuploadshp&#39;] [&#39;name&#39;] )) {
248 248 //gera o script para inserir os dados
249 249 $linhas = array();
250 250 $insert = "INSERT INTO ".$_POST["i3GEOuploadEsquemaDestino"].".".$_POST["i3GEOuploadNomeTabela"]." (".strtolower(\admin\php\funcoesAdmin\removeAcentos(implode(",",$colunas))).",the_geom)";
251   - echo "<div class='alert alert-success' role='alert'>Preparando inclus&atilde;o de dados...</div>";
  251 + echo "<div class='alert alert-info' role='alert'>Preparando inclus&atilde;o de dados...</div>";
252 252 ob_flush();
253 253 flush();
254 254 sleep(1);
... ... @@ -314,9 +314,9 @@ if (isset ( $_FILES [&#39;i3GEOuploadshp&#39;] [&#39;name&#39;] )) {
314 314 }
315 315  
316 316 if($_POST["i3GEOuploadApenasScript"] == "on"){
317   - echo "<div class='alert alert-info' role='alert'>Sql de inser&ccedil;&atilde;o de dados: <p><pre>";
  317 + echo "<div class='alert alert-success' role='alert'>Sql de inser&ccedil;&atilde;o de dados: <p><pre>";
318 318 foreach($linhas as $linha){
319   - print_r( $linha )."/n";
  319 + echo( $linha )."\n";
320 320 }
321 321 echo "</pre></p></div>";
322 322  
... ... @@ -337,9 +337,10 @@ if (isset ( $_FILES [&#39;i3GEOuploadshp&#39;] [&#39;name&#39;] )) {
337 337 //para testar com acentuacao diferente
338 338 $conexao = $_SESSION["i3geoUploadDataWL"]["postgis"]["conexao"];
339 339 $bdcon = pg_connect('dbname='.$conexao["dbname"].' user='.$conexao["user"].' password='.$conexao["password"].' host='.$conexao["host"].' port='.$conexao["port"]."options='-c client_encoding=LATIN1'");
  340 + echo "<div class='alert alert-success' role='alert'>Sql de inser&ccedil;&atilde;o de dados com erros ou modificados: <p><pre>";
  341 +
340 342 foreach($linhas as $linha){
341 343 try {
342   - echo "<div class='alert alert-info' role='alert'>Sql de inser&ccedil;&atilde;o de dados com erros ou modificados: <p><pre>";
343 344 $res = $dbh->query($linha);
344 345 if($res == false){
345 346 $res = pg_query($bdcon,$linha);
... ... @@ -357,11 +358,12 @@ if (isset ( $_FILES [&#39;i3GEOuploadshp&#39;] [&#39;name&#39;] )) {
357 358 }
358 359 }
359 360 }
360   - echo "</pre></p></div>";
361 361 } catch (PDOException $e) {
362 362 echo "<div class='alert alert-danger' role='alert'>N&atilde;o foi poss&iacute;vel executar os SQLs<p><pre>";
363 363 }
364 364 }
  365 + echo "</pre></p></div>";
  366 +
365 367 $sql = "select * from ".$_POST["i3GEOuploadEsquemaDestino"].".".$_POST["i3GEOuploadNomeTabela"];
366 368 $q = $dbh->query($sql,PDO::FETCH_ASSOC);
367 369 $r = $q->fetchAll();
... ... @@ -386,7 +388,7 @@ if (isset ( $_FILES [&#39;i3GEOuploadshp&#39;] [&#39;name&#39;] )) {
386 388 if(!in_array($_POST["i3GEOuploadAliasConexao"],array_keys($_SESSION ["postgis_mapa"]))){
387 389 echo "<div class='alert alert-danger' role='alert'>Alias para a conex&atilde;o com o banco n&atilde;o definida</div>";
388 390 } else {
389   - echo "<div class='alert alert-success' role='alert'>Criando mapfile...</div>";
  391 + echo "<div class='alert alert-info' role='alert'>Criando mapfile...</div>";
390 392 ob_flush ();flush (); sleep ( 2 );
391 393  
392 394 if ($shapefileObj->type == 1) {
... ... @@ -408,13 +410,14 @@ if (isset ( $_FILES [&#39;i3GEOuploadshp&#39;] [&#39;name&#39;] )) {
408 410 $layer->setconnectiontype(6);
409 411 $layer->set ( "type", $tipoLayer );
410 412 $mapa->save ( $_SESSION ["locaplic"] . "/temas/" . $_POST["i3GEOuploadNomeTabela"] . ".map" );
  413 + \admin\php\funcoesAdmin\removeCabecalhoMapfile ( $_SESSION ["locaplic"] . "/temas/" . $_POST["i3GEOuploadNomeTabela"] . ".map" );
411 414 echo "<div class='alert alert-success' role='alert'>Mapfile " . $_POST["i3GEOuploadNomeTabela"] ." criado!!!</div>";
412 415 } else {
413 416 echo "<div class='alert alert-danger' role='alert'>Mapfile n&atilde;o pode ser criado criado!!!</div>";
414 417 }
415 418 }
416 419 }
417   - echo "<div class='alert alert-success' role='alert'>Pode fechar essa janela.</div>";
  420 + echo "<div class='alert alert-info' role='alert'>Pode fechar essa janela.</div>";
418 421 } else {
419 422 echo "<div class='alert alert-danger' role='alert'>Erro ao enviar o arquivo. Talvez o tamanho do arquivo seja maior do que o permitido.</div>";
420 423 }
... ...
admin1/upload/shp2pg/index.php
... ... @@ -3,9 +3,12 @@ define ( &quot;ONDEI3GEO&quot;, &quot;../../..&quot; );
3 3 include ("exec.php");
4 4 include "../../head.php";
5 5 // monta o combo com a lista de pastas para armazenar os arquivos
  6 +
6 7 $comboEsquemas = '<select name="i3GEOuploadEsquemaDestino" class="form-control" required ><option value=""></option>';
7   -foreach ( $_SESSION ["i3geoUploadDataWL"]["postgis"]["esquemas"] as $c ) {
8   - $comboEsquemas .= "<option value='$c'>$c</option>";
  8 +if (!empty ( $_SESSION ["i3geoUploadDataWL"] )) {
  9 + foreach ( $_SESSION ["i3geoUploadDataWL"]["postgis"]["esquemas"] as $c ) {
  10 + $comboEsquemas .= "<option value='$c'>$c</option>";
  11 + }
9 12 }
10 13 $comboEsquemas .= "</select>";
11 14 // monta o combo com a lista de alias para conexao com o banco de dados
... ... @@ -194,7 +197,7 @@ $comboAliasConexao .= &quot;&lt;/select&gt;&quot;;
194 197 <option value="{{{codigo}}}">{{{nome}}}</option>
195 198 </script>
196 199 <?php
197   -if (empty ( $_SESSION ["i3geoEsquemasWL"] )) {
  200 +if (empty ( $_SESSION ["i3geoUploadDataWL"] )) {
198 201 echo "<script>iniciaMenuPrincipal();i3GEOadmin.core.mostraErro('Nenhum esquema cadastrado para armazenar a tabela nas configura&ccedil;&otilde;es do i3Geo (ms_configura)');</script>";
199 202 exit ();
200 203 }
... ...
ms_configura.php
... ... @@ -160,7 +160,7 @@ $i3geoEsquemasWL = array(&quot;publicy&quot;);
160 160 Tipo:
161 161 {array}
162 162 */
163   - $i3geoUploadDataWL = array();
  163 + $i3geoUploadDataWL = array();
164 164  
165 165 //TODO documentar moodle
166 166 /*
... ...
temas/testecsv.map 0 → 100644
... ... @@ -0,0 +1,27 @@
  1 +MAP
  2 +SYMBOLSET ../symbols/simbolosv6.sym
  3 +FONTSET "../symbols/fontes.txt"
  4 +LAYER
  5 + NAME "testecsv"
  6 + TEMPLATE "none.htm"
  7 + TYPE line
  8 + DATA ""
  9 + CONNECTION ""
  10 + STATUS DEFAULT
  11 + METADATA
  12 + TEMA "testecsv"
  13 + CLASSE "SIM"
  14 + permiteogc "SIM"
  15 + permitedownload "SIM"
  16 + permitekml "SIM"
  17 + permitekmz "SIM"
  18 + END
  19 + CLASS
  20 + NAME ""
  21 + STYLE
  22 + COLOR 0 0 0
  23 + SIZE 12
  24 + END
  25 + END
  26 +END
  27 +END
... ...