Commit 865209db0167fb21040be5c9d18591cb6b1608e4

Authored by Edmar Moretti
1 parent 1b382d01

Corrige a geração de KML quando determinados campos do banco de admnistração conterem valores nulos

Showing 1 changed file with 135 additions and 102 deletions   Show diff stats
@@ -37,10 +37,6 @@ Arquivo: i3geo/kml.php @@ -37,10 +37,6 @@ Arquivo: i3geo/kml.php
37 Parametro: 37 Parametro:
38 38
39 perfil - perfis separados por espaços. Ao usar um perfil, serão mostrados apenas os temas disponíveis para o perfil indicado. 39 perfil - perfis separados por espaços. Ao usar um perfil, serão mostrados apenas os temas disponíveis para o perfil indicado.
40 -  
41 -idioma - idioma utilizado nos nomes dos temas  
42 -  
43 -download {boolean} - indica se o arquivo deve ser enviado como download (default = true)  
44 */ 40 */
45 error_reporting(0); 41 error_reporting(0);
46 include_once ("classesphp/carrega_ext.php"); 42 include_once ("classesphp/carrega_ext.php");
@@ -52,9 +48,11 @@ if($convUTF == true) @@ -52,9 +48,11 @@ if($convUTF == true)
52 {$encoding = "UTF-8";} 48 {$encoding = "UTF-8";}
53 if(!isset($idioma)) 49 if(!isset($idioma))
54 {$idioma = "pt";} 50 {$idioma = "pt";}
55 -$kml = "";  
56 -$kml .= '<?xml version="1.0" encoding="'.$encoding.'"?>';  
57 -$kml .= "<kml xmlns='http://earth.google.com/kml/2.2'>\n"; 51 +
  52 +echo header("Content-type: application/xml");
  53 +echo '<?xml version="1.0" encoding="'.$encoding.'"?>';
  54 +echo "<kml xmlns='http://earth.google.com/kml/2.2'>\n";
  55 +
58 // 56 //
59 //pega os endereços para compor a url de chamada do gerador de web services 57 //pega os endereços para compor a url de chamada do gerador de web services
60 //ogc.php 58 //ogc.php
@@ -69,44 +67,70 @@ if(!isset($perfil)){$perfil = &quot;&quot;;} @@ -69,44 +67,70 @@ if(!isset($perfil)){$perfil = &quot;&quot;;}
69 // 67 //
70 //monta o xml 68 //monta o xml
71 // 69 //
72 -$kml .= "<Document><name>Menu i3geo</name><open>0</open><description></description><visibility>0</visibility>\n";  
73 -include("admin/php/admin.php");  
74 -if($idioma == "pt")  
75 -{$coluna = "nome_menu";}  
76 -else  
77 -{$coluna = $idioma;}  
78 -$menus = pegaDados("SELECT publicado_menu,perfil_menu,aberto,desc_menu,id_menu,$coluna as nome_menu from i3geoadmin_menus where lower(publicado_menu) != 'nao' or publicado_menu isnull order by nome_menu ");  
79 -foreach($menus as $menu) 70 +echo "<Document><name>Menu i3geo</name><open>0</open><description></description><visibility>0</visibility>\n";
  71 +//
  72 +//no caso do arquivo com o menu vir de um arquivo XML
  73 +//
  74 +if ($menutemas != "" || is_array($menutemas))
