Commit 78dd1b0409fcc7c7d87c2e225d87cfc961e1304d

Authored by Edmar Moretti
1 parent c971b67e

Modificaçõs no SAIKU para evitar a exposição do XML com o esquema dos cubos

admin/php/editormapfile.php
@@ -300,7 +300,7 @@ switch (strtoupper($funcao)) @@ -300,7 +300,7 @@ switch (strtoupper($funcao))
300 $dirs[] = $d."/".$nome; 300 $dirs[] = $d."/".$nome;
301 $dirs[] = $d."/googlemaps/".$nome; 301 $dirs[] = $d."/googlemaps/".$nome;
302 foreach($dirs as $dir){ 302 foreach($dirs as $dir){
303 - rrmdir($dir); 303 + rename($dir,$dir."_removido");
304 } 304 }
305 } 305 }
306 retornaJSON("ok"); 306 retornaJSON("ok");
@@ -2568,20 +2568,24 @@ function removeCabecalho($arq,$symbolset=true) @@ -2568,20 +2568,24 @@ function removeCabecalho($arq,$symbolset=true)
2568 } 2568 }
2569 } 2569 }
2570 fclose($handle); 2570 fclose($handle);
2571 - chmod($arq, 0666); 2571 + //chmod($arq, 0666);
2572 } 2572 }
2573 function rrmdir($dir) { 2573 function rrmdir($dir) {
2574 if (is_dir($dir)) { 2574 if (is_dir($dir)) {
2575 - chmod($dir,0777); 2575 + //chmod($dir,0777);
2576 $objects = scandir($dir); 2576 $objects = scandir($dir);
2577 foreach ($objects as $object) { 2577 foreach ($objects as $object) {
2578 if ($object != "." && $object != "..") { 2578 if ($object != "." && $object != "..") {
2579 - chmod($dir."/".$object,0777);  
2580 - if (filetype($dir."/".$object) == "dir") rrmdir($dir."/".$object); else unlink($dir."/".$object); 2579 + //chmod($dir."/".$object,0777);
  2580 + if (filetype($dir."/".$object) == "dir"){
  2581 + rrmdir($dir."/".$object);
  2582 + } else {
  2583 + rename($dir."/".$object,$dir."/".$object."_removido");
  2584 + }
2581 } 2585 }
2582 } 2586 }
2583 reset($objects); 2587 reset($objects);
2584 rmdir($dir); 2588 rmdir($dir);
2585 } 2589 }
2586 } 2590 }
2587 -?> 2591 +?>
2588 \ No newline at end of file 2592 \ No newline at end of file
classesphp/classe_metaestatinfo.php
@@ -1210,7 +1210,7 @@ class MetaestatInfo{ @@ -1210,7 +1210,7 @@ class MetaestatInfo{
1210 * @param codigo da variavel 1210 * @param codigo da variavel
1211 * @param id da medida de variavel 1211 * @param id da medida de variavel
1212 */ 1212 */
1213 - function listaMedidaVariavel($codigo_variavel,$id_medida_variavel=""){ 1213 + function listaMedidaVariavel($codigo_variavel="",$id_medida_variavel=""){
1214 $sql = "SELECT i3geoestat_medida_variavel.*,i3geoestat_variavel.nome as nome_variavel,i3geoestat_unidade_medida.permitemedia,i3geoestat_unidade_medida.permitesoma,i3geoestat_unidade_medida.nome as unidade_medida "; 1214 $sql = "SELECT i3geoestat_medida_variavel.*,i3geoestat_variavel.nome as nome_variavel,i3geoestat_unidade_medida.permitemedia,i3geoestat_unidade_medida.permitesoma,i3geoestat_unidade_medida.nome as unidade_medida ";
1215 $sql .= "FROM ".$this->esquemaadmin."i3geoestat_variavel "; 1215 $sql .= "FROM ".$this->esquemaadmin."i3geoestat_variavel ";
1216 $sql .= "JOIN ".$this->esquemaadmin."i3geoestat_medida_variavel "; 1216 $sql .= "JOIN ".$this->esquemaadmin."i3geoestat_medida_variavel ";
classesphp/funcoes_gerais.php
@@ -465,11 +465,13 @@ $arq {string} - Nome do arquivo que será gravado @@ -465,11 +465,13 @@ $arq {string} - Nome do arquivo que será gravado
465 function gravaDados($dados,$arq) 465 function gravaDados($dados,$arq)
466 { 466 {
467 $fp = fopen($arq,"w"); 467 $fp = fopen($arq,"w");
468 - foreach ($dados as $dado)  
469 - {  
470 - fwrite($fp,$dado."\n"); 468 + if($fp != false){
  469 + foreach ($dados as $dado)
  470 + {
  471 + fwrite($fp,$dado."\n");
  472 + }
  473 + fclose($fp);
471 } 474 }
472 - fclose($fp);  
473 } 475 }
474 /* 476 /*
475 Function: listaTrueType 477 Function: listaTrueType
css/i3geo7.css.php 100755 → 100644
ferramentas/saiku/cartograma.php
1 <?php 1 <?php
2 -exit;  
3 if(empty($_POST["g_sid"])){ 2 if(empty($_POST["g_sid"])){
4 echo "erro"; 3 echo "erro";
5 exit; 4 exit;
6 } 5 }
7 include(dirname(__FILE__)."/../../classesphp/funcoes_gerais.php"); 6 include(dirname(__FILE__)."/../../classesphp/funcoes_gerais.php");
8 -include(dirname(__FILE__)."/../../admin/php/classe_metaestat.php"); 7 +//include(dirname(__FILE__)."/../../admin/php/classe_metaestat.php");
  8 +include(dirname(__FILE__)."/../../classesphp/classe_metaestatinfo.php");
9 include_once(dirname(__FILE__)."/../../classesphp/classe_estatistica.php"); 9 include_once(dirname(__FILE__)."/../../classesphp/classe_estatistica.php");
10 if(!isset($dir_tmp)){ 10 if(!isset($dir_tmp)){
11 include(dirname(__FILE__)."/../../ms_configura.php"); 11 include(dirname(__FILE__)."/../../ms_configura.php");
@@ -15,6 +15,9 @@ if(isset($statusFerramentas) &amp;&amp; $statusFerramentas[&quot;saiku&quot;] != true){ @@ -15,6 +15,9 @@ if(isset($statusFerramentas) &amp;&amp; $statusFerramentas[&quot;saiku&quot;] != true){
15 } 15 }
16 include(dirname(__FILE__)."/../blacklist.php"); 16 include(dirname(__FILE__)."/../blacklist.php");
17 verificaBlFerramentas(basename(dirname(__FILE__)),$i3geoBlFerramentas,false); 17 verificaBlFerramentas(basename(dirname(__FILE__)),$i3geoBlFerramentas,false);
  18 +
  19 +//error_reporting(E_ALL);
  20 +
18 //pega o filtro da sessao PHP aberta pelo i3Geo 21 //pega o filtro da sessao PHP aberta pelo i3Geo
19 session_name("i3GeoPHP"); 22 session_name("i3GeoPHP");
20 session_id($_POST["g_sid"]); 23 session_id($_POST["g_sid"]);
@@ -51,7 +54,7 @@ else{ @@ -51,7 +54,7 @@ else{
51 echo "Nao foi possivel determinar o codigo da regiao ou localidade no sistema Metaestat"; 54 echo "Nao foi possivel determinar o codigo da regiao ou localidade no sistema Metaestat";
52 exit; 55 exit;
53 } 56 }
54 - $m = new Metaestat(); 57 + $m = new MetaestatInfo();
55 58
56 $meta = $m->listaTipoRegiao($codigo_tipo_regiao); 59 $meta = $m->listaTipoRegiao($codigo_tipo_regiao);
57 $titulolayer = $meta["nome_tipo_regiao"]; 60 $titulolayer = $meta["nome_tipo_regiao"];
ferramentas/saiku/esquemaxml.php
1 <?php 1 <?php
2 -/*  
3 -Importante:  
4 -  
5 -A integração do SAIKU com o i3GEO é experimental.  
6 -  
7 -O SAIKU utiliza os arquivos de fonte de dados que sao criados de forma dinamica na pasta ms_tmp/saiku-datasources.  
8 -Esses arquivos apontam para o arquivo XML com o esquema utilizado para construir os cubos, que tambem sao criados de forma dinamica.  
9 -Como o SAIKU precisa ler esse arquivo XML, o mesmo deve ter permissoes de leitura de forma que o Apache consiga carregar esse arquivo XML.  
10 -E importante destacar que ao fazer isso o arquivo xml fica exposto, o que pode permitir que um usuario qualquer tenha acesso a esse XML.  
11 -Esse XML contem os SQL utilizados para acessar o banco de dados. Ao usar o SAIKU e necessario avaliar se essa caracteristica pode  
12 -apresentar-se como um problema de seguranc  
13 -*/  
14 -//  
15 -//utilize &output=xml para ver o xml  
16 -//  
17 -//utilize &xmlesquema= caso o XML ja exista  
18 -//  
19 -//utilize $regiao para obter o xml de uma so regiao  
20 -//  
21 -/**  
22 - http://localhost/i3geo/ferramentas/saiku/esquemaxml.php?output=xml  
23 - http://localhost/i3geo/ferramentas/saiku/esquemaxml.php?xmlesquema=&output=xml&regiao=1  
24 - */  
25 -//  
26 -//remova essa linhas para poder usar o SAIKU  
27 -//  
28 -echo "Bloqueado. Consulte o administrador.";exit;  
29 -//  
30 -//quando o saiku e iniciado de fora do i3geo, e necessario inicializar um mapfile para uso como base dos mapas  
31 -//  
32 -criaMapfileInicial();  
33 -  
34 include(dirname(__FILE__)."/../../classesphp/funcoes_gerais.php"); 2 include(dirname(__FILE__)."/../../classesphp/funcoes_gerais.php");
35 -include(dirname(__FILE__)."/../../admin/php/classe_metaestat.php"); 3 +//include(dirname(__FILE__)."/../../admin/php/classe_metaestat.php");
  4 +include(dirname(__FILE__)."/../../classesphp/classe_metaestatinfo.php");
36 if(!isset($dir_tmp)){ 5 if(!isset($dir_tmp)){
37 include(dirname(__FILE__)."/../../ms_configura.php"); 6 include(dirname(__FILE__)."/../../ms_configura.php");
38 } 7 }
39 if(isset($statusFerramentas) && $statusFerramentas["saiku"] != true){ 8 if(isset($statusFerramentas) && $statusFerramentas["saiku"] != true){
40 exit; 9 exit;
41 } 10 }
  11 +//testa pra ver se a requisicao esta vindo de um local autorizado
  12 +if(parse_url($saikuUrl)["host"] != gethostbyaddr($_SERVER['REMOTE_ADDR'])){
  13 + echo "Servidor requisitante nao permitido";
  14 +}
42 $urlXmlEsquema = ""; 15 $urlXmlEsquema = "";
43 -$nomeConexao = criaConexaoEsquema();  
44 -  
45 -$map_file = $_SESSION["map_file"];  
46 -  
47 -$arquivoXmlEsquema = dirname($map_file)."/".str_replace(".txt","",$nomeConexao).".xml"; 16 +/*
  17 +if(empty($_GET["output"])){
  18 + $map_file = $_SESSION["map_file"];
  19 + $arquivoXmlEsquema = dirname($map_file)."/".str_replace(".txt","",$nomeConexao).".xml";
  20 +}
48 gravaDataSource(); 21 gravaDataSource();
49 -if(!empty($_GET["xmlesquema"])){ 22 +if(!empty($_GET["output"])){
50 imprimeEsquema(); 23 imprimeEsquema();
51 } 24 }
52 -$m = new Metaestat(); 25 +*/
  26 +$m = new MetaestatInfo();
53 27
54 // 28 //
55 //obtem do mapfile em uso os layers que sao do sistema metaestat, sao regioes e que possuem selecao 29 //obtem do mapfile em uso os layers que sao do sistema metaestat, sao regioes e que possuem selecao
56 // 30 //
  31 +/*
57 if(empty($_GET["regiao"])){ 32 if(empty($_GET["regiao"])){
58 $s = pegaSelecaoRegioes(); 33 $s = pegaSelecaoRegioes();
59 $selecaoRegiao = $s["selecaoRegiao"]; 34 $selecaoRegiao = $s["selecaoRegiao"];
@@ -62,7 +37,6 @@ if(empty($_GET[&quot;regiao&quot;])){ @@ -62,7 +37,6 @@ if(empty($_GET[&quot;regiao&quot;])){
62 else{ 37 else{
63 $codigo_tipo_regiao = $_GET["regiao"]; 38 $codigo_tipo_regiao = $_GET["regiao"];
64 } 39 }
65 -//verifica se o cubo usa uma regiao especifica ou todas  
66 if($codigo_tipo_regiao == ""){ 40 if($codigo_tipo_regiao == ""){
67 $regioes = $m->listaTipoRegiao(); 41 $regioes = $m->listaTipoRegiao();
68 } 42 }
@@ -70,10 +44,7 @@ else{ @@ -70,10 +44,7 @@ else{
70 $regioes = array($m->listaTipoRegiao($codigo_tipo_regiao)); 44 $regioes = array($m->listaTipoRegiao($codigo_tipo_regiao));
71 } 45 }
72 $s = ""; 46 $s = "";
73 -  
74 -if(empty($saikuConfigDataSource['tabelaDimensaoTempo'])){  
75 - $saikuConfigDataSource['tabelaDimensaoTempo'] = "i3geo_metaestat.dim_tempo";  
76 -} 47 +*/
77 48
78 $medidas = $m->listaMedidaVariavel(); 49 $medidas = $m->listaMedidaVariavel();
79 50
@@ -85,9 +56,7 @@ $todasAsRegioes = $m-&gt;listaTipoRegiao(); @@ -85,9 +56,7 @@ $todasAsRegioes = $m-&gt;listaTipoRegiao();
85 foreach($todasAsRegioes as $R){ 56 foreach($todasAsRegioes as $R){
86 $chavesRegiao[$R["codigo_tipo_regiao"]] = $R; 57 $chavesRegiao[$R["codigo_tipo_regiao"]] = $R;
87 } 58 }
88 -  
89 //inicia montagem do XML 59 //inicia montagem do XML
90 -  
91 // 60 //
92 //cria as dimensoes de tipo temporal 61 //cria as dimensoes de tipo temporal
93 // 62 //
@@ -149,14 +118,16 @@ ob_end_clean(); @@ -149,14 +118,16 @@ ob_end_clean();
149 //grava os dados em um arquivo. O usuario pode evitar isso e imprimir direto na tela 118 //grava os dados em um arquivo. O usuario pode evitar isso e imprimir direto na tela
150 //usando output "xml" 119 //usando output "xml"
151 // 120 //
152 -if($_GET["output"] != "xml"){ 121 +/*
  122 +if(empty($_GET["output"]) || (!empty($_GET["output"]) && $_GET["output"] != "xml")){
153 gravaDados(array($xml),$arquivoXmlEsquema); 123 gravaDados(array($xml),$arquivoXmlEsquema);
154 } 124 }
  125 +*/
155 imprimeEsquema(); 126 imprimeEsquema();
156 127
157 128
158 ////////////////////////////////////////////////////////////////////////////////////////// 129 //////////////////////////////////////////////////////////////////////////////////////////
159 -function caminhoRegiao($hs,$chavesRegiao,$h,$regiaoInicial,$caminho) 130 +function caminhoRegiao($hs,$chavesRegiao,$h,$regiaoInicial,$caminho=array())
160 { 131 {
161 foreach($hs as $n){ 132 foreach($hs as $n){
162 if($n["codigo_tipo_regiao"] == $regiaoInicial){ 133 if($n["codigo_tipo_regiao"] == $regiaoInicial){
@@ -170,28 +141,20 @@ function caminhoRegiao($hs,$chavesRegiao,$h,$regiaoInicial,$caminho) @@ -170,28 +141,20 @@ function caminhoRegiao($hs,$chavesRegiao,$h,$regiaoInicial,$caminho)
170 return $caminho; 141 return $caminho;
171 } 142 }
172 function converte($texto){ 143 function converte($texto){
173 - $texto = str_replace("&","&amp;",htmlentities($texto,ENT_NOQUOTES,mb_detect_encoding($texto))); 144 + $texto = str_replace("&","&amp;",htmlentities($texto,ENT_NOQUOTES,'UTF-8'));
174 return $texto; 145 return $texto;
175 } 146 }
176 function imprimeEsquema(){ 147 function imprimeEsquema(){
177 global $saikuUrl,$nomeConexao,$xml; 148 global $saikuUrl,$nomeConexao,$xml;
178 - if($_GET["output"] == "xml"){  
179 - if(!empty($_GET["xmlesquema"])){  
180 - echo header("Content-type: application/xml");  
181 - header("Location:".$_GET["xmlesquema"]);  
182 - }  
183 - else{  
184 - imprimeXml($xml);  
185 - } 149 + @ob_end_clean();
  150 + header("Content-type: application/xml");
  151 + if(!empty($_GET["xmlesquema"])){
  152 + header("Location:".$_GET["xmlesquema"]);
186 } 153 }
187 else{ 154 else{
188 - header("Location:".$saikuUrl."/?nomeConexao=".$nomeConexao."&locaplic=".$_GET["locaplic"]."&g_sid=".$_GET["g_sid"]."&mapext=".$_GET["mapext"]."&origem=".$_GET["origem"]."&regiao=".$_GET["regiao"]); 155 + echo $xml;
189 } 156 }
190 } 157 }
191 -function imprimeXml($xml){  
192 - echo header("Content-type: application/xml");  
193 - echo $xml;  
194 -}  
195 function criaMapfileInicial(){ 158 function criaMapfileInicial(){
196 global $mapext; 159 global $mapext;
197 if(empty($_GET["g_sid"])){ 160 if(empty($_GET["g_sid"])){
@@ -209,17 +172,19 @@ function criaConexaoEsquema(){ @@ -209,17 +172,19 @@ function criaConexaoEsquema(){
209 global $dir_tmp, $urlXmlEsquema; 172 global $dir_tmp, $urlXmlEsquema;
210 $nomeConexao = nomeRandomico(); 173 $nomeConexao = nomeRandomico();
211 //pega a sessao PHP aberta pelo i3Geo ou ms_criamapa.php 174 //pega a sessao PHP aberta pelo i3Geo ou ms_criamapa.php
212 - session_name("i3GeoPHP");  
213 - session_id($_GET["g_sid"]);  
214 - session_start();  
215 - $map_file = $_SESSION["map_file"];  
216 - if(empty($_GET["xmlesquema"])){  
217 - $urlXmlEsquema = $_SESSION["tmpurl"].basename(dirname($map_file))."/".$nomeConexao.".xml";  
218 - }  
219 - else{  
220 - $urlXmlEsquema = $_GET["xmlesquema"];  
221 - //cria um nome de arquivo reaproveitável  
222 - $nomeConexao = md5($_GET["xmlesquema"]); 175 + if(!empty($_GET["g_sid"])){
  176 + session_name("i3GeoPHP");
  177 + session_id($_GET["g_sid"]);
  178 + session_start();
  179 + $map_file = $_SESSION["map_file"];
  180 + if(empty($_GET["xmlesquema"])){
  181 + $urlXmlEsquema = $_SESSION["tmpurl"].basename(dirname($map_file))."/".$nomeConexao.".xml";
  182 + }
  183 + else{
  184 + $urlXmlEsquema = $_GET["xmlesquema"];
  185 + //cria um nome de arquivo reaproveitável
  186 + $nomeConexao = md5($_GET["xmlesquema"]);
  187 + }
223 } 188 }
224 //$arquivoXmlEsquema = dirname($map_file)."/".$nomeConexao.".xml"; 189 //$arquivoXmlEsquema = dirname($map_file)."/".$nomeConexao.".xml";
225 return $nomeConexao.".txt"; 190 return $nomeConexao.".txt";
@@ -251,7 +216,11 @@ function gravaDataSource(){ @@ -251,7 +216,11 @@ function gravaDataSource(){
251 ); 216 );
252 */ 217 */
253 global $arquivoXmlEsquema,$saikuConfigDataSource,$nomeConexao,$urlXmlEsquema,$dir_tmp; 218 global $arquivoXmlEsquema,$saikuConfigDataSource,$nomeConexao,$urlXmlEsquema,$dir_tmp;
  219 +
254 $nomeDatasource = $dir_tmp."/saiku-datasources/".$nomeConexao; 220 $nomeDatasource = $dir_tmp."/saiku-datasources/".$nomeConexao;
  221 + //nao funciona como url
  222 + //error_reporting(E_ALL);
  223 + $urlXmlEsquema = "http//localhost/i3geo/ferramentas/saiku/esquemaxml.php?output=xml";
255 if(!file_exists($arquivoXmlEsquema)){ 224 if(!file_exists($arquivoXmlEsquema)){
256 $stringDatasource = " 225 $stringDatasource = "
257 type={$saikuConfigDataSource["type"]} 226 type={$saikuConfigDataSource["type"]}
@@ -406,10 +375,12 @@ function sqlDasRegioes($regiao,$caminho,$chavesRegiao){ @@ -406,10 +375,12 @@ function sqlDasRegioes($regiao,$caminho,$chavesRegiao){
406 function dimensoesGeo(){ 375 function dimensoesGeo(){
407 global $chavesRegiao, $m, $selecaoRegiao, $regioes, $filhosDaRegiao, $VirtualCubeDimensionDaRegiao, $VirtualCubeMeasureDaRegiao; 376 global $chavesRegiao, $m, $selecaoRegiao, $regioes, $filhosDaRegiao, $VirtualCubeDimensionDaRegiao, $VirtualCubeMeasureDaRegiao;
408 //essas variaveis sao globais e usadas em outras funcoes 377 //essas variaveis sao globais e usadas em outras funcoes
409 - foreach($regioes as $regiao){  
410 - $filhosDaRegiao[$regiao["codigo_tipo_regiao"]] = array();  
411 - $VirtualCubeDimensionDaRegiao[$regiao["codigo_tipo_regiao"]] = array();  
412 - $VirtualCubeMeasureDaRegiao[$regiao["codigo_tipo_regiao"]] = array(); 378 + if(!empty($regioes)){
  379 + foreach($regioes as $regiao){
  380 + $filhosDaRegiao[$regiao["codigo_tipo_regiao"]] = array();
  381 + $VirtualCubeDimensionDaRegiao[$regiao["codigo_tipo_regiao"]] = array();
  382 + $VirtualCubeMeasureDaRegiao[$regiao["codigo_tipo_regiao"]] = array();
  383 + }
413 } 384 }
414 //xml normal 385 //xml normal
415 $xml1 = ""; 386 $xml1 = "";
@@ -602,25 +573,26 @@ function dimensoesTabelas(){ @@ -602,25 +573,26 @@ function dimensoesTabelas(){
602 $VirtualCubeDimension[] = " 573 $VirtualCubeDimension[] = "
603 <VirtualCubeDimension name='codigo_tipo_regiao_{$c["codigo_tipo_regiao"]}_geocod' /> 574 <VirtualCubeDimension name='codigo_tipo_regiao_{$c["codigo_tipo_regiao"]}_geocod' />
604 "; 575 ";
605 -  
606 - array_push(  
607 - $VirtualCubeDimensionDaRegiao[$c["codigo_tipo_regiao"]],  
608 - "<VirtualCubeDimension name='codigo_tipo_regiao_{$c["codigo_tipo_regiao"]}' />"  
609 - );  
610 - array_push(  
611 - $VirtualCubeDimensionDaRegiao[$c["codigo_tipo_regiao"]],  
612 - "<VirtualCubeDimension name='codigo_tipo_regiao_{$c["codigo_tipo_regiao"]}_geocod' />"  
613 - );  
614 -  
615 - array_push(  
616 - $VirtualCubeDimensionDaMedida[$c["nome_variavel"]],  
617 - "<VirtualCubeDimension name='codigo_tipo_regiao_{$c["codigo_tipo_regiao"]}' />"  
618 - );  
619 - array_push(  
620 - $VirtualCubeDimensionDaMedida[$c["nome_variavel"]],  
621 - "<VirtualCubeDimension name='codigo_tipo_regiao_{$c["codigo_tipo_regiao"]}_geocod' />"  
622 - );  
623 - 576 + if(array_key_exists($c["codigo_tipo_regiao"],$VirtualCubeDimensionDaRegiao)){
  577 + array_push(
  578 + $VirtualCubeDimensionDaRegiao[$c["codigo_tipo_regiao"]],
  579 + "<VirtualCubeDimension name='codigo_tipo_regiao_{$c["codigo_tipo_regiao"]}' />"
  580 + );
  581 + array_push(
  582 + $VirtualCubeDimensionDaRegiao[$c["codigo_tipo_regiao"]],
  583 + "<VirtualCubeDimension name='codigo_tipo_regiao_{$c["codigo_tipo_regiao"]}_geocod' />"
  584 + );
  585 + }
  586 + if(array_key_exists($c["nome_variavel"],$VirtualCubeDimensionDaMedida)){
  587 + array_push(
  588 + $VirtualCubeDimensionDaMedida[$c["nome_variavel"]],
  589 + "<VirtualCubeDimension name='codigo_tipo_regiao_{$c["codigo_tipo_regiao"]}' />"
  590 + );
  591 + array_push(
  592 + $VirtualCubeDimensionDaMedida[$c["nome_variavel"]],
  593 + "<VirtualCubeDimension name='codigo_tipo_regiao_{$c["codigo_tipo_regiao"]}_geocod' />"
  594 + );
  595 + }
624 596
625 //verifica as dimensoes do tipo tempo 597 //verifica as dimensoes do tipo tempo
626 $dimEnsoes = array(); 598 $dimEnsoes = array();
@@ -643,11 +615,12 @@ function dimensoesTabelas(){ @@ -643,11 +615,12 @@ function dimensoesTabelas(){
643 <DimensionUsage foreignKey='".implode("_",$parComposto)."_' name='Tempo' source='Tempo'/> 615 <DimensionUsage foreignKey='".implode("_",$parComposto)."_' name='Tempo' source='Tempo'/>
644 "; 616 ";
645 $dimEnsoes[] = $u; 617 $dimEnsoes[] = $u;
646 - array_push($VirtualCubeDimensionDaRegiao[$c["codigo_tipo_regiao"]],"<VirtualCubeDimension name='Tempo' />"); 618 + if(array_key_exists($c["codigo_tipo_regiao"],$VirtualCubeDimensionDaRegiao)){
  619 + array_push($VirtualCubeDimensionDaRegiao[$c["codigo_tipo_regiao"]],"<VirtualCubeDimension name='Tempo' />");
  620 + }
647 } 621 }
648 //outros parametros 622 //outros parametros
649 $outrosParametros = array(); 623 $outrosParametros = array();
650 -  
651 foreach($parametros as $parametro){ 624 foreach($parametros as $parametro){
652 $k = $parametro["esquemadb"]."_".$parametro["tabela"]."_".$parametro["coluna"]; 625 $k = $parametro["esquemadb"]."_".$parametro["tabela"]."_".$parametro["coluna"];
653 if($parametro["tipo"] > 5 || $parametro["tipo"] == 0){ 626 if($parametro["tipo"] > 5 || $parametro["tipo"] == 0){
@@ -655,7 +628,9 @@ function dimensoesTabelas(){ @@ -655,7 +628,9 @@ function dimensoesTabelas(){
655 $VirtualCubeDimension[] = "<VirtualCubeDimension name='{$k}' />"; 628 $VirtualCubeDimension[] = "<VirtualCubeDimension name='{$k}' />";
656 $u = "<DimensionUsage foreignKey='".$parametro["coluna"]."' name='{$k}' source='{$k}'/>"; 629 $u = "<DimensionUsage foreignKey='".$parametro["coluna"]."' name='{$k}' source='{$k}'/>";
657 $dimEnsoes[] = $u; 630 $dimEnsoes[] = $u;
658 - array_push($VirtualCubeDimensionDaRegiao[$c["codigo_tipo_regiao"]],"<VirtualCubeDimension name='{$k}' />"); 631 + if(array_key_exists($c["codigo_tipo_regiao"],$VirtualCubeDimensionDaRegiao)){
  632 + array_push($VirtualCubeDimensionDaRegiao[$c["codigo_tipo_regiao"]],"<VirtualCubeDimension name='{$k}' />");
  633 + }
659 } 634 }
660 } 635 }
661 636
@@ -722,13 +697,14 @@ function dimensoesTabelas(){ @@ -722,13 +697,14 @@ function dimensoesTabelas(){
722 "; 697 ";
723 } 698 }
724 //inclui as dimensoes filhas 699 //inclui as dimensoes filhas
725 - foreach($filhosDaRegiao[$c["codigo_tipo_regiao"]] as $fr){  
726 - $xml .= "  
727 - <DimensionUsage foreignKey='codigoreg' name='codigo_tipo_regiao_".$fr."' source='codigo_tipo_regiao_".$fr."'/>  
728 - <DimensionUsage foreignKey='codigoreg' name='codigo_tipo_regiao_".$fr."_geocod' source='codigo_tipo_regiao_".$fr."_geocod'/>  
729 - "; 700 + if(array_key_exists($c["codigo_tipo_regiao"],$filhosDaRegiao)){
  701 + foreach($filhosDaRegiao[$c["codigo_tipo_regiao"]] as $fr){
  702 + $xml .= "
  703 + <DimensionUsage foreignKey='codigoreg' name='codigo_tipo_regiao_".$fr."' source='codigo_tipo_regiao_".$fr."'/>
  704 + <DimensionUsage foreignKey='codigoreg' name='codigo_tipo_regiao_".$fr."_geocod' source='codigo_tipo_regiao_".$fr."_geocod'/>
  705 + ";
  706 + }
730 } 707 }
731 -  
732 $xml .= implode(" ",array_unique($dimEnsoes)); 708 $xml .= implode(" ",array_unique($dimEnsoes));
733 709
734 //inclui cada elemento em medida 710 //inclui cada elemento em medida
@@ -753,7 +729,9 @@ function dimensoesTabelas(){ @@ -753,7 +729,9 @@ function dimensoesTabelas(){
753 <VirtualCubeMeasure cubeName='Tabela: {$c["esquemadb"]}{$c["tabela"]}' name='[Measures].[id_medida_variavel_".$medida["id_medida_variavel"]."]'/> 729 <VirtualCubeMeasure cubeName='Tabela: {$c["esquemadb"]}{$c["tabela"]}' name='[Measures].[id_medida_variavel_".$medida["id_medida_variavel"]."]'/>
754 "; 730 ";
755 $VirtualCubeMeasure[] = $u; 731 $VirtualCubeMeasure[] = $u;
756 - array_push($VirtualCubeMeasureDaRegiao[$c["codigo_tipo_regiao"]],$u); 732 + if(array_key_exists($c["codigo_tipo_regiao"],$VirtualCubeMeasureDaRegiao)){
  733 + array_push($VirtualCubeMeasureDaRegiao[$c["codigo_tipo_regiao"]],$u);
  734 + }
757 //verifica em qual variavel entra 735 //verifica em qual variavel entra
758 //<VirtualCubeMeasure cubeName='Tabela: idsustb_indicador' name='[Measures].[id_medida_variavel_12]'/> 736 //<VirtualCubeMeasure cubeName='Tabela: idsustb_indicador' name='[Measures].[id_medida_variavel_12]'/>
759 $u = "<VirtualCubeMeasure cubeName='Tabela: {$c["esquemadb"]}{$c["tabela"]}' name='[Measures].[id_medida_variavel_".$medida["id_medida_variavel"]."]'/>"; 737 $u = "<VirtualCubeMeasure cubeName='Tabela: {$c["esquemadb"]}{$c["tabela"]}' name='[Measures].[id_medida_variavel_".$medida["id_medida_variavel"]."]'/>";
@@ -778,18 +756,20 @@ function cuboTodas(){ @@ -778,18 +756,20 @@ function cuboTodas(){
778 function cuboRegioes(){ 756 function cuboRegioes(){
779 global $regioes, $VirtualCubeDimensionDaRegiao, $VirtualCubeMeasureDaRegiao, $filhosDaRegiao; 757 global $regioes, $VirtualCubeDimensionDaRegiao, $VirtualCubeMeasureDaRegiao, $filhosDaRegiao;
780 $xml = ""; 758 $xml = "";
781 - foreach($regioes as $regiao){  
782 - //inclui os parametros para a regiao de acordo com os filhos que possui  
783 - $d = $VirtualCubeDimensionDaRegiao[$regiao["codigo_tipo_regiao"]];  
784 - $mm = $VirtualCubeMeasureDaRegiao[$regiao["codigo_tipo_regiao"]];  
785 - foreach($filhosDaRegiao[$regiao["codigo_tipo_regiao"]] as $f){  
786 - $mm = array_merge($mm,$VirtualCubeMeasureDaRegiao[$f]);  
787 - }  
788 - if(count(array_unique($mm)) > 0){  
789 - $xml .= '<VirtualCube name="Regi&amp;atilde;o: '.converte($regiao["nome_tipo_regiao"]).'" >';  
790 - $xml .= implode(" ",array_unique($d));  
791 - $xml .= implode(" ",array_unique($mm));  
792 - $xml .= '</VirtualCube>'; 759 + if(!empty($regioes)){
  760 + foreach($regioes as $regiao){
  761 + //inclui os parametros para a regiao de acordo com os filhos que possui
  762 + $d = $VirtualCubeDimensionDaRegiao[$regiao["codigo_tipo_regiao"]];
  763 + $mm = $VirtualCubeMeasureDaRegiao[$regiao["codigo_tipo_regiao"]];
  764 + foreach($filhosDaRegiao[$regiao["codigo_tipo_regiao"]] as $f){
  765 + $mm = array_merge($mm,$VirtualCubeMeasureDaRegiao[$f]);
  766 + }
  767 + if(count(array_unique($mm)) > 0){
  768 + $xml .= '<VirtualCube name="Regi&amp;atilde;o: '.converte($regiao["nome_tipo_regiao"]).'" >';
  769 + $xml .= implode(" ",array_unique($d));
  770 + $xml .= implode(" ",array_unique($mm));
  771 + $xml .= '</VirtualCube>';
  772 + }
793 } 773 }
794 } 774 }
795 return $xml; 775 return $xml;
ferramentas/saiku/index.js
@@ -167,7 +167,7 @@ i3GEOF.saiku = @@ -167,7 +167,7 @@ i3GEOF.saiku =
167 }, 167 },
168 iniciaJanelaFlutuante2 : function() { 168 iniciaJanelaFlutuante2 : function() {
169 var mapext = i3GEO.util.extOSM2Geo(i3GEO.parametros.mapexten), url = 169 var mapext = i3GEO.util.extOSM2Geo(i3GEO.parametros.mapexten), url =
170 - i3GEO.configura.locaplic + "/ferramentas/saiku/esquemaxml.php?origem=i3geo&g_sid=" + i3GEO.configura.sid + "&locaplic=" 170 + i3GEO.configura.locaplic + "/ferramentas/saiku/startsaiku.php?origem=i3geo&g_sid=" + i3GEO.configura.sid + "&locaplic="
171 + i3GEO.configura.locaplic + "&mapext=" + mapext, cabecalho = function() { 171 + i3GEO.configura.locaplic + "&mapext=" + mapext, cabecalho = function() {
172 }, minimiza = function() { 172 }, minimiza = function() {
173 i3GEO.janela.iconiza("i3GEOF.saikuMapa",100); 173 i3GEO.janela.iconiza("i3GEOF.saikuMapa",100);
@@ -198,7 +198,7 @@ i3GEOF.saiku = @@ -198,7 +198,7 @@ i3GEOF.saiku =
198 }, 198 },
199 aplicar : function() { 199 aplicar : function() {
200 var mapext = i3GEO.util.extOSM2Geo(i3GEO.parametros.mapexten); 200 var mapext = i3GEO.util.extOSM2Geo(i3GEO.parametros.mapexten);
201 - window.open(i3GEO.configura.locaplic + "/ferramentas/saiku/esquemaxml.php?origem=i3geo&g_sid=" + i3GEO.configura.sid 201 + window.open(i3GEO.configura.locaplic + "/ferramentas/saiku/startsaiku.php?origem=i3geo&g_sid=" + i3GEO.configura.sid
202 + "&locaplic=" + i3GEO.configura.locaplic + "&mapext=" + mapext); 202 + "&locaplic=" + i3GEO.configura.locaplic + "&mapext=" + mapext);
203 }, 203 },
204 atualizaMapa : function() { 204 atualizaMapa : function() {
ferramentas/saiku/startsaiku.php 0 → 100755
@@ -0,0 +1,119 @@ @@ -0,0 +1,119 @@
  1 +<?php
  2 +/*
  3 +Importante:
  4 +
  5 +A integracaoo do SAIKU com o i3GEO e experimental.
  6 +
  7 +O SAIKU utiliza os arquivos de fonte de dados que sao criados de forma dinamica na pasta ms_tmp/saiku-datasources.
  8 +Esses arquivos apontam para o arquivo XML com o esquema utilizado para construir os cubos, que tambem sao criados de forma dinamica.
  9 +Como o SAIKU precisa ler esse arquivo XML, o mesmo deve ter permissoes de leitura de forma que o Apache consiga carregar esse arquivo XML.
  10 +E importante destacar que ao fazer isso o arquivo xml fica exposto, o que pode permitir que um usuario qualquer tenha acesso a esse XML.
  11 +Esse XML contem os SQL utilizados para acessar o banco de dados. Ao usar o SAIKU e necessario avaliar se essa caracteristica pode
  12 +apresentar-se como um problema de seguranc
  13 +*/
  14 +//
  15 +//remova essa linhas para poder usar o SAIKU
  16 +//
  17 +//echo "Bloqueado. Consulte o administrador.";exit;
  18 +
  19 +include(dirname(__FILE__)."/../../classesphp/funcoes_gerais.php");
  20 +//include(dirname(__FILE__)."/../../admin/php/classe_metaestat.php");
  21 +include(dirname(__FILE__)."/../../classesphp/classe_metaestatinfo.php");
  22 +if(!isset($dir_tmp)){
  23 + include(dirname(__FILE__)."/../../ms_configura.php");
  24 +}
  25 +if(isset($statusFerramentas) && $statusFerramentas["saiku"] != true){
  26 + exit;
  27 +}
  28 +
  29 +$urlXmlEsquema = "";
  30 +$nomeConexao = "i3geo.txt";//criaConexaoEsquema();
  31 +
  32 +//$map_file = $_SESSION["map_file"];
  33 +//$arquivoXmlEsquema = dirname($map_file)."/".str_replace(".txt","",$nomeConexao).".xml";
  34 +gravaDataSource();
  35 +if(empty($_GET["regiao"])){
  36 + $_GET["regiao"] = "";
  37 +}
  38 +ob_clean();
  39 +header("Location:".$saikuUrl."/?nomeConexao=".$nomeConexao."&locaplic=".$_GET["locaplic"]."&g_sid=".$_GET["g_sid"]."&mapext=".$_GET["mapext"]."&origem=".$_GET["origem"]."&regiao=".$_GET["regiao"]);
  40 +
  41 +function converte($texto){
  42 + $texto = str_replace("&","&amp;",htmlentities($texto,ENT_NOQUOTES,'UTF-8'));
  43 + return $texto;
  44 +}
  45 +function criaConexaoEsquema(){
  46 + global $dir_tmp, $urlXmlEsquema;
  47 + $nomeConexao = nomeRandomico();
  48 + //pega a sessao PHP aberta pelo i3Geo ou ms_criamapa.php
  49 + if(!empty($_GET["g_sid"])){
  50 + session_name("i3GeoPHP");
  51 + session_id($_GET["g_sid"]);
  52 + session_start();
  53 + $map_file = $_SESSION["map_file"];
  54 + if(empty($_GET["xmlesquema"])){
  55 + $urlXmlEsquema = $_SESSION["tmpurl"].basename(dirname($map_file))."/".$nomeConexao.".xml";
  56 + }
  57 + else{
  58 + $urlXmlEsquema = $_GET["xmlesquema"];
  59 + //cria um nome de arquivo reaproveitável
  60 + $nomeConexao = md5($_GET["xmlesquema"]);
  61 + }
  62 + }
  63 + //$arquivoXmlEsquema = dirname($map_file)."/".$nomeConexao.".xml";
  64 + return $nomeConexao.".txt";
  65 +}
  66 +function gravaDataSource(){
  67 + /*
  68 + $saikuConfigDataSource vem do ms_configura.php
  69 +
  70 + Exemplo de arquivo de fonte:
  71 + type=OLAP
  72 + name=i3geo
  73 + driver=mondrian.olap4j.MondrianOlap4jDriver
  74 + location=jdbc:mondrian:Jdbc=jdbc:postgresql://localhost:5432/i3geosaude;Catalog=http://localhost/i3geo/ferramentas/saiku/esquemaxml.php;JdbcDrivers=org.postgresql.Driver;
  75 + username=postgres
  76 + password=postgres
  77 +
  78 + Array com os parametros definidos em ms_configura:
  79 +
  80 + $saikuConfigDataSource = array(
  81 + "type"=>"OLAP",
  82 + "driver"=>"mondrian.olap4j.MondrianOlap4jDriver",
  83 + "location"=>"jdbc:mondrian:Jdbc=jdbc:postgresql",
  84 + "serverdb"=>"localhost",
  85 + "port"=>"5432",
  86 + "database"=>"i3geosaude",
  87 + "JdbcDrivers"=>"org.postgresql.Driver",
  88 + "username"=>"postgres",
  89 + "password"=>"postgres"
  90 + );
  91 + */
  92 + global $arquivoXmlEsquema,$saikuConfigDataSource,$nomeConexao,$urlXmlEsquema,$dir_tmp;
  93 +
  94 + $nomeDatasource = $dir_tmp."/saiku-datasources/".$nomeConexao;
  95 + //nao funciona como url
  96 + //error_reporting(E_ALL);
  97 + //$urlXmlEsquema = "http://localhost/i3geo/ferramentas/saiku/esquemaxml.php";
  98 +
  99 + $protocolo = explode("/",$_SERVER['SERVER_PROTOCOL']);
  100 + $protocolo = $protocolo[0];
  101 + $protocolo = strtolower($protocolo) . '://'.$_SERVER['SERVER_NAME'] .":". $_SERVER['SERVER_PORT'];
  102 + $urlXmlEsquema = str_replace("startsaiku","esquemaxml",$protocolo.$_SERVER["PHP_SELF"]);
  103 +
  104 + //error_log($urlXmlEsquema);
  105 +
  106 + //if(!file_exists($arquivoXmlEsquema)){
  107 + $stringDatasource = "
  108 + type={$saikuConfigDataSource["type"]}
  109 + name={$nomeConexao}
  110 + driver={$saikuConfigDataSource["driver"]}
  111 + location={$saikuConfigDataSource["location"]}://{$saikuConfigDataSource["serverdb"]}:{$saikuConfigDataSource["port"]}/{$saikuConfigDataSource["database"]};Catalog={$urlXmlEsquema};JdbcDrivers={$saikuConfigDataSource["JdbcDrivers"]};
  112 + username={$saikuConfigDataSource["username"]}
  113 + password={$saikuConfigDataSource["password"]}
  114 + ";
  115 + //salva o arquivo com a fonte
  116 + gravaDados(array($stringDatasource),$nomeDatasource);
  117 + //}
  118 +}
  119 +?>
@@ -64,7 +64,7 @@ botoesIni = [ @@ -64,7 +64,7 @@ botoesIni = [
64 "target": "_self" 64 "target": "_self"
65 },{ 65 },{
66 "img":"saiku_free_small", 66 "img":"saiku_free_small",
67 - "href": "../ferramentas/saiku/esquemaxml.php?locaplic="+window.location.href.replace("/init/index.php",""), 67 + "href": "../ferramentas/saiku/startsaiku.php?locaplic="+window.location.href.replace("/init/index.php",""),
68 "titulo":$trad(25,g_traducao_init), 68 "titulo":$trad(25,g_traducao_init),
69 "subtitulo": $trad("25a",g_traducao_init), 69 "subtitulo": $trad("25a",g_traducao_init),
70 "fa": "bar-chart", 70 "fa": "bar-chart",
js/i3geo_tudo_compacto7.js.php 100755 → 100644
ms_configura.php
@@ -816,7 +816,7 @@ else //se for linux @@ -816,7 +816,7 @@ else //se for linux
816 * 816 *
817 * Para trocar, altere a linha abaixo 817 * Para trocar, altere a linha abaixo
818 */ 818 */
819 -if(empty($_COOKIE["i3geolingua"])){ 819 +if(empty($_COOKIE["i3geolingua"]) && array_key_exists('HTTP_ACCEPT_LANGUAGE',$_SERVER)){
820 $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); 820 $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
821 $l = "pt"; 821 $l = "pt";
822 if($lang == "en" || $lang == "es"){ 822 if($lang == "en" || $lang == "es"){
testainstal/index.js
@@ -78,7 +78,7 @@ botoesIni = [ @@ -78,7 +78,7 @@ botoesIni = [
78 "target": "_self" 78 "target": "_self"
79 },{ 79 },{
80 "img":"../imagens/saiku_free_small.png", 80 "img":"../imagens/saiku_free_small.png",
81 - "href":"../ferramentas/saiku/esquemaxml.php?locaplic="+window.location.href.replace("/init/index.php",""), 81 + "href":"../ferramentas/saiku/startsaiku.php?locaplic="+window.location.href.replace("/init/index.php",""),
82 "titulo":$trad(25,g_traducao_init), 82 "titulo":$trad(25,g_traducao_init),
83 "subtitulo": $trad("25a",g_traducao_init), 83 "subtitulo": $trad("25a",g_traducao_init),
84 "fa": "bar-chart", 84 "fa": "bar-chart",