classe_bdexplorer.php
4.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
<?php
/**
* Classe bdexplorer
*
* Contem funcoes que acessam o sistema de metadados estatisticos e o banco de dados de determinada conexao
* Permite listagens apenas quando o esquema estiver em ms_configura/i3geoEsquemasWL
*
*/
namespace i3geo\classesphp\bdexplorer;
use PDO;
use PDOException;
class Bdexplorer{
/**
* Nome do esquema no banco de dados utilizado para armazenar as tabelas
* do sistema de admnistracao. Obtido de ms_configura.php
*/
public $esquemaadmin;
/**
* Objeto PDO obtido com new PDO com direito de leitura no banco de dados de administracao
*/
public $dbh;
/**
* Indica se e necessario converter para UTF strings obtidas do banco de administracao
*/
public $convUTF;
/**
* Pasta temporaria utilizada pelo mapserver
*/
public $dir_tmp;
/**
* Pasta onde e feito o cache de imagens do i3Geo
*/
public $nomecache;
/**
* Lista branca de esquemas permitidos
*/
public $i3geoEsquemasWL;
public $i3geoEsquemasUpload;
/**
* Construtor
* Faz o include de conexao.php que por sua vez faz o include de i3geo/ms_configura.php
*/
function __construct($loc="",$dbh=""){
if(empty($loc)){
$loc = dirname(__FILE__)."/..";
}
include($loc."/ms_configura.php");
//vem do include
$this->dir_tmp = $dir_tmp;
$this->locaplic = $locaplic;
$this->base = $base;
$this->esquemaadmin = "";
if(!empty($esquemaadmin)){
$this->esquemaadmin = str_replace(".","",$esquemaadmin).".";
}
if(!isset($i3geoEsquemasWL) || !is_array($i3geoEsquemasWL)){
$this->i3geoEsquemasWL = array();
} else {
$this->i3geoEsquemasWL = $i3geoEsquemasWL;
}
if(!isset($i3geoUploadDataWL) || !is_array($i3geoUploadDataWL)){
$this->i3geoEsquemasUpload = array();
} else {
$this->i3geoEsquemasUpload = $i3geoUploadDataWL["postgis"]["esquemas"];
}
//se a conexao nao vier como parametro, cria uma nova
if(is_array($dbh)){
$this->dbh = $this->conecta($dbh);
} else {
$this->dbh = $dbh;
}
}
function __destruct(){
$this->fechaConexao();
}
function conecta($c){
$dbh = new PDO('pgsql:dbname='.$c["bancodedados"].';user='.$c["usuario"].';password='.$c["senha"].';host='.$c["host"].';port='.$c["porta"]);
return $dbh;
}
/**
* Fecha a conexao com o banco de dados de administracao
*/
function fechaConexao(){
$this->dbh = null;
}
function listaDeEsquemas(){
return $this->i3geoEsquemasWL;
}
function listaDeEsquemasUpload(){
return $this->i3geoEsquemasUpload;
}
function validaEsquemas($listaDeEsquemas,$lista = ""){
if($lista == ""){
$lista = $this->i3geoEsquemasWL;
}
$novaLista = array();
foreach($listaDeEsquemas as $e){
if(in_array($e,$lista)){
$novaLista[] = $e;
}
}
return $novaLista;
}
function validaEsquema($esquema,$lista=""){
$lista = $this->validaEsquemas(array($esquema),$lista);
if(count($lista) == 0){
return false;
} else {
return true;
}
}
function listaDeTabelas($esquema){
$tabelas = array();
if($this->validaEsquema($esquema) == true){
$sql = "SELECT table_name as tabela FROM information_schema.tables where table_schema = '$esquema' AND table_schema NOT LIKE 'i3geo%' AND table_schema NOT LIKE 'pg_%' AND table_schema NOT LIKE '%_schema%'";
$res = $this->execSQL($sql);
foreach($res as $r){
$tabelas[] = $r["tabela"];
}
}
return $tabelas;
}
function listaDeTabelasUpload($esquema){
$tabelas = array();
if($this->validaEsquema($esquema,$this->i3geoEsquemasUpload) == true){
$sql = "SELECT table_name as tabela FROM information_schema.tables where table_schema = '$esquema' AND table_schema NOT LIKE 'i3geo%' AND table_schema NOT LIKE 'pg_%' AND table_schema NOT LIKE '%_schema%'";
$res = $this->execSQL($sql);
foreach($res as $r){
$tabelas[] = $r["tabela"];
}
}
return $tabelas;
}
function listaDeColunas($esquema,$tabela){
$colunas = array();
if($this->validaEsquema($esquema) == true){
$sql = "SELECT column_name as coluna,udt_name FROM information_schema.columns where table_schema = '$esquema' and table_name = '$tabela'";
$res = $this->execSQL($sql);
foreach($res as $r){
$colunas[] = $r["coluna"];
}
}
return $colunas;
}
function execSQL($sql){
$sql = str_ireplace(array("update","delete","insert","--","drop",";"),"",$sql);
try {
$q = $this->dbh->query($sql,PDO::FETCH_ASSOC);
$q = $q->fetchAll();
return $q;
}
catch (PDOException $e) {
return "Error!: ";
}
}
}
?>