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", | ... | ... |