Commit b673de611af68272fd3c46315609f7ee9044e709

Authored by Edmar Moretti
1 parent cae55a29

Aprimoramento do gerador de cubos para o SAIKU

admin/admin.db
No preview for this file type
admin/php/classe_metaestat.php
@@ -528,6 +528,7 @@ class Metaestat{ @@ -528,6 +528,7 @@ class Metaestat{
528 return array("caminho"=>$caminho,"colunas"=>$colunas); 528 return array("caminho"=>$caminho,"colunas"=>$colunas);
529 } 529 }
530 } 530 }
  531 + return array("caminho"=>$caminho,"colunas"=>$colunas);
531 } 532 }
532 function hierarquiaPath($node){ 533 function hierarquiaPath($node){
533 $query="select codigo_tipo_regiao_pai as parent from ".$this->esquemaadmin."i3geoestat_agregaregiao WHERE codigo_tipo_regiao = $node"; 534 $query="select codigo_tipo_regiao_pai as parent from ".$this->esquemaadmin."i3geoestat_agregaregiao WHERE codigo_tipo_regiao = $node";
@@ -2056,6 +2057,10 @@ class Metaestat{ @@ -2056,6 +2057,10 @@ class Metaestat{
2056 } 2057 }
2057 return $this->execSQL($sql,""); 2058 return $this->execSQL($sql,"");
2058 } 2059 }
  2060 + function listaHierarquia($codigoregiaopai=""){
  2061 + $sql = "select * from ".$this->esquemaadmin."i3geoestat_agregaregiao order by codigo_tipo_regiao";
  2062 + return $this->execSQL($sql,"");
  2063 + }
2059 /** 2064 /**
2060 * Lista os registros de um tipo de regiao 2065 * Lista os registros de um tipo de regiao
2061 * Se for definido o pai, lista os valores da regiao que e filha 2066 * Se for definido o pai, lista os valores da regiao que e filha
@@ -2132,7 +2137,9 @@ class Metaestat{ @@ -2132,7 +2137,9 @@ class Metaestat{
2132 function listaAgregaRegiaoFilho($codigo_tipo_regiao,$codigo_tipo_regiao_pai){ 2137 function listaAgregaRegiaoFilho($codigo_tipo_regiao,$codigo_tipo_regiao_pai){
2133 $sql = "select * from ".$this->esquemaadmin."i3geoestat_agregaregiao "; 2138 $sql = "select * from ".$this->esquemaadmin."i3geoestat_agregaregiao ";
2134 $sql .= "WHERE codigo_tipo_regiao_pai = $codigo_tipo_regiao_pai "; 2139 $sql .= "WHERE codigo_tipo_regiao_pai = $codigo_tipo_regiao_pai ";
2135 - $sql .= "AND codigo_tipo_regiao = $codigo_tipo_regiao"; 2140 + if($codigo_tipo_regiao != ""){
  2141 + $sql .= "AND codigo_tipo_regiao = $codigo_tipo_regiao";
  2142 + }
2136 return $this->execSQL($sql,$codigo_tipo_regiao_pai); 2143 return $this->execSQL($sql,$codigo_tipo_regiao_pai);
2137 } 2144 }
2138 /** 2145 /**
ferramentas/saiku/esquemaxml.php
@@ -4,82 +4,253 @@ @@ -4,82 +4,253 @@
4 // 4 //
5 //utilize &xmlesquema= caso o XML ja exista 5 //utilize &xmlesquema= caso o XML ja exista
6 // 6 //
7 -//http://localhost/i3geo/ferramentas/saiku/esquemaxml.php?output=&xmlesquema=http://localhost/i3geo/ferramentas/saiku/testemondrian.xml 7 +//utilize $regiao para obter o xml de uma so regiao
  8 +//
  9 +/**
  10 +http://localhost/i3geo/ferramentas/saiku/esquemaxml.php?output=&xmlesquema=http://localhost/i3geo/ferramentas/saiku/testemondrian.xml&output=xml
  11 +http://localhost/i3geo/ferramentas/saiku/esquemaxml.php?xmlesquema=&output=xml&regiao=1
  12 +*/
  13 +
8 // 14 //
9 //quando o saiku e iniciado de fora do i3geo, e necessario inicializar um mapfile para uso como base dos mapas 15 //quando o saiku e iniciado de fora do i3geo, e necessario inicializar um mapfile para uso como base dos mapas
10 -if(empty($_GET["g_sid"])){  
11 - include(dirname(__FILE__)."/../../ms_criamapa.php");  
12 - //reinicia a url  
13 - $urln = "?g_sid=".session_id()."&locaplic=".$_GET["locaplic"]."&mapext=".$mapext."&origem=".$_GET["origem"]."&output=".$_GET["output"]."&xmlesquema=".$_GET["xmlesquema"];  
14 - header("Location:".$urln);  
15 - exit;  
16 -} 16 +//
  17 +criaMapfileInicial();
17 18
18 include(dirname(__FILE__)."/../../classesphp/funcoes_gerais.php"); 19 include(dirname(__FILE__)."/../../classesphp/funcoes_gerais.php");
19 include(dirname(__FILE__)."/../../admin/php/classe_metaestat.php"); 20 include(dirname(__FILE__)."/../../admin/php/classe_metaestat.php");
20 if(!isset($dir_tmp)){ 21 if(!isset($dir_tmp)){
21 include(dirname(__FILE__)."/../../ms_configura.php"); 22 include(dirname(__FILE__)."/../../ms_configura.php");
22 } 23 }
23 -$nomeConexao = nomeRandomico();  
24 -$nomeDatasource = $dir_tmp."/saiku-datasources/".$nomeConexao;  
25 24
26 -//pega a sessao PHP aberta pelo i3Geo ou ms_criamapa.php  
27 -session_name("i3GeoPHP");  
28 -session_id($_GET["g_sid"]);  
29 -session_start(); 25 +$urlXmlEsquema = "";
  26 +$nomeConexao = criaConexaoEsquema();
  27 +
30 $map_file = $_SESSION["map_file"]; 28 $map_file = $_SESSION["map_file"];
31 -if(empty($_GET["xmlesquema"])){  
32 - $urlXmlEsquema = $_SESSION["tmpurl"].basename(dirname($map_file))."/".$nomeConexao.".xml"; 29 +
  30 +$arquivoXmlEsquema = dirname($map_file)."/".$nomeConexao.".xml";
  31 +
  32 +gravaDataSource();
  33 +
  34 +if(!empty($_GET["xmlesquema"])){
  35 + imprimeEsquema();
  36 +}
  37 +
  38 +$m = new Metaestat();
  39 +
  40 +//
  41 +//obtem do mapfile em uso os layers que sao do sistema metaestat, sao regioes e que possuem selecao
  42 +//
  43 +if(empty($_GET["regiao"])){
  44 + $s = pegaSelecaoRegioes();
  45 + $selecaoRegiao = $s["selecaoRegiao"];
  46 + $codigo_tipo_regiao = $s["codigo_tipo_regiao"];
33 } 47 }
34 else{ 48 else{
35 - $urlXmlEsquema = $_GET["xmlesquema"]; 49 + $codigo_tipo_regiao = $_GET["regiao"];
36 } 50 }
37 -$arquivoXmlEsquema = dirname($map_file)."/".$nomeConexao.".xml"; 51 +//verifica se o cubo usa uma regiao especifica ou todas
  52 +if($codigo_tipo_regiao == ""){
  53 + $regioes = $m->listaTipoRegiao();
  54 +}
  55 +else{
  56 + $regioes = array($m->listaTipoRegiao($codigo_tipo_regiao));
  57 +}
  58 +$s = "";