80 { 75 {
81 - $kml .= kml_cabecalho($menu["nome_menu"],$menu["desc_menu"]);  
82 - $id_menu = $menu["id_menu"];  
83 - //raiz  
84 - if($idioma == "pt")  
85 - {$coluna = "nome_tema";} 76 + //
  77 + //para manter a compatibilidade entre as versões do i3geo
  78 + //é necessário verificar se a variável $menutemas é um array ou não
  79 + //
  80 + if(is_array($menutemas))
  81 + {
  82 + foreach($menutemas as $m)
  83 + {$menus[] = $m["arquivo"];}
  84 + }
86 else 85 else
87 - {$coluna = $idioma;}  
88 - $sql = "select id_raiz,i3geoadmin_raiz.id_tema,$coluna as nome_tema,tipoa_tema,codigo_tema,kmz_tema FROM i3geoadmin_raiz LEFT JOIN i3geoadmin_temas ON i3geoadmin_temas.id_tema = i3geoadmin_raiz.id_tema where (lower(i3geoadmin_temas.tipoa_tema) != 'wms' or i3geoadmin_temas.tipoa_tema isnull) and (lower(i3geoadmin_temas.kml_tema) != 'nao' or i3geoadmin_temas.kml_tema isnull) and i3geoadmin_temas.tipoa_tema != 'WMS' and i3geoadmin_temas.kml_tema != 'nao' and i3geoadmin_raiz.id_menu='$id_menu' and i3geoadmin_raiz.nivel = 0 and i3geoadmin_raiz.id_nivel = 0 order by ordem";  
89 - $temas = pegaDados($sql);  
90 - if(count($temas) > 0) 86 + $menu[] = $menutemas;
  87 + foreach ($menus as $menu)
91 { 88 {
92 - foreach ($temas as $tema)  
93 - {kml_tema_bd($tema);} 89 + $xml = simplexml_load_file($menu);
  90 + //raiz
  91 + foreach($xml->TEMA as $tema)
  92 + {kml_tema($tema);}
  93 + foreach($xml->GRUPO as $grupo)
  94 + {
  95 + $nome = kml_converteTexto($grupo->GTIPO);
  96 + $desc = kml_converteTexto($grupo->DTIPO);
  97 + kml_cabecalho($nome,$desc);
  98 + foreach($grupo->TEMA as $tema)
  99 + {kml_tema($tema);}
  100 + foreach($grupo->SGRUPO as $sgrupo)
  101 + {
  102 + $nome = kml_converteTexto($sgrupo->SDTIPO);
  103 + kml_folder($nome);
  104 + foreach($sgrupo->TEMA as $tema)
  105 + {kml_tema($tema);}
  106 + echo "</Folder>\n";
  107 + }
  108 + echo "</Folder>\n";
  109 + }
94 } 110 }
  111 +}
  112 +//
  113 +//no caso do menu vir do sistema de administração
  114 +//
  115 +//error_reporting(E_ALL);
  116 +if(!isset($menutemas) || $menutemas == "")
  117 +{
  118 + include("admin/php/admin.php");
95 if($idioma == "pt") 119 if($idioma == "pt")
96 - {$coluna = "nome_grupo";} 120 + {$coluna = "nome_menu";}
97 else 121 else
98 {$coluna = $idioma;} 122 {$coluna = $idioma;}
99 - $grupos = pegaDados("SELECT $coluna as nome_grupo,n1.id_n1,n1.id_grupo,gr.desc_grupo from i3geoadmin_n1 as n1,i3geoadmin_grupos as gr where (lower(n1.publicado) != 'nao' or n1.publicado isnull) and n1.id_menu = '$id_menu' and n1.id_grupo = gr.id_grupo order by gr.nome_grupo");  
100 - foreach($grupos as $grupo) 123 + $menus = pegaDados("SELECT publicado_menu,perfil_menu,aberto,desc_menu,id_menu,$coluna as nome_menu from i3geoadmin_menus where lower(publicado_menu) != 'nao' or publicado_menu isnull order by nome_menu ");
  124 + foreach($menus as $menu)
101 { 125 {
102 - kml_cabecalho($grupo["nome_grupo"],$grupo["desc_grupo"]);  
103 - $id_grupo = $grupo["id_grupo"]; 126 + kml_cabecalho($menu["nome_menu"],$menu["desc_menu"]);
  127 + $id_menu = $menu["id_menu"];
104 //raiz 128 //raiz
105 if($idioma == "pt") 129 if($idioma == "pt")
106 {$coluna = "nome_tema";} 130 {$coluna = "nome_tema";}
107 else 131 else
108 {$coluna = $idioma;} 132 {$coluna = $idioma;}
109 - $sql = "select id_raiz,i3geoadmin_raiz.id_tema,$coluna as nome_tema,tipoa_tema,kml_tema,kmz_tema,codigo_tema FROM i3geoadmin_raiz LEFT JOIN i3geoadmin_temas ON i3geoadmin_temas.id_tema = i3geoadmin_raiz.id_tema where lower(i3geoadmin_temas.tipoa_tema) != 'wms' and lower(i3geoadmin_temas.kml_tema) != 'nao' and i3geoadmin_temas.tipoa_tema != 'WMS' and i3geoadmin_temas.kml_tema != 'nao' and i3geoadmin_raiz.id_menu='$id_menu' and i3geoadmin_raiz.nivel = 1 and i3geoadmin_raiz.id_nivel = ".$grupo["id_n1"]." order by ordem"; 133 + $sql = "select id_raiz,i3geoadmin_raiz.id_tema,$coluna as nome_tema,tipoa_tema,codigo_tema,kmz_tema FROM i3geoadmin_raiz LEFT JOIN i3geoadmin_temas ON i3geoadmin_temas.id_tema = i3geoadmin_raiz.id_tema where (lower(i3geoadmin_temas.tipoa_tema) != 'wms' or i3geoadmin_temas.tipoa_tema isnull) and (lower(i3geoadmin_temas.kml_tema) != 'nao' or i3geoadmin_temas.kml_tema isnull) and i3geoadmin_temas.tipoa_tema != 'WMS' and i3geoadmin_temas.kml_tema != 'nao' and i3geoadmin_raiz.id_menu='$id_menu' and i3geoadmin_raiz.nivel = 0 and i3geoadmin_raiz.id_nivel = 0 order by ordem";
110 $temas = pegaDados($sql); 134 $temas = pegaDados($sql);
111 if(count($temas) > 0) 135 if(count($temas) > 0)
112 { 136 {
@@ -114,53 +138,66 @@ foreach($menus as $menu) @@ -114,53 +138,66 @@ foreach($menus as $menu)
114 {kml_tema_bd($tema);} 138 {kml_tema_bd($tema);}
115 } 139 }
116 if($idioma == "pt") 140 if($idioma == "pt")
117 - {$coluna = "nome_subgrupo";}  
118 - else  
119 - {$coluna = $idioma;}  
120 - $sql = "select s.$coluna as nome_subgrupo,n2.id_n2 from i3geoadmin_n2 as n2,i3geoadmin_n1 as n1, i3geoadmin_subgrupos as s ";  
121 - $sql .= "where n1.id_grupo = '$id_grupo' and n2.id_subgrupo = s.id_subgrupo ";  
122 - $sql .= "and n2.id_n1 = n1.id_n1 ";  
123 - $sql .= "and n1.n1_perfil = '' and n2.n2_perfil = '' ";  
124 - $sql .= "and (lower(n2.publicado) != 'nao' or n2.publicado isnull) ";  
125 - $sql .= "order by s.nome_subgrupo";  
126 - $subgrupos = pegaDados($sql);  
127 - if($idioma == "pt")  
128 - {$coluna = "nome_tema";} 141 + {$coluna = "nome_grupo";}
129 else 142 else
130 {$coluna = $idioma;} 143 {$coluna = $idioma;}
131 - foreach ($subgrupos as $subgrupo) 144 + $grupos = pegaDados("SELECT $coluna as nome_grupo,n1.id_n1,n1.id_grupo,gr.desc_grupo from i3geoadmin_n1 as n1,i3geoadmin_grupos as gr where (lower(n1.publicado) != 'nao' or n1.publicado isnull) and n1.id_menu = '$id_menu' and n1.id_grupo = gr.id_grupo order by gr.nome_grupo");
  145 + foreach($grupos as $grupo)
132 { 146 {
133 - $id_n2 = $subgrupo["id_n2"];  
134 - $sql = "select t.codigo_tema,t.$coluna as nome_tema,t.link_tema, t.desc_tema, t.kmz_tema from i3geoadmin_n3 as n3,i3geoadmin_temas as t where ";  
135 - $sql .= "n3.id_n2='$id_n2' ";  
136 - $sql .= "and n3.id_tema = t.id_tema ";  
137 - $sql .= "and n3_perfil = '' ";  
138 - $sql .= "and lower(t.kml_tema) != 'nao' ";  
139 - $sql .= "and lower(t.tipoa_tema) != 'wms'";  
140 - $sql .= "and (lower(n3.publicado) != 'nao' or n3.publicado isnull) ";  
141 - $temas = pegadados($sql); 147 + kml_cabecalho($grupo["nome_grupo"],$grupo["desc_grupo"]);
  148 + $id_grupo = $grupo["id_grupo"];
  149 + //raiz
  150 + if($idioma == "pt")
  151 + {$coluna = "nome_tema";}
  152 + else
  153 + {$coluna = $idioma;}
  154 + $sql = "select id_raiz,i3geoadmin_raiz.id_tema,$coluna as nome_tema,tipoa_tema,kml_tema,kmz_tema,codigo_tema FROM i3geoadmin_raiz LEFT JOIN i3geoadmin_temas ON i3geoadmin_temas.id_tema = i3geoadmin_raiz.id_tema where lower(i3geoadmin_temas.tipoa_tema) != 'wms' and lower(i3geoadmin_temas.kml_tema) != 'nao' and i3geoadmin_temas.tipoa_tema != 'WMS' and i3geoadmin_temas.kml_tema != 'nao' and i3geoadmin_raiz.id_menu='$id_menu' and i3geoadmin_raiz.nivel = 1 and i3geoadmin_raiz.id_nivel = ".$grupo["id_n1"]." order by ordem";
  155 + $temas = pegaDados($sql);
142 if(count($temas) > 0) 156 if(count($temas) > 0)
143 { 157 {
144 - kml_folder($subgrupo["nome_subgrupo"]);  
145 foreach ($temas as $tema) 158 foreach ($temas as $tema)
146 {kml_tema_bd($tema);} 159 {kml_tema_bd($tema);}
147 - $kml .= "</Folder>\n";  
148 } 160 }
  161 + if($idioma == "pt")
  162 + {$coluna = "nome_subgrupo";}
  163 + else
  164 + {$coluna = $idioma;}
  165 + $sql = "select s.$coluna as nome_subgrupo,n2.id_n2 from i3geoadmin_n2 as n2,i3geoadmin_n1 as n1, i3geoadmin_subgrupos as s ";
  166 + $sql .= "where n1.id_grupo = '$id_grupo' and n2.id_subgrupo = s.id_subgrupo ";
  167 + $sql .= "and n2.id_n1 = n1.id_n1 ";
  168 + $sql .= "and (n1.n1_perfil = '' or n1.n1_perfil isnull) and (n2.n2_perfil = '' or n2.n2_perfil isnull) ";
  169 + $sql .= "and (lower(n2.publicado) != 'nao' or n2.publicado isnull) ";
  170 + $sql .= "order by s.nome_subgrupo";
  171 + $subgrupos = pegaDados($sql);
  172 + if($idioma == "pt")
  173 + {$coluna = "nome_tema";}
  174 + else
  175 + {$coluna = $idioma;}
  176 + foreach ($subgrupos as $subgrupo)
  177 + {
  178 + $id_n2 = $subgrupo["id_n2"];
  179 + $sql = "select t.codigo_tema,t.$coluna as nome_tema,t.link_tema, t.desc_tema, t.kmz_tema from i3geoadmin_n3 as n3,i3geoadmin_temas as t where ";
  180 + $sql .= "n3.id_n2='$id_n2' ";
  181 + $sql .= "and n3.id_tema = t.id_tema ";
  182 + $sql .= "and (n3_perfil = '' or n3_perfil isnull) ";
  183 + $sql .= "and (lower(t.kml_tema) != 'nao' or t.kml_tema isnull)";
  184 + $sql .= "and (lower(t.tipoa_tema) != 'wms' or t.tipoa_tema isnull)";
  185 + $sql .= "and (lower(n3.publicado) != 'nao' or n3.publicado isnull) ";
  186 + $temas = pegadados($sql);
  187 + kml_folder($subgrupo["nome_subgrupo"]);
  188 + if(count($temas) > 0)
  189 + {
  190 + foreach ($temas as $tema)
  191 + {kml_tema_bd($tema);}
  192 + }
  193 + echo "</Folder>\n";
  194 + }
  195 + echo "</Folder>\n";
149 } 196 }
150 - $kml .= "</Folder>\n"; 197 + echo "</Folder>\n";
151 } 198 }
152 - $kml .= "</Folder>\n";  
153 -}  
154 -$kml .= "</Document></kml>\n";  
155 -  
156 -if(!isset($download) || $download != "false")  
157 -{  
158 - header("Content-type: application/kml");  
159 - header('Content-Disposition: attachment; filename="menui3Geo.kml"');  
160 } 199 }
161 -else  
162 -{header("Content-type: application/xml");}  
163 -echo $kml; 200 +echo "</Document></kml>\n";
164 function kml_tema_bd($tema) 201 function kml_tema_bd($tema)
165 { 202 {
166 global $urli3geo; 203 global $urli3geo;
@@ -192,19 +229,17 @@ function kml_tema_bd($tema) @@ -192,19 +229,17 @@ function kml_tema_bd($tema)
192 } 229 }
193 function kml_cabecalho($nome,$desc) 230 function kml_cabecalho($nome,$desc)
194 { 231 {
195 - global $kml;  
196 - $kml .= "<Folder>\n";  
197 - $kml .= " <name>".str_replace("&","&amp;",kml_converteTexto($nome))."</name>\n";  
198 - $kml .= " <description>".str_replace("&","&amp;",kml_converteTexto($desc))."</description>\n";  
199 - $kml .= " <open>0</open><visibility>0</visibility>\n"; 232 + echo "<Folder>\n";
  233 + echo " <name>".str_replace("&","&amp;",kml_converteTexto($nome))."</name>\n";
  234 + echo " <description>".str_replace("&","&amp;",kml_converteTexto($desc))."</description>\n";
  235 + echo " <open>0</open><visibility>0</visibility>\n";
200 } 236 }
201 function kml_folder($nome) 237 function kml_folder($nome)
202 { 238 {
203 - global $kml;  
204 - $kml .= " <Folder>\n";  
205 - $kml .= " <name>".str_replace("&","&amp;",kml_converteTexto($nome))."</name>\n";  
206 - $kml .= " <description></description>\n";  
207 - $kml .= " <open>0</open><visibility>0</visibility>\n"; 239 + echo " <Folder>\n";
  240 + echo " <name>".str_replace("&","&amp;",kml_converteTexto($nome))."</name>\n";
  241 + echo " <description></description>\n";
  242 + echo " <open>0</open><visibility>0</visibility>\n";
208 } 243 }
209 function kml_tema($tema) 244 function kml_tema($tema)
210 { 245 {
@@ -216,10 +251,10 @@ function kml_tema($tema) @@ -216,10 +251,10 @@ function kml_tema($tema)
216 $tipoa = ""; 251 $tipoa = "";
217 if($tema->TIPOA) 252 if($tema->TIPOA)
218 $tipoa = kml_converteTexto($tema->TIPOA); 253 $tipoa = kml_converteTexto($tema->TIPOA);
219 - //$ogc = sim; 254 + $ogc = sim;
220 if($tema->TID) 255 if($tema->TID)
221 - {$kmli = kml_converteTexto($tema->KML);}  
222 - if(strtolower($kmli) != "nao" && strtolower($tipoa) != "wms") 256 + {$kml = kml_converteTexto($tema->KML);}
  257 + if(strtolower($kml) != "nao" && strtolower($tipoa) != "wms")
223 { 258 {
224 if($fonte != "") 259 if($fonte != "")
225 $fonte = "<a href='$fonte' >Fonte </a>"; 260 $fonte = "<a href='$fonte' >Fonte </a>";
@@ -233,30 +268,28 @@ function kml_tema($tema) @@ -233,30 +268,28 @@ function kml_tema($tema)
233 } 268 }
234 function kml_servico($nome,$fonte,$legenda,$desc,$href) 269 function kml_servico($nome,$fonte,$legenda,$desc,$href)
235 { 270 {
236 - global $kml;  
237 - $kml .= " <GroundOverlay>\n";  
238 - $kml .= " <name>".str_replace("&","&amp;",kml_converteTexto($nome))."</name>\n";  
239 - $kml .= " <description><![CDATA[".$fonte.$legenda.$desc."]]></description>\n";  
240 - $kml .= " <visibility>0</visibility>\n";  
241 - $kml .= " <Icon>\n";  
242 - $kml .= " <viewRefreshMode>onStop</viewRefreshMode>\n";  
243 - $kml .= " <href>$href</href>\n";  
244 - $kml .= " </Icon>\n";  
245 - $kml .= " <LatLonBox><north>9.49014618085</north><south>-39.3925604735</south><east>-29.5851853</east><west>-76.5125927</west></LatLonBox>\n";  
246 - $kml .= " </GroundOverlay>\n"; 271 + echo " <GroundOverlay>\n";
  272 + echo " <name>".str_replace("&","&amp;",kml_converteTexto($nome))."</name>\n";
  273 + echo " <description><![CDATA[".$fonte.$legenda.$desc."]]></description>\n";
  274 + echo " <visibility>0</visibility>\n";
  275 + echo " <Icon>\n";
  276 + echo " <viewRefreshMode>onStop</viewRefreshMode>\n";
  277 + echo " <href>$href</href>\n";
  278 + echo " </Icon>\n";
  279 + echo " <LatLonBox><north>9.49014618085</north><south>-39.3925604735</south><east>-29.5851853</east><west>-76.5125927</west></LatLonBox>\n";
  280 + echo " </GroundOverlay>\n";
247 } 281 }
248 function kml_networklink($nome,$fonte,$legenda,$desc,$href) 282 function kml_networklink($nome,$fonte,$legenda,$desc,$href)
249 { 283 {
250 - global $kml;  
251 - $kml .= " <NetworkLink>\n";  
252 - $kml .= " <name>".str_replace("&","&amp;",kml_converteTexto($nome))."</name>\n";  
253 - $kml .= " <description><![CDATA[".$fonte.$legenda.$desc."]]></description>\n";  
254 - $kml .= " <visibility>0</visibility>\n";  
255 - $kml .= " <Link>\n";  
256 - $kml .= " <viewRefreshMode>never</viewRefreshMode>\n";  
257 - $kml .= " <href>$href</href>\n";  
258 - $kml .= " </Link>\n";  
259 - $kml .= " </NetworkLink>\n"; 284 + echo " <NetworkLink>\n";
  285 + echo " <name>".str_replace("&","&amp;",kml_converteTexto($nome))."</name>\n";
  286 + echo " <description><![CDATA[".$fonte.$legenda.$desc."]]></description>\n";
  287 + echo " <visibility>0</visibility>\n";
  288 + echo " <Link>\n";
  289 + echo " <viewRefreshMode>never</viewRefreshMode>\n";
  290 + echo " <href>$href</href>\n";
  291 + echo " </Link>\n";
  292 + echo " </NetworkLink>\n";
260 } 293 }
261 function kml_converteTexto($i) 294 function kml_converteTexto($i)
262 { 295 {