Statistics
| Revision:

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&ccedil;&otilde;es para montagem da &aacute;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&eacute;rio do Meio Ambiente Brasil
14
Desenvolvedor: Edmar Moretti edmar.moretti@gmail.com
15

16
Este programa &eacute; software livre; voc&ecirc; pode redistribu&iacute;-lo
17
e/ou modific&aacute;-lo sob os termos da Licen&ccedil;a P&uacute;blica Geral
18
GNU conforme publicada pela Free Software Foundation;
19

20
Este programa &eacute; distribu&iacute;do na expectativa de que seja &uacute;til,
21
por&eacute;m, SEM NENHUMA GARANTIA; nem mesmo a garantia impl&iacute;cita
22
de COMERCIABILIDADE OU ADEQUA&Ccedil;&Atilde;O A UMA FINALIDADE ESPEC&Iacute;FICA.
23
Consulte a Licen&ccedil;a P&uacute;blica Geral do GNU para mais detalhes.
24
Voc&ecirc; deve ter recebido uma c?pia da Licen&ccedil;a P&uacute;blica Geral do
25
        GNU junto com este programa; se n&atilde;o, escreva para a
26
Free Software Foundation, Inc., no endere&ccedil;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 &aacute;rvore de temas ou obter dados espec&iacute;ficos da &aacute;rvore.
37

38
&Eacute; utilizada por v&aacute;rias opera&ccedil;&otilde;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&ccedil;&atilde;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&aacute; cadastrado como um dos editores
124
                //editores podem ver as coisas marcadas como n&atilde;o publicado
125
                //no sistema de administra&ccedil;&atilde;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&ecirc;m um determinado n&uacute;mero (n&iacute;vel) de estrelas
353

354
        Parametros:
355

356
        nivel {numeric} - n&uacute;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&atilde;o da &aacute;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&atilde;o da &aacute;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&atilde;o da &aacute;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&atilde;o da &aacute;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&atilde;o da &aacute;rvore
827

828
        Parametros:
829

830
        id_tema {string}
831

832
        publicado {string} - SIM|NAO valor do &iacute;ndice "publicado" que ser&aacute; inclu&iacute;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&ccedil;&atilde;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("[&aacute;?&acirc;&atilde;]","a",$s);
938
                $s = ereg_replace("[&Aacute;?&Acirc;&Atilde;]","A",$s);
939
                $s = ereg_replace("[&eacute;?&ecirc;]","e",$s);
940
                $s = ereg_replace("[&iacute;]","i",$s);
941
                $s = ereg_replace("[&Iacute;]","I",$s);
942
                $s = ereg_replace("[&Eacute;?&Ecirc;]","E",$s);
943
                $s = ereg_replace("[??&ocirc;&otilde;]","o",$s);
944
                $s = ereg_replace("[??&Ocirc;&Otilde;]","O",$s);
945
                $s = ereg_replace("[&uacute;??]","u",$s);
946
                $s = ereg_replace("[&Uacute;??]","U",$s);
947
                $s = str_replace("&ccedil;","c",$s);
948
                $s = str_replace("&Ccedil;","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
?>