Commit 78dd1b0409fcc7c7d87c2e225d87cfc961e1304d
1 parent
c971b67e
Exists in
master
and in
7 other branches
Modificaçõs no SAIKU para evitar a exposição do XML com o esquema dos cubos
Showing
12 changed files
with
246 additions
and
138 deletions
Show diff stats
admin/php/editormapfile.php
... | ... | @@ -300,7 +300,7 @@ switch (strtoupper($funcao)) |
300 | 300 | $dirs[] = $d."/".$nome; |
301 | 301 | $dirs[] = $d."/googlemaps/".$nome; |
302 | 302 | foreach($dirs as $dir){ |
303 | - rrmdir($dir); | |
303 | + rename($dir,$dir."_removido"); | |
304 | 304 | } |
305 | 305 | } |
306 | 306 | retornaJSON("ok"); |
... | ... | @@ -2568,20 +2568,24 @@ function removeCabecalho($arq,$symbolset=true) |
2568 | 2568 | } |
2569 | 2569 | } |
2570 | 2570 | fclose($handle); |
2571 | - chmod($arq, 0666); | |
2571 | + //chmod($arq, 0666); | |
2572 | 2572 | } |
2573 | 2573 | function rrmdir($dir) { |
2574 | 2574 | if (is_dir($dir)) { |
2575 | - chmod($dir,0777); | |
2575 | + //chmod($dir,0777); | |
2576 | 2576 | $objects = scandir($dir); |
2577 | 2577 | foreach ($objects as $object) { |
2578 | 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 | 2587 | reset($objects); |
2584 | 2588 | rmdir($dir); |
2585 | 2589 | } |
2586 | 2590 | } |
2587 | -?> | |
2591 | +?> | |
2588 | 2592 | \ No newline at end of file | ... | ... |
classesphp/classe_metaestatinfo.php
... | ... | @@ -1210,7 +1210,7 @@ class MetaestatInfo{ |
1210 | 1210 | * @param codigo da variavel |
1211 | 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 | 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 | 1215 | $sql .= "FROM ".$this->esquemaadmin."i3geoestat_variavel "; |
1216 | 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 | 465 | function gravaDados($dados,$arq) |
466 | 466 | { |
467 | 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 | 477 | Function: listaTrueType | ... | ... |
ferramentas/saiku/cartograma.php
1 | 1 | <?php |
2 | -exit; | |
3 | 2 | if(empty($_POST["g_sid"])){ |
4 | 3 | echo "erro"; |
5 | 4 | exit; |
6 | 5 | } |
7 | 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 | 9 | include_once(dirname(__FILE__)."/../../classesphp/classe_estatistica.php"); |
10 | 10 | if(!isset($dir_tmp)){ |
11 | 11 | include(dirname(__FILE__)."/../../ms_configura.php"); |
... | ... | @@ -15,6 +15,9 @@ if(isset($statusFerramentas) && $statusFerramentas["saiku"] != true){ |
15 | 15 | } |
16 | 16 | include(dirname(__FILE__)."/../blacklist.php"); |
17 | 17 | verificaBlFerramentas(basename(dirname(__FILE__)),$i3geoBlFerramentas,false); |
18 | + | |
19 | +//error_reporting(E_ALL); | |
20 | + | |
18 | 21 | //pega o filtro da sessao PHP aberta pelo i3Geo |
19 | 22 | session_name("i3GeoPHP"); |
20 | 23 | session_id($_POST["g_sid"]); |
... | ... | @@ -51,7 +54,7 @@ else{ |
51 | 54 | echo "Nao foi possivel determinar o codigo da regiao ou localidade no sistema Metaestat"; |
52 | 55 | exit; |
53 | 56 | } |
54 | - $m = new Metaestat(); | |
57 | + $m = new MetaestatInfo(); | |
55 | 58 | |
56 | 59 | $meta = $m->listaTipoRegiao($codigo_tipo_regiao); |
57 | 60 | $titulolayer = $meta["nome_tipo_regiao"]; | ... | ... |
ferramentas/saiku/esquemaxml.php
1 | 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®iao=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 | 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 | 5 | if(!isset($dir_tmp)){ |
37 | 6 | include(dirname(__FILE__)."/../../ms_configura.php"); |
38 | 7 | } |
39 | 8 | if(isset($statusFerramentas) && $statusFerramentas["saiku"] != true){ |
40 | 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 | 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 | 21 | gravaDataSource(); |
49 | -if(!empty($_GET["xmlesquema"])){ | |
22 | +if(!empty($_GET["output"])){ | |
50 | 23 | imprimeEsquema(); |
51 | 24 | } |
52 | -$m = new Metaestat(); | |
25 | +*/ | |
26 | +$m = new MetaestatInfo(); | |
53 | 27 | |
54 | 28 | // |
55 | 29 | //obtem do mapfile em uso os layers que sao do sistema metaestat, sao regioes e que possuem selecao |
56 | 30 | // |
31 | +/* | |
57 | 32 | if(empty($_GET["regiao"])){ |
58 | 33 | $s = pegaSelecaoRegioes(); |
59 | 34 | $selecaoRegiao = $s["selecaoRegiao"]; |
... | ... | @@ -62,7 +37,6 @@ if(empty($_GET["regiao"])){ |
62 | 37 | else{ |
63 | 38 | $codigo_tipo_regiao = $_GET["regiao"]; |
64 | 39 | } |
65 | -//verifica se o cubo usa uma regiao especifica ou todas | |
66 | 40 | if($codigo_tipo_regiao == ""){ |
67 | 41 | $regioes = $m->listaTipoRegiao(); |
68 | 42 | } |
... | ... | @@ -70,10 +44,7 @@ else{ |
70 | 44 | $regioes = array($m->listaTipoRegiao($codigo_tipo_regiao)); |
71 | 45 | } |
72 | 46 | $s = ""; |
73 | - | |
74 | -if(empty($saikuConfigDataSource['tabelaDimensaoTempo'])){ | |
75 | - $saikuConfigDataSource['tabelaDimensaoTempo'] = "i3geo_metaestat.dim_tempo"; | |
76 | -} | |
47 | +*/ | |
77 | 48 | |
78 | 49 | $medidas = $m->listaMedidaVariavel(); |
79 | 50 | |
... | ... | @@ -85,9 +56,7 @@ $todasAsRegioes = $m->listaTipoRegiao(); |
85 | 56 | foreach($todasAsRegioes as $R){ |
86 | 57 | $chavesRegiao[$R["codigo_tipo_regiao"]] = $R; |
87 | 58 | } |
88 | - | |
89 | 59 | //inicia montagem do XML |
90 | - | |
91 | 60 | // |
92 | 61 | //cria as dimensoes de tipo temporal |
93 | 62 | // |
... | ... | @@ -149,14 +118,16 @@ ob_end_clean(); |
149 | 118 | //grava os dados em um arquivo. O usuario pode evitar isso e imprimir direto na tela |
150 | 119 | //usando output "xml" |
151 | 120 | // |
152 | -if($_GET["output"] != "xml"){ | |
121 | +/* | |
122 | +if(empty($_GET["output"]) || (!empty($_GET["output"]) && $_GET["output"] != "xml")){ | |
153 | 123 | gravaDados(array($xml),$arquivoXmlEsquema); |
154 | 124 | } |
125 | +*/ | |
155 | 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 | 132 | foreach($hs as $n){ |
162 | 133 | if($n["codigo_tipo_regiao"] == $regiaoInicial){ |
... | ... | @@ -170,28 +141,20 @@ function caminhoRegiao($hs,$chavesRegiao,$h,$regiaoInicial,$caminho) |
170 | 141 | return $caminho; |
171 | 142 | } |
172 | 143 | function converte($texto){ |
173 | - $texto = str_replace("&","&",htmlentities($texto,ENT_NOQUOTES,mb_detect_encoding($texto))); | |
144 | + $texto = str_replace("&","&",htmlentities($texto,ENT_NOQUOTES,'UTF-8')); | |
174 | 145 | return $texto; |
175 | 146 | } |
176 | 147 | function imprimeEsquema(){ |
177 | 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 | 154 | else{ |
188 | - header("Location:".$saikuUrl."/?nomeConexao=".$nomeConexao."&locaplic=".$_GET["locaplic"]."&g_sid=".$_GET["g_sid"]."&mapext=".$_GET["mapext"]."&origem=".$_GET["origem"]."®iao=".$_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 | 158 | function criaMapfileInicial(){ |
196 | 159 | global $mapext; |
197 | 160 | if(empty($_GET["g_sid"])){ |
... | ... | @@ -209,17 +172,19 @@ function criaConexaoEsquema(){ |
209 | 172 | global $dir_tmp, $urlXmlEsquema; |
210 | 173 | $nomeConexao = nomeRandomico(); |
211 | 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 | 189 | //$arquivoXmlEsquema = dirname($map_file)."/".$nomeConexao.".xml"; |
225 | 190 | return $nomeConexao.".txt"; |
... | ... | @@ -251,7 +216,11 @@ function gravaDataSource(){ |
251 | 216 | ); |
252 | 217 | */ |
253 | 218 | global $arquivoXmlEsquema,$saikuConfigDataSource,$nomeConexao,$urlXmlEsquema,$dir_tmp; |
219 | + | |
254 | 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 | 224 | if(!file_exists($arquivoXmlEsquema)){ |
256 | 225 | $stringDatasource = " |
257 | 226 | type={$saikuConfigDataSource["type"]} |
... | ... | @@ -406,10 +375,12 @@ function sqlDasRegioes($regiao,$caminho,$chavesRegiao){ |
406 | 375 | function dimensoesGeo(){ |
407 | 376 | global $chavesRegiao, $m, $selecaoRegiao, $regioes, $filhosDaRegiao, $VirtualCubeDimensionDaRegiao, $VirtualCubeMeasureDaRegiao; |
408 | 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 | 385 | //xml normal |
415 | 386 | $xml1 = ""; |
... | ... | @@ -602,25 +573,26 @@ function dimensoesTabelas(){ |
602 | 573 | $VirtualCubeDimension[] = " |
603 | 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 | 597 | //verifica as dimensoes do tipo tempo |
626 | 598 | $dimEnsoes = array(); |
... | ... | @@ -643,11 +615,12 @@ function dimensoesTabelas(){ |
643 | 615 | <DimensionUsage foreignKey='".implode("_",$parComposto)."_' name='Tempo' source='Tempo'/> |
644 | 616 | "; |
645 | 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 | 622 | //outros parametros |
649 | 623 | $outrosParametros = array(); |
650 | - | |
651 | 624 | foreach($parametros as $parametro){ |
652 | 625 | $k = $parametro["esquemadb"]."_".$parametro["tabela"]."_".$parametro["coluna"]; |
653 | 626 | if($parametro["tipo"] > 5 || $parametro["tipo"] == 0){ |
... | ... | @@ -655,7 +628,9 @@ function dimensoesTabelas(){ |
655 | 628 | $VirtualCubeDimension[] = "<VirtualCubeDimension name='{$k}' />"; |
656 | 629 | $u = "<DimensionUsage foreignKey='".$parametro["coluna"]."' name='{$k}' source='{$k}'/>"; |
657 | 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 | 697 | "; |
723 | 698 | } |
724 | 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 | 708 | $xml .= implode(" ",array_unique($dimEnsoes)); |
733 | 709 | |
734 | 710 | //inclui cada elemento em medida |
... | ... | @@ -753,7 +729,9 @@ function dimensoesTabelas(){ |
753 | 729 | <VirtualCubeMeasure cubeName='Tabela: {$c["esquemadb"]}{$c["tabela"]}' name='[Measures].[id_medida_variavel_".$medida["id_medida_variavel"]."]'/> |
754 | 730 | "; |
755 | 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 | 735 | //verifica em qual variavel entra |
758 | 736 | //<VirtualCubeMeasure cubeName='Tabela: idsustb_indicador' name='[Measures].[id_medida_variavel_12]'/> |
759 | 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 | 756 | function cuboRegioes(){ |
779 | 757 | global $regioes, $VirtualCubeDimensionDaRegiao, $VirtualCubeMeasureDaRegiao, $filhosDaRegiao; |
780 | 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&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&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 | 775 | return $xml; | ... | ... |
ferramentas/saiku/index.js
... | ... | @@ -167,7 +167,7 @@ i3GEOF.saiku = |
167 | 167 | }, |
168 | 168 | iniciaJanelaFlutuante2 : function() { |
169 | 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 | 171 | + i3GEO.configura.locaplic + "&mapext=" + mapext, cabecalho = function() { |
172 | 172 | }, minimiza = function() { |
173 | 173 | i3GEO.janela.iconiza("i3GEOF.saikuMapa",100); |
... | ... | @@ -198,7 +198,7 @@ i3GEOF.saiku = |
198 | 198 | }, |
199 | 199 | aplicar : function() { |
200 | 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 | 202 | + "&locaplic=" + i3GEO.configura.locaplic + "&mapext=" + mapext); |
203 | 203 | }, |
204 | 204 | atualizaMapa : function() { | ... | ... |
... | ... | @@ -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"]."®iao=".$_GET["regiao"]); | |
40 | + | |
41 | +function converte($texto){ | |
42 | + $texto = str_replace("&","&",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 | +?> | ... | ... |
init/index.js
... | ... | @@ -64,7 +64,7 @@ botoesIni = [ |
64 | 64 | "target": "_self" |
65 | 65 | },{ |
66 | 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 | 68 | "titulo":$trad(25,g_traducao_init), |
69 | 69 | "subtitulo": $trad("25a",g_traducao_init), |
70 | 70 | "fa": "bar-chart", | ... | ... |
ms_configura.php
... | ... | @@ -816,7 +816,7 @@ else //se for linux |
816 | 816 | * |
817 | 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 | 820 | $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); |
821 | 821 | $l = "pt"; |
822 | 822 | if($lang == "en" || $lang == "es"){ | ... | ... |
testainstal/index.js
... | ... | @@ -78,7 +78,7 @@ botoesIni = [ |
78 | 78 | "target": "_self" |
79 | 79 | },{ |
80 | 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 | 82 | "titulo":$trad(25,g_traducao_init), |
83 | 83 | "subtitulo": $trad("25a",g_traducao_init), |
84 | 84 | "fa": "bar-chart", | ... | ... |