38 59
39 -/*  
40 - $saikuConfigDataSource vem do ms_configura.php  
41 -  
42 -Exemplo de arquivo de fonte:  
43 -type=OLAP  
44 -name=i3geo  
45 -driver=mondrian.olap4j.MondrianOlap4jDriver  
46 -location=jdbc:mondrian:Jdbc=jdbc:postgresql://localhost:5432/i3geosaude;Catalog=http://localhost/i3geo/ferramentas/saiku/esquemaxml.php;JdbcDrivers=org.postgresql.Driver;  
47 -username=postgres  
48 -password=postgres  
49 -  
50 -Array com os parametros definidos em ms_configura:  
51 -  
52 -$saikuConfigDataSource = array(  
53 - "type"=>"OLAP",  
54 - "driver"=>"mondrian.olap4j.MondrianOlap4jDriver",  
55 - "location"=>"jdbc:mondrian:Jdbc=jdbc:postgresql",  
56 - "serverdb"=>"localhost",  
57 - "port"=>"5432",  
58 - "database"=>"i3geosaude",  
59 - "JdbcDrivers"=>"org.postgresql.Driver",  
60 - "username"=>"postgres",  
61 - "password"=>"postgres"  
62 -);  
63 -*/  
64 -$stringDatasource = "  
65 -type={$saikuConfigDataSource["type"]}  
66 -name={$nomeConexao}  
67 -driver={$saikuConfigDataSource["driver"]}  
68 -location={$saikuConfigDataSource["location"]}://{$saikuConfigDataSource["serverdb"]}:{$saikuConfigDataSource["port"]}/{$saikuConfigDataSource["database"]};Catalog={$urlXmlEsquema};JdbcDrivers={$saikuConfigDataSource["JdbcDrivers"]};  
69 -username={$saikuConfigDataSource["username"]}  
70 -password={$saikuConfigDataSource["password"]}  
71 -";  
72 -//salva o arquivo com a fonte  
73 -gravaDados(array($stringDatasource),$nomeDatasource);  
74 -  
75 -if(empty($_GET["xmlesquema"])){  
76 - $m = new Metaestat(); 60 +if(empty($saikuConfigDataSource['tabelaDimensaoTempo'])){
  61 + $saikuConfigDataSource['tabelaDimensaoTempo'] = "i3geo_metaestat.dim_tempo";
  62 +}
77 63
78 - //  
79 - //obtem do mapfile em uso os layers que sao do sistema metaestat, sao regioes e que possuem selecao  
80 - //  
81 - $selecaoRegiao = array(); 64 +$medidas = $m->listaMedidaVariavel();
  65 +
  66 +//
  67 +//formata o array de regioes colocando na chave o codigo da regiao
  68 +//
  69 +$chavesRegiao = array();
  70 +$todasAsRegioes = $m->listaTipoRegiao();
  71 +foreach($todasAsRegioes as $R){
  72 + $chavesRegiao[$R["codigo_tipo_regiao"]] = $R;
  73 +}
  74 +
  75 +//inicia montagem do XML
  76 +
  77 +//
  78 +//cria as dimensoes de tipo temporal
  79 +//
  80 +$xmlTempo = dimensoesTemporais();
  81 +
  82 +//
  83 +//dimensoes geograficas
  84 +//as dimensoes sao duplicadas
  85 +//uma delas contem o geocodigo que permite a geracao do mapa
  86 +//
  87 +//guarda as regioes filhas de uma determinada regiao (chave)
  88 +$filhosDaRegiao = array();
  89 +$VirtualCubeDimensionDaRegiao = array();
  90 +$VirtualCubeMeasureDaRegiao = array();
  91 +
  92 +$dimRegioes = dimensoesGeo();
  93 +
  94 +//var_dump(array_column($dimRegioes,"juncoes","codigo_tipo_regiao"));exit;
  95 +
  96 +$xmlRegioes = implode(" ",array_column($dimRegioes,"xml"));
  97 +
  98 +//
  99 +//outras dimensoes definidas nos parametros e que nao sejam do tipo tempo
  100 +//
  101 +$xmlOutrasDim = dimensoesOutras();
  102 +
  103 +//
  104 +//cria as dimensoes das medidas conforme o nome da tabela utilizada
  105 +//
  106 +$VirtualCubeDimension = array();
  107 +$VirtualCubeMeasure = array();
  108 +$xmlDimensoesTabelas = dimensoesTabelas();
  109 +
  110 +//
  111 +//cubo geral, com todas as dimensoes e medidas
  112 +//
  113 +$xmlCuboTodas = cuboTodas();
  114 +//
  115 +//cubos por regiao
  116 +//
  117 +$xmlCuboRegioes = cuboRegioes();
  118 +
  119 +$xml = "<Schema name='i3Geo Metaestat'>";
  120 +$xml .= $xmlTempo.$xmlRegioes.$xmlOutrasDim.$xmlDimensoesTabelas.$xmlCuboRegioes.$xmlCuboTodas;
  121 +$xml .= "</Schema>";
  122 +
  123 +//xml pronto!!!!!
  124 +
  125 +error_reporting(0);
  126 +ob_end_clean();
  127 +//
  128 +//grava os dados em um arquivo. O usuario pode evitar isso e imprimir direto na tela
  129 +//usando output "xml"
  130 +//
  131 +if($_GET["output"] != "xml"){
  132 + gravaDados(array($xml),$arquivoXmlEsquema);
  133 +}
  134 +imprimeEsquema();
  135 +
  136 +
  137 +//////////////////////////////////////////////////////////////////////////////////////////
  138 +function caminhoRegiao($hs,$chavesRegiao,$h,$regiaoInicial,$caminho)
  139 +{
  140 + foreach($hs as $n){
  141 + if($n["codigo_tipo_regiao"] == $regiaoInicial){
  142 + $caminho[] = array("a"=>$regiaoInicial,"join"=>$n["codigo_tipo_regiao_pai"],"ligacao"=>$n["colunaligacao_regiaopai"]);
  143 + $caminho = caminhoRegiao($hs,$chavesRegiao,$h, $n["codigo_tipo_regiao_pai"],$caminho);
  144 + }
  145 + else{
  146 + //$caminho = caminhoRegiao($hs,$chavesRegiao,$h, $n["codigo_tipo_regiao_pai"],$caminho);
  147 + }
  148 + }
  149 + return $caminho;
  150 +}
  151 +function converte($texto){
  152 + $texto = str_replace("&","&amp;",htmlentities($texto));
  153 + return $texto;
  154 +}
  155 +function imprimeEsquema(){
  156 + global $saikuUrl,$nomeConexao,$xml;
  157 + if($_GET["output"] == "xml"){
  158 + if(!empty($_GET["xmlesquema"])){
  159 + echo header("Content-type: application/xml");
  160 + header("Location:".$_GET["xmlesquema"]);
  161 + }
  162 + else{
  163 + imprimeXml($xml);
  164 + }
  165 + }
  166 + else{
  167 + header("Location:".$saikuUrl."/?nomeConexao=".$nomeConexao."&locaplic=".$_GET["locaplic"]."&g_sid=".$_GET["g_sid"]."&mapext=".$_GET["mapext"]."&origem=".$_GET["origem"]."&regiao=".$_GET["regiao"]);
  168 + }
  169 +}
  170 +function imprimeXml($xml){
  171 + echo header("Content-type: application/xml");
  172 + echo $xml;
  173 +}
  174 +function criaMapfileInicial(){
  175 + global $mapext;
  176 + if(empty($_GET["g_sid"])){
  177 + include(dirname(__FILE__)."/../../ms_configura.php");
  178 + $interface = "mashup";
  179 + include(dirname(__FILE__)."/../../ms_criamapa.php");
  180 +
  181 + //reinicia a url
  182 + $urln = "?g_sid=".session_id()."&locaplic=".$_GET["locaplic"]."&mapext=".$mapext."&origem=".$_GET["origem"]."&output=".$_GET["output"]."&xmlesquema=".$_GET["xmlesquema"]."&regiao=".$_GET["regiao"];
  183 + header("Location:".$urln);
  184 + exit;
  185 + }
  186 +}
  187 +function criaConexaoEsquema(){
  188 + global $dir_tmp, $urlXmlEsquema;
  189 + $nomeConexao = nomeRandomico();
  190 + //pega a sessao PHP aberta pelo i3Geo ou ms_criamapa.php
  191 + session_name("i3GeoPHP");
  192 + session_id($_GET["g_sid"]);
  193 + session_start();
  194 + $map_file = $_SESSION["map_file"];
  195 + if(empty($_GET["xmlesquema"])){
  196 + $urlXmlEsquema = $_SESSION["tmpurl"].basename(dirname($map_file))."/".$nomeConexao.".xml";
  197 + }
  198 + else{
  199 + $urlXmlEsquema = $_GET["xmlesquema"];
  200 + //cria um nome de arquivo reaproveitável
  201 + $nomeConexao = md5($_GET["xmlesquema"]);
  202 + }
  203 + //$arquivoXmlEsquema = dirname($map_file)."/".$nomeConexao.".xml";
  204 + return $nomeConexao;
  205 +}
  206 +function gravaDataSource(){
  207 + /*
  208 + $saikuConfigDataSource vem do ms_configura.php
  209 +
  210 + Exemplo de arquivo de fonte:
  211 + type=OLAP
  212 + name=i3geo
  213 + driver=mondrian.olap4j.MondrianOlap4jDriver
  214 + location=jdbc:mondrian:Jdbc=jdbc:postgresql://localhost:5432/i3geosaude;Catalog=http://localhost/i3geo/ferramentas/saiku/esquemaxml.php;JdbcDrivers=org.postgresql.Driver;
  215 + username=postgres
  216 + password=postgres
  217 +
  218 + Array com os parametros definidos em ms_configura:
  219 +
  220 + $saikuConfigDataSource = array(
  221 + "type"=>"OLAP",
  222 + "driver"=>"mondrian.olap4j.MondrianOlap4jDriver",
  223 + "location"=>"jdbc:mondrian:Jdbc=jdbc:postgresql",
  224 + "serverdb"=>"localhost",
  225 + "port"=>"5432",
  226 + "database"=>"i3geosaude",
  227 + "JdbcDrivers"=>"org.postgresql.Driver",
  228 + "username"=>"postgres",
  229 + "password"=>"postgres"
  230 + );
  231 + */
  232 + global $arquivoXmlEsquema,$saikuConfigDataSource,$nomeConexao,$urlXmlEsquema,$dir_tmp;
  233 + $nomeDatasource = $dir_tmp."/saiku-datasources/".$nomeConexao;
  234 + if(!file_exists($arquivoXmlEsquema)){
  235 + $stringDatasource = "
  236 + type={$saikuConfigDataSource["type"]}
  237 + name={$nomeConexao}
  238 + driver={$saikuConfigDataSource["driver"]}
  239 + location={$saikuConfigDataSource["location"]}://{$saikuConfigDataSource["serverdb"]}:{$saikuConfigDataSource["port"]}/{$saikuConfigDataSource["database"]};Catalog={$urlXmlEsquema};JdbcDrivers={$saikuConfigDataSource["JdbcDrivers"]};
  240 + username={$saikuConfigDataSource["username"]}
  241 + password={$saikuConfigDataSource["password"]}
  242 + ";
  243 + //salva o arquivo com a fonte
  244 + gravaDados(array($stringDatasource),$nomeDatasource);
  245 + }
  246 +}
  247 +function pegaSelecaoRegioes(){
  248 + global $m,$map_file,$postgis_mapa;
82 $codigo_tipo_regiao = ""; 249 $codigo_tipo_regiao = "";
  250 + $selecaoRegiao = array();
  251 + $regiao = "";
  252 + $item = "";
  253 + $registros = "";
83 if($map_file != ""){ 254 if($map_file != ""){
84 $mapa = ms_newMapObj($map_file); 255 $mapa = ms_newMapObj($map_file);
85 $c = $mapa->numlayers; 256 $c = $mapa->numlayers;
@@ -126,28 +297,18 @@ if(empty($_GET[&quot;xmlesquema&quot;])){ @@ -126,28 +297,18 @@ if(empty($_GET[&quot;xmlesquema&quot;])){
126 } 297 }
127 } 298 }
128 } 299 }
  300 + return array(
  301 + "selecaoRegiao"=>$selecaoRegiao,
  302 + "codigo_tipo_regiao"=>$codigo_tipo_regiao
  303 + );
