diff --git a/admin/admin.db b/admin/admin.db
index 42a3967..b4769e8 100644
Binary files a/admin/admin.db and b/admin/admin.db differ
diff --git a/admin/php/classe_metaestat.php b/admin/php/classe_metaestat.php
index 334a18f..29fd522 100755
--- a/admin/php/classe_metaestat.php
+++ b/admin/php/classe_metaestat.php
@@ -528,6 +528,7 @@ class Metaestat{
return array("caminho"=>$caminho,"colunas"=>$colunas);
}
}
+ return array("caminho"=>$caminho,"colunas"=>$colunas);
}
function hierarquiaPath($node){
$query="select codigo_tipo_regiao_pai as parent from ".$this->esquemaadmin."i3geoestat_agregaregiao WHERE codigo_tipo_regiao = $node";
@@ -2056,6 +2057,10 @@ class Metaestat{
}
return $this->execSQL($sql,"");
}
+ function listaHierarquia($codigoregiaopai=""){
+ $sql = "select * from ".$this->esquemaadmin."i3geoestat_agregaregiao order by codigo_tipo_regiao";
+ return $this->execSQL($sql,"");
+ }
/**
* Lista os registros de um tipo de regiao
* Se for definido o pai, lista os valores da regiao que e filha
@@ -2132,7 +2137,9 @@ class Metaestat{
function listaAgregaRegiaoFilho($codigo_tipo_regiao,$codigo_tipo_regiao_pai){
$sql = "select * from ".$this->esquemaadmin."i3geoestat_agregaregiao ";
$sql .= "WHERE codigo_tipo_regiao_pai = $codigo_tipo_regiao_pai ";
- $sql .= "AND codigo_tipo_regiao = $codigo_tipo_regiao";
+ if($codigo_tipo_regiao != ""){
+ $sql .= "AND codigo_tipo_regiao = $codigo_tipo_regiao";
+ }
return $this->execSQL($sql,$codigo_tipo_regiao_pai);
}
/**
diff --git a/ferramentas/saiku/esquemaxml.php b/ferramentas/saiku/esquemaxml.php
index 4fc39aa..2430a07 100644
--- a/ferramentas/saiku/esquemaxml.php
+++ b/ferramentas/saiku/esquemaxml.php
@@ -4,82 +4,253 @@
//
//utilize &xmlesquema= caso o XML ja exista
//
-//http://localhost/i3geo/ferramentas/saiku/esquemaxml.php?output=&xmlesquema=http://localhost/i3geo/ferramentas/saiku/testemondrian.xml
+//utilize $regiao para obter o xml de uma so regiao
+//
+/**
+http://localhost/i3geo/ferramentas/saiku/esquemaxml.php?output=&xmlesquema=http://localhost/i3geo/ferramentas/saiku/testemondrian.xml&output=xml
+http://localhost/i3geo/ferramentas/saiku/esquemaxml.php?xmlesquema=&output=xml®iao=1
+*/
+
//
//quando o saiku e iniciado de fora do i3geo, e necessario inicializar um mapfile para uso como base dos mapas
-if(empty($_GET["g_sid"])){
- include(dirname(__FILE__)."/../../ms_criamapa.php");
- //reinicia a url
- $urln = "?g_sid=".session_id()."&locaplic=".$_GET["locaplic"]."&mapext=".$mapext."&origem=".$_GET["origem"]."&output=".$_GET["output"]."&xmlesquema=".$_GET["xmlesquema"];
- header("Location:".$urln);
- exit;
-}
+//
+criaMapfileInicial();
include(dirname(__FILE__)."/../../classesphp/funcoes_gerais.php");
include(dirname(__FILE__)."/../../admin/php/classe_metaestat.php");
if(!isset($dir_tmp)){
include(dirname(__FILE__)."/../../ms_configura.php");
}
-$nomeConexao = nomeRandomico();
-$nomeDatasource = $dir_tmp."/saiku-datasources/".$nomeConexao;
-//pega a sessao PHP aberta pelo i3Geo ou ms_criamapa.php
-session_name("i3GeoPHP");
-session_id($_GET["g_sid"]);
-session_start();
+$urlXmlEsquema = "";
+$nomeConexao = criaConexaoEsquema();
+
$map_file = $_SESSION["map_file"];
-if(empty($_GET["xmlesquema"])){
- $urlXmlEsquema = $_SESSION["tmpurl"].basename(dirname($map_file))."/".$nomeConexao.".xml";
+
+$arquivoXmlEsquema = dirname($map_file)."/".$nomeConexao.".xml";
+
+gravaDataSource();
+
+if(!empty($_GET["xmlesquema"])){
+ imprimeEsquema();
+}
+
+$m = new Metaestat();
+
+//
+//obtem do mapfile em uso os layers que sao do sistema metaestat, sao regioes e que possuem selecao
+//
+if(empty($_GET["regiao"])){
+ $s = pegaSelecaoRegioes();
+ $selecaoRegiao = $s["selecaoRegiao"];
+ $codigo_tipo_regiao = $s["codigo_tipo_regiao"];
}
else{
- $urlXmlEsquema = $_GET["xmlesquema"];
+ $codigo_tipo_regiao = $_GET["regiao"];
}
-$arquivoXmlEsquema = dirname($map_file)."/".$nomeConexao.".xml";
+//verifica se o cubo usa uma regiao especifica ou todas
+if($codigo_tipo_regiao == ""){
+ $regioes = $m->listaTipoRegiao();
+}
+else{
+ $regioes = array($m->listaTipoRegiao($codigo_tipo_regiao));
+}
+$s = "";
-/*
- $saikuConfigDataSource vem do ms_configura.php
-
-Exemplo de arquivo de fonte:
-type=OLAP
-name=i3geo
-driver=mondrian.olap4j.MondrianOlap4jDriver
-location=jdbc:mondrian:Jdbc=jdbc:postgresql://localhost:5432/i3geosaude;Catalog=http://localhost/i3geo/ferramentas/saiku/esquemaxml.php;JdbcDrivers=org.postgresql.Driver;
-username=postgres
-password=postgres
-
-Array com os parametros definidos em ms_configura:
-
-$saikuConfigDataSource = array(
- "type"=>"OLAP",
- "driver"=>"mondrian.olap4j.MondrianOlap4jDriver",
- "location"=>"jdbc:mondrian:Jdbc=jdbc:postgresql",
- "serverdb"=>"localhost",
- "port"=>"5432",
- "database"=>"i3geosaude",
- "JdbcDrivers"=>"org.postgresql.Driver",
- "username"=>"postgres",
- "password"=>"postgres"
-);
-*/
-$stringDatasource = "
-type={$saikuConfigDataSource["type"]}
-name={$nomeConexao}
-driver={$saikuConfigDataSource["driver"]}
-location={$saikuConfigDataSource["location"]}://{$saikuConfigDataSource["serverdb"]}:{$saikuConfigDataSource["port"]}/{$saikuConfigDataSource["database"]};Catalog={$urlXmlEsquema};JdbcDrivers={$saikuConfigDataSource["JdbcDrivers"]};
-username={$saikuConfigDataSource["username"]}
-password={$saikuConfigDataSource["password"]}
-";
-//salva o arquivo com a fonte
-gravaDados(array($stringDatasource),$nomeDatasource);
-
-if(empty($_GET["xmlesquema"])){
- $m = new Metaestat();
+if(empty($saikuConfigDataSource['tabelaDimensaoTempo'])){
+ $saikuConfigDataSource['tabelaDimensaoTempo'] = "i3geo_metaestat.dim_tempo";
+}
- //
- //obtem do mapfile em uso os layers que sao do sistema metaestat, sao regioes e que possuem selecao
- //
- $selecaoRegiao = array();
+$medidas = $m->listaMedidaVariavel();
+
+//
+//formata o array de regioes colocando na chave o codigo da regiao
+//
+$chavesRegiao = array();
+$todasAsRegioes = $m->listaTipoRegiao();
+foreach($todasAsRegioes as $R){
+ $chavesRegiao[$R["codigo_tipo_regiao"]] = $R;
+}
+
+//inicia montagem do XML
+
+//
+//cria as dimensoes de tipo temporal
+//
+$xmlTempo = dimensoesTemporais();
+
+//
+//dimensoes geograficas
+//as dimensoes sao duplicadas
+//uma delas contem o geocodigo que permite a geracao do mapa
+//
+//guarda as regioes filhas de uma determinada regiao (chave)
+$filhosDaRegiao = array();
+$VirtualCubeDimensionDaRegiao = array();
+$VirtualCubeMeasureDaRegiao = array();
+
+$dimRegioes = dimensoesGeo();
+
+//var_dump(array_column($dimRegioes,"juncoes","codigo_tipo_regiao"));exit;
+
+$xmlRegioes = implode(" ",array_column($dimRegioes,"xml"));
+
+//
+//outras dimensoes definidas nos parametros e que nao sejam do tipo tempo
+//
+$xmlOutrasDim = dimensoesOutras();
+
+//
+//cria as dimensoes das medidas conforme o nome da tabela utilizada
+//
+$VirtualCubeDimension = array();
+$VirtualCubeMeasure = array();
+$xmlDimensoesTabelas = dimensoesTabelas();
+
+//
+//cubo geral, com todas as dimensoes e medidas
+//
+$xmlCuboTodas = cuboTodas();
+//
+//cubos por regiao
+//
+$xmlCuboRegioes = cuboRegioes();
+
+$xml = "
";var_dump($regioes);exit; - $regiao = ""; - $item = ""; - $registros = ""; - //echo "";var_dump($regioes);exit; - - $xml = ""; - //cria as dimensoes de tipo temporal - if(empty($saikuConfigDataSource['tabelaDimensaoTempo'])){ - $saikuConfigDataSource['tabelaDimensaoTempo'] = "i3geo_metaestat.dim_tempo"; - } +} +function dimensoesTemporais(){ + global $saikuConfigDataSource; $sqlAno = "select nu_ano from ".$saikuConfigDataSource['tabelaDimensaoTempo']." group by nu_ano order by nu_ano"; $sqlMes = "select nu_ano::text,nu_mes::text,ds_mes_abreviado as mes,COALESCE (nu_ano::text||'-'||nu_mes::text,nu_ano::text) as nu_anomes from ".$saikuConfigDataSource['tabelaDimensaoTempo']." group by nu_ano,nu_mes,mes,nu_anomes order by nu_ano,nu_mes"; //dimensoes temporais - $xml .= " + $xml = " "; - error_reporting(0); - ob_end_clean(); - - if($_GET["output"] == "xml"){ - echo header("Content-type: application/xml"); - echo $xml;exit; - } - gravaDados(array($xml),$arquivoXmlEsquema); -} -if($_GET["output"] == "xml"){ - echo header("Content-type: application/xml"); - header("Location:".$_GET["xmlesquema"]); -} -else{ - header("Location:".$saikuUrl."/?nomeConexao=".$nomeConexao."&locaplic=".$_GET["locaplic"]."&g_sid=".$_GET["g_sid"]."&mapext=".$_GET["mapext"]."&origem=".$_GET["origem"]); -} -function converte($texto){ - $texto = str_replace("&","&",htmlentities($texto)); - //$texto = htmlentities($texto); - //$texto = mb_convert_encoding($texto, 'ISO-8859-1', "auto"); - //$texto = utf8_encode($texto); - //$textox = mb_convert_encoding($texto, "UTF-8", mb_detect_encoding($texto, "UTF-8, ISO-8859-1, ISO-8859-15", true)); - return $texto; + return $xml; } ?> diff --git a/ms_criamapa.php b/ms_criamapa.php index a260de6..f15862e 100644 --- a/ms_criamapa.php +++ b/ms_criamapa.php @@ -214,7 +214,7 @@ Cria os diretorios temporários que serão utilizados pelo i3geo par $diretorios = criaDirMapa($dir_tmp,$cachedir); if(!$diretorios) {echo ""; - //global - $medidas = $m->listaMedidaVariavel(); - - //echo " @@ -169,113 +330,171 @@ if(empty($_GET["xmlesquema"])){ $sqlAno ";var_dump($regioesTabela);exit; - //dimensoes geograficas - //as dimensoes sao duplicadas - //uma delas contem o geocodigo que permite a geracao do mapa - - //guarda as regioes filhas de uma determinada regiao (chave) - $filhosDaRegiao = array(); - $VirtualCubeDimensionDaRegiao = array(); - $VirtualCubeMeasureDaRegiao = array(); + return $xml; +} +function sqlDasRegioes($regiao,$caminho,$chavesRegiao){ + $select = "SELECT tabela{$regiao["codigo_tipo_regiao"]}.{$regiao["identificador"]}::text as codigo, __COLUNAS__ FROM {$regiao['esquemadb']}.{$regiao['tabela']} as tabela{$regiao["codigo_tipo_regiao"]} \n"; + $selectPrincipal = ""; + $juncoes = ""; + $colunas = array(); + $nomesColunas = array(); + $codRegioes = array(); + $ncaminhos = count($caminho); + if($ncaminhos > 0){ + foreach($caminho as $c){ + $regiaoAnterior = $chavesRegiao[$c["a"]]; + $tabelaAnterior = "tabela".$regiaoAnterior["codigo_tipo_regiao"]; + $colunaLigacaoAnterior = $c["ligacao"]; + + $colunas[] = $tabelaAnterior.".".$regiaoAnterior["identificador"]. "::text AS codigo".$regiaoAnterior["codigo_tipo_regiao"]; + $colunas[] = $tabelaAnterior.".".$regiaoAnterior["colunanomeregiao"]. "::text AS nome".$regiaoAnterior["codigo_tipo_regiao"]; + + $regiaoJoin = $chavesRegiao[$c["join"]]; + $tabelaAtual = "tabela".$regiaoJoin["codigo_tipo_regiao"]; + $colunaLigacaoAtual = $regiaoJoin["identificador"]; + + $colunas[] = $tabelaAtual.".".$regiaoJoin["identificador"]. "::text AS codigo".$regiaoJoin["codigo_tipo_regiao"]; + $colunas[] = $tabelaAtual.".".$regiaoJoin["colunanomeregiao"]. "::text AS nome".$regiaoJoin["codigo_tipo_regiao"]; + + $nomesColunas[] = " codigo".$regiaoJoin["codigo_tipo_regiao"]; + $nomesColunas[] = " nome".$regiaoJoin["codigo_tipo_regiao"]; + + $juncoes .= " JOIN {$regiaoJoin['esquemadb']}.{$regiaoJoin['tabela']} as $tabelaAtual ON + $tabelaAtual.$colunaLigacaoAtual::text = $tabelaAnterior.$colunaLigacaoAnterior::text + "; + $codRegioes[] = $regiaoJoin["codigo_tipo_regiao"]; + } + $colunas = array_unique($colunas); + } + else{ + $colunas[] = $regiao["identificador"]. "::text AS codigo".$regiao["codigo_tipo_regiao"]; + $colunas[] = $regiao["colunanomeregiao"]. "::text AS nome".$regiao["codigo_tipo_regiao"]; + + $nomesColunas[] = " codigo".$regiao["codigo_tipo_regiao"]; + $nomesColunas[] = " nome".$regiao["codigo_tipo_regiao"]; + + $codRegioes[] = $regiao["codigo_tipo_regiao"]; + } + $mascara = $select; + $select = str_replace("__COLUNAS__",implode(",",$colunas),$select); + $selectPricipal = $select; + $select .= $juncoes; + return array("codRegioes"=>$codRegioes,"juncoes"=>$juncoes,"mascara"=>$mascara,"principal"=>$selectPricipal,"select"=>$select,"colunas"=>$colunas,"nomesColunas"=>$nomesColunas); +} + +function dimensoesGeo(){ + global $chavesRegiao, $m, $selecaoRegiao, $regioes, $filhosDaRegiao, $VirtualCubeDimensionDaRegiao, $VirtualCubeMeasureDaRegiao; + //essas variaveis sao globais e usadas em outras funcoes foreach($regioes as $regiao){ $filhosDaRegiao[$regiao["codigo_tipo_regiao"]] = array(); $VirtualCubeDimensionDaRegiao[$regiao["codigo_tipo_regiao"]] = array(); $VirtualCubeMeasureDaRegiao[$regiao["codigo_tipo_regiao"]] = array(); } + //xml normal $xml1 = ""; + //xml geocodigo $xml2 = ""; - - foreach($regioes as $regiao){ + // + //sera que e todas mesmo ou so a escolhida????? + // + $todasRegioes = $m->listaTipoRegiao(); + $xmlRegioes = array(); + foreach($todasRegioes as $regiao){ $sqls = array(); - $xml1 .= " -- + $temp = converte($regiao["nome_tipo_regiao"]); + $xml1 = " + + "; - $xml2 .= " - - "; + $xmlRegioes[$regiao["codigo_tipo_regiao"]] = array( + "xml" => $xml1.$xml2, + "juncoes" => $dadosSelect["juncoes"], + "codigo_tipo_regiao"=> $regiao["codigo_tipo_regiao"], + "colunas" => $dadosSelect["colunas"], + "nomesColunas"=> $dadosSelect["nomesColunas"], + "codRegioes"=>$dadosSelect["codRegioes"] + ); } - //echo header("Content-type: application/xml"); - //echo $xml.$xml1.$xml2;exit; - //echo "+ $xml2 = " + + @@ -284,11 +503,19 @@ if(empty($_GET["xmlesquema"])){"; + // //cria uma view juntando as tabelas da hierarquia de regioes - $caminho = $m->hierarquiaPath($regiao["codigo_tipo_regiao"]); - //$caminho[] = $regiao["codigo_tipo_regiao"]; - - $n = count($caminho); - $regiaoAtual = $regiao; - $niveis1 = array(); - $niveis2 = array(); - $unico = "true"; - for($j=0;$j<=$n;$j++){ - $colunas = array(); - $sql = "SELECT __COLUNAS__ FROM {$regiaoAtual['esquemadb']}.{$regiaoAtual['tabela']} as a$j "; - $colunas[] = "a$j.{$regiaoAtual['identificador']}::text as codigo "; - //inclui campos vazios na sequencia de campos - for($k=0;$k<$j;$k++){ - $colunas[] = "''"; - $colunas[] = "''"; + // + $hs = $m->listaHierarquia(); + //$regiao["codigo_tipo_regiao"] = 2; + foreach($hs as $h){ + if($h["codigo_tipo_regiao"] == $regiao["codigo_tipo_regiao"]){ + $caminho = caminhoRegiao($hs,$chavesRegiao,$h,$regiao["codigo_tipo_regiao"]); } + } + // + //sql da tabela principal da regiao + // + $dadosSelect = sqlDasRegioes($regiao,$caminho,$chavesRegiao); + // + //pega os dados das demais tabelas associadas, menos da primeira + //para unir os dados + // + $niveisXml1 = array(); + $niveisXml2 = array(); + + $temp = converte($regiao["nome_tipo_regiao"]); + $niveisXml1[] = " + + "; + $niveisXml2[] = " + + "; + //juncoes + while($caminho){ + $a = array_shift($caminho); + $u = sqlDasRegioes($chavesRegiao[$a["join"]],array(),$chavesRegiao); + //substitui as colunas para obter dados vazios + $colunasVazias = array(); + foreach($dadosSelect["nomesColunas"] as $nomesPrincipais){ + $colunasVazias[$nomesPrincipais] = "'' AS $nomesPrincipais"; + } + $n = count($u["colunas"]); + for($q = 0; $q < $n; $q++){ + $colunasVazias[$u["nomesColunas"][$q]] = $u["colunas"][$q]; + } + // + //inclui as colunas da primeira tabela + // + $colunasPrimeiraTabela = "'' as codigo".$regiao["codigo_tipo_regiao"].","."'' as nome".$regiao["codigo_tipo_regiao"].","; - $colunas[] = "a$j.{$regiaoAtual['identificador']}::text AS {$regiaoAtual['identificador']} "; - $colunas[] = "a$j.{$regiaoAtual['colunanomeregiao']}::text AS {$regiaoAtual['colunanomeregiao']} "; + $mascara = str_replace("__COLUNAS__",$colunasPrimeiraTabela."__COLUNAS__",$u["mascara"]); - for($i=$j;$i<$n;$i++){ - $r = $m->listaTipoRegiao($caminho[$i]); + $u["select"] = str_replace("__COLUNAS__",implode(",",$colunasVazias),$mascara); - if(count($colunas) > ($j + 4)){ - $colunas[] = "''::text AS {$r['identificador']} "; - $colunas[] = "''::text AS {$r['colunanomeregiao']} "; - } - else{ - $colunas[] = "b$i.{$r['identificador']}::text AS {$r['identificador']} "; - $colunas[] = "b$i.{$r['colunanomeregiao']}::text AS {$r['colunanomeregiao']} "; - } - //descobre a coluna de ligacao da regiao - $agr = $m->listaAgregaRegiaoFilho($regiaoAtual['codigo_tipo_regiao'],$r['codigo_tipo_regiao']); + $temp = converte($chavesRegiao[$a["join"]]["nome_tipo_regiao"]); - $sql .= " JOIN {$r['esquemadb']}.{$r['tabela']} as b$i ON - a$j.{$agr['colunaligacao_regiaopai']}::text = b$i.{$r['identificador']}::text - "; - } - - $colunas = implode($colunas,","); - $sql = str_replace("__COLUNAS__",$colunas,$sql); - //inclui a selecao se houver - if(!empty($selecaoRegiao[$regiaoAtual["codigo_tipo_regiao"]])){ - $rs = $selecaoRegiao[$regiaoAtual["codigo_tipo_regiao"]]; - } - $pos = strpos($sql, "regiao.".$rs["item"]." "); - if($rs != "" || !$pos === false){ - $sql .= " WHERE regiao.".$rs["sql"]; - } - $sqls[] = $sql; - - $niveis1[] = " - + $niveisXml1[] = " + "; - $niveis2[] = " - + $niveisXml2[] = " + "; $unico = "false"; - - $regiaoAtual = $m->listaTipoRegiao($caminho[$j]); } - //echo " ";echo implode("UNION\n\n",$sqls);exit; + //inclui a selecao se houver + $sqlreg = ""; + if(!empty($selecaoRegiao[$regiao["codigo_tipo_regiao"]])){ + $rs = $selecaoRegiao[$regiao["codigo_tipo_regiao"]]; + $sqlreg = " WHERE regiao.".$rs["sql"]; + } $xml1 .= " -+ ".implode(" UNION ",$sqls)." + "; $xml2 .= " -".$dadosSelect["select"]." ++ ".implode(" UNION ",$sqls)." + "; - $niveis1 = array_reverse($niveis1); - $niveis2 = array_reverse($niveis2); - $xml1 .= implode(" ",$niveis1); - $xml2 .= implode(" ",$niveis2); + $niveisXml1 = array_reverse($niveisXml1); + $niveisXml2 = array_reverse($niveisXml2); + $xml1 .= implode(" ",$niveisXml1); + $xml2 .= implode(" ",$niveisXml2); $xml1 .= "".$dadosSelect["select"]." +";var_dump($filhosDaRegiao);exit; - //outras dimensoes definidas nos parametros e que nao sejam do tipo tempo + return $xmlRegioes; +} +function dimensoesOutras(){ + global $m; $parametros = $m->listaTodosParametros(); $dimOutras = array(); foreach($parametros as $p){ @@ -305,7 +532,7 @@ if(empty($_GET["xmlesquema"])){ } $xml3 = ""; foreach($dimOutras as $d){ - $k = $p["esquemadb"]."_".$d["tabela"]."_".$d["coluna"]; + $k = $d["esquemadb"]."_".$d["tabela"]."_".$d["coluna"]; $xml3 .= ""; } - $xml .= $xml1.$xml2.$xml3; - //junta as medidas conforme o nome da tabela utilizada + return $xml3; +} +function dimensoesTabelas(){ + global $dimRegioes, $filhosDaRegiao, $m, $VirtualCubeDimension, $VirtualCubeMeasure, $chavesRegiao, $medidas, $codigo_tipo_regiao, $VirtualCubeDimensionDaRegiao, $VirtualCubeMeasureDaRegiao; - //var_dump($medidas);exit; + $xml = ""; $tbs = array(); - //echo $codigo_tipo_regiao;exit; foreach($medidas as $medida){ if($codigo_tipo_regiao == "" || $medida["codigo_tipo_regiao"] == $codigo_tipo_regiao){ $k = $medida["esquemadb"].$medida["tabela"]; - //echo " @@ -322,16 +549,17 @@ if(empty($_GET["xmlesquema"])){ $xml3 .= " ".$k; + if(empty($tbs[$k])){ $tbs[$k] = array($medida); } @@ -341,13 +569,9 @@ if(empty($_GET["xmlesquema"])){ } } //monta os cubos para cada esquema.tabela diferente - $VirtualCubeDimension = array(); - $VirtualCubeMeasure = array(); - foreach($tbs as $tb){ //cabecalho de cada cubo obtido da primeira medida $c = $tb[0]; - $VirtualCubeDimension[] = ""; @@ -356,18 +580,17 @@ if(empty($_GET["xmlesquema"])){ "; array_push( - $VirtualCubeDimensionDaRegiao[$c["codigo_tipo_regiao"]], - " " - ); + $VirtualCubeDimensionDaRegiao[$c["codigo_tipo_regiao"]], + " " + ); array_push( - $VirtualCubeDimensionDaRegiao[$c["codigo_tipo_regiao"]], - " " - ); + $VirtualCubeDimensionDaRegiao[$c["codigo_tipo_regiao"]], + " " + ); //verifica as dimensoes do tipo tempo $dimEnsoes = array(); - //echo " ";var_dump($tb)."
"; + foreach($tb as $medida){ - //echo "";var_dump($medida)."
"; $parametros = $m->listaParametro($medida["id_medida_variavel"],"","",false,false); $parComposto = array(); //guarda a composicao da chave que liga com a dimensao $colunaAdicionais = array(); @@ -389,7 +612,7 @@ if(empty($_GET["xmlesquema"])){ } //outros parametros $outrosParametros = array(); - //echo "";var_dump($parametros); + foreach($parametros as $parametro){ $k = $parametro["esquemadb"]."_".$parametro["tabela"]."_".$parametro["coluna"]; if($parametro["tipo"] > 5 || $parametro["tipo"] == 0){ @@ -404,8 +627,7 @@ if(empty($_GET["xmlesquema"])){ //$dimEnsoes[] = ''; $xml .= " "; - $incluirChaves = array("*"); - + $incluirChaves = array("tabelamedida{$c["id_medida_variavel"]}.*"); if(count($parComposto) > 0){ //$sql = "select *,".implode("||'-'||",$parComposto)."::text as ".implode("_",$parComposto)."_ from {$c["esquemadb"]}.{$c["tabela"]}"; $incluirChaves[] = implode("||'-'||",$parComposto)."::text as ".implode("_",$parComposto)."_"; @@ -416,18 +638,39 @@ if(empty($_GET["xmlesquema"])){ } } - $sql = "select ".implode(",",$incluirChaves).",{$c["colunaidgeo"]}::text as codigodim from {$c["esquemadb"]}.{$c["tabela"]}"; - //a tabela pode ter dimensoes em diferentes hierarquias + + $r = $chavesRegiao[$c["codigo_tipo_regiao"]]; + $sql = " + select ".implode(",",$incluirChaves).", tabelamedida{$c["id_medida_variavel"]}.{$c["colunaidgeo"]}::text as codigoreg + "; + if(count($dimRegioes[$c["codigo_tipo_regiao"]]["colunas"]) > 0){ + $sql .= ",".implode(",",$dimRegioes[$c["codigo_tipo_regiao"]]["colunas"]); + } + + $sql .= " + from {$c["esquemadb"]}.{$c["tabela"]} as tabelamedida{$c["id_medida_variavel"]} + JOIN {$r["esquemadb"]}.{$r["tabela"]} as tabela{$r["codigo_tipo_regiao"]} + ON tabela{$r["codigo_tipo_regiao"]}.{$r["identificador"]}::text = tabelamedida{$c["id_medida_variavel"]}.{$c["colunaidgeo"]}::text + "; + $sql .= $dimRegioes[$c["codigo_tipo_regiao"]]["juncoes"]; + $xml .= " - "; - } - - $xml .= '- $sql - + "; + //dimensoes vinculadas + $temp = $dimRegioes[$c["codigo_tipo_regiao"]]["codRegioes"]; + $temp[] = $c["codigo_tipo_regiao"]; + foreach($temp as $cod){ + $xml .= " + $sql + + "; + } //inclui as dimensoes filhas foreach($filhosDaRegiao[$c["codigo_tipo_regiao"]] as $fr){ $xml .= " - - + + "; } @@ -454,60 +697,36 @@ if(empty($_GET["xmlesquema"])){ $xml .= " '; + return $xml; +} +function cuboTodas(){ + global $VirtualCubeDimension, $VirtualCubeMeasure; + $xml = ' '; $VirtualCubeDimension = array_unique($VirtualCubeDimension); $VirtualCubeMeasure = array_unique($VirtualCubeMeasure); $xml .= implode(" ",$VirtualCubeDimension); $xml .= implode(" ",$VirtualCubeMeasure); $xml .= ' '; - // - //cubos por regiao - // - //$filhosDaRegiao = array(); - //$VirtualCubeDimensionDaRegiao = array(); - //$VirtualCubeMeasureDaRegiao = array(); - + return $xml; +} +function cuboRegioes(){ + global $regioes, $VirtualCubeDimensionDaRegiao, $VirtualCubeMeasureDaRegiao, $filhosDaRegiao; + $xml = ""; foreach($regioes as $regiao){ //inclui os parametros para a regiao de acordo com os filhos que possui $d = $VirtualCubeDimensionDaRegiao[$regiao["codigo_tipo_regiao"]]; - $m = $VirtualCubeMeasureDaRegiao[$regiao["codigo_tipo_regiao"]]; + $mm = $VirtualCubeMeasureDaRegiao[$regiao["codigo_tipo_regiao"]]; foreach($filhosDaRegiao[$regiao["codigo_tipo_regiao"]] as $f){ - //$d = array_merge($d,$VirtualCubeDimensionDaRegiao[$f]); - $m = array_merge($m,$VirtualCubeMeasureDaRegiao[$f]); + $mm = array_merge($mm,$VirtualCubeMeasureDaRegiao[$f]); } - if(count(array_unique($m)) > 0){ + if(count(array_unique($mm)) > 0){ $xml .= ''; $xml .= implode(" ",array_unique($d)); - $xml .= implode(" ",array_unique($m)); + $xml .= implode(" ",array_unique($mm)); $xml .= ' '; } } - $xml .= "Não foi possível criar os diretórios temporários em $dir_tmp.
";exit;} -criaIndex(); +criaIndex($dir_tmp,$diretorios); $tmpfname = $diretorios[0]; $protocolo = explode("/",$_SERVER['SERVER_PROTOCOL']); /* @@ -329,7 +329,6 @@ $_SESSION["contadorsalva"] = 0;//essa variavel e utilizada pela ferramenta telar $_SESSION["i3georendermode"] = $i3georendermode_; $_SESSION["saikuUrl"] = $saikuUrl_; - // //pega todas as variáveis da sessão, mesmo as que foram definidas anteriormente // @@ -450,6 +449,7 @@ else{ //algumas aplicacoes usam essa variavel (SAIKU) $mapext = $ext->minx." ".$ext->miny." ".$ext->maxx." ".$ext->maxy; } + /* Configura os endereços corretos no mapfile. @@ -490,20 +490,20 @@ if(isset($poligonos)) if(isset($url_wms)) {incluiTemaWms();} -adaptaLayers(); +adaptaLayers($tmpfname,$versao); if (file_exists($locaplic."/pacotes/geoip") && file_exists($locaplic."/pacotes/geoip/GeoLiteCity.dat")) {require_once(dirname(__FILE__)."/ms_registraip.php");} //echo $tmpfname;exit; if ($interface != "mashup") {abreInterface($interface,$caminho,$tempo);} + /* Adapta os dados de cada layer. Faz alterações em cada layer caso sejam necessárias. */ -function adaptaLayers(){ - global $tmpfname,$versao; +function adaptaLayers($tmpfname,$versao){ $mapa = ms_newMapObj($tmpfname); $path = $mapa->shapepath; $numlayers = $mapa->numlayers; @@ -749,11 +749,10 @@ function incluiTemasIniciais(){ erroCriacao(); } /* -Cria os arquivos vazios index.htm e index.html nos diret�rios temporários +Cria os arquivos vazios index.htm e index.html nos diretorios temporários */ -function criaIndex() +function criaIndex($dir_tmp,$diretorios) { - global $dir_tmp,$diretorios; if (!file_exists($dir_tmp."/index.htm")) { $f = fopen($dir_tmp."/index.htm","x"); @@ -771,7 +770,7 @@ function criaIndex() } if (!file_exists($dir_tmp."/index.htm")) { - echo "Erro. Não foi possível gravar no diret�rio temporário"; + echo "Erro. Não foi possível gravar no diretório temporário"; exit; } } -- libgit2 0.21.2