Commit 8e0a5de3c20368b67435793fee4faf174f380469

Authored by Edmar Moretti
1 parent 055d3a67

Inclusão de opção para upload completo de um arquivo csv e criação de tabela no …

…postgresql (sistema metaestat)
admin/admin.db
No preview for this file type
admin/html/estat_editor.html
... ... @@ -5,10 +5,10 @@
5 5 <title>Conexao com banco de dados</title>
6 6 <style type="text/css">
7 7 /*margin and padding on body element
8   - can introduce errors in determining
9   - element position and are not recommended;
10   - we turn them off as a foundation for YUI
11   - CSS treatments. */
  8 + can introduce errors in determining
  9 + element position and are not recommended;
  10 + we turn them off as a foundation for YUI
  11 + CSS treatments. */
12 12 body {
13 13 margin: 0;
14 14 padding: 0;
... ... @@ -38,8 +38,8 @@ body {
38 38 </div>
39 39 <div class="ft"></div>
40 40 </div>
41   - <p>
42   - Aten&ccedil;&atilde;o: para poder editar o banco de dados, o usu&aacute;rio da conex&atilde;o escolhida deve ter direitos de edi&ccedil;&atilde;o<br>
  41 + <p style="font-size:10px;">
  42 + Aten&ccedil;&atilde;o: para poder editar o banco de dados, o usu&aacute;rio da conex&atilde;o escolhida deve ter direitos de edi&ccedil;&atilde;o.
43 43 Apenas as tabelas e os dados existentes no esquema i3geo_metaestat podem ser editados</p>
44 44 <div id="i3GEOadminEditorConexao" style="left: -5px;"></div><br>
45 45 <div id="i3GEOadminEditorEsquema" style="left: -5px;"></div>
... ... @@ -52,33 +52,33 @@ body {
52 52 <div id=logajax style="display: block"></div>
53 53 <script>
54 54 /*
55   - Title: Editor de tabelas do sistema de metadados estat&iacute;sticos
  55 + Title: Editor de tabelas do sistema de metadados estat&iacute;sticos
56 56  
57   - Licenca:
  57 + Licenca:
58 58  
59   - GPL2
  59 + GPL2
60 60  
61   - i3Geo Interface Integrada de Ferramentas de Geoprocessamento para Internet
  61 + i3Geo Interface Integrada de Ferramentas de Geoprocessamento para Internet
62 62  
63   - Direitos Autorais Reservados (c) 2006 Minist&eacute;rio do Meio Ambiente Brasil
64   - Desenvolvedor: Edmar Moretti edmar.moretti@mma.gov.br
  63 + Direitos Autorais Reservados (c) 2006 Minist&eacute;rio do Meio Ambiente Brasil
  64 + Desenvolvedor: Edmar Moretti edmar.moretti@mma.gov.br
65 65  
66   - Este programa &eacute; software livre; voc&ecirc; pode redistribu&iacute;-lo
67   - e/ou modific&aacute;-lo sob os termos da Licen&ccedil;a P&uacute;blica Geral
68   - GNU conforme publicada pela Free Software Foundation;
  66 + Este programa &eacute; software livre; voc&ecirc; pode redistribu&iacute;-lo
  67 + e/ou modific&aacute;-lo sob os termos da Licen&ccedil;a P&uacute;blica Geral
  68 + GNU conforme publicada pela Free Software Foundation;
69 69  
70   - Este programa &eacute; distribu&iacute;do na expectativa de que seja &uacute;til,
71   - por&eacute;m, SEM NENHUMA GARANTIA; nem mesmo a garantia impl&iacute;cita
72   - de COMERCIABILIDADE OU ADEQUA&Ccedil;&Atilde;O A UMA FINALIDADE ESPEC&Iacute;FICA.
73   - Consulte a Licen&ccedil;a P&uacute;blica Geral do GNU para mais detalhes.
74   - Voc&ecirc; deve ter recebido uma cópia da Licen&ccedil;a P&uacute;blica Geral do
75   - GNU junto com este programa; se n&atilde;o, escreva para a
76   - Free Software Foundation, Inc., no endere&ccedil;o
77   - 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
  70 + Este programa &eacute; distribu&iacute;do na expectativa de que seja &uacute;til,
  71 + por&eacute;m, SEM NENHUMA GARANTIA; nem mesmo a garantia impl&iacute;cita
  72 + de COMERCIABILIDADE OU ADEQUA&Ccedil;&Atilde;O A UMA FINALIDADE ESPEC&Iacute;FICA.
  73 + Consulte a Licen&ccedil;a P&uacute;blica Geral do GNU para mais detalhes.
  74 + Voc&ecirc; deve ter recebido uma cópia da Licen&ccedil;a P&uacute;blica Geral do
  75 + GNU junto com este programa; se n&atilde;o, escreva para a
  76 + Free Software Foundation, Inc., no endere&ccedil;o
  77 + 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
78 78  
79   - Arquivo:
  79 + Arquivo:
80 80  
81   - i3geo/admin/html/estat_editor.html
  81 + i3geo/admin/html/estat_editor.html
82 82 */
83 83  
84 84 //necessario para a ferramenta login e outras
... ...
admin/html/estat_variavel.html
... ... @@ -5,10 +5,10 @@
5 5 <title>Variaveis</title>
6 6 <style type="text/css">
7 7 /*margin and padding on body element
8   - can introduce errors in determining
9   - element position and are not recommended;
10   - we turn them off as a foundation for YUI
11   - CSS treatments. */
  8 + can introduce errors in determining
  9 + element position and are not recommended;
  10 + we turn them off as a foundation for YUI
  11 + CSS treatments. */
12 12 body {
13 13 margin: 0;
14 14 padding: 0;
... ... @@ -59,6 +59,7 @@ body {
59 59 <input onclick="relatorioCompleto()" type=button id=estatVariavelrelatorioCompleto
60 60 value="Relat&oacute;rio" />
61 61 <br>
  62 + <p style="font-size:10px;">Observação: caso algum mapa esteja aberto (em outra aba por exemplo) não se esqueça de recarregar o navegador após alterar alguma classificação. Isso é necessário para que o mapa reflita as alterações feitas, anulando eventuais arquivos em cache.</p>
62 63 <p>Vari&aacute;veis cadastradas:</p>
63 64 <div id="estatVariavelArvore" style="left: -5px;"></div>
64 65 <div id=logajax style="display: block"></div>
... ... @@ -67,39 +68,39 @@ body {
67 68 </center>
68 69 <script>
69 70 /*
70   - Title: Cadatro de vari&aacute;veis estat&iacute;sticas
  71 + Title: Cadatro de vari&aacute;veis estat&iacute;sticas
71 72  
72   - Veja tamb&eacute;m:
  73 + Veja tamb&eacute;m:
73 74  
74   - <core.js>
  75 + <core.js>
75 76  
76   - <estat_variaveis.js>
  77 + <estat_variaveis.js>
77 78  
78   - Licenca:
  79 + Licenca:
79 80  
80   - GPL2
  81 + GPL2
81 82  
82   - i3Geo Interface Integrada de Ferramentas de Geoprocessamento para Internet
  83 + i3Geo Interface Integrada de Ferramentas de Geoprocessamento para Internet
83 84  
84   - Direitos Autorais Reservados (c) 2006 Minist&eacute;rio do Meio Ambiente Brasil
85   - Desenvolvedor: Edmar Moretti edmar.moretti@mma.gov.br
  85 + Direitos Autorais Reservados (c) 2006 Minist&eacute;rio do Meio Ambiente Brasil
  86 + Desenvolvedor: Edmar Moretti edmar.moretti@mma.gov.br
86 87  
87   - Este programa &eacute; software livre; voc&ecirc; pode redistribu&iacute;-lo
88   - e/ou modific&aacute;-lo sob os termos da Licen&ccedil;a P&uacute;blica Geral
89   - GNU conforme publicada pela Free Software Foundation;
  88 + Este programa &eacute; software livre; voc&ecirc; pode redistribu&iacute;-lo
  89 + e/ou modific&aacute;-lo sob os termos da Licen&ccedil;a P&uacute;blica Geral
  90 + GNU conforme publicada pela Free Software Foundation;
90 91  
91   - Este programa &eacute; distribu&iacute;do na expectativa de que seja &uacute;til,
92   - por&eacute;m, SEM NENHUMA GARANTIA; nem mesmo a garantia impl&iacute;cita
93   - de COMERCIABILIDADE OU ADEQUA&Ccedil;&Atilde;O A UMA FINALIDADE ESPEC&Iacute;FICA.
94   - Consulte a Licen&ccedil;a P&uacute;blica Geral do GNU para mais detalhes.
95   - Voc&ecirc; deve ter recebido uma cópia da Licen&ccedil;a P&uacute;blica Geral do
96   - GNU junto com este programa; se n&atilde;o, escreva para a
97   - Free Software Foundation, Inc., no endere&ccedil;o
98   - 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
  92 + Este programa &eacute; distribu&iacute;do na expectativa de que seja &uacute;til,
  93 + por&eacute;m, SEM NENHUMA GARANTIA; nem mesmo a garantia impl&iacute;cita
  94 + de COMERCIABILIDADE OU ADEQUA&Ccedil;&Atilde;O A UMA FINALIDADE ESPEC&Iacute;FICA.
  95 + Consulte a Licen&ccedil;a P&uacute;blica Geral do GNU para mais detalhes.
  96 + Voc&ecirc; deve ter recebido uma cópia da Licen&ccedil;a P&uacute;blica Geral do
  97 + GNU junto com este programa; se n&atilde;o, escreva para a
  98 + Free Software Foundation, Inc., no endere&ccedil;o
  99 + 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
99 100  
100   - Arquivo:
  101 + Arquivo:
101 102  
102   - i3geo/admin/html/estat_variaveis.html
  103 + i3geo/admin/html/estat_variaveis.html
103 104 */
104 105  
105 106 //necessario para a ferramenta login e outras
... ...
admin/js/estat_editor.js
... ... @@ -424,6 +424,7 @@ i3GEOadmin.editor = {
424 424 },
425 425 uploadshp: {
426 426 inicia: function(){
  427 + i3GEOadmin.editor.esvaziaFormsUpload();
427 428 var onde = $i("i3GEOadmin_formupload");
428 429 if(onde.innerHTML != ""){
429 430 onde.innerHTML = "";
... ... @@ -471,12 +472,13 @@ i3GEOadmin.editor = {
471 472 },
472 473 uploadcsv: {
473 474 inicia: function(){
  475 + i3GEOadmin.editor.esvaziaFormsUpload();
474 476 var onde = $i("i3GEOadmin_formuploadcsv");
475 477 if(onde.innerHTML != ""){
476 478 onde.innerHTML = "";
477 479 return;
478 480 }
479   - $i("i3GEOadmin_formupload").innerHTML = i3GEOadmin.editor.uploadcsv.formulario();
  481 + $i("i3GEOadmin_formuploadcsv").innerHTML = i3GEOadmin.editor.uploadcsv.formulario();
480 482 new YAHOO.widget.Button(
481 483 "i3GEOuploadcsvsubmit",
482 484 {onclick:{fn: i3GEOadmin.editor.uploadcsv.submit}}
... ... @@ -506,6 +508,15 @@ i3GEOadmin.editor = {
506 508 $i("i3GEOuploadcsvesquema").value = $i("i3GEOadminesquema").value;
507 509 $i("i3GEOuploadcsvf").submit();
508 510 }
  511 + },
  512 + esvaziaFormsUpload: function(){
  513 + var csv = $i("i3GEOadmin_formuploadcsv"),
  514 + shp = $i("i3GEOadmin_formupload")
  515 + if(csv){
  516 + csv.innerHTML = "";
  517 + }
  518 + if(shp){
  519 + shp.innerHTML = "";
  520 + }
509 521 }
510   -
511 522 };
... ...
admin/php/metaestat_uploadcsv_submit.php
1 1 <?php
2 2 /*
3 3 * Faz o upload de csv e insere no banco de dados criando uma nova tabela
4   - */
  4 +*/
5 5 include_once("admin.php");
6 6 include_once("login.php");
7 7 if(verificaOperacaoSessao("admin/metaestat/editorbanco") == false){
... ... @@ -16,122 +16,128 @@ error_reporting(0);
16 16 <link rel="stylesheet" type="text/css" href="../../css/geral.css" />
17 17 <title></title>
18 18 </head>
19   -<body bgcolor="white" style="background-color:white;text-align:left;">
20   -<p>
21   -<?php
22   -if($_POST["tabelaDestino"] == ""){
23   - echo "Nome da tabela n&atilde;o definido";
24   - exit;
25   -}
26   -if ($_FILES['i3GEOuploadcsv']['name'] == ""){
27   - echo "Arquivo n&atilde;o definido";
28   - exit;
29   -}
30   -if (isset($_FILES['i3GEOuploadcsv']['name'])){
31   - require_once ("../../ms_configura.php");
32   - echo "<p class='paragrafo' >Carregando o arquivo...</p>";
33   - $arqcsv = $_FILES['i3GEOuploadcsv']['tmp_name'];
34   - $nomePrefixo = str_replace(" ","_",removeAcentos($_FILES['i3GEOuploadcsv']['name']));
35   - $nomePrefixo = $nomePrefixo."_".(nomeRandomico(4));
36   -
37   - $Arquivo = $_FILES['i3GEOuploadcsv']['tmp_name'];
38   - $status = move_uploaded_file($Arquivo,$dir_tmp."/".$nomePrefixo);
39   - if($status != 1)
40   - {echo "<p class='paragrafo' >Ocorreu um erro no envio do arquivo";exit;}
41   -
  19 +<body bgcolor="white" style="background-color: white; text-align: left;">
  20 + <p>
  21 + <?php
  22 + if($_POST["tabelaDestinocsv"] == ""){
  23 + echo "Nome da tabela n&atilde;o definido";
  24 + exit;
  25 + }
  26 + if ($_FILES['i3GEOuploadcsv']['name'] == ""){
  27 + echo "Arquivo n&atilde;o definido";
  28 + exit;
  29 + }
  30 + if (isset($_FILES['i3GEOuploadcsv']['name'])){
  31 + require_once ("../../ms_configura.php");
  32 + echo "<p class='paragrafo' >Carregando o arquivo...</p>";
  33 + $arqcsv = $_FILES['i3GEOuploadcsv']['tmp_name'];
  34 + $nomePrefixo = str_replace(" ","_",removeAcentos($_FILES['i3GEOuploadcsv']['name']));
  35 + $nomePrefixo = $nomePrefixo."_".(nomeRandomico(4));
42 36  
43   - if(!file_exists($dir_tmp."/".$nomePrefixo))
44   - {echo "<p class='paragrafo' >Ocorreu algum problema no envio do arquivo ".$dir_tmp."/".$nomePrefixo;paraAguarde();exit;}
45   - $arqcsv = $dir_tmp."/".$nomePrefixo;
  37 + $Arquivo = $_FILES['i3GEOuploadcsv']['tmp_name'];
  38 + $status = move_uploaded_file($Arquivo,$dir_tmp."/".$nomePrefixo);
  39 + if($status != 1){
  40 + echo "<p class='paragrafo' >Ocorreu um erro no envio do arquivo";exit;
  41 + }
  42 + if(!file_exists($dir_tmp."/".$nomePrefixo)){
  43 + echo "<p class='paragrafo' >Ocorreu algum problema no envio do arquivo ".$dir_tmp."/".$nomePrefixo;paraAguarde();exit;
  44 + }
  45 + $arqcsv = $dir_tmp."/".$nomePrefixo;
  46 + //pega os parametros de conexao
  47 + include("classe_metaestat.php");
  48 + $m = new Metaestat();
  49 + $conexao = $m->listaConexao($_POST["i3GEOuploadcsvcodigoconexao"],true);
  50 + //pega a lista de colunas e identifica o separador utilizado
  51 + $handle = fopen ($arqcsv, "r");
  52 + $cabecalho = fgets($handle);
  53 + $buffer = str_replace('"','',$cabecalho);
  54 + $buffer = str_replace("'",'',$buffer);
  55 + $buffer = str_replace("\n",'',$buffer);
  56 + $buffer = str_replace("\r",'',$buffer);
  57 + $colunas = explode(";",$buffer);
  58 + $separador = ";";
  59 + if(count($colunas) == 1){
  60 + $colunas = explode(",",$buffer);
  61 + $separador = ",";
  62 + }
  63 + //var_dump($colunas);
  64 + fclose ($handle);
  65 + //le o csv em um array
  66 + $handle = fopen ($arqcsv, "r");
  67 + $linhas = array();
46 68  
47   - //pega os parametros de conexao
48   - include("classe_metaestat.php");
49   - $m = new Metaestat();
50   - $conexao = $m->listaConexao($_POST["i3GEOuploadcodigoconexao"],true);
51   - //pega a lista de colunas e identifica o separador utilizado
52   - $handle = fopen ($arqcsv, "r");
53   - $cabecalho = fgets($handle);
54   - $buffer = str_replace('"','',$cabecalho);
55   - $buffer = str_replace("'",'',$buffer);
56   - $buffer = str_replace("\n",'',$buffer);
57   - $buffer = str_replace("\r",'',$buffer);
58   - $colunas = explode(";",$buffer);
59   - $separador = ";";
60   - if(count($colunas) == 1){
61   - $colunas = explode(",",$buffer);
62   - $separador = ",";
63   - }
64   - //var_dump($colunas);
65   - $colunas = implode(",",$colunas);
66   - fclose ($handle);
67   -
68   -
69   - //le o csv em um array
70   - $handle = fopen ($arqcsv, "r");
71   - $linhas = array();
72   - while (!feof($handle)) {
73   - $buffer = fgets($handle);
74   - if($buffer != $cabecalho){
75   - $buffer = str_replace('"','',$buffer);
76   - $buffer = str_replace("'",'',$buffer);
77   - $buffer = str_replace("\n",'',$buffer);
78   - $buffer = str_replace("\r",'',$buffer);
79   - $linhas[] = explode($separador,$buffer);
  69 + $ncolunas = count($colunas);
  70 + while (!feof($handle)) {
  71 + $buffer = fgets($handle);
  72 + if($buffer != $cabecalho){
  73 + $buffer = str_replace('"','',$buffer);
  74 + $buffer = str_replace("'",'',$buffer);
  75 + $buffer = str_replace("\n",'',$buffer);
  76 + $buffer = str_replace("\r",'',$buffer);
  77 + $temp = explode($separador,$buffer);
  78 + if(count($temp) == $ncolunas)
  79 + $linhas[] = $temp;
  80 + }
80 81 }
81   - }
82   - fclose ($handle);
83   - //decobre o tipo de coluna
84   - $ncolunas = count($colunas);
85   - for ($j=0; $j<$ncolunas;$j++){
86   - $tipo = "numeric";
87   - for ($i=0; $i<$testar;$i++){
88   - $s = $linhas[$i];
89   - $v = $s[$j];
90   - if(!is_numeric($v)){
91   - $tipo = "varchar";
  82 + fclose ($handle);
  83 + //decobre o tipo de coluna
  84 + $testar = 10;
  85 + if(count($linhas) < $testar){
  86 + $testar = count($linhas);
92 87 }
93   - }
94   - $tipoColuna[$colunas[$j]] = $tipo;
95   - }
96   - echo "<br>Tipos das colunas: <pre>";
97   - var_dump($tipoColuna);
98   - echo "</pre>";
99   - //gera o script para criar a tabela
100   - $sqltabela = array();
101   - $sql = "CREATE TABLE ".$_POST["i3GEOuploadesquema"].".".$_POST["tabelaDestino"]."(";
102   - foreach($colunas as $coluna){
103   - $sql .= ",".strtolower($coluna)." ".$tipoColuna[$coluna];
104   - }
105   - $sql .= ")WITH(OIDS=FALSE)";
106   - $sqltabela[] = $sql;
107   - $sqltabela[] = "ALTER TABLE ".$_POST["i3GEOuploadesquema"].".".$_POST["tabelaDestino"]." OWNER TO ".$conexao["usuario"];
108   - echo "<br>Sql tabela: <pre>";
109   - var_dump($sqltabela);
110   - echo "</pre>";
111   - //gera o script para inserir os dados
112   - $linhasql = array();
113   - $insert = "INSERT INTO ".$_POST["i3GEOuploadesquema"].".".$_POST["tabelaDestino"]."(".strtolower(implode(",",$colunas)).")";
114   - $nlinhas = count($linhas);
115   - for ($i=0; $i<$nlinhas;$i++){
116   - $s = $linhas[$i];
117   - $vs = array();
118   - $vs[] = $i;
119   - for ($j=0; $j<$ncolunas;$j++){
120   - if($tipoColuna[$colunas[$j]] == "varchar"){
121   - $vs[] = "'".$s[$j]."'";
  88 + $tipoColuna = array();
  89 + for ($j=0; $j<$ncolunas;$j++){
  90 + $tipo = "numeric";
  91 + for ($i=0; $i<$testar;$i++){
  92 + $s = $linhas[$i];
  93 + $v = $s[$j];
  94 + if(!is_numeric($v)){
  95 + $tipo = "varchar";
  96 + }
  97 + }
  98 + $tipoColuna[$colunas[$j]] = $tipo;
122 99 }
123   - else{
124   - $vs[] = $s[$j];
  100 + echo "<br>Tipos das colunas: <pre>";
  101 + var_dump($tipoColuna);
  102 + echo "</pre>";
  103 + //gera o script para criar a tabela
  104 + $sqltabela = array();
  105 + $sql = "CREATE TABLE ".$_POST["i3GEOuploadcsvesquema"].".".$_POST["tabelaDestinocsv"]."(";
  106 + $temp = array();
  107 + foreach($colunas as $coluna){
  108 + $temp[] = strtolower($coluna)." ".$tipoColuna[$coluna];
125 109 }
126   - }
127   - $linhasql[] = $insert."VALUES(".implode(",",$vs).")";
128   - }
129   - try {
130   - $dbh = new PDO('pgsql:dbname='.$conexao["bancodedados"].';user='.$conexao["usuario"].';password='.$conexao["senha"].';host='.$conexao["host"].';port='.$conexao["porta"]);
131   - } catch (PDOException $e) {
  110 + $sql .= implode(",",$temp).") WITH(OIDS=FALSE)";
  111 + $sqltabela[] = $sql;
  112 + $sqltabela[] = "ALTER TABLE ".$_POST["i3GEOuploadcsvesquema"].".".$_POST["tabelaDestinocsv"]." OWNER TO ".$conexao["usuario"];
  113 + echo "<br>Sql tabela: <pre>";
  114 + var_dump($sqltabela);
  115 + echo "</pre>";
  116 + //gera o script para inserir os dados
  117 + $linhasql = array();
  118 + $insert = "INSERT INTO ".$_POST["i3GEOuploadcsvesquema"].".".$_POST["tabelaDestinocsv"]."(".strtolower(implode(",",$colunas)).")";
  119 + $nlinhas = count($linhas);
  120 + for ($i=0; $i<$nlinhas;$i++){
  121 + $s = $linhas[$i];
  122 + $vs = array();
  123 + for ($j=0; $j<$ncolunas;$j++){
  124 + if($tipoColuna[$colunas[$j]] == "varchar"){
  125 + $vs[] = "'".$s[$j]."'";
  126 + }
  127 + else{
  128 + $vs[] = $s[$j];
  129 + }
  130 + }
  131 + $linhasql[] = $insert."VALUES(".implode(",",$vs).")";
  132 + }
  133 + //echo "<pre>";
  134 + //var_dump($linhasql);exit;
  135 + try {
  136 + $dbh = new PDO('pgsql:dbname='.$conexao["bancodedados"].';user='.$conexao["usuario"].';password='.$conexao["senha"].';host='.$conexao["host"].';port='.$conexao["porta"]);
  137 + } catch (PDOException $e) {
132 138 echo 'Connection failed: ' . $e->getMessage();
133 139 }
134   -
  140 +
135 141 foreach($sqltabela as $linha){
136 142 try {
137 143 $dbh->query($linha);
... ... @@ -147,11 +153,12 @@ if (isset($_FILES[&#39;i3GEOuploadcsv&#39;][&#39;name&#39;])){
147 153 }
148 154 }
149 155 echo "<br>Feito!!!<br>Fa&ccedil;a o reload da p&aacute;gina";
150   -}
151   -else{
  156 + }
  157 + else{
152 158 echo "<p class='paragrafo' >Erro ao enviar o arquivo. Talvez o tamanho do arquivo seja maior do que o permitido.</p>";
153 159 }
154 160  
155 161 ?>
  162 +
156 163 </body>
157 164 </html>
... ...