129 } 304 }
130 - if($codigo_tipo_regiao == ""){  
131 - $regioes = $m->listaTipoRegiao();  
132 - }  
133 - else{  
134 - $regioes = array($m->listaTipoRegiao($codigo_tipo_regiao));  
135 - }  
136 - //echo "<pre>";var_dump($regioes);exit;  
137 - $regiao = "";  
138 - $item = "";  
139 - $registros = "";  
140 - //echo "<pre>";var_dump($regioes);exit;  
141 -  
142 - $xml = "<Schema name='i3Geo Metaestat'>";  
143 - //cria as dimensoes de tipo temporal  
144 - if(empty($saikuConfigDataSource['tabelaDimensaoTempo'])){  
145 - $saikuConfigDataSource['tabelaDimensaoTempo'] = "i3geo_metaestat.dim_tempo";  
146 - } 305 +}
  306 +function dimensoesTemporais(){
  307 + global $saikuConfigDataSource;
147 $sqlAno = "select nu_ano from ".$saikuConfigDataSource['tabelaDimensaoTempo']." group by nu_ano order by nu_ano"; 308 $sqlAno = "select nu_ano from ".$saikuConfigDataSource['tabelaDimensaoTempo']." group by nu_ano order by nu_ano";
148 $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"; 309 $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";
149 //dimensoes temporais 310 //dimensoes temporais
150 - $xml .= " 311 + $xml = "
151 <Dimension name='Anual' type='TimeDimension' caption='Tempo: Anual'> 312 <Dimension name='Anual' type='TimeDimension' caption='Tempo: Anual'>
152 <Hierarchy hasAll='true' primaryKey='nu_ano'> 313 <Hierarchy hasAll='true' primaryKey='nu_ano'>
153 <view alias='tempo_ano' ><SQL dialect='generic' >$sqlAno</SQL></view> 314 <view alias='tempo_ano' ><SQL dialect='generic' >$sqlAno</SQL></view>
@@ -169,113 +330,171 @@ if(empty($_GET[&quot;xmlesquema&quot;])){ @@ -169,113 +330,171 @@ if(empty($_GET[&quot;xmlesquema&quot;])){
169 </Hierarchy> 330 </Hierarchy>
170 </Dimension> 331 </Dimension>
171 "; 332 ";
172 - //global  
173 - $medidas = $m->listaMedidaVariavel();  
174 -  
175 - //echo "<pre>";var_dump($regioesTabela);exit;  
176 - //dimensoes geograficas  
177 - //as dimensoes sao duplicadas  
178 - //uma delas contem o geocodigo que permite a geracao do mapa  
179 -  
180 - //guarda as regioes filhas de uma determinada regiao (chave)  
181 - $filhosDaRegiao = array();  
182 - $VirtualCubeDimensionDaRegiao = array();  
183 - $VirtualCubeMeasureDaRegiao = array(); 333 + return $xml;
  334 +}
  335 +function sqlDasRegioes($regiao,$caminho,$chavesRegiao){
  336 + $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";
  337 + $selectPrincipal = "";
  338 + $juncoes = "";
  339 + $colunas = array();
  340 + $nomesColunas = array();
  341 + $codRegioes = array();
  342 + $ncaminhos = count($caminho);
  343 + if($ncaminhos > 0){
  344 + foreach($caminho as $c){
  345 + $regiaoAnterior = $chavesRegiao[$c["a"]];
  346 + $tabelaAnterior = "tabela".$regiaoAnterior["codigo_tipo_regiao"];
  347 + $colunaLigacaoAnterior = $c["ligacao"];
  348 +
  349 + $colunas[] = $tabelaAnterior.".".$regiaoAnterior["identificador"]. "::text AS codigo".$regiaoAnterior["codigo_tipo_regiao"];
  350 + $colunas[] = $tabelaAnterior.".".$regiaoAnterior["colunanomeregiao"]. "::text AS nome".$regiaoAnterior["codigo_tipo_regiao"];
  351 +
  352 + $regiaoJoin = $chavesRegiao[$c["join"]];
  353 + $tabelaAtual = "tabela".$regiaoJoin["codigo_tipo_regiao"];
  354 + $colunaLigacaoAtual = $regiaoJoin["identificador"];
  355 +
  356 + $colunas[] = $tabelaAtual.".".$regiaoJoin["identificador"]. "::text AS codigo".$regiaoJoin["codigo_tipo_regiao"];
  357 + $colunas[] = $tabelaAtual.".".$regiaoJoin["colunanomeregiao"]. "::text AS nome".$regiaoJoin["codigo_tipo_regiao"];
  358 +
  359 + $nomesColunas[] = " codigo".$regiaoJoin["codigo_tipo_regiao"];
  360 + $nomesColunas[] = " nome".$regiaoJoin["codigo_tipo_regiao"];
  361 +
  362 + $juncoes .= " JOIN {$regiaoJoin['esquemadb']}.{$regiaoJoin['tabela']} as $tabelaAtual ON
  363 + $tabelaAtual.$colunaLigacaoAtual::text = $tabelaAnterior.$colunaLigacaoAnterior::text
  364 + ";
  365 + $codRegioes[] = $regiaoJoin["codigo_tipo_regiao"];
  366 + }
  367 + $colunas = array_unique($colunas);
  368 + }
  369 + else{
  370 + $colunas[] = $regiao["identificador"]. "::text AS codigo".$regiao["codigo_tipo_regiao"];
  371 + $colunas[] = $regiao["colunanomeregiao"]. "::text AS nome".$regiao["codigo_tipo_regiao"];
  372 +
  373 + $nomesColunas[] = " codigo".$regiao["codigo_tipo_regiao"];
  374 + $nomesColunas[] = " nome".$regiao["codigo_tipo_regiao"];
  375 +
  376 + $codRegioes[] = $regiao["codigo_tipo_regiao"];
  377 + }
  378 + $mascara = $select;
  379 + $select = str_replace("__COLUNAS__",implode(",",$colunas),$select);
  380 + $selectPricipal = $select;
  381 + $select .= $juncoes;
  382 + return array("codRegioes"=>$codRegioes,"juncoes"=>$juncoes,"mascara"=>$mascara,"principal"=>$selectPricipal,"select"=>$select,"colunas"=>$colunas,"nomesColunas"=>$nomesColunas);
  383 +}
  384 +
  385 +function dimensoesGeo(){
  386 + global $chavesRegiao, $m, $selecaoRegiao, $regioes, $filhosDaRegiao, $VirtualCubeDimensionDaRegiao, $VirtualCubeMeasureDaRegiao;
  387 + //essas variaveis sao globais e usadas em outras funcoes
184 foreach($regioes as $regiao){ 388 foreach($regioes as $regiao){
185 $filhosDaRegiao[$regiao["codigo_tipo_regiao"]] = array(); 389 $filhosDaRegiao[$regiao["codigo_tipo_regiao"]] = array();
186 $VirtualCubeDimensionDaRegiao[$regiao["codigo_tipo_regiao"]] = array(); 390 $VirtualCubeDimensionDaRegiao[$regiao["codigo_tipo_regiao"]] = array();
187 $VirtualCubeMeasureDaRegiao[$regiao["codigo_tipo_regiao"]] = array(); 391 $VirtualCubeMeasureDaRegiao[$regiao["codigo_tipo_regiao"]] = array();
188 } 392 }
  393 + //xml normal
189 $xml1 = ""; 394 $xml1 = "";
  395 + //xml geocodigo
190 $xml2 = ""; 396 $xml2 = "";
191 -  
192 - foreach($regioes as $regiao){ 397 + //
  398 + //sera que e todas mesmo ou so a escolhida?????
  399 + //
  400 + $todasRegioes = $m->listaTipoRegiao();
  401 + $xmlRegioes = array();
  402 + foreach($todasRegioes as $regiao){
193 $sqls = array(); 403 $sqls = array();
194 - $xml1 .= "  
195 - <Dimension name='codigo_tipo_regiao_".$regiao["codigo_tipo_regiao"]."' caption='Onde:".converte($regiao["nome_tipo_regiao"])."'>  
196 - <Hierarchy hasAll='true' primaryKey='codigo'> 404 + $temp = converte($regiao["nome_tipo_regiao"]);
  405 + $xml1 = "
  406 + <Dimension name='codigo_tipo_regiao_".$regiao["codigo_tipo_regiao"]."' caption='Onde:".$temp."'>
  407 + <Hierarchy hasAll='true' primaryKey='codigo{$regiao["codigo_tipo_regiao"]}'>
197 "; 408 ";
198 - $xml2 .= "  
199 - <Dimension name='codigo_tipo_regiao_".$regiao["codigo_tipo_regiao"]."_geocod' caption='GeoCod:".converte($regiao["nome_tipo_regiao"])."'>  
200 - <Hierarchy hasAll='true' primaryKey='codigo'> 409 + $xml2 = "
  410 + <Dimension name='codigo_tipo_regiao_".$regiao["codigo_tipo_regiao"]."_geocod' caption='GeoCod:".$temp."'>
  411 + <Hierarchy hasAll='true' primaryKey='codigo{$regiao["codigo_tipo_regiao"]}'>
201 "; 412 ";
  413 + //
202 //cria uma view juntando as tabelas da hierarquia de regioes 414 //cria uma view juntando as tabelas da hierarquia de regioes
203 - $caminho = $m->hierarquiaPath($regiao["codigo_tipo_regiao"]);  
204 - //$caminho[] = $regiao["codigo_tipo_regiao"];  
205 -  
206 - $n = count($caminho);  
207 - $regiaoAtual = $regiao;  
208 - $niveis1 = array();  
209 - $niveis2 = array();  
210 - $unico = "true";  
211 - for($j=0;$j<=$n;$j++){  
212 - $colunas = array();  
213 - $sql = "SELECT __COLUNAS__ FROM {$regiaoAtual['esquemadb']}.{$regiaoAtual['tabela']} as a$j ";  
214 - $colunas[] = "a$j.{$regiaoAtual['identificador']}::text as codigo ";  
215 - //inclui campos vazios na sequencia de campos  
216 - for($k=0;$k<$j;$k++){  
217 - $colunas[] = "''";  
218 - $colunas[] = "''"; 415 + //
  416 + $hs = $m->listaHierarquia();
  417 + //$regiao["codigo_tipo_regiao"] = 2;
  418 + foreach($hs as $h){
  419 + if($h["codigo_tipo_regiao"] == $regiao["codigo_tipo_regiao"]){
  420 + $caminho = caminhoRegiao($hs,$chavesRegiao,$h,$regiao["codigo_tipo_regiao"]);
219 } 421 }
  422 + }
  423 + //
  424 + //sql da tabela principal da regiao
  425 + //
  426 + $dadosSelect = sqlDasRegioes($regiao,$caminho,$chavesRegiao);
  427 + //
  428 + //pega os dados das demais tabelas associadas, menos da primeira
  429 + //para unir os dados
  430 + //
  431 + $niveisXml1 = array();
  432 + $niveisXml2 = array();
  433 +
  434 + $temp = converte($regiao["nome_tipo_regiao"]);
  435 + $niveisXml1[] = "
  436 + <Level name='".$temp."' column='codigo{$regiao["codigo_tipo_regiao"]}' nameColumn='nome".$regiao["codigo_tipo_regiao"]."'
  437 + uniqueMembers='true' />
  438 + ";
  439 + $niveisXml2[] = "
  440 + <Level name='".$temp." - GeoCod #".$regiao["codigo_tipo_regiao"]."' column='codigo{$regiao["codigo_tipo_regiao"]}' nameColumn='nome".$regiao["codigo_tipo_regiao"]."'
  441 + uniqueMembers='true' />
  442 + ";
  443 + //juncoes
  444 + while($caminho){
  445 + $a = array_shift($caminho);
  446 + $u = sqlDasRegioes($chavesRegiao[$a["join"]],array(),$chavesRegiao);
  447 + //substitui as colunas para obter dados vazios
  448 + $colunasVazias = array();
  449 + foreach($dadosSelect["nomesColunas"] as $nomesPrincipais){
  450 + $colunasVazias[$nomesPrincipais] = "'' AS $nomesPrincipais";
  451 + }
  452 + $n = count($u["colunas"]);
  453 + for($q = 0; $q < $n; $q++){
  454 + $colunasVazias[$u["nomesColunas"][$q]] = $u["colunas"][$q];
  455 + }
  456 + //
  457 + //inclui as colunas da primeira tabela
  458 + //
  459 + $colunasPrimeiraTabela = "'' as codigo".$regiao["codigo_tipo_regiao"].","."'' as nome".$regiao["codigo_tipo_regiao"].",";
220 460
221 - $colunas[] = "a$j.{$regiaoAtual['identificador']}::text AS {$regiaoAtual['identificador']} ";  
222 - $colunas[] = "a$j.{$regiaoAtual['colunanomeregiao']}::text AS {$regiaoAtual['colunanomeregiao']} "; 461 + $mascara = str_replace("__COLUNAS__",$colunasPrimeiraTabela."__COLUNAS__",$u["mascara"]);
223 462
224 - for($i=$j;$i<$n;$i++){  
225 - $r = $m->listaTipoRegiao($caminho[$i]); 463 + $u["select"] = str_replace("__COLUNAS__",implode(",",$colunasVazias),$mascara);
226 464
227 - if(count($colunas) > ($j + 4)){  
228 - $colunas[] = "''::text AS {$r['identificador']} ";  
229 - $colunas[] = "''::text AS {$r['colunanomeregiao']} ";  
230 - }  
231 - else{  
232 - $colunas[] = "b$i.{$r['identificador']}::text AS {$r['identificador']} ";  
233 - $colunas[] = "b$i.{$r['colunanomeregiao']}::text AS {$r['colunanomeregiao']} ";  
234 - }  
235 - //descobre a coluna de ligacao da regiao  
236 - $agr = $m->listaAgregaRegiaoFilho($regiaoAtual['codigo_tipo_regiao'],$r['codigo_tipo_regiao']); 465 + $temp = converte($chavesRegiao[$a["join"]]["nome_tipo_regiao"]);
237 466
238 - $sql .= " JOIN {$r['esquemadb']}.{$r['tabela']} as b$i ON  
239 - a$j.{$agr['colunaligacao_regiaopai']}::text = b$i.{$r['identificador']}::text  
240 - ";  
241 - }  
242 -  
243 - $colunas = implode($colunas,",");  
244 - $sql = str_replace("__COLUNAS__",$colunas,$sql);  
245 - //inclui a selecao se houver  
246 - if(!empty($selecaoRegiao[$regiaoAtual["codigo_tipo_regiao"]])){  
247 - $rs = $selecaoRegiao[$regiaoAtual["codigo_tipo_regiao"]];  
248 - }  
249 - $pos = strpos($sql, "regiao.".$rs["item"]." ");  
250 - if($rs != "" || !$pos === false){  
251 - $sql .= " WHERE regiao.".$rs["sql"];  
252 - }  
253 - $sqls[] = $sql;  
254 -  
255 - $niveis1[] = "  
256 - <Level name='".converte($regiaoAtual["nome_tipo_regiao"])."' column='".$regiaoAtual["colunanomeregiao"]."' nameColumn='".$regiaoAtual["colunanomeregiao"]."'  
257 - uniqueMembers='".$unico."' /> 467 + $niveisXml1[] = "
  468 + <Level name='".$temp."' column='codigo{$a["join"]}' nameColumn='nome".$a["join"]."'
  469 + uniqueMembers='false' />
258 "; 470 ";
259 - $niveis2[] = "  
260 - <Level name='".$regiaoAtual["nome_tipo_regiao"]." - GeoCod #".$regiaoAtual["codigo_tipo_regiao"]."' column='".$regiaoAtual["identificador"]."' nameColumn='".$regiaoAtual["colunanomeregiao"]."'  
261 - uniqueMembers='".$unico."' /> 471 + $niveisXml2[] = "
  472 + <Level name='".$temp." - GeoCod #".$a["join"]."' column='codigo{$a["join"]}' nameColumn='nome".$a["join"]."'
  473 + uniqueMembers='false' />
262 "; 474 ";
263 $unico = "false"; 475 $unico = "false";
264 -  
265 - $regiaoAtual = $m->listaTipoRegiao($caminho[$j]);  
266 } 476 }
267 - //echo "<pre>";echo implode("UNION\n\n",$sqls);exit;  
268 477
  478 + //inclui a selecao se houver
  479 + $sqlreg = "";
  480 + if(!empty($selecaoRegiao[$regiao["codigo_tipo_regiao"]])){
  481 + $rs = $selecaoRegiao[$regiao["codigo_tipo_regiao"]];
  482 + $sqlreg = " WHERE regiao.".$rs["sql"];
  483 + }
269 $xml1 .= " 484 $xml1 .= "
270 - <view alias='view_codigo_tipo_regiao_".$regiao["codigo_tipo_regiao"]."' ><SQL dialect='generic' >".implode(" UNION ",$sqls)."</SQL></view> 485 + <view alias='view_codigo_tipo_regiao_".$regiao["codigo_tipo_regiao"]."' >
  486 + <SQL dialect='generic' >".$dadosSelect["select"]."</SQL>
  487 + </view>
271 "; 488 ";
272 $xml2 .= " 489 $xml2 .= "
273 - <view alias='view_codigo_tipo_regiao_".$regiao["codigo_tipo_regiao"]."_GeoCod' ><SQL dialect='generic' >".implode(" UNION ",$sqls)."</SQL></view> 490 + <view alias='view_codigo_tipo_regiao_".$regiao["codigo_tipo_regiao"]."_GeoCod' >
  491 + <SQL dialect='generic' >".$dadosSelect["select"]."</SQL>
  492 + </view>
274 "; 493 ";
275 - $niveis1 = array_reverse($niveis1);  
276 - $niveis2 = array_reverse($niveis2);  
277 - $xml1 .= implode(" ",$niveis1);  
278 - $xml2 .= implode(" ",$niveis2); 494 + $niveisXml1 = array_reverse($niveisXml1);
  495 + $niveisXml2 = array_reverse($niveisXml2);
  496 + $xml1 .= implode(" ",$niveisXml1);
  497 + $xml2 .= implode(" ",$niveisXml2);
279 $xml1 .= " 498 $xml1 .= "
280 </Hierarchy> 499 </Hierarchy>
281 </Dimension> 500 </Dimension>
@@ -284,11 +503,19 @@ if(empty($_GET[&quot;xmlesquema&quot;])){ @@ -284,11 +503,19 @@ if(empty($_GET[&quot;xmlesquema&quot;])){
284 </Hierarchy> 503 </Hierarchy>
285 </Dimension> 504 </Dimension>
286 "; 505 ";
  506 + $xmlRegioes[$regiao["codigo_tipo_regiao"]] = array(
  507 + "xml" => $xml1.$xml2,
  508 + "juncoes" => $dadosSelect["juncoes"],
  509 + "codigo_tipo_regiao"=> $regiao["codigo_tipo_regiao"],
  510 + "colunas" => $dadosSelect["colunas"],
  511 + "nomesColunas"=> $dadosSelect["nomesColunas"],
  512 + "codRegioes"=>$dadosSelect["codRegioes"]
  513 + );
287 } 514 }
288 - //echo header("Content-type: application/xml");  
289 - //echo $xml.$xml1.$xml2;exit;  
290 - //echo "<pre>";var_dump($filhosDaRegiao);exit;  
291 - //outras dimensoes definidas nos parametros e que nao sejam do tipo tempo 515 + return $xmlRegioes;
  516 +}
  517 +function dimensoesOutras(){
  518 + global $m;
292 $parametros = $m->listaTodosParametros(); 519 $parametros = $m->listaTodosParametros();
293 $dimOutras = array(); 520 $dimOutras = array();
294 foreach($parametros as $p){ 521 foreach($parametros as $p){
@@ -305,7 +532,7 @@ if(empty($_GET[&quot;xmlesquema&quot;])){ @@ -305,7 +532,7 @@ if(empty($_GET[&quot;xmlesquema&quot;])){
305 } 532 }
306 $xml3 = ""; 533 $xml3 = "";
307 foreach($dimOutras as $d){ 534 foreach($dimOutras as $d){
308 - $k = $p["esquemadb"]."_".$d["tabela"]."_".$d["coluna"]; 535 + $k = $d["esquemadb"]."_".$d["tabela"]."_".$d["coluna"];
309 $xml3 .= " 536 $xml3 .= "
310 <Dimension name='".$k."' caption='".converte($d["nome"])."'> 537 <Dimension name='".$k."' caption='".converte($d["nome"])."'>
311 <Hierarchy hasAll='true' primaryKey='codigo'> 538 <Hierarchy hasAll='true' primaryKey='codigo'>
@@ -322,16 +549,17 @@ if(empty($_GET[&quot;xmlesquema&quot;])){ @@ -322,16 +549,17 @@ if(empty($_GET[&quot;xmlesquema&quot;])){
322 $xml3 .= "</Hierarchy> 549 $xml3 .= "</Hierarchy>
323 </Dimension>"; 550 </Dimension>";
324 } 551 }
325 - $xml .= $xml1.$xml2.$xml3;  
326 - //junta as medidas conforme o nome da tabela utilizada 552 + return $xml3;
  553 +}
  554 +function dimensoesTabelas(){
  555 + global $dimRegioes, $filhosDaRegiao, $m, $VirtualCubeDimension, $VirtualCubeMeasure, $chavesRegiao, $medidas, $codigo_tipo_regiao, $VirtualCubeDimensionDaRegiao, $VirtualCubeMeasureDaRegiao;
327 556
328 - //var_dump($medidas);exit; 557 + $xml = "";
329 $tbs = array(); 558 $tbs = array();
330 - //echo $codigo_tipo_regiao;exit;  
331 foreach($medidas as $medida){ 559 foreach($medidas as $medida){
332 if($codigo_tipo_regiao == "" || $medida["codigo_tipo_regiao"] == $codigo_tipo_regiao){ 560 if($codigo_tipo_regiao == "" || $medida["codigo_tipo_regiao"] == $codigo_tipo_regiao){
333 $k = $medida["esquemadb"].$medida["tabela"]; 561 $k = $medida["esquemadb"].$medida["tabela"];
334 - //echo "<pre>".$k; 562 +
335 if(empty($tbs[$k])){ 563 if(empty($tbs[$k])){
336 $tbs[$k] = array($medida); 564 $tbs[$k] = array($medida);
337 } 565 }
@@ -341,13 +569,9 @@ if(empty($_GET[&quot;xmlesquema&quot;])){ @@ -341,13 +569,9 @@ if(empty($_GET[&quot;xmlesquema&quot;])){
341 } 569 }
342 } 570 }
343 //monta os cubos para cada esquema.tabela diferente 571 //monta os cubos para cada esquema.tabela diferente
344 - $VirtualCubeDimension = array();  
345 - $VirtualCubeMeasure = array();  
346 -  
347 foreach($tbs as $tb){ 572 foreach($tbs as $tb){
348 //cabecalho de cada cubo obtido da primeira medida 573 //cabecalho de cada cubo obtido da primeira medida
349 $c = $tb[0]; 574 $c = $tb[0];
350 -  
351 $VirtualCubeDimension[] = " 575 $VirtualCubeDimension[] = "
352 <VirtualCubeDimension name='codigo_tipo_regiao_{$c["codigo_tipo_regiao"]}' /> 576 <VirtualCubeDimension name='codigo_tipo_regiao_{$c["codigo_tipo_regiao"]}' />
353 "; 577 ";
@@ -356,18 +580,17 @@ if(empty($_GET[&quot;xmlesquema&quot;])){ @@ -356,18 +580,17 @@ if(empty($_GET[&quot;xmlesquema&quot;])){
356 "; 580 ";
357 581
358 array_push( 582 array_push(
359 - $VirtualCubeDimensionDaRegiao[$c["codigo_tipo_regiao"]],  
360 - "<VirtualCubeDimension name='codigo_tipo_regiao_{$c["codigo_tipo_regiao"]}' />"  
361 - ); 583 + $VirtualCubeDimensionDaRegiao[$c["codigo_tipo_regiao"]],
  584 + "<VirtualCubeDimension name='codigo_tipo_regiao_{$c["codigo_tipo_regiao"]}' />"
  585 + );
362 array_push( 586 array_push(
363 - $VirtualCubeDimensionDaRegiao[$c["codigo_tipo_regiao"]],  
364 - "<VirtualCubeDimension name='codigo_tipo_regiao_{$c["codigo_tipo_regiao"]}_geocod' />"  
365 - ); 587 + $VirtualCubeDimensionDaRegiao[$c["codigo_tipo_regiao"]],
  588 + "<VirtualCubeDimension name='codigo_tipo_regiao_{$c["codigo_tipo_regiao"]}_geocod' />"
  589 + );
366 //verifica as dimensoes do tipo tempo 590 //verifica as dimensoes do tipo tempo
367 $dimEnsoes = array(); 591 $dimEnsoes = array();
368 - //echo "<pre>";var_dump($tb)."<br>"; 592 +
369 foreach($tb as $medida){ 593 foreach($tb as $medida){
370 - //echo "<pre>";var_dump($medida)."<br>";  
371 $parametros = $m->listaParametro($medida["id_medida_variavel"],"","",false,false); 594 $parametros = $m->listaParametro($medida["id_medida_variavel"],"","",false,false);
372 $parComposto = array(); //guarda a composicao da chave que liga com a dimensao 595 $parComposto = array(); //guarda a composicao da chave que liga com a dimensao
373 $colunaAdicionais = array(); 596 $colunaAdicionais = array();
@@ -389,7 +612,7 @@ if(empty($_GET[&quot;xmlesquema&quot;])){ @@ -389,7 +612,7 @@ if(empty($_GET[&quot;xmlesquema&quot;])){
389 } 612 }
390 //outros parametros 613 //outros parametros
391 $outrosParametros = array(); 614 $outrosParametros = array();
392 - //echo "<pre>";var_dump($parametros); 615 +
393 foreach($parametros as $parametro){ 616 foreach($parametros as $parametro){
394 $k = $parametro["esquemadb"]."_".$parametro["tabela"]."_".$parametro["coluna"]; 617 $k = $parametro["esquemadb"]."_".$parametro["tabela"]."_".$parametro["coluna"];
395 if($parametro["tipo"] > 5 || $parametro["tipo"] == 0){ 618 if($parametro["tipo"] > 5 || $parametro["tipo"] == 0){
@@ -404,8 +627,7 @@ if(empty($_GET[&quot;xmlesquema&quot;])){ @@ -404,8 +627,7 @@ if(empty($_GET[&quot;xmlesquema&quot;])){
404 //$dimEnsoes[] = '<DimensionUsage foreignKey="coduf" name="codigo_tipo_regiao_2" source="codigo_tipo_regiao_2"/>'; 627 //$dimEnsoes[] = '<DimensionUsage foreignKey="coduf" name="codigo_tipo_regiao_2" source="codigo_tipo_regiao_2"/>';
405 628
406 $xml .= "<Cube cache='false' name='Tabela: {$c["esquemadb"]}{$c["tabela"]}'>"; 629 $xml .= "<Cube cache='false' name='Tabela: {$c["esquemadb"]}{$c["tabela"]}'>";
407 - $incluirChaves = array("*");  
408 - 630 + $incluirChaves = array("tabelamedida{$c["id_medida_variavel"]}.*");
409 if(count($parComposto) > 0){ 631 if(count($parComposto) > 0){
410 //$sql = "select *,".implode("||'-'||",$parComposto)."::text as ".implode("_",$parComposto)."_ from {$c["esquemadb"]}.{$c["tabela"]}"; 632 //$sql = "select *,".implode("||'-'||",$parComposto)."::text as ".implode("_",$parComposto)."_ from {$c["esquemadb"]}.{$c["tabela"]}";
411 $incluirChaves[] = implode("||'-'||",$parComposto)."::text as ".implode("_",$parComposto)."_"; 633 $incluirChaves[] = implode("||'-'||",$parComposto)."::text as ".implode("_",$parComposto)."_";
@@ -416,18 +638,39 @@ if(empty($_GET[&quot;xmlesquema&quot;])){ @@ -416,18 +638,39 @@ if(empty($_GET[&quot;xmlesquema&quot;])){
416 } 638 }
417 } 639 }
418 640
419 - $sql = "select ".implode(",",$incluirChaves).",{$c["colunaidgeo"]}::text as codigodim from {$c["esquemadb"]}.{$c["tabela"]}";  
420 - //a tabela pode ter dimensoes em diferentes hierarquias 641 +
  642 + $r = $chavesRegiao[$c["codigo_tipo_regiao"]];
  643 + $sql = "
  644 + select ".implode(",",$incluirChaves).", tabelamedida{$c["id_medida_variavel"]}.{$c["colunaidgeo"]}::text as codigoreg
  645 + ";
  646 + if(count($dimRegioes[$c["codigo_tipo_regiao"]]["colunas"]) > 0){
  647 + $sql .= ",".implode(",",$dimRegioes[$c["codigo_tipo_regiao"]]["colunas"]);
  648 + }
  649 +
  650 + $sql .= "
  651 + from {$c["esquemadb"]}.{$c["tabela"]} as tabelamedida{$c["id_medida_variavel"]}
  652 + JOIN {$r["esquemadb"]}.{$r["tabela"]} as tabela{$r["codigo_tipo_regiao"]}
  653 + ON tabela{$r["codigo_tipo_regiao"]}.{$r["identificador"]}::text = tabelamedida{$c["id_medida_variavel"]}.{$c["colunaidgeo"]}::text
  654 + ";
  655 + $sql .= $dimRegioes[$c["codigo_tipo_regiao"]]["juncoes"];
  656 +
421 $xml .= " 657 $xml .= "
422 - <view alias='view_{$c["esquemadb"]}{$c["tabela"]}' ><SQL dialect='generic' >$sql</SQL></view>  
423 - <DimensionUsage foreignKey='codigodim' name='codigo_tipo_regiao_".$c["codigo_tipo_regiao"]."' source='codigo_tipo_regiao_".$c["codigo_tipo_regiao"]."'/>  
424 - <DimensionUsage foreignKey='codigodim' name='codigo_tipo_regiao_".$c["codigo_tipo_regiao"]."_geocod' source='codigo_tipo_regiao_".$c["codigo_tipo_regiao"]."_geocod'/> 658 + <view alias='view_{$c["esquemadb"]}{$c["tabela"]}' ><SQL dialect='generic' >$sql</SQL></view>
425 "; 659 ";
  660 + //dimensoes vinculadas
  661 + $temp = $dimRegioes[$c["codigo_tipo_regiao"]]["codRegioes"];
  662 + $temp[] = $c["codigo_tipo_regiao"];
  663 + foreach($temp as $cod){
  664 + $xml .= "
  665 + <DimensionUsage foreignKey='codigo{$cod}' name='codigo_tipo_regiao_{$cod}' source='codigo_tipo_regiao_{$cod}'/>
  666 + <DimensionUsage foreignKey='codigo{$cod}' name='codigo_tipo_regiao_{$cod}_geocod' source='codigo_tipo_regiao_{$cod}_geocod'/>
  667 + ";
  668 + }
426 //inclui as dimensoes filhas 669 //inclui as dimensoes filhas
427 foreach($filhosDaRegiao[$c["codigo_tipo_regiao"]] as $fr){ 670 foreach($filhosDaRegiao[$c["codigo_tipo_regiao"]] as $fr){
428 $xml .= " 671 $xml .= "
429 - <DimensionUsage foreignKey='codigodim' name='codigo_tipo_regiao_".$fr."' source='codigo_tipo_regiao_".$fr."'/>  
430 - <DimensionUsage foreignKey='codigodim' name='codigo_tipo_regiao_".$fr."_geocod' source='codigo_tipo_regiao_".$fr."_geocod'/> 672 + <DimensionUsage foreignKey='codigoreg' name='codigo_tipo_regiao_".$fr."' source='codigo_tipo_regiao_".$fr."'/>
  673 + <DimensionUsage foreignKey='codigoreg' name='codigo_tipo_regiao_".$fr."_geocod' source='codigo_tipo_regiao_".$fr."_geocod'/>
431 "; 674 ";
432 } 675 }
433 676
@@ -454,60 +697,36 @@ if(empty($_GET[&quot;xmlesquema&quot;])){ @@ -454,60 +697,36 @@ if(empty($_GET[&quot;xmlesquema&quot;])){
454 $xml .= " 697 $xml .= "
455 </Cube> 698 </Cube>
456 "; 699 ";
457 -  
458 } 700 }
459 -  
460 - $xml .= '<VirtualCube name="Todas as medidas" >'; 701 + return $xml;
  702 +}
  703 +function cuboTodas(){
  704 + global $VirtualCubeDimension, $VirtualCubeMeasure;
  705 + $xml = '<VirtualCube name="Todas as medidas" >';
461 $VirtualCubeDimension = array_unique($VirtualCubeDimension); 706 $VirtualCubeDimension = array_unique($VirtualCubeDimension);
462 $VirtualCubeMeasure = array_unique($VirtualCubeMeasure); 707 $VirtualCubeMeasure = array_unique($VirtualCubeMeasure);
463 $xml .= implode(" ",$VirtualCubeDimension); 708 $xml .= implode(" ",$VirtualCubeDimension);
464 $xml .= implode(" ",$VirtualCubeMeasure); 709 $xml .= implode(" ",$VirtualCubeMeasure);
465 $xml .= '</VirtualCube>'; 710 $xml .= '</VirtualCube>';
466 - //  
467 - //cubos por regiao  
468 - //  
469 - //$filhosDaRegiao = array();  
470 - //$VirtualCubeDimensionDaRegiao = array();  
471 - //$VirtualCubeMeasureDaRegiao = array();  
472 - 711 + return $xml;
  712 +}
  713 +function cuboRegioes(){
  714 + global $regioes, $VirtualCubeDimensionDaRegiao, $VirtualCubeMeasureDaRegiao, $filhosDaRegiao;
  715 + $xml = "";
473 foreach($regioes as $regiao){ 716 foreach($regioes as $regiao){
474 //inclui os parametros para a regiao de acordo com os filhos que possui 717 //inclui os parametros para a regiao de acordo com os filhos que possui
475 $d = $VirtualCubeDimensionDaRegiao[$regiao["codigo_tipo_regiao"]]; 718 $d = $VirtualCubeDimensionDaRegiao[$regiao["codigo_tipo_regiao"]];
476 - $m = $VirtualCubeMeasureDaRegiao[$regiao["codigo_tipo_regiao"]]; 719 + $mm = $VirtualCubeMeasureDaRegiao[$regiao["codigo_tipo_regiao"]];
477 foreach($filhosDaRegiao[$regiao["codigo_tipo_regiao"]] as $f){ 720 foreach($filhosDaRegiao[$regiao["codigo_tipo_regiao"]] as $f){
478 - //$d = array_merge($d,$VirtualCubeDimensionDaRegiao[$f]);  
479 - $m = array_merge($m,$VirtualCubeMeasureDaRegiao[$f]); 721 + $mm = array_merge($mm,$VirtualCubeMeasureDaRegiao[$f]);
480 } 722 }
481 - if(count(array_unique($m)) > 0){ 723 + if(count(array_unique($mm)) > 0){
482 $xml .= '<VirtualCube name="Regi&amp;atilde;o: '.converte($regiao["nome_tipo_regiao"]).'" >'; 724 $xml .= '<VirtualCube name="Regi&amp;atilde;o: '.converte($regiao["nome_tipo_regiao"]).'" >';
483 $xml .= implode(" ",array_unique($d)); 725 $xml .= implode(" ",array_unique($d));
484 - $xml .= implode(" ",array_unique($m)); 726 + $xml .= implode(" ",array_unique($mm));
485 $xml .= '</VirtualCube>'; 727 $xml .= '</VirtualCube>';
486 } 728 }
487 } 729 }
488 - $xml .= "</Schema>";  
489 - error_reporting(0);  
490 - ob_end_clean();  
491 -  
492 - if($_GET["output"] == "xml"){  
493 - echo header("Content-type: application/xml");  
494 - echo $xml;exit;  
495 - }  
496 - gravaDados(array($xml),$arquivoXmlEsquema);  
497 -}  
498 -if($_GET["output"] == "xml"){  
499 - echo header("Content-type: application/xml");  
500 - header("Location:".$_GET["xmlesquema"]);  
501 -}  
502 -else{  
503 - header("Location:".$saikuUrl."/?nomeConexao=".$nomeConexao."&locaplic=".$_GET["locaplic"]."&g_sid=".$_GET["g_sid"]."&mapext=".$_GET["mapext"]."&origem=".$_GET["origem"]);  
504 -}  
505 -function converte($texto){  
506 - $texto = str_replace("&","&amp;",htmlentities($texto));  
507 - //$texto = htmlentities($texto);  
508 - //$texto = mb_convert_encoding($texto, 'ISO-8859-1', "auto");  
509 - //$texto = utf8_encode($texto);  
510 - //$textox = mb_convert_encoding($texto, "UTF-8", mb_detect_encoding($texto, "UTF-8, ISO-8859-1, ISO-8859-15", true));  
511 - return $texto; 730 + return $xml;
512 } 731 }
513 ?> 732 ?>
ms_criamapa.php
@@ -214,7 +214,7 @@ Cria os diretorios tempor&amp;aacute;rios que ser&amp;atilde;o utilizados pelo i3geo par @@ -214,7 +214,7 @@ Cria os diretorios tempor&amp;aacute;rios que ser&amp;atilde;o utilizados pelo i3geo par
214 $diretorios = criaDirMapa($dir_tmp,$cachedir); 214 $diretorios = criaDirMapa($dir_tmp,$cachedir);
215 if(!$diretorios) 215 if(!$diretorios)
216 {echo "<p style=color:red ><b>N&atilde;o foi poss&iacute;vel criar os diret&oacute;rios tempor&aacute;rios em $dir_tmp.</b></p>";exit;} 216 {echo "<p style=color:red ><b>N&atilde;o foi poss&iacute;vel criar os diret&oacute;rios tempor&aacute;rios em $dir_tmp.</b></p>";exit;}
217 -criaIndex(); 217 +criaIndex($dir_tmp,$diretorios);
218 $tmpfname = $diretorios[0]; 218 $tmpfname = $diretorios[0];
219 $protocolo = explode("/",$_SERVER['SERVER_PROTOCOL']); 219 $protocolo = explode("/",$_SERVER['SERVER_PROTOCOL']);
220 /* 220 /*
@@ -329,7 +329,6 @@ $_SESSION[&quot;contadorsalva&quot;] = 0;//essa variavel e utilizada pela ferramenta telar @@ -329,7 +329,6 @@ $_SESSION[&quot;contadorsalva&quot;] = 0;//essa variavel e utilizada pela ferramenta telar
329 $_SESSION["i3georendermode"] = $i3georendermode_; 329 $_SESSION["i3georendermode"] = $i3georendermode_;
330 $_SESSION["saikuUrl"] = $saikuUrl_; 330 $_SESSION["saikuUrl"] = $saikuUrl_;
331 331
332 -  
333 // 332 //
334 //pega todas as vari&aacute;veis da sess&atilde;o, mesmo as que foram definidas anteriormente 333 //pega todas as vari&aacute;veis da sess&atilde;o, mesmo as que foram definidas anteriormente
335 // 334 //
@@ -450,6 +449,7 @@ else{ @@ -450,6 +449,7 @@ else{
450 //algumas aplicacoes usam essa variavel (SAIKU) 449 //algumas aplicacoes usam essa variavel (SAIKU)
451 $mapext = $ext->minx." ".$ext->miny." ".$ext->maxx." ".$ext->maxy; 450 $mapext = $ext->minx." ".$ext->miny." ".$ext->maxx." ".$ext->maxy;
452 } 451 }
  452 +
453 /* 453 /*
454 Configura os endere&ccedil;os corretos no mapfile. 454 Configura os endere&ccedil;os corretos no mapfile.
455 455
@@ -490,20 +490,20 @@ if(isset($poligonos)) @@ -490,20 +490,20 @@ if(isset($poligonos))
490 if(isset($url_wms)) 490 if(isset($url_wms))
491 {incluiTemaWms();} 491 {incluiTemaWms();}
492 492
493 -adaptaLayers(); 493 +adaptaLayers($tmpfname,$versao);
494 494
495 if (file_exists($locaplic."/pacotes/geoip") && file_exists($locaplic."/pacotes/geoip/GeoLiteCity.dat")) 495 if (file_exists($locaplic."/pacotes/geoip") && file_exists($locaplic."/pacotes/geoip/GeoLiteCity.dat"))
496 {require_once(dirname(__FILE__)."/ms_registraip.php");} 496 {require_once(dirname(__FILE__)."/ms_registraip.php");}
497 //echo $tmpfname;exit; 497 //echo $tmpfname;exit;
498 if ($interface != "mashup") 498 if ($interface != "mashup")
499 {abreInterface($interface,$caminho,$tempo);} 499 {abreInterface($interface,$caminho,$tempo);}
  500 +
500 /* 501 /*
501 Adapta os dados de cada layer. 502 Adapta os dados de cada layer.
502 503
503 Faz altera&ccedil;&otilde;es em cada layer caso sejam necess&aacute;rias. 504 Faz altera&ccedil;&otilde;es em cada layer caso sejam necess&aacute;rias.
504 */ 505 */
505 -function adaptaLayers(){  
506 - global $tmpfname,$versao; 506 +function adaptaLayers($tmpfname,$versao){
507 $mapa = ms_newMapObj($tmpfname); 507 $mapa = ms_newMapObj($tmpfname);
508 $path = $mapa->shapepath; 508 $path = $mapa->shapepath;
509 $numlayers = $mapa->numlayers; 509 $numlayers = $mapa->numlayers;
@@ -749,11 +749,10 @@ function incluiTemasIniciais(){ @@ -749,11 +749,10 @@ function incluiTemasIniciais(){
749 erroCriacao(); 749 erroCriacao();
750 } 750 }
751 /* 751 /*
752 -Cria os arquivos vazios index.htm e index.html nos diretrios tempor&aacute;rios 752 +Cria os arquivos vazios index.htm e index.html nos diretorios tempor&aacute;rios
753 */ 753 */
754 -function criaIndex() 754 +function criaIndex($dir_tmp,$diretorios)
755 { 755 {
756 - global $dir_tmp,$diretorios;  
757 if (!file_exists($dir_tmp."/index.htm")) 756 if (!file_exists($dir_tmp."/index.htm"))
758 { 757 {
759 $f = fopen($dir_tmp."/index.htm","x"); 758 $f = fopen($dir_tmp."/index.htm","x");
@@ -771,7 +770,7 @@ function criaIndex() @@ -771,7 +770,7 @@ function criaIndex()
771 } 770 }
772 if (!file_exists($dir_tmp."/index.htm")) 771 if (!file_exists($dir_tmp."/index.htm"))
773 { 772 {
774 - echo "Erro. N&atilde;o foi poss&iacute;vel gravar no diretrio tempor&aacute;rio"; 773 + echo "Erro. N&atilde;o foi poss&iacute;vel gravar no diret&oacute;rio tempor&aacute;rio";
775 exit; 774 exit;
776 } 775 }
777 } 776 }