From 113e9551954ffa64f6e51bb2cd470b15142336cd Mon Sep 17 00:00:00 2001 From: Edmar Moretti Date: Thu, 19 Dec 2013 02:33:35 +0000 Subject: [PATCH] --- admin/admin.db | Bin 263168 -> 0 bytes admin/php/classe_metaestat.php | 39 ++++++++++++++++++++++++--------------- ferramentas/saiku/esquemaxml.php | 50 +++++++++++++++++++++++++++----------------------- 3 files changed, 51 insertions(+), 38 deletions(-) diff --git a/admin/admin.db b/admin/admin.db index 8e7c6b8..382a354 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 357d9f6..27a28ea 100755 --- a/admin/php/classe_metaestat.php +++ b/admin/php/classe_metaestat.php @@ -514,32 +514,39 @@ class Metaestat{ * @return array lista de ids de regioes sequenciais do filho ate chegar ao pai indicado */ function regiaoFilhaAoPai($codigo_tipo_regiao,$codigo_tipo_regiao_pai=""){ - //echo $codigo_tipo_regiao." ".$codigo_tipo_regiao_pai; $pais = $this->listaAgregaRegiao($codigo_tipo_regiao); $caminho = array($codigo_tipo_regiao); $colunas = array(); if(count($pais) == 0){ return $caminho; } - $achou = false; foreach($pais as $pai){ $caminho[] = $pai["codigo_tipo_regiao_pai"]; $colunas[$pai["codigo_tipo_regiao"]] = $pai; if($pai["codigo_tipo_regiao_pai"] == $codigo_tipo_regiao_pai){ - $achou = true; return array("caminho"=>$caminho,"colunas"=>$colunas); } - $testaPai = $this->regiaoFilhaAoPai($pai["codigo_tipo_regiao_pai"],$codigo_tipo_regiao_pai); - if(count($testaPai) == 0 && $codigo_tipo_regiao_pai == ""){ - return array("caminho"=>$caminho,"colunas"=>$colunas); - } - if(count($testaPai) == 0){ - $caminho = array(); - $colunas = array(); - } } - } + function hierarquiaPath($node){ + $query="select codigo_tipo_regiao as parent from ".$this->esquemaadmin."i3geoestat_agregaregiao WHERE codigo_tipo_regiao_pai = $node"; + $result=$this->execSQL($query,"",false); + $row = $result[0]; + // save the path in this array + $path = array(); + // only continue if this $node isn't the root node + // (that's the node with no parent) + if ($row['parent']!='') { + // the last part of the path to $node, is the name + // of the parent of $node + $path[] = $row['parent']; + // we should add the path to the parent of this node + // to the path + $path = array_merge($this->hierarquiaPath($row['parent']), $path); + } + // return the path + return $path; + } /** * Cria um arquivo mapfile para uma medida de variavel * Inclui no arquivo o layer de acesso aos dados @@ -2018,7 +2025,7 @@ class Metaestat{ * @param codigo da regiao */ function listaHierarquiaRegioes($codigoregiaopai=""){ - $sql = "select i3geoestat_agregaregiao.colunaligacao_regiaopai,i3geoestat_tipo_regiao.codigo_tipo_regiao,i3geoestat_tipo_regiao.nome_tipo_regiao from ".$this->esquemaadmin."i3geoestat_tipo_regiao "; + $sql = "select i3geoestat_agregaregiao.id_agregaregiao,i3geoestat_agregaregiao.colunaligacao_regiaopai,i3geoestat_tipo_regiao.codigo_tipo_regiao,i3geoestat_tipo_regiao.nome_tipo_regiao from ".$this->esquemaadmin."i3geoestat_tipo_regiao "; $sql .= "LEFT JOIN ".$this->esquemaadmin."i3geoestat_agregaregiao "; $sql .= "ON i3geoestat_tipo_regiao.codigo_tipo_regiao = i3geoestat_agregaregiao.codigo_tipo_regiao "; if($codigoregiaopai != ""){ @@ -2083,13 +2090,15 @@ class Metaestat{ * @param codigo do tipo de regiao * @param id da agregacao */ - function listaAgregaRegiao($codigo_tipo_regiao,$id_agregaregiao=""){ + function listaAgregaRegiao($codigo_tipo_regiao="",$id_agregaregiao=""){ $sql = "select * from ".$this->esquemaadmin."i3geoestat_agregaregiao "; if($id_agregaregiao != ""){ $sql .= "WHERE id_agregaregiao = $id_agregaregiao "; } else{ - $sql .= "WHERE codigo_tipo_regiao = $codigo_tipo_regiao"; + if($codigo_tipo_regiao != ""){ + $sql .= "WHERE codigo_tipo_regiao = $codigo_tipo_regiao"; + } } $sql .= " ORDER BY colunaligacao_regiaopai"; //echo $sql;exit; diff --git a/ferramentas/saiku/esquemaxml.php b/ferramentas/saiku/esquemaxml.php index 7563558..549322e 100644 --- a/ferramentas/saiku/esquemaxml.php +++ b/ferramentas/saiku/esquemaxml.php @@ -3,17 +3,12 @@ include(dirname(__FILE__)."/../../admin/php/classe_metaestat.php"); $m = new Metaestat(); $regioes = $m->listaTipoRegiao(); -$hierarquia = array(); -//hierarquia de cada regiao -foreach($regioes as $regiao){ - $hregioes = $m->listaHierarquiaRegioes($regiao["codigo_tipo_regiao"]); - $hierarquias[$regiao["codigo_tipo_regiao"]] = $hregioes; -} -echo "
";var_dump($hierarquias);exit;
 $xml = "";
 foreach($regioes as $regiao){
+	$caminho = $m->hierarquiaPath($regiao["codigo_tipo_regiao"]);
+	//
 	//verifica se a regiao tem hierarquia
-	if(count($hierarquias[$regiao["codigo_tipo_regiao"]]) == 0){
+	if(empty($caminho)){
 		$xml .= "
 			
 				
@@ -24,27 +19,36 @@ foreach($regioes as $regiao){
 		";
 	}
 	else{
-		$caminho = $m->regiaoFilhaAoPai($regiao["codigo_tipo_regiao"]);
-		//echo "
";var_dump($caminho);
 		$xml .= "
 			
 				
 		";
 		//cria uma view juntando as tabelas da hierarquia de regioes
-		$ri = $regioes[$caminho[0]];
-		$sql = "SELECT * FROM {$ri['esquemadb']}.{$ri['tabela']} AS regiao ";
-		$nc = count($caminho) - 1;
-		for($i=0;$i<$nc;$i++){
-			$r = $regioes[$caminho[$i]];
-			$sql .= "INNER JOIN {$r['esquemadb']}.{$r['tabela']}
-				AS j$i ON j$i.{$r['identificador']}::text = regiao.{$regiao['identificador']}::text
-			";
+		$n = count($caminho);
+		$r = $m->listaTipoRegiao($caminho[0]);
+		$colunas = array();
+		$sql = "SELECT __COLUNAS__ FROM {$r['esquemadb']}.{$r['tabela']} AS regiao ";
+		$colunas[] = "regiao.".$r['identificador'];
+		$colunas[] = "regiao.".$r['colunanomeregiao'];
+		$tabelaAnt = "regiao";
+		if($n > 1){
+			for($i=1;$i<$n;$i++){
+				$r = $m->listaTipoRegiao($caminho[$i]);
+				$colunas[] = "j".$i.".".$r['colunanomeregiao'];
+				$colunas[] = "j".$i.".".$r['identificador'];
+				$sql .= "INNER JOIN {$r['esquemadb']}.{$r['tabela']}
+					AS j$i ON j$i.{$r['identificador']}::text = {$tabelaAnt}.{$r['identificador']}::text
+				";
+				$tabelaAnt = "j".$i;
+			}
 		}
-		$h = $hierarquias[$caminho[0]];
-		$h = $h[0];
 		$sql .= "INNER JOIN {$regiao['esquemadb']}.{$regiao['tabela']}
-			AS j ON j.{$regiao['identificador']}::text = regiao.{$h['colunaligacao_regiaopai']}::text
-		";
+					AS j$i ON j$i.{$regiao['identificador']}::text = {$tabelaAnt}.{$regiao['identificador']}::text
+				";
+		$colunas[] = "j".$i.".".$regiao['colunanomeregiao'];
+		$colunas[] = "j".$i.".".$regiao['identificador'];
+		$colunas = implode($colunas,",");
+		$sql = str_replace("__COLUNAS__",$colunas,$sql);
 		$xml .= "
 				$sql
 		";
@@ -94,4 +98,4 @@ function converte($texto)
 $texto = str_replace("&","&",htmlentities($texto));
 	return $texto;
 }
-?>
\ No newline at end of file
+?>
--
libgit2 0.21.2