root / i3geo60 / admin / php / classe_arvore.php @ 6476
History | View | Annotate | Download (30.8 KB)
1 |
<?php
|
---|---|
2 |
/*
|
3 |
Title: classe_arvore.php
|
4 |
|
5 |
Funções para montagem da árvore de temas
|
6 |
|
7 |
Licenca:
|
8 |
|
9 |
GPL2
|
10 |
|
11 |
i3Geo Interface Integrada de Ferramentas de Geoprocessamento para Internet
|
12 |
|
13 |
Direitos Autorais Reservados (c) 2006 Ministério do Meio Ambiente Brasil
|
14 |
Desenvolvedor: Edmar Moretti edmar.moretti@gmail.com
|
15 |
|
16 |
Este programa é software livre; você pode redistribuí-lo
|
17 |
e/ou modificá-lo sob os termos da Licença Pública Geral
|
18 |
GNU conforme publicada pela Free Software Foundation;
|
19 |
|
20 |
Este programa é distribuído na expectativa de que seja útil,
|
21 |
porém, SEM NENHUMA GARANTIA; nem mesmo a garantia implícita
|
22 |
de COMERCIABILIDADE OU ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA.
|
23 |
Consulte a Licença Pública Geral do GNU para mais detalhes.
|
24 |
Você deve ter recebido uma c?pia da Licença Pública Geral do
|
25 |
GNU junto com este programa; se não, escreva para a
|
26 |
Free Software Foundation, Inc., no endereço
|
27 |
59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
|
28 |
|
29 |
Arquivo:
|
30 |
|
31 |
i3geo/admin/php/classe_arvore.php
|
32 |
*/
|
33 |
/*
|
34 |
Classe: Arvore
|
35 |
|
36 |
Classe utilizada para compor a árvore de temas ou obter dados específicos da árvore.
|
37 |
|
38 |
É utilizada por várias operações do i3Geo, principalmente pela <classe_menutemas>
|
39 |
*/
|
40 |
class Arvore |
41 |
{ |
42 |
//temas com acesso restrito e que nao podem ser acessados pelo usuario que esta logado
|
43 |
public $temassindevidos; |
44 |
protected $locaplic; |
45 |
//subgrupos que tem pelo menos um tema
|
46 |
//public $sql_subgrupos = "select i3geoadmin_subgrupos.nome_subgrupo,i3geoadmin_n2.id_n2,i3geoadmin_n2.publicado,i3geoadmin_n2.n2_perfil from i3geoadmin_n2 LEFT JOIN i3geoadmin_subgrupos ON i3geoadmin_n2.id_subgrupo = i3geoadmin_subgrupos.id_subgrupo ";
|
47 |
//grupos que tem pelo menos um sub-grupo
|
48 |
//public $sql_grupos = "select i3geoadmin_grupos.nome_grupo,id_n1,id_menu,i3geoadmin_n1.publicado,n1_perfil from i3geoadmin_n1 LEFT JOIN i3geoadmin_grupos ON i3geoadmin_n1.id_grupo = i3geoadmin_grupos.id_grupo ";
|
49 |
//nomes de todos os grupos
|
50 |
public $sql_todosgrupos = "select * from i3geoadmin_grupos "; |
51 |
//tipo de filtro
|
52 |
//ogc|download|""
|
53 |
public $filtro; |
54 |
//temas na raiz
|
55 |
//public $sql_temasraiz = "select id_raiz,i3geoadmin_raiz.id_tema,nome_tema,tipoa_tema FROM i3geoadmin_raiz LEFT JOIN i3geoadmin_temas ON i3geoadmin_temas.id_tema = i3geoadmin_raiz.id_tema ";
|
56 |
//todos os temas
|
57 |
//public $sql_temas = "select * from i3geoadmin_temas ";
|
58 |
//temas de um subgrupo
|
59 |
//public $sql_temasSubgrupo = "select i3geoadmin_temas.tipoa_tema, i3geoadmin_temas.codigo_tema,i3geoadmin_temas.tags_tema,i3geoadmin_n3.id_n3,i3geoadmin_temas.nome_tema,i3geoadmin_n3.publicado,i3geoadmin_n3.n3_perfil,i3geoadmin_n3.id_tema,i3geoadmin_temas.download_tema,i3geoadmin_temas.ogc_tema from i3geoadmin_n3 LEFT JOIN i3geoadmin_temas ON i3geoadmin_n3.id_tema = i3geoadmin_temas.id_tema ";
|
60 |
/*
|
61 |
Function: __construct
|
62 |
|
63 |
Cria um objeto Arvore
|
64 |
|
65 |
Parametros:
|
66 |
|
67 |
locaplic {string} - localização do i3geo no sistema de arquivos
|
68 |
|
69 |
idioma {string} - default = "pt"
|
70 |
*/
|
71 |
function __construct($locaplic,$idioma="pt",$filtro="") |
72 |
{ |
73 |
$this->locaplic = $locaplic; |
74 |
$this->filtro = $filtro; |
75 |
$dbh = ""; |
76 |
error_reporting(0); |
77 |
include($locaplic."/admin/php/conexao.php"); |
78 |
$this->esquemaadmin = ""; |
79 |
if(!empty($esquemaadmin)){ |
80 |
$this->esquemaadmin = str_replace(".","",$esquemaadmin)."."; |
81 |
} |
82 |
if(!isset($convUTF)){ |
83 |
$convUTF = true; |
84 |
} |
85 |
$this->convUTF = $convUTF; |
86 |
$this->dbh = $dbh; |
87 |
|
88 |
$this->idioma = $idioma; |
89 |
if($idioma == "pt"){ |
90 |
$coluna = "nome_grupo"; |
91 |
} |
92 |
else{
|
93 |
$coluna = $idioma; |
94 |
} |
95 |
$this->sql_grupos = "select CASE i3geoadmin_grupos.$coluna WHEN '' THEN nome_grupo ELSE i3geoadmin_grupos.$coluna END as nome_grupo,id_n1,id_menu,i3geoadmin_n1.publicado,n1_perfil from ".$this->esquemaadmin."i3geoadmin_n1 LEFT JOIN ".$this->esquemaadmin."i3geoadmin_grupos ON i3geoadmin_n1.id_grupo = i3geoadmin_grupos.id_grupo "; |
96 |
if($filtro === "ogc" || $filtro === "download"){ |
97 |
//esse sql retorna tambem os grupos dos temas que estao na raiz do grupo
|
98 |
$this->sql_grupos = "select DISTINCT * from (select CASE grupos.$coluna WHEN '' THEN nome_grupo ELSE grupos.$coluna END as nome_grupo,gr.id_n1,gr.id_menu,gr.publicado,gr.n1_perfil, 0 as ordem from ".$this->esquemaadmin."i3geoadmin_grupos as grupos, ".$this->esquemaadmin."i3geoadmin_n1 as gr, ".$this->esquemaadmin."i3geoadmin_n2 as sg, ".$this->esquemaadmin."i3geoadmin_n3 as t, ".$this->esquemaadmin."i3geoadmin_temas as temas where gr.id_grupo = grupos.id_grupo AND sg.id_n1 = gr.id_n1 AND t.id_n2 = sg.id_n2 AND t.id_tema = temas.id_tema AND (temas.ogc_tema NOT IN ('NAO','nao') OR temas.download_tema NOT IN ('NAO','nao') ) UNION select c.nome_grupo as nome_grupo,a.id_nivel as id_n1,a.id_menu,'SIM' as publicado,a.perfil as n1_perfil, 0 as ordem from ".$this->esquemaadmin."i3geoadmin_raiz as a, ".$this->esquemaadmin."i3geoadmin_temas as b, ".$this->esquemaadmin."i3geoadmin_grupos as c, ".$this->esquemaadmin."i3geoadmin_n1 as d where nivel = 1 AND a.id_tema = b.id_tema AND a.id_nivel = d.id_n1 AND d.id_grupo = c.id_grupo) as s "; |
99 |
} |
100 |
|
101 |
if($idioma == "pt"){ |
102 |
$coluna = "nome_subgrupo"; |
103 |
} |
104 |
else{
|
105 |
$coluna = $idioma; |
106 |
} |
107 |
$this->sql_subgrupos = "select CASE i3geoadmin_subgrupos.$coluna WHEN '' THEN nome_subgrupo ELSE i3geoadmin_subgrupos.$coluna END as nome_subgrupo,i3geoadmin_n2.id_n2,i3geoadmin_n2.publicado,i3geoadmin_n2.n2_perfil from ".$this->esquemaadmin."i3geoadmin_n2 LEFT JOIN ".$this->esquemaadmin."i3geoadmin_subgrupos ON i3geoadmin_n2.id_subgrupo = i3geoadmin_subgrupos.id_subgrupo "; |
108 |
|
109 |
if($idioma == "pt"){ |
110 |
$coluna = "nome_tema"; |
111 |
} |
112 |
else{
|
113 |
$coluna = $idioma; |
114 |
} |
115 |
|
116 |
$this->sql_temasraiz = "select codigo_tema,id_raiz,i3geoadmin_raiz.id_tema,CASE $coluna WHEN '' THEN nome_tema ELSE $coluna END as nome_tema,tipoa_tema,perfil, ogc_tema, link_tema FROM ".$this->esquemaadmin."i3geoadmin_raiz LEFT JOIN ".$this->esquemaadmin."i3geoadmin_temas ON i3geoadmin_temas.id_tema = i3geoadmin_raiz.id_tema "; |
117 |
$this->sql_temasSubgrupo = "select i3geoadmin_temas.tipoa_tema, i3geoadmin_temas.codigo_tema,i3geoadmin_temas.tags_tema,i3geoadmin_n3.id_n3,CASE i3geoadmin_temas.$coluna WHEN '' THEN nome_tema ELSE i3geoadmin_temas.$coluna END as nome_tema,i3geoadmin_n3.publicado,i3geoadmin_n3.n3_perfil,i3geoadmin_n3.id_tema,i3geoadmin_temas.download_tema,i3geoadmin_temas.ogc_tema from ".$this->esquemaadmin."i3geoadmin_n3 LEFT JOIN ".$this->esquemaadmin."i3geoadmin_temas ON i3geoadmin_n3.id_tema = i3geoadmin_temas.id_tema "; |
118 |
|
119 |
//$this->sql_temas = "select kmz_tema,nacessos,id_tema,kml_tema,ogc_tema,download_tema,tags_tema,tipoa_tema,link_tema,desc_tema,$coluna as nome_tema,codigo_tema from i3geoadmin_temas ";
|
120 |
|
121 |
$this->sql_temas = "select kmz_tema,b.soma as nacessos,id_tema,kml_tema,ogc_tema,download_tema,tags_tema,tipoa_tema,link_tema,desc_tema,CASE $coluna WHEN '' THEN nome_tema ELSE $coluna END as nome_tema,codigo_tema from ".$this->esquemaadmin."i3geoadmin_temas as a,(SELECT c.codigo_tema codigo_soma,sum( r.nacessos) as soma FROM ".$this->esquemaadmin."i3geoadmin_temas c LEFT JOIN ".$this->esquemaadmin."i3geoadmin_acessostema r ON (c.codigo_tema = r.codigo_tema) group by c.codigo_tema) as b WHERE a.codigo_tema = b.codigo_soma "; |
122 |
//
|
123 |
//verifica se o ip atual está cadastrado como um dos editores
|
124 |
//editores podem ver as coisas marcadas como não publicado
|
125 |
//no sistema de administração
|
126 |
//
|
127 |
$this->editor = false; |
128 |
$this->editor = $this->verificaOperacaoSessao("admin/php/classe_arvore/editor"); |
129 |
$this->pubsql = " (publicado != 'NAO' or publicado is null) and "; |
130 |
if($this->editor){ |
131 |
$this->pubsql = ""; |
132 |
} |
133 |
if(!function_exists("listaTemasIndevidos")){ |
134 |
include_once(dirname(__FILE__)."/../../classesphp/funcoes_gerais.php"); |
135 |
} |
136 |
$this->temasindevidos = listaTemasIndevidos();
|
137 |
} |
138 |
function __destruct() |
139 |
{ |
140 |
$this->dbh = null; |
141 |
$this->dbhw = null; |
142 |
} |
143 |
/*
|
144 |
Function: validaTemas
|
145 |
|
146 |
Remove de um array os temas que nao sao permitidos ao usuario atualmente logado
|
147 |
*/
|
148 |
function validaTemas($linhas,$id){ |
149 |
$res = array(); |
150 |
foreach($linhas as $l){ |
151 |
if(!in_array($l[$id],$this->temasindevidos)){ |
152 |
array_push($res,$l); |
153 |
} |
154 |
} |
155 |
return $res; |
156 |
} |
157 |
/*
|
158 |
Function: pegaListaDeMenus
|
159 |
|
160 |
Retorna a lista de menus
|
161 |
|
162 |
Parametros:
|
163 |
|
164 |
perfil {string} - considera apenas esse perfil
|
165 |
|
166 |
Return:
|
167 |
|
168 |
{array}
|
169 |
*/
|
170 |
function pegaListaDeMenus($perfil) |
171 |
{ |
172 |
if($this->idioma == "pt"){ |
173 |
$coluna = "nome_menu"; |
174 |
} |
175 |
else{
|
176 |
$coluna = $this->idioma; |
177 |
} |
178 |
if($this->editor == true) |
179 |
{ |
180 |
$perfil = ""; |
181 |
$sql = "SELECT publicado_menu,'' as perfil_menu,aberto,desc_menu,id_menu,CASE $coluna WHEN '' THEN nome_menu ELSE $coluna END as nome_menu from ".$this->esquemaadmin."i3geoadmin_menus order by nome_menu"; |
182 |
} |
183 |
else{
|
184 |
$sql = "SELECT publicado_menu,perfil_menu,aberto,desc_menu,id_menu,CASE $coluna WHEN '' THEN nome_menu ELSE $coluna END as nome_menu from ".$this->esquemaadmin."i3geoadmin_menus where publicado_menu != 'NAO' or publicado_menu is null order by nome_menu"; |
185 |
} |
186 |
$regs = $this->execSQL($sql); |
187 |
$resultado = array(); |
188 |
foreach($regs as $reg){ |
189 |
$a = $reg["perfil_menu"]; |
190 |
$a = str_replace(" ",",",$a); |
191 |
if ($this->verificaOcorrencia($perfil,explode(",",$a))) |
192 |
{ |
193 |
$status = "fechado"; |
194 |
if(strtolower($reg["aberto"]) == "sim") |
195 |
$status = "aberto"; |
196 |
$url = ""; |
197 |
$resultado[] = array("desc"=>$this->converte($reg["desc_menu"]),"publicado"=>$reg["publicado_menu"],"nomemenu"=>$this->converte($reg["nome_menu"]),"idmenu"=>$reg["id_menu"],"arquivo"=>"","status"=>$status,"url"=>$url); |
198 |
} |
199 |
} |
200 |
return $resultado; |
201 |
} |
202 |
/*
|
203 |
Function: procuraTemas
|
204 |
|
205 |
Localiza temas conforme uma palavra de busca
|
206 |
|
207 |
Parametros:
|
208 |
|
209 |
procurar {string} - palavra de busca
|
210 |
|
211 |
perfil {string} - considera apenas esse perfil
|
212 |
|
213 |
Return:
|
214 |
|
215 |
{array}
|
216 |
*/
|
217 |
function procuraTemas ($procurar,$perfil) |
218 |
{ |
219 |
if($procurar != "") |
220 |
{ |
221 |
$procurar = $this->removeAcentos($procurar); |
222 |
} |
223 |
$menus = $this->pegaListaDeMenus($perfil); |
224 |
$resultado = array(); |
225 |
$subgrupo = array(); |
226 |
$final = array(); |
227 |
foreach($menus as $menu) |
228 |
{ |
229 |
$grupos = $this->pegaGruposMenu($menu["idmenu"]); |
230 |
foreach($grupos["grupos"] as $grupo) |
231 |
{ |
232 |
$a = $grupo["n1_perfil"]; |
233 |
$a = str_replace(" ",",",$a); |
234 |
if($this->verificaOcorrencia($perfil,explode(",",$a))) |
235 |
{ |
236 |
$sgrupos = $this->pegaSubgruposGrupo($menu["idmenu"],$grupo["id_n1"]); |
237 |
$temasRaizGrupo = array(); |
238 |
$temasR = $this->pegaTemasRaizGrupo($menu["idmenu"],$grupo["id_n1"]); |
239 |
foreach($temasR as $tema) |
240 |
{ |
241 |
$a = $tema["perfil"]; |
242 |
$a = str_replace(" ",",",$a); |
243 |
if($this->verificaOcorrencia($perfil,explode(",",$a))) |
244 |
{ |
245 |
$t = $this->pegaTema($tema["id_tema"]); |
246 |
$t = $t[0]; |
247 |
$nome = $this->removeAcentos($tema["nome_tema"]); |
248 |
$tags = $this->removeAcentos($tema["tags_tema"]); |
249 |
$tags1 = $this->removeAcentos(mb_convert_encoding($tema["tags_tema"],"ISO-8859-1","UTF-8")); |
250 |
$nome1 = $this->removeAcentos(mb_convert_encoding($tema["nome_tema"],"ISO-8859-1","UTF-8")); |
251 |
$miniatura = "nao"; |
252 |
if(file_exists($this->locaplic."/temas/miniaturas/".$t["codigo_tema"].".map.mini.png")) |
253 |
{ |
254 |
$miniatura = "sim"; |
255 |
} |
256 |
$down = "sim"; |
257 |
if (strtolower($t["download_tema"]) == "nao") |
258 |
{ |
259 |
$down = "nao"; |
260 |
} |
261 |
$texto = array("miniatura"=>$miniatura,"tid"=>$t["codigo_tema"],"nome"=>$this->converte($tema["nome_tema"]),"link"=>$t["link_tema"],"download"=>$down); |
262 |
if($procurar == "") |
263 |
{ |
264 |
$temasRaizGrupo[] = $texto; |
265 |
} |
266 |
else
|
267 |
{ |
268 |
if (stristr($nome,$procurar) || stristr($nome1,$procurar)) |
269 |
{ |
270 |
$temasRaizGrupo[] = $texto; |
271 |
} |
272 |
else
|
273 |
{ |
274 |
if (stristr($tags,$procurar) || stristr($tags1,$procurar)) |
275 |
{ |
276 |
$temasRaizGrupo[] = $texto; |
277 |
} |
278 |
} |
279 |
} |
280 |
} |
281 |
} |
282 |
foreach($sgrupos["subgrupos"] as $sgrupo) |
283 |
{ |
284 |
$a = $sgrupo["n2_perfil"]; |
285 |
$a = str_replace(" ",",",$a); |
286 |
if($this->verificaOcorrencia($perfil,explode(",",$a))) |
287 |
{ |
288 |
$temas = $this->pegaTemasSubGrupo($sgrupo["id_n2"]); |
289 |
foreach ($temas as $tema) |
290 |
{ |
291 |
$a = $tema["n3_perfil"]; |
292 |
$a = str_replace(" ",",",$a); |
293 |
if($this->verificaOcorrencia($perfil,explode(",",$a))) |
294 |
{ |
295 |
$t = $this->pegaTema($tema["id_tema"]); |
296 |
$t = $t[0]; |
297 |
$nome = $this->removeAcentos($tema["nome_tema"]); |
298 |
$tags = $this->removeAcentos($tema["tags_tema"]); |
299 |
$tags1 = $this->removeAcentos(mb_convert_encoding($tema["tags_tema"],"ISO-8859-1","UTF-8")); |
300 |
$nome1 = $this->removeAcentos(mb_convert_encoding($tema["nome_tema"],"ISO-8859-1","UTF-8")); |
301 |
$miniatura = "nao"; |
302 |
if(file_exists($this->locaplic."/temas/miniaturas/".$tema["codigo_tema"].".map.mini.png")) |
303 |
{ |
304 |
$miniatura = "sim"; |
305 |
} |
306 |
$down = "sim"; |
307 |
if (strtolower($t["download_tema"]) == "nao") |
308 |
{ |
309 |
$down = "nao"; |
310 |
} |
311 |
$texto = array("miniatura"=>$miniatura,"tid"=>$tema["codigo_tema"],"nome"=>$this->converte($tema["nome_tema"]),"link"=>$t["link_tema"],"download"=>$down); |
312 |
if($procurar == "") |
313 |
{ |
314 |
$resultado[] = $texto; |
315 |
} |
316 |
else
|
317 |
{ |
318 |
if (stristr($nome,$procurar) || stristr($nome1,$procurar)) |
319 |
{ |
320 |
$resultado[] = $texto; |
321 |
} |
322 |
else
|
323 |
{ |
324 |
if (stristr($tags,$procurar) || stristr($tags1,$procurar)) |
325 |
{ |
326 |
$resultado[] = $texto; |
327 |
} |
328 |
} |
329 |
} |
330 |
} |
331 |
} |
332 |
} |
333 |
if (count($resultado) > 0) |
334 |
{ |
335 |
$subgrupo[] = array("subgrupo"=>$this->converte($sgrupo["nome_subgrupo"]),"temas"=>$resultado); |
336 |
} |
337 |
$resultado = array(); |
338 |
} |
339 |
} |
340 |
if (count($subgrupo) > 0 || count($temasRaizGrupo) > 0) |
341 |
{ |
342 |
$final[] = array("grupo"=>$this->converte($grupo["nome_grupo"]),"temas"=>$temasRaizGrupo,"subgrupos"=>$subgrupo); |
343 |
} |
344 |
$subgrupo = array(); |
345 |
} |
346 |
} |
347 |
return $final; |
348 |
} |
349 |
/*
|
350 |
Function: procuraTemasEstrela
|
351 |
|
352 |
Localiza temas que têm um determinado número (nível) de estrelas
|
353 |
|
354 |
Parametros:
|
355 |
|
356 |
nivel {numeric} - número de estrelas
|
357 |
|
358 |
perfil {string} - considera apenas esse perfil
|
359 |
|
360 |
Return:
|
361 |
|
362 |
{array}
|
363 |
*/
|
364 |
function procuraTemasEstrela($nivel,$fatorestrela,$perfil) |
365 |
{ |
366 |
$menus = $this->pegaListaDeMenus($perfil); |
367 |
$resultado = array(); |
368 |
$subgrupo = array(); |
369 |
$final = array(); |
370 |
foreach($menus as $menu) |
371 |
{ |
372 |
$grupos = $this->pegaGruposMenu($menu["idmenu"]); |
373 |
foreach($grupos["grupos"] as $grupo) |
374 |
{ |
375 |
$a = $grupo["n1_perfil"]; |
376 |
$a = str_replace(" ",",",$a); |
377 |
if($this->verificaOcorrencia($perfil,explode(",",$a))) |
378 |
{ |
379 |
$sgrupos = $this->pegaSubgruposGrupo($menu["idmenu"],$grupo["id_n1"]); |
380 |
$temasRaizGrupo = array(); |
381 |
$temasR = $this->pegaTemasRaizGrupo($menu["idmenu"],$grupo["id_n1"]); |
382 |
foreach($temasR as $tema) |
383 |
{ |
384 |
$a = $tema["perfil"]; |
385 |
$a = str_replace(" ",",",$a); |
386 |
if($this->verificaOcorrencia($perfil,explode(",",$a))) |
387 |
{ |
388 |
$t = $this->pegaTema($tema["id_tema"]); |
389 |
$t = $t[0]; |
390 |
$nome = $this->removeAcentos($tema["nome_tema"]); |
391 |
$tags = $this->removeAcentos($tema["tags_tema"]); |
392 |
$tags1 = $this->removeAcentos(mb_convert_encoding($tema["tags_tema"],"ISO-8859-1","UTF-8")); |
393 |
$nome1 = $this->removeAcentos(mb_convert_encoding($tema["nome_tema"],"ISO-8859-1","UTF-8")); |
394 |
$miniatura = "nao"; |
395 |
if(file_exists($this->locaplic."/temas/miniaturas/".$t["codigo_tema"].".map.mini.png")) |
396 |
{ |
397 |
$miniatura = "sim"; |
398 |
} |
399 |
$down = "sim"; |
400 |
if (strtolower($t["download_tema"]) == "nao") |
401 |
{ |
402 |
$down = "nao"; |
403 |
} |
404 |
$texto = array("miniatura"=>$miniatura,"tid"=>$t["codigo_tema"],"nome"=>$this->converte($tema["nome_tema"]),"link"=>$t["link_tema"],"download"=>$down); |
405 |
$n = intval($t["nacessos"] / $fatorestrela); |
406 |
if($n >= 5){ |
407 |
$n = 5; |
408 |
} |
409 |
|
410 |
if ($n == $nivel) |
411 |
{ |
412 |
$temasRaizGrupo[] = $texto; |
413 |
} |
414 |
} |
415 |
} |
416 |
foreach($sgrupos["subgrupos"] as $sgrupo) |
417 |
{ |
418 |
$a = $sgrupo["n2_perfil"]; |
419 |
$a = str_replace(" ",",",$a); |
420 |
if($this->verificaOcorrencia($perfil,explode(",",$a))) |
421 |
{ |
422 |
$temas = $this->pegaTemasSubGrupo($sgrupo["id_n2"]); |
423 |
foreach ($temas as $tema) |
424 |
{ |
425 |
$a = $tema["n3_perfil"]; |
426 |
$a = str_replace(" ",",",$a); |
427 |
if($this->verificaOcorrencia($perfil,explode(",",$a))) |
428 |
{ |
429 |
$t = $this->pegaTema($tema["id_tema"]); |
430 |
$t = $t[0]; |
431 |
$nome = $this->removeAcentos($tema["nome_tema"]); |
432 |
$tags = $this->removeAcentos($tema["tags_tema"]); |
433 |
$tags1 = $this->removeAcentos(mb_convert_encoding($tema["tags_tema"],"ISO-8859-1","UTF-8")); |
434 |
$nome1 = $this->removeAcentos(mb_convert_encoding($tema["nome_tema"],"ISO-8859-1","UTF-8")); |
435 |
$miniatura = "nao"; |
436 |
if(file_exists($this->locaplic."/temas/miniaturas/".$tema["codigo_tema"].".map.mini.png")) |
437 |
{ |
438 |
$miniatura = "sim"; |
439 |
} |
440 |
$down = "sim"; |
441 |
if (strtolower($t["download_tema"]) == "nao") |
442 |
{ |
443 |
$down = "nao"; |
444 |
} |
445 |
$texto = array("miniatura"=>$miniatura,"tid"=>$tema["codigo_tema"],"nome"=>$this->converte($tema["nome_tema"]),"link"=>$t["link_tema"],"download"=>$down); |
446 |
$n = abs($t["nacessos"] / $fatorestrela); |
447 |
if($n >= 5){ |
448 |
$n = 5; |
449 |
} |
450 |
if ($n == $nivel) |
451 |
{ |
452 |
$resultado[] = $texto; |
453 |
} |
454 |
} |
455 |
} |
456 |
} |
457 |
if (count($resultado) > 0) |
458 |
{ |
459 |
$subgrupo[] = array("subgrupo"=>$this->converte($sgrupo["nome_subgrupo"]),"temas"=>$resultado); |
460 |
} |
461 |
$resultado = array(); |
462 |
} |
463 |
} |
464 |
if (count($subgrupo) > 0 || count($temasRaizGrupo) > 0) |
465 |
{ |
466 |
$final[] = array("grupo"=>$this->converte($grupo["nome_grupo"]),"temas"=>$temasRaizGrupo,"subgrupos"=>$subgrupo); |
467 |
} |
468 |
$subgrupo = array(); |
469 |
} |
470 |
} |
471 |
return $final; |
472 |
} |
473 |
/*
|
474 |
Function: pegaGruposMenu
|
475 |
|
476 |
Retorna a lista de grupos de um menu
|
477 |
|
478 |
Parametros:
|
479 |
|
480 |
id_menu {string}
|
481 |
|
482 |
Return:
|
483 |
|
484 |
{array}
|
485 |
*/
|
486 |
function pegaGruposMenu($id_menu){ |
487 |
$sqlgrupos = $this->sql_grupos."where ".$this->pubsql." id_menu='$id_menu' order by ordem"; |
488 |
$sqlraiz = $this->sql_temasraiz."where i3geoadmin_raiz.id_menu='$id_menu' and i3geoadmin_raiz.nivel = 0 order by ordem"; |
489 |
$grupos = $this->execSQL($sqlgrupos); |
490 |
$raiz = $this->execSQL($sqlraiz); |
491 |
$raiz = $this->validaTemas($raiz,"codigo_tema"); |
492 |
return array("raiz"=>$raiz,"grupos"=>$grupos); |
493 |
} |
494 |
/*
|
495 |
Function: pegaSubgruposGrupo
|
496 |
|
497 |
Retorna a lista de subgrupos de um grupo
|
498 |
|
499 |
Parametros:
|
500 |
|
501 |
id_menu {string}
|
502 |
|
503 |
id_n1 {string} - id do grupo
|
504 |
|
505 |
Return:
|
506 |
|
507 |
{array}
|
508 |
*/
|
509 |
function pegaSubgruposGrupo($id_menu,$id_n1) |
510 |
{ |
511 |
$subgrupos = $this->execSQL($this->sql_subgrupos."where ".$this->pubsql." i3geoadmin_n2.id_n1='$id_n1' order by ordem"); |
512 |
$raiz = $this->execSQL($this->sql_temasraiz."where i3geoadmin_raiz.nivel = 1 and i3geoadmin_raiz.id_nivel = $id_n1 order by ordem"); |
513 |
$raiz = $this->validaTemas($raiz,"codigo_tema"); |
514 |
return array("raiz"=>$raiz,"subgrupos"=>$subgrupos); |
515 |
} |
516 |
/*
|
517 |
Function: pegaTemasRaizMenu
|
518 |
|
519 |
Retorna a lista de temas da raiz de um menu
|
520 |
|
521 |
Parametros:
|
522 |
|
523 |
id_menu {string}
|
524 |
|
525 |
Return:
|
526 |
|
527 |
{array}
|
528 |
*/
|
529 |
function pegaTemasRaizMenu($id_menu) |
530 |
{ |
531 |
$raiz = $this->execSQL($this->sql_temasraiz."where i3geoadmin_raiz.id_menu='$id_menu' and i3geoadmin_raiz.nivel = 0 order by ordem"); |
532 |
$raiz = $this->validaTemas($raiz,"codigo_tema"); |
533 |
return $raiz; |
534 |
} |
535 |
/*
|
536 |
Function: pegaTemasRaizGrupo
|
537 |
|
538 |
Retorna a lista de temas da raiz de um grupo
|
539 |
|
540 |
Parametros:
|
541 |
|
542 |
id_menu {string}
|
543 |
|
544 |
id_n1 {string} - id do grupo
|
545 |
|
546 |
Return:
|
547 |
|
548 |
{array}
|
549 |
*/
|
550 |
function pegaTemasRaizGrupo($id_menu,$id_n1) |
551 |
{ |
552 |
$raiz = $this->execSQL($this->sql_temasraiz."where i3geoadmin_raiz.nivel = 1 and i3geoadmin_raiz.id_nivel = $id_n1 order by ordem"); |
553 |
$raiz = $this->validaTemas($raiz,"codigo_tema"); |
554 |
return $raiz; |
555 |
} |
556 |
/*
|
557 |
Function: pegaTema
|
558 |
|
559 |
Retorna os dados de um tema
|
560 |
|
561 |
Parametros:
|
562 |
|
563 |
id_tema {string}
|
564 |
|
565 |
Return:
|
566 |
|
567 |
{array}
|
568 |
*/
|
569 |
function pegaTema($id_tema) |
570 |
{ |
571 |
$q = $this->execSQL($this->sql_temas." and id_tema = '$id_tema' "); |
572 |
if($q){ |
573 |
return $q; |
574 |
} |
575 |
else{
|
576 |
//caso de banco de dados antigo
|
577 |
$sql = "select kmz_tema,'0' as nacessos,id_tema,kml_tema,ogc_tema,download_tema,tags_tema,tipoa_tema,link_tema,desc_tema,nome_tema,codigo_tema from ".$this->esquemaadmin."i3geoadmin_temas "; |
578 |
$q = $this->execSQL($sql." where id_tema = '$id_tema' "); |
579 |
return $q; |
580 |
} |
581 |
} |
582 |
/*
|
583 |
Function: pegaTemaPorCodigo
|
584 |
|
585 |
Retorna os dados de um tema buscando por codigo
|
586 |
|
587 |
Parametros:
|
588 |
|
589 |
codigo_tema {string}
|
590 |
|
591 |
Return:
|
592 |
|
593 |
{array}
|
594 |
*/
|
595 |
function pegaTemaPorCodigo($codigo_tema) |
596 |
{ |
597 |
$q = $this->execSQL($this->sql_temas." and codigo_tema = '$codigo_tema' "); |
598 |
if($q){ |
599 |
return $q; |
600 |
} |
601 |
else{
|
602 |
//caso de banco de dados antigo
|
603 |
$sql = "select kmz_tema,'0' as nacessos,id_tema,kml_tema,ogc_tema,download_tema,tags_tema,tipoa_tema,link_tema,desc_tema,nome_tema,codigo_tema from ".$this->esquemaadmin."i3geoadmin_temas "; |
604 |
$q = $this->execSQL($sql." where codigo_tema = '$codigo_tema' "); |
605 |
return $q; |
606 |
} |
607 |
} |
608 |
/*
|
609 |
Function: pegaTemasSubGrupo
|
610 |
|
611 |
Retorna os temas de um subgrupo
|
612 |
|
613 |
Parametros:
|
614 |
|
615 |
id_n2 {string} - id do subgrupo
|
616 |
|
617 |
Return:
|
618 |
|
619 |
{array}
|
620 |
*/
|
621 |
function pegaTemasSubGrupo($id_n2) |
622 |
{ |
623 |
$temas = $this->execSQL($this->sql_temasSubgrupo."where ".$this->pubsql." i3geoadmin_n3.id_n2='$id_n2' order by ordem"); |
624 |
$temas = $this->validaTemas($temas,"codigo_tema"); |
625 |
return $temas; |
626 |
} |
627 |
/*
|
628 |
Function: formataMenus
|
629 |
|
630 |
Retorna os menus e temas na raiz de um menu, formatados no padrão da árvore
|
631 |
|
632 |
Return:
|
633 |
|
634 |
{array}
|
635 |
*/
|
636 |
function formataMenus(){ |
637 |
} |
638 |
/*
|
639 |
Function: formataGruposMenu
|
640 |
|
641 |
Retorna os grupos e temas na raiz de um menu, formatados no padrão da árvore
|
642 |
|
643 |
Parametros:
|
644 |
|
645 |
id_menu {string}
|
646 |
|
647 |
perfil {string}
|
648 |
|
649 |
listasgrupos {string} - sim|nao
|
650 |
|
651 |
Return:
|
652 |
|
653 |
{array}
|
654 |
*/
|
655 |
function formataGruposMenu ($id_menu,$perfil,$listasgrupos) |
656 |
{ |
657 |
//error_reporting(0);
|
658 |
$dados = $this->pegaGruposMenu($id_menu); |
659 |
$resultado = array(); |
660 |
$temasraiz = array(); |
661 |
foreach($dados["raiz"] as $temar){ |
662 |
$temasraiz[] = $this->formataTema($temar["id_tema"]); |
663 |
} |
664 |
if(count($dados["grupos"]) == 0){ |
665 |
$grupos[] = array(); |
666 |
} |
667 |
foreach($dados["grupos"] as $grupo) |
668 |
{ |
669 |
$a = $grupo["n1_perfil"]; |
670 |
$a = str_replace(" ",",",$a); |
671 |
if($this->verificaOcorrencia($perfil,explode(",",$a)) == true) |
672 |
{ |
673 |
$temas = array(); |
674 |
$raizgrupo = $this->pegaTemasRaizGrupo($id_menu,$grupo["id_n1"]); |
675 |
$grupodown = "nao"; |
676 |
$grupoogc = "nao"; |
677 |
foreach($raizgrupo as $tema) |
678 |
{ |
679 |
$temas[] = $this->formataTema($tema["id_tema"]); |
680 |
} |
681 |
if($temas > 0) |
682 |
{ |
683 |
$grupodown = "sim"; |
684 |
$grupoogc = "sim"; |
685 |
} |
686 |
$subgrupos = array(); |
687 |
if($listasgrupos=="sim") |
688 |
{ |
689 |
$dadossubgrupos = $this->pegaSubgruposGrupo($id_menu,$grupo["id_n1"]); |
690 |
|
691 |
foreach($dadossubgrupos["subgrupos"] as $sgrupo) |
692 |
{ |
693 |
$a = $sgrupo["n2_perfil"]; |
694 |
$a = str_replace(" ",",",$a); |
695 |
if($this->verificaOcorrencia($perfil,explode(",",$a))) |
696 |
{ |
697 |
//verifica se existem temas que podem receber download
|
698 |
$down = "nao"; |
699 |
$ogc = "nao"; |
700 |
$listaT = $this->pegaTemasSubGrupo($sgrupo["id_n2"]); |
701 |
foreach($listaT as $tema) |
702 |
{ |
703 |
if(strtolower($tema["tipoa_tema"]) != "wms") |
704 |
{ |
705 |
if (strtolower($tema["download_tema"]) != "nao") |
706 |
{ |
707 |
$down = "sim";$grupodown = "sim"; |
708 |
} |
709 |
|
710 |
if (strtolower($tema["ogc_tema"]) != "nao") |
711 |
{ |
712 |
$ogc = "sim";$grupoogc = "sim"; |
713 |
} |
714 |
} |
715 |
} |
716 |
if(count($listaT) > 0) |
717 |
$subgrupos[] = array("id_n2"=>$sgrupo["id_n2"],"publicado"=>($sgrupo["publicado"]),"nome"=>$this->converte($sgrupo["nome_subgrupo"]),"download"=>$down,"ogc"=>$ogc); |
718 |
} |
719 |
} |
720 |
} |
721 |
$grupos[] = array("publicado"=>($grupo["publicado"]),"id_n1"=>($grupo["id_n1"]),"nome"=>$this->converte($grupo["nome_grupo"]),"ogc"=>$grupoogc,"download"=>$grupodown,"subgrupos"=>$subgrupos,"temasgrupo"=>$temas); |
722 |
} |
723 |
} |
724 |
$grupos[] = array("temasraiz"=>$temasraiz); |
725 |
//pega os sistemas checando os perfis
|
726 |
$sistemas = array(); |
727 |
$grupos[] = array("idmenu"=>$id_menu); |
728 |
$grupos[] = array("sistemas"=>""); |
729 |
return($grupos); |
730 |
} |
731 |
/*
|
732 |
Function: formataSubgruposGrupo
|
733 |
|
734 |
Retorna os subgrupos e temas na raiz de um grupo, formatados no padrão da árvore
|
735 |
|
736 |
Parametros:
|
737 |
|
738 |
id_menu {string}
|
739 |
|
740 |
id_n1 {string} - id do grupo
|
741 |
|
742 |
perfil {string}
|
743 |
|
744 |
Return:
|
745 |
|
746 |
{array}
|
747 |
*/
|
748 |
function formataSubgruposGrupo ($id_menu,$id_n1,$perfil) |
749 |
{ |
750 |
$dados = $this->pegaSubgruposGrupo($id_menu,$id_n1); |
751 |
$resultado = array(); |
752 |
$temasraiz = array(); |
753 |
foreach($dados["raiz"] as $temar) |
754 |
{ |
755 |
$temasraiz[] = $this->formataTema($temar["id_tema"]); |
756 |
} |
757 |
if(count($dados["subgrupos"]) == 0) |
758 |
{ |
759 |
$sgrupos[] = array(); |
760 |
} |
761 |
$subgrupos = array(); |
762 |
foreach($dados["subgrupos"] as $sgrupo) |
763 |
{ |
764 |
$a = $sgrupo["n2_perfil"]; |
765 |
$a = str_replace(" ",",",$a); |
766 |
if ($this->verificaOcorrencia($perfil,explode(",",$a))) |
767 |
{ |
768 |
$listaT = $this->pegaTemasSubGrupo($sgrupo["id_n2"]); |
769 |
$down = "nao"; |
770 |
$ogc = "nao"; |
771 |
foreach($listaT as $tema) |
772 |
{ |
773 |
if(strtolower($tema["tipoa_tema"]) != "wms") |
774 |
{ |
775 |
if (strtolower($tema["download_tema"]) != "nao") |
776 |
{ |
777 |
$down = "sim"; |
778 |
} |
779 |
if (strtolower($tema["ogc_tema"]) != "nao") |
780 |
{ |
781 |
$ogc = "sim"; |
782 |
} |
783 |
} |
784 |
} |
785 |
if(count($listaT) > 0) |
786 |
{ |
787 |
$subgrupos[] = array("publicado"=>($sgrupo["publicado"]),"id_n2"=>($sgrupo["id_n2"]),"nome"=>$this->converte($sgrupo["nome_subgrupo"]),"download"=>$down,"ogc"=>$ogc,"temas"=>$listaT); |
788 |
} |
789 |
} |
790 |
} |
791 |
return (array("subgrupo"=>$subgrupos,"temasgrupo"=>$temasraiz)); |
792 |
} |
793 |
/*
|
794 |
Function: formataTemasSubgrupo
|
795 |
|
796 |
Retorna os temas de um subgrupo, formatados no padrão da árvore
|
797 |
|
798 |
Parametros:
|
799 |
|
800 |
id_n2 {string} - id do subgrupo
|
801 |
|
802 |
perfil {string}
|
803 |
|
804 |
Return:
|
805 |
|
806 |
{array}
|
807 |
*/
|
808 |
function formataTemasSubgrupo($id_n2,$perfil) |
809 |
{ |
810 |
$dados = $this->pegaTemasSubGrupo($id_n2); |
811 |
$temas = array(); |
812 |
foreach($dados as $tema) |
813 |
{ |
814 |
$a = $tema["n3_perfil"]; |
815 |
$a = str_replace(" ",",",$a); |
816 |
if($this->verificaOcorrencia($perfil,explode(",",$a))) |
817 |
{ |
818 |
$temas[] = $this->formataTema($tema["id_tema"],$tema["publicado"]); |
819 |
} |
820 |
} |
821 |
return $temas; |
822 |
} |
823 |
/*
|
824 |
Function: formataTema
|
825 |
|
826 |
Retorna os dados de um tema, formatados no padrão da árvore
|
827 |
|
828 |
Parametros:
|
829 |
|
830 |
id_tema {string}
|
831 |
|
832 |
publicado {string} - SIM|NAO valor do índice "publicado" que será incluído no array de retorno
|
833 |
|
834 |
Return:
|
835 |
|
836 |
{array}
|
837 |
*/
|
838 |
function formataTema($id_tema,$publicado="SIM") |
839 |
{ |
840 |
$recordset = $this->pegaTema($id_tema); |
841 |
$recordset = $recordset[0]; |
842 |
$down = "sim"; |
843 |
$ogc = "sim"; |
844 |
$link = " "; |
845 |
$kmz = "nao"; |
846 |
if (strtolower($recordset["download_tema"]) == "nao") |
847 |
{ |
848 |
$down = "nao"; |
849 |
} |
850 |
if (strtolower($recordset["ogc_tema"]) == "nao") |
851 |
{ |
852 |
$ogc = "nao"; |
853 |
} |
854 |
if(strtolower($recordset["tipoa_tema"]) == "wms") |
855 |
{ |
856 |
$down = "nao"; |
857 |
$ogc = "nao"; |
858 |
} |
859 |
if ($recordset["link_tema"] != "") |
860 |
{ |
861 |
$link = $recordset["link_tema"]; |
862 |
} |
863 |
if (strtolower($recordset["kmz_tema"]) == "sim") |
864 |
{ |
865 |
$kmz = "sim"; |
866 |
} |
867 |
return array("tipoa_tema"=>$recordset["tipoa_tema"],"publicado"=>$publicado,"nacessos"=>($recordset["nacessos"]),"tid"=>($recordset["codigo_tema"]),"nome"=>$this->converte($recordset["nome_tema"]),"link"=>$link,"download"=>$down,"ogc"=>$ogc,"kmz"=>$kmz); |
868 |
} |
869 |
/*
|
870 |
Function: execSQL
|
871 |
|
872 |
Executa um SQL no banco de administração
|
873 |
|
874 |
Parametros:
|
875 |
|
876 |
sql {string}
|
877 |
|
878 |
Return:
|
879 |
|
880 |
{array}
|
881 |
*/
|
882 |
function execSQL($sql) |
883 |
{ |
884 |
//echo "<br>".$sql;
|
885 |
//error_reporting(0);
|
886 |
$sql = str_ireplace(array("update","delete","insert","--","drop",";"),"",$sql); |
887 |
$q = $this->dbh->query($sql,PDO::FETCH_ASSOC); |
888 |
if($q) |
889 |
{ |
890 |
return $q->fetchAll(); |
891 |
} |
892 |
else
|
893 |
{return false; |
894 |
} |
895 |
} |
896 |
/*
|
897 |
Verifica se uma string ocorre em um array
|
898 |
*/
|
899 |
function verificaOcorrencia($procurar,$em) |
900 |
{ |
901 |
if(count($em) == 1 && $em[0] == "") |
902 |
{ |
903 |
$em = ""; |
904 |
} |
905 |
if($procurar == "" && $em == "") |
906 |
{ |
907 |
return true; |
908 |
} |
909 |
if($em == "") |
910 |
{ |
911 |
return true; |
912 |
} |
913 |
$resultado = false; |
914 |
if($procurar != "" && $em != "") |
915 |
{ |
916 |
foreach($em as $e) |
917 |
{ |
918 |
$e = trim($e); |
919 |
foreach($procurar as $p) |
920 |
{ |
921 |
$p = trim($p); |
922 |
if($p == $e) |
923 |
{ |
924 |
$resultado = true; |
925 |
} |
926 |
} |
927 |
} |
928 |
} |
929 |
return $resultado; |
930 |
} |
931 |
/**
|
932 |
*
|
933 |
* TODO Verificar ao fechar versao - verificar a acentuacao das palavras nessa funcao
|
934 |
*/
|
935 |
function removeAcentos($s) |
936 |
{ |
937 |
$s = ereg_replace("[á?âã]","a",$s); |
938 |
$s = ereg_replace("[Á?ÂÃ]","A",$s); |
939 |
$s = ereg_replace("[é?ê]","e",$s); |
940 |
$s = ereg_replace("[í]","i",$s); |
941 |
$s = ereg_replace("[Í]","I",$s); |
942 |
$s = ereg_replace("[É?Ê]","E",$s); |
943 |
$s = ereg_replace("[??ôõ]","o",$s); |
944 |
$s = ereg_replace("[??ÔÕ]","O",$s); |
945 |
$s = ereg_replace("[ú??]","u",$s); |
946 |
$s = ereg_replace("[Ú??]","U",$s); |
947 |
$s = str_replace("ç","c",$s); |
948 |
$s = str_replace("Ç","C",$s); |
949 |
//$str = htmlentities($s);
|
950 |
$str = preg_replace("/(&)([a-z])([a-z]+;)/i", '$2', $s); |
951 |
$str = preg_replace("/[^A-Z0-9]/i", ' ', $str); |
952 |
$str = preg_replace("/\s+/i", ' ', $str); |
953 |
return $str; |
954 |
} |
955 |
function converte($texto){ |
956 |
if($this->convUTF == true) |
957 |
$texto = mb_convert_encoding($texto,mb_detect_encoding($texto),"UTF-8"); |
958 |
else
|
959 |
$texto = mb_convert_encoding($texto,mb_detect_encoding($texto),"ISO-8859-1"); |
960 |
return $texto; |
961 |
} |
962 |
function verificaPapelSessao($id_papel){ |
963 |
if(!empty($_COOKIE["i3geocodigologin"])){ |
964 |
session_write_close(); |
965 |
session_name("i3GeoLogin");
|
966 |
session_id($_COOKIE["i3geocodigologin"]); |
967 |
session_start(); |
968 |
//var_dump($_SESSION);exit;
|
969 |
if($_SESSION["usuario"] != $_COOKIE["i3geousuariologin"]){ |
970 |
return false; |
971 |
} |
972 |
foreach($_SESSION["papeis"] as $p){ |
973 |
if($p == 1 || $p == $id_papel){ |
974 |
return true; |
975 |
} |
976 |
} |
977 |
} |
978 |
else{//caso nao exista, retorna um erro |
979 |
return false; |
980 |
} |
981 |
} |
982 |
function verificaOperacaoSessao($operacao){ |
983 |
session_write_close(); |
984 |
session_name("i3GeoLogin");
|
985 |
session_id($_COOKIE["i3geocodigologin"]); |
986 |
session_start(); |
987 |
$resultado = false; |
988 |
//verifica se e administrador
|
989 |
foreach($_SESSION["papeis"] as $p){ |
990 |
if($p["id_papel"] == 1){ |
991 |
return true; |
992 |
} |
993 |
} |
994 |
if(!empty($_SESSION["operacoes"][$operacao])){ |
995 |
$resultado = true; |
996 |
} |
997 |
return $resultado; |
998 |
} |
999 |
} |
1000 |
?>
|