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 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
... ...
css/i3geo7.css.php 100755 → 100644
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) &amp;&amp; $statusFerramentas[&quot;saiku&quot;] != 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&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 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[&quot;regiao&quot;])){
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-&gt;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("&","&amp;",htmlentities($texto,ENT_NOQUOTES,mb_detect_encoding($texto)));
  144 + $texto = str_replace("&","&amp;",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"]."&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 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&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 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() {
... ...
ferramentas/saiku/startsaiku.php 0 → 100755
... ... @@ -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 +?>
... ...
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",
... ...
js/i3geo_tudo_compacto7.js.php 100755 → 100644
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",
... ...