From 5f1fc690154203b79e115dfce1a203f99f5d5e67 Mon Sep 17 00:00:00 2001 From: Edmar Moretti Date: Mon, 2 Oct 2017 23:23:52 -0300 Subject: [PATCH] Correção no indicador de região no mapa de referência. Remoção do programa admin/php/classe_arvorede.php --- admin/admin.db | Bin 352256 -> 0 bytes admin/php/classe_arvore.php | 1274 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- admin/php/xxxclasse_arvore.php | 1268 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ admin/php/xxxmapas.php | 329 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- admin1/catalogo/atlas/pranchas/temas/exec.php | 4 ++-- admin1/catalogo/mapas/exec.php | 4 ++-- admin1/catalogo/mapfile/editor/funcoes.php | 2 +- admin1/catalogo/mapfile/editor/index.php | 7 ++++++- classesphp/classe_arvore.php | 1268 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ classesphp/classe_menutemas.php | 16 ++++++++-------- classesphp/mapa_controle.php | 2 +- fontetema.php | 2 +- interface/carto_ol.htm | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++------------ js/compactados/maparef_compacto.js | 2 +- js/i3geo_tudo_compacto7.js | 2 +- js/i3geo_tudo_compacto7.js.php | 2 +- js/maparef.js | 13 ++++++++++--- temas/_lbairros.map | 16 +++------------- 18 files changed, 2626 insertions(+), 1650 deletions(-) delete mode 100755 admin/php/classe_arvore.php create mode 100755 admin/php/xxxclasse_arvore.php delete mode 100755 admin/php/xxxmapas.php create mode 100755 classesphp/classe_arvore.php diff --git a/admin/admin.db b/admin/admin.db index dc2f69c..eb2465c 100755 Binary files a/admin/admin.db and b/admin/admin.db differ diff --git a/admin/php/classe_arvore.php b/admin/php/classe_arvore.php deleted file mode 100755 index 6878d18..0000000 --- a/admin/php/classe_arvore.php +++ /dev/null @@ -1,1274 +0,0 @@ - -*/ -class Arvore -{ - //temas com acesso restrito e que nao podem ser acessados pelo usuario que esta logado - public $temassindevidos; - protected $locaplic; - //subgrupos que tem pelo menos um tema - //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 "; - //grupos que tem pelo menos um sub-grupo - //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 "; - //nomes de todos os grupos - public $sql_todosgrupos = "select * from i3geoadmin_grupos "; - //tipo de filtro - //ogc|download|"" - public $filtro; - //temas na raiz - //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 "; - //todos os temas - //public $sql_temas = "select * from i3geoadmin_temas "; - //temas de um subgrupo - //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 "; - /* - Function: __construct - - Cria um objeto Arvore - - Parametros: - - locaplic {string} - localização do i3geo no sistema de arquivos - - idioma {string} - default = "pt" - */ - function __construct($locaplic,$idioma="pt",$filtro="") - { - $this->locaplic = $locaplic; - $this->filtro = $filtro; - $dbh = ""; - //error_reporting(0); - - include($locaplic."/admin/php/conexao.php"); - - $this->esquemaadmin = ""; - if(!empty($esquemaadmin)){ - $this->esquemaadmin = str_replace(".","",$esquemaadmin)."."; - } - if(!isset($convUTF)){ - $convUTF = true; - } - $this->convUTF = $convUTF; - $this->dbh = $dbh; - - $this->idioma = $idioma; - if($idioma == "pt"){ - $coluna = "nome_grupo"; - } - else{ - $coluna = $idioma; - } - $this->sql_grupos = "select CASE i3geoadmin_grupos.$coluna WHEN '' THEN nome_grupo ELSE i3geoadmin_grupos.$coluna END as nome_grupo,i3geoadmin_grupos.id_grupo, id_n1,id_menu,i3geoadmin_n1.publicado,n1_perfil,ordem from ".$this->esquemaadmin."i3geoadmin_n1 LEFT JOIN ".$this->esquemaadmin."i3geoadmin_grupos ON i3geoadmin_n1.id_grupo = i3geoadmin_grupos.id_grupo "; - if($filtro === "ogc" || $filtro === "download"){ - //esse sql retorna tambem os grupos dos temas que estao na raiz do grupo - $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 "; - } - - if($idioma == "pt"){ - $coluna = "nome_subgrupo"; - } - else{ - $coluna = $idioma; - } - $this->sql_subgrupos = "select CASE i3geoadmin_subgrupos.$coluna WHEN '' THEN nome_subgrupo ELSE i3geoadmin_subgrupos.$coluna END as nome_subgrupo,i3geoadmin_subgrupos.id_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 "; - - if($idioma == "pt"){ - $coluna = "nome_tema"; - } - else{ - $coluna = $idioma; - } - - $this->sql_temasraiz = "select id_nivel,ordem,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, download_tema, link_tema FROM ".$this->esquemaadmin."i3geoadmin_raiz LEFT JOIN ".$this->esquemaadmin."i3geoadmin_temas ON i3geoadmin_temas.id_tema = i3geoadmin_raiz.id_tema "; - $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 "; - - //$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 "; - - $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 "; - $this->sql_temas_combo = "select id_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 "; - // - //verifica se o ip atual está cadastrado como um dos editores - //editores podem ver as coisas marcadas como não publicado - //no sistema de administração - // - $this->editor = false; - $this->editor = $this->verificaOperacaoSessao("admin/php/classe_arvore/editor"); - $this->pubsql = " (publicado != 'NAO' or publicado is null) and "; - if($this->editor){ - $this->pubsql = ""; - } - if(!function_exists("listaTemasIndevidos")){ - include_once(dirname(__FILE__)."/../../classesphp/funcoes_gerais.php"); - } - $this->temasindevidos = listaTemasIndevidos(); - } - function __destruct() - { - $this->dbh = null; - $this->dbhw = null; - } - /* - Function: validaTemas - - Remove de um array os temas que nao sao permitidos ao usuario atualmente logado - */ - function validaTemas($linhas,$id){ - $res = array(); - foreach($linhas as $l){ - if(!in_array($l[$id],$this->temasindevidos)){ - array_push($res,$l); - } - } - return $res; - } - /* - Function: pegaListaDeMenus - - Retorna a lista de menus - - Parametros: - - perfil {string} - considera apenas esse perfil - - Return: - - {array} - */ - function pegaListaDeMenus($perfil="",$filtraOgc="nao",$filtraDown="nao") - { - if($this->idioma == "pt"){ - $coluna = "nome_menu"; - } - else{ - $coluna = $this->idioma; - } - if($this->editor == true) - { - $perfil = ""; - $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"; - } - else{ - $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"; - } - $regs = $this->execSQL($sql); - $resultado = array(); - foreach($regs as $reg){ - $a = $reg["perfil_menu"]; - $a = str_replace(" ",",",$a); - if ($this->verificaOcorrencia($perfil,explode(",",$a))) - { - $status = "fechado"; - if(strtolower($reg["aberto"]) == "sim") - $status = "aberto"; - $url = ""; - $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); - } - } - return $resultado; - } - /* - Function: pegaListaDeTiposGrupos - - Retorna a lista de grupos de um menu - - Parametros: - - id_menu {string} - - Return: - - {array} - */ - function pegaListaDeTiposGrupos(){ - if($this->idioma == "pt"){ - $coluna = "nome_grupo"; - } - else{ - $coluna = $this->idioma; - } - $sql = "select CASE i3geoadmin_grupos.$coluna WHEN '' THEN nome_grupo ELSE i3geoadmin_grupos.$coluna END as nome_grupo, id_grupo from ".$this->esquemaadmin."i3geoadmin_grupos ORDER by nome_grupo "; - $grupos = $this->execSQL($sql); - return $grupos; - } - /* - Function: pegaListaDeTiposSubGrupos - - Retorna a lista de grupos de um menu - - Parametros: - - id_menu {string} - - Return: - - {array} - */ - function pegaListaDeTiposSubGrupos(){ - if($this->idioma == "pt"){ - $coluna = "nome_subgrupo"; - } - else{ - $coluna = $this->idioma; - } - $sql = "select CASE i3geoadmin_subgrupos.$coluna WHEN '' THEN nome_subgrupo ELSE i3geoadmin_subgrupos.$coluna END as nome_subgrupo, id_subgrupo from ".$this->esquemaadmin."i3geoadmin_subgrupos ORDER by nome_subgrupo "; - $subgrupos = $this->execSQL($sql); - return $subgrupos; - } - /* - Function: procuraTemas - - Localiza temas conforme uma palavra de busca - - Parametros: - - procurar {string} - palavra de busca - - perfil {string} - considera apenas esse perfil - - Return: - - {array} - */ - function procuraTemas ($procurar,$perfil) - { - if($procurar != "") - { - $procurar = $this->removeAcentos($procurar); - } - $menus = $this->pegaListaDeMenus($perfil); - $resultado = array(); - $subgrupo = array(); - $final = array(); - foreach($menus as $menu) - { - $grupos = $this->pegaGruposMenu($menu["idmenu"]); - foreach($grupos["grupos"] as $grupo) - { - $a = $grupo["n1_perfil"]; - $a = str_replace(" ",",",$a); - if($this->verificaOcorrencia($perfil,explode(",",$a))) - { - $sgrupos = $this->pegaSubgruposGrupo($menu["idmenu"],$grupo["id_n1"]); - $temasRaizGrupo = array(); - $temasR = $this->pegaTemasRaizGrupo($menu["idmenu"],$grupo["id_n1"]); - foreach($temasR as $tema) - { - $a = $tema["perfil"]; - $a = str_replace(" ",",",$a); - if($this->verificaOcorrencia($perfil,explode(",",$a))) - { - $t = $this->pegaTema($tema["id_tema"]); - $t = $t[0]; - $nome = $this->removeAcentos($tema["nome_tema"]); - $tags = $this->removeAcentos($tema["tags_tema"]); - $tags1 = $this->removeAcentos(mb_convert_encoding($tema["tags_tema"],"ISO-8859-1","UTF-8")); - $nome1 = $this->removeAcentos(mb_convert_encoding($tema["nome_tema"],"ISO-8859-1","UTF-8")); - $miniatura = "nao"; - if(file_exists($this->locaplic."/temas/miniaturas/".$t["codigo_tema"].".map.mini.png")) - { - $miniatura = "sim"; - } - $down = "sim"; - if (strtolower($t["download_tema"]) == "nao") - { - $down = "nao"; - } - $texto = array("codigo_tema"=>$t["codigo_tema"],"miniatura"=>$miniatura,"tid"=>$t["codigo_tema"],"nome"=>$this->converte($tema["nome_tema"]),"link"=>$t["link_tema"],"download"=>$down); - if($procurar == "") - { - $temasRaizGrupo[] = $texto; - } - else - { - if (stristr($nome,$procurar) || stristr($nome1,$procurar)) - { - $temasRaizGrupo[] = $texto; - } - else - { - if (stristr($tags,$procurar) || stristr($tags1,$procurar)) - { - $temasRaizGrupo[] = $texto; - } - } - } - } - } - foreach($sgrupos["subgrupos"] as $sgrupo) - { - $a = $sgrupo["n2_perfil"]; - $a = str_replace(" ",",",$a); - if($this->verificaOcorrencia($perfil,explode(",",$a))) - { - $temas = $this->pegaTemasSubGrupo($sgrupo["id_n2"]); - foreach ($temas as $tema) - { - $a = $tema["n3_perfil"]; - $a = str_replace(" ",",",$a); - if($this->verificaOcorrencia($perfil,explode(",",$a))) - { - $t = $this->pegaTema($tema["id_tema"]); - $t = $t[0]; - $nome = $this->removeAcentos($tema["nome_tema"]); - $tags = $this->removeAcentos($tema["tags_tema"]); - $tags1 = $this->removeAcentos(mb_convert_encoding($tema["tags_tema"],"ISO-8859-1","UTF-8")); - $nome1 = $this->removeAcentos(mb_convert_encoding($tema["nome_tema"],"ISO-8859-1","UTF-8")); - $miniatura = "nao"; - if(file_exists($this->locaplic."/temas/miniaturas/".$tema["codigo_tema"].".map.mini.png")) - { - $miniatura = "sim"; - } - $down = "sim"; - if (strtolower($t["download_tema"]) == "nao") - { - $down = "nao"; - } - $texto = array("codigo_tema"=>$tema["codigo_tema"],"miniatura"=>$miniatura,"tid"=>$tema["codigo_tema"],"nome"=>$this->converte($tema["nome_tema"]),"link"=>$t["link_tema"],"download"=>$down); - if($procurar == "") - { - $resultado[] = $texto; - } - else - { - if (stristr($nome,$procurar) || stristr($nome1,$procurar)) - { - $resultado[] = $texto; - } - else - { - if (stristr($tags,$procurar) || stristr($tags1,$procurar)) - { - $resultado[] = $texto; - } - } - } - } - } - } - if (count($resultado) > 0) - { - $subgrupo[] = array("subgrupo"=>$this->converte($sgrupo["nome_subgrupo"]),"temas"=>$resultado); - } - $resultado = array(); - } - } - if (count($subgrupo) > 0 || count($temasRaizGrupo) > 0) - { - $final[] = array("grupo"=>$this->converte($grupo["nome_grupo"]),"temas"=>$temasRaizGrupo,"subgrupos"=>$subgrupo); - } - $subgrupo = array(); - } - } - return $final; - } - /* - Function: procuraTemasEstrela - - Localiza temas que têm um determinado número (nível) de estrelas - - Parametros: - - nivel {numeric} - número de estrelas - - perfil {string} - considera apenas esse perfil - - Return: - - {array} - */ - function procuraTemasEstrela($nivel,$fatorestrela,$perfil) - { - $menus = $this->pegaListaDeMenus($perfil); - - $resultado = array(); - $subgrupo = array(); - $final = array(); - foreach($menus as $menu) - { - $grupos = $this->pegaGruposMenu($menu["idmenu"]); - foreach($grupos["grupos"] as $grupo) - { - $a = $grupo["n1_perfil"]; - $a = str_replace(" ",",",$a); - if($this->verificaOcorrencia($perfil,explode(",",$a))) - { - $sgrupos = $this->pegaSubgruposGrupo($menu["idmenu"],$grupo["id_n1"]); - $temasRaizGrupo = array(); - $temasR = $this->pegaTemasRaizGrupo($menu["idmenu"],$grupo["id_n1"]); - foreach($temasR as $tema) - { - $a = $tema["perfil"]; - $a = str_replace(" ",",",$a); - if($this->verificaOcorrencia($perfil,explode(",",$a))) - { - $t = $this->pegaTema($tema["id_tema"]); - $t = $t[0]; - $nome = $this->removeAcentos($tema["nome_tema"]); - $tags = $this->removeAcentos($tema["tags_tema"]); - $tags1 = $this->removeAcentos(mb_convert_encoding($tema["tags_tema"],"ISO-8859-1","UTF-8")); - $nome1 = $this->removeAcentos(mb_convert_encoding($tema["nome_tema"],"ISO-8859-1","UTF-8")); - $miniatura = "nao"; - if(file_exists($this->locaplic."/temas/miniaturas/".$t["codigo_tema"].".map.mini.png")) - { - $miniatura = "sim"; - } - $down = "sim"; - if (strtolower($t["download_tema"]) == "nao") - { - $down = "nao"; - } - $texto = array("codigo_tema"=>$t["codigo_tema"],"miniatura"=>$miniatura,"tid"=>$t["codigo_tema"],"nome"=>$this->converte($tema["nome_tema"]),"link"=>$t["link_tema"],"download"=>$down); - $n = intval($t["nacessos"] / $fatorestrela); - if($n >= 5){ - $n = 5; - } - - if ($n == $nivel) - { - $temasRaizGrupo[] = $texto; - } - } - } - foreach($sgrupos["subgrupos"] as $sgrupo) - { - $a = $sgrupo["n2_perfil"]; - $a = str_replace(" ",",",$a); - if($this->verificaOcorrencia($perfil,explode(",",$a))) - { - $temas = $this->pegaTemasSubGrupo($sgrupo["id_n2"]); - foreach ($temas as $tema) - { - $a = $tema["n3_perfil"]; - $a = str_replace(" ",",",$a); - if($this->verificaOcorrencia($perfil,explode(",",$a))) - { - $t = $this->pegaTema($tema["id_tema"]); - $t = $t[0]; - $nome = $this->removeAcentos($tema["nome_tema"]); - $tags = $this->removeAcentos($tema["tags_tema"]); - $tags1 = $this->removeAcentos(mb_convert_encoding($tema["tags_tema"],"ISO-8859-1","UTF-8")); - $nome1 = $this->removeAcentos(mb_convert_encoding($tema["nome_tema"],"ISO-8859-1","UTF-8")); - $miniatura = "nao"; - if(file_exists($this->locaplic."/temas/miniaturas/".$tema["codigo_tema"].".map.mini.png")) - { - $miniatura = "sim"; - } - $down = "sim"; - if (strtolower($t["download_tema"]) == "nao") - { - $down = "nao"; - } - $texto = array("codigo_tema"=>$tema["codigo_tema"],"miniatura"=>$miniatura,"tid"=>$tema["codigo_tema"],"nome"=>$this->converte($tema["nome_tema"]),"link"=>$t["link_tema"],"download"=>$down); - $n = abs($t["nacessos"] / $fatorestrela); - if($n >= 5){ - $n = 5; - } - if ($n == $nivel) - { - $resultado[] = $texto; - } - } - } - } - if (count($resultado) > 0) - { - $subgrupo[] = array("subgrupo"=>$this->converte($sgrupo["nome_subgrupo"]),"temas"=>$resultado); - } - $resultado = array(); - } - } - if (count($subgrupo) > 0 || count($temasRaizGrupo) > 0) - { - $final[] = array("grupo"=>$this->converte($grupo["nome_grupo"]),"temas"=>$temasRaizGrupo,"subgrupos"=>$subgrupo); - } - $subgrupo = array(); - } - } - return $final; - } - /* - Function: pegaGruposMenu - - Retorna a lista de grupos de um menu - - Parametros: - - id_menu {string} - - Return: - - {array} - */ - function pegaGruposMenu($id_menu,$ordenaNome="nao"){ - if($ordenaNome == "sim"){ - $ordem = "nome_grupo"; - } - else{ - $ordem = "ordem"; - } - $sqlgrupos = $this->sql_grupos."where ".$this->pubsql." id_menu='$id_menu' order by $ordem"; - $sqlraiz = $this->sql_temasraiz."where i3geoadmin_raiz.id_menu='$id_menu' and i3geoadmin_raiz.nivel = 0 order by ordem"; - $grupos = $this->execSQL($sqlgrupos); - $raiz = $this->execSQL($sqlraiz); - $raiz = $this->validaTemas($raiz,"codigo_tema"); - return array("raiz"=>$raiz,"grupos"=>$grupos); - } - /* - Function: pegaSubgruposGrupo - - Retorna a lista de subgrupos de um grupo - - Parametros: - - id_menu {string} - - id_n1 {string} - id do grupo - - Return: - - {array} - */ - function pegaSubgruposGrupo($id_menu,$id_n1,$ordenaNome="nao",$filtraOgc="nao",$filtraDown="nao") - { - if($ordenaNome == "sim"){ - $ordem = "nome_subgrupo"; - } - else{ - $ordem = "ordem"; - } - $f = ""; - if($filtraOgc == "sim" || $filtraDown == "sim"){ - $ff = array(); - if($filtraOgc == "sim"){ - $ff[] = " i3geoadmin_temas.ogc_tema = 'SIM' "; - } - if($filtraDown == "sim"){ - $ff[] = " i3geoadmin_temas.download_tema = 'SIM' "; - } - $f = implode(" AND ",$ff) . " AND "; - } - $subgrupos = $this->execSQL($this->sql_subgrupos."where ".$this->pubsql." i3geoadmin_n2.id_n1='$id_n1' order by $ordem"); - $raiz = $this->execSQL($this->sql_temasraiz."where $f i3geoadmin_raiz.nivel = 1 and i3geoadmin_raiz.id_nivel = $id_n1 order by ordem"); - $raiz = $this->validaTemas($raiz,"codigo_tema"); - return array("raiz"=>$raiz,"subgrupos"=>$subgrupos); - } - /* - Function: pegaTemasRaizMenu - - Retorna a lista de temas da raiz de um menu - - Parametros: - - id_menu {string} - - Return: - - {array} - */ - function pegaTemasRaizMenu($id_menu) - { - $raiz = $this->execSQL($this->sql_temasraiz."where i3geoadmin_raiz.id_menu='$id_menu' and i3geoadmin_raiz.nivel = 0 order by ordem"); - $raiz = $this->validaTemas($raiz,"codigo_tema"); - return $raiz; - } - /* - Function: pegaTemasRaizGrupo - - Retorna a lista de temas da raiz de um grupo - - Parametros: - - id_menu {string} - - id_n1 {string} - id do grupo - - Return: - - {array} - */ - function pegaTemasRaizGrupo($id_menu,$id_n1,$filtraOgc="nao",$filtraDown="nao") - { - $f = ""; - if($filtraOgc == "sim" || $filtraDown == "sim"){ - $ff = array(); - if($filtraOgc == "sim"){ - $ff[] = " i3geoadmin_temas.ogc_tema = 'SIM' "; - } - if($filtraDown == "sim"){ - $ff[] = " i3geoadmin_temas.download_tema = 'SIM' "; - } - $f = implode(" AND ",$ff) . " AND "; - } - if($id_n1 == ""){ - $raiz = $this->execSQL($this->sql_temasraiz."where $f i3geoadmin_raiz.nivel = 1 and i3geoadmin_raiz.id_nivel > 0 order by ordem"); - } - else { - $raiz = $this->execSQL($this->sql_temasraiz."where $f i3geoadmin_raiz.nivel = 1 and i3geoadmin_raiz.id_nivel = $id_n1 order by ordem"); - } - $raiz = $this->validaTemas($raiz,"codigo_tema"); - return $raiz; - } - /* - Function: pegaTodosTemas - - Retorna os dados de todos os temas - - Return: - - {array} - */ - function pegaTodosTemas($combo=false) - { - if($combo == true){ - $q = $this->execSQL($this->sql_temas_combo." ORDER BY nome_tema ASC"); - } - else{ - $q = $this->execSQL($this->sql_temas." ORDER BY nome_tema ASC"); - } - if($q){ - $q = $this->validaTemas($q,"codigo_tema"); - return $q; - } - } - /* - Function: pegaTema - - Retorna os dados de um tema - - Parametros: - - id_tema {string} - - Return: - - {array} - */ - function pegaTema($id_tema) - { - $q = $this->execSQL($this->sql_temas." and id_tema = '$id_tema' "); - if($q){ - return $q; - } - else{ - //caso de banco de dados antigo - $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 "; - $q = $this->execSQL($sql." where id_tema = '$id_tema' "); - return $q; - } - } - /* - Function: pegaTemaPorCodigo - - Retorna os dados de um tema buscando por codigo - - Parametros: - - codigo_tema {string} - - Return: - - {array} - */ - function pegaTemaPorCodigo($codigo_tema) - { - $q = $this->execSQL($this->sql_temas." and codigo_tema = '$codigo_tema' "); - if($q){ - return $q; - } - else{ - //caso de banco de dados antigo - $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 "; - $q = $this->execSQL($sql." where codigo_tema = '$codigo_tema' "); - return $q; - } - } - /* - Function: pegaTemasSubGrupo - - Retorna os temas de um subgrupo - - Parametros: - - id_n2 {string} - id do subgrupo - - Return: - - {array} - */ - function pegaTemasSubGrupo($id_n2,$filtraOgc="nao",$filtraDown="nao") - { - $f = ""; - if($filtraOgc == "sim" || $filtraDown == "sim"){ - $ff = array(); - if($filtraOgc == "sim"){ - $ff[] = " i3geoadmin_temas.ogc_tema = 'SIM' "; - } - if($filtraDown == "sim"){ - $ff[] = " i3geoadmin_temas.download_tema = 'SIM' "; - } - $f = implode(" AND ",$ff) . " AND "; - } - $temas = $this->execSQL($this->sql_temasSubgrupo."where $f ".$this->pubsql." i3geoadmin_n3.id_n2='$id_n2' order by ordem"); - $temas = $this->validaTemas($temas,"codigo_tema"); - return $temas; - } - /* - Function: formataMenus - - Retorna os menus e temas na raiz de um menu, formatados no padrão da árvore - - Return: - - {array} - */ - function formataMenus(){ - } - /* - Function: formataGruposMenu - - Retorna os grupos e temas na raiz de um menu, formatados no padrão da árvore - - Parametros: - - id_menu {string} - - perfil {string} - - listasgrupos {string} - sim|nao - - Return: - - {array} - */ - function formataGruposMenu ($id_menu,$perfil,$listasgrupos,$ordenaNome="nao",$filtraOgc="nao",$filtraDown="nao") - { - //error_reporting(0); - $dados = $this->pegaGruposMenu($id_menu,$ordenaNome); - $resultado = array(); - $temasraiz = array(); - foreach($dados["raiz"] as $temar){ - $temasraiz[] = $this->formataTema($temar["id_tema"]); - } - if(count($dados["grupos"]) == 0){ - $grupos[] = array(); - } - $raizgrupos = $this->pegaTemasRaizGrupo($id_menu,"",$filtraOgc,$filtraDown); - //var_dump($raizgrupos);exit; - foreach($dados["grupos"] as $grupo) { - $a = $grupo["n1_perfil"]; - $a = str_replace(" ",",",$a); - if($this->verificaOcorrencia($perfil,explode(",",$a)) == true) - { - $temas = array(); - //$raizgrupo = $this->pegaTemasRaizGrupo($id_menu,$grupo["id_n1"],$filtraOgc,$filtraDown); - $grupodown = "nao"; - $grupoogc = "nao"; - foreach($raizgrupos as $tema){ - if($tema["id_nivel"] == $grupo["id_n1"]){ - $temas[] = $this->formataTema($tema["id_tema"]); - } - } - if($temas > 0){ - $grupodown = "sim"; - $grupoogc = "sim"; - } - $subgrupos = array(); - if($listasgrupos=="sim"){ - $dadossubgrupos = $this->pegaSubgruposGrupo($id_menu,$grupo["id_n1"],$ordenaNome,$filtraOgc,$filtraDown); - foreach($dadossubgrupos["subgrupos"] as $sgrupo){ - $a = $sgrupo["n2_perfil"]; - $a = str_replace(" ",",",$a); - if($this->verificaOcorrencia($perfil,explode(",",$a))){ - //verifica se existem temas que podem receber download - $down = "nao"; - $ogc = "nao"; - $listaT = $this->pegaTemasSubGrupo($sgrupo["id_n2"],$filtraOgc,$filtraDown); - foreach($listaT as $tema){ - if(strtolower($tema["tipoa_tema"]) != "wms") - { - if (strtolower($tema["download_tema"]) != "nao") - { - $down = "sim";$grupodown = "sim"; - } - - if (strtolower($tema["ogc_tema"]) != "nao") - { - $ogc = "sim";$grupoogc = "sim"; - } - } - } - if(count($listaT) > 0){ - $subgrupos[] = array("id_n2"=>$sgrupo["id_n2"],"publicado"=>($sgrupo["publicado"]),"nome"=>$this->converte($sgrupo["nome_subgrupo"]),"download"=>$down,"ogc"=>$ogc); - } - } - } - } - //evita ocorrencias vazias quando for aplicado um filtro - if($filtraOgc == "sim" || $filtraDown == "sim"){ - if(count($subgrupos) > 0 || count($temas) > 0){ - $grupos[] = array("publicado"=>($grupo["publicado"]),"id_n1"=>($grupo["id_n1"]),"nome"=>$this->converte($grupo["nome_grupo"]),"ogc"=>$grupoogc,"download"=>$grupodown,"subgrupos"=>$subgrupos,"temasgrupo"=>$temas); - } - } - else{ - $grupos[] = array("publicado"=>($grupo["publicado"]),"id_n1"=>($grupo["id_n1"]),"nome"=>$this->converte($grupo["nome_grupo"]),"ogc"=>$grupoogc,"download"=>$grupodown,"subgrupos"=>$subgrupos,"temasgrupo"=>$temas); - } - } - } - $grupos[] = array("temasraiz"=>$temasraiz); - //pega os sistemas checando os perfis - $sistemas = array(); - $grupos[] = array("idmenu"=>$id_menu); - $grupos[] = array("sistemas"=>""); - return($grupos); - } - /* - Function: formataSubgruposGrupo - - Retorna os subgrupos e temas na raiz de um grupo, formatados no padrão da árvore - - Parametros: - - id_menu {string} - - id_n1 {string} - id do grupo - - perfil {string} - - Return: - - {array} - */ - function formataSubgruposGrupo ($id_menu,$id_n1,$perfil) - { - $dados = $this->pegaSubgruposGrupo($id_menu,$id_n1); - $resultado = array(); - $temasraiz = array(); - foreach($dados["raiz"] as $temar) - { - $temasraiz[] = $this->formataTema($temar["id_tema"]); - } - if(count($dados["subgrupos"]) == 0) - { - $sgrupos[] = array(); - } - $subgrupos = array(); - foreach($dados["subgrupos"] as $sgrupo) - { - $a = $sgrupo["n2_perfil"]; - $a = str_replace(" ",",",$a); - if ($this->verificaOcorrencia($perfil,explode(",",$a))) - { - $listaT = $this->pegaTemasSubGrupo($sgrupo["id_n2"]); - $down = "nao"; - $ogc = "nao"; - foreach($listaT as $tema) - { - if(strtolower($tema["tipoa_tema"]) != "wms") - { - if (strtolower($tema["download_tema"]) != "nao") - { - $down = "sim"; - } - if (strtolower($tema["ogc_tema"]) != "nao") - { - $ogc = "sim"; - } - } - } - if(count($listaT) > 0) - { - $subgrupos[] = array("publicado"=>($sgrupo["publicado"]),"id_n2"=>($sgrupo["id_n2"]),"nome"=>$this->converte($sgrupo["nome_subgrupo"]),"download"=>$down,"ogc"=>$ogc,"temas"=>$listaT); - } - } - } - return (array("subgrupo"=>$subgrupos,"temasgrupo"=>$temasraiz)); - } - /* - Function: formataTemasSubgrupo - - Retorna os temas de um subgrupo, formatados no padrão da árvore - - Parametros: - - id_n2 {string} - id do subgrupo - - perfil {string} - - Return: - - {array} - */ - function formataTemasSubgrupo($id_n2,$perfil) - { - $dados = $this->pegaTemasSubGrupo($id_n2); - $temas = array(); - foreach($dados as $tema) - { - $a = $tema["n3_perfil"]; - $a = str_replace(" ",",",$a); - if($this->verificaOcorrencia($perfil,explode(",",$a))) - { - $temas[] = $this->formataTema($tema["id_tema"],$tema["publicado"]); - } - } - return $temas; - } - /* - Function: formataTema - - Retorna os dados de um tema, formatados no padrão da árvore - - Parametros: - - id_tema {string} - - publicado {string} - SIM|NAO valor do índice "publicado" que será incluído no array de retorno - - Return: - - {array} - */ - function formataTema($id_tema,$publicado="SIM") - { - $recordset = $this->pegaTema($id_tema); - $recordset = $recordset[0]; - $down = "sim"; - $ogc = "sim"; - $link = " "; - $kmz = "nao"; - if (strtolower($recordset["download_tema"]) == "nao") - { - $down = "nao"; - } - if (strtolower($recordset["ogc_tema"]) == "nao") - { - $ogc = "nao"; - } - if(strtolower($recordset["tipoa_tema"]) == "wms") - { - $down = "nao"; - $ogc = "nao"; - } - if ($recordset["link_tema"] != "") - { - $link = $recordset["link_tema"]; - } - if (strtolower($recordset["kmz_tema"]) == "sim") - { - $kmz = "sim"; - } - //codigo_tema para fins de compatibilidade - return array("codigo_tema"=>($recordset["codigo_tema"]),"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); - } - /* - Function: execSQL - - Executa um SQL no banco de administração - - Parametros: - - sql {string} - - Return: - - {array} - */ - function execSQL($sql) - { - //echo "
".$sql; - //error_reporting(0); - $sql = str_ireplace(array("update","delete","insert","--","drop",";"),"",$sql); - $q = $this->dbh->query($sql,PDO::FETCH_ASSOC); - if($q) - { - return $q->fetchAll(); - } - else - {return false; - } - } - /* - Verifica se uma string ocorre em um array - */ - function verificaOcorrencia($procurar,$em) - { - if(count($em) == 1 && $em[0] == "") - { - $em = ""; - } - if($procurar == "" && $em == "") - { - return true; - } - if($em == "") - { - return true; - } - $resultado = false; - if($procurar != "" && $em != "") - { - foreach($em as $e) - { - $e = trim($e); - foreach($procurar as $p) - { - $p = trim($p); - if($p == $e) - { - $resultado = true; - } - } - } - } - return $resultado; - } - function seems_utf8($Str) { # by bmorel at ssi dot fr - $length = strlen($Str); - for ($i = 0; $i < $length; $i++) { - if (ord($Str[$i]) < 0x80) continue; # 0bbbbbbb - elseif ((ord($Str[$i]) & 0xE0) == 0xC0) $n = 1; # 110bbbbb - elseif ((ord($Str[$i]) & 0xF0) == 0xE0) $n = 2; # 1110bbbb - elseif ((ord($Str[$i]) & 0xF8) == 0xF0) $n = 3; # 11110bbb - elseif ((ord($Str[$i]) & 0xFC) == 0xF8) $n = 4; # 111110bb - elseif ((ord($Str[$i]) & 0xFE) == 0xFC) $n = 5; # 1111110b - else return false; # Does not match any model - for ($j = 0; $j < $n; $j++) { # n bytes matching 10bbbbbb follow ? - if ((++$i == $length) || ((ord($Str[$i]) & 0xC0) != 0x80)) - return false; - } - } - return true; - } - /** - * - * TODO Verificar ao fechar versao - verificar a acentuacao das palavras nessa funcao - */ - function removeAcentos($s) - { - $s = ereg_replace("[áàâã]","a",$s); - $s = ereg_replace("[ÁÀÂÃ]","A",$s); - $s = ereg_replace("[éèê]","e",$s); - $s = ereg_replace("[í]","i",$s); - $s = ereg_replace("[Í]","I",$s); - $s = ereg_replace("[ÉÈÊ]","E",$s); - $s = ereg_replace("[óòôõ]","o",$s); - $s = ereg_replace("[ÓÒÔÕ]","O",$s); - $s = ereg_replace("[úùû]","u",$s); - $s = ereg_replace("[ÚÙÛ]","U",$s); - $s = str_replace("ç","c",$s); - $s = str_replace("Ç","C",$s); - //$str = htmlentities($s); - $str = preg_replace("/(&)([a-z])([a-z]+;)/i", '$2', $s); - $str = preg_replace("/[^A-Z0-9]/i", ' ', $str); - $string = preg_replace("/\s+/i", ' ', $str); - - if (!preg_match('/[\x80-\xff]/', $string)){ - return $string; - } - if ($this->seems_utf8($string)) { - $chars = array( - // Decompositions for Latin-1 Supplement - chr(195).chr(128) => 'A', chr(195).chr(129) => 'A', - chr(195).chr(130) => 'A', chr(195).chr(131) => 'A', - chr(195).chr(132) => 'A', chr(195).chr(133) => 'A', - chr(195).chr(135) => 'C', chr(195).chr(136) => 'E', - chr(195).chr(137) => 'E', chr(195).chr(138) => 'E', - chr(195).chr(139) => 'E', chr(195).chr(140) => 'I', - chr(195).chr(141) => 'I', chr(195).chr(142) => 'I', - chr(195).chr(143) => 'I', chr(195).chr(145) => 'N', - chr(195).chr(146) => 'O', chr(195).chr(147) => 'O', - chr(195).chr(148) => 'O', chr(195).chr(149) => 'O', - chr(195).chr(150) => 'O', chr(195).chr(153) => 'U', - chr(195).chr(154) => 'U', chr(195).chr(155) => 'U', - chr(195).chr(156) => 'U', chr(195).chr(157) => 'Y', - chr(195).chr(159) => 's', chr(195).chr(160) => 'a', - chr(195).chr(161) => 'a', chr(195).chr(162) => 'a', - chr(195).chr(163) => 'a', chr(195).chr(164) => 'a', - chr(195).chr(165) => 'a', chr(195).chr(167) => 'c', - chr(195).chr(168) => 'e', chr(195).chr(169) => 'e', - chr(195).chr(170) => 'e', chr(195).chr(171) => 'e', - chr(195).chr(172) => 'i', chr(195).chr(173) => 'i', - chr(195).chr(174) => 'i', chr(195).chr(175) => 'i', - chr(195).chr(177) => 'n', chr(195).chr(178) => 'o', - chr(195).chr(179) => 'o', chr(195).chr(180) => 'o', - chr(195).chr(181) => 'o', chr(195).chr(182) => 'o', - chr(195).chr(182) => 'o', chr(195).chr(185) => 'u', - chr(195).chr(186) => 'u', chr(195).chr(187) => 'u', - chr(195).chr(188) => 'u', chr(195).chr(189) => 'y', - chr(195).chr(191) => 'y', - // Decompositions for Latin Extended-A - chr(196).chr(128) => 'A', chr(196).chr(129) => 'a', - chr(196).chr(130) => 'A', chr(196).chr(131) => 'a', - chr(196).chr(132) => 'A', chr(196).chr(133) => 'a', - chr(196).chr(134) => 'C', chr(196).chr(135) => 'c', - chr(196).chr(136) => 'C', chr(196).chr(137) => 'c', - chr(196).chr(138) => 'C', chr(196).chr(139) => 'c', - chr(196).chr(140) => 'C', chr(196).chr(141) => 'c', - chr(196).chr(142) => 'D', chr(196).chr(143) => 'd', - chr(196).chr(144) => 'D', chr(196).chr(145) => 'd', - chr(196).chr(146) => 'E', chr(196).chr(147) => 'e', - chr(196).chr(148) => 'E', chr(196).chr(149) => 'e', - chr(196).chr(150) => 'E', chr(196).chr(151) => 'e', - chr(196).chr(152) => 'E', chr(196).chr(153) => 'e', - chr(196).chr(154) => 'E', chr(196).chr(155) => 'e', - chr(196).chr(156) => 'G', chr(196).chr(157) => 'g', - chr(196).chr(158) => 'G', chr(196).chr(159) => 'g', - chr(196).chr(160) => 'G', chr(196).chr(161) => 'g', - chr(196).chr(162) => 'G', chr(196).chr(163) => 'g', - chr(196).chr(164) => 'H', chr(196).chr(165) => 'h', - chr(196).chr(166) => 'H', chr(196).chr(167) => 'h', - chr(196).chr(168) => 'I', chr(196).chr(169) => 'i', - chr(196).chr(170) => 'I', chr(196).chr(171) => 'i', - chr(196).chr(172) => 'I', chr(196).chr(173) => 'i', - chr(196).chr(174) => 'I', chr(196).chr(175) => 'i', - chr(196).chr(176) => 'I', chr(196).chr(177) => 'i', - chr(196).chr(178) => 'IJ',chr(196).chr(179) => 'ij', - chr(196).chr(180) => 'J', chr(196).chr(181) => 'j', - chr(196).chr(182) => 'K', chr(196).chr(183) => 'k', - chr(196).chr(184) => 'k', chr(196).chr(185) => 'L', - chr(196).chr(186) => 'l', chr(196).chr(187) => 'L', - chr(196).chr(188) => 'l', chr(196).chr(189) => 'L', - chr(196).chr(190) => 'l', chr(196).chr(191) => 'L', - chr(197).chr(128) => 'l', chr(197).chr(129) => 'L', - chr(197).chr(130) => 'l', chr(197).chr(131) => 'N', - chr(197).chr(132) => 'n', chr(197).chr(133) => 'N', - chr(197).chr(134) => 'n', chr(197).chr(135) => 'N', - chr(197).chr(136) => 'n', chr(197).chr(137) => 'N', - chr(197).chr(138) => 'n', chr(197).chr(139) => 'N', - chr(197).chr(140) => 'O', chr(197).chr(141) => 'o', - chr(197).chr(142) => 'O', chr(197).chr(143) => 'o', - chr(197).chr(144) => 'O', chr(197).chr(145) => 'o', - chr(197).chr(146) => 'OE',chr(197).chr(147) => 'oe', - chr(197).chr(148) => 'R',chr(197).chr(149) => 'r', - chr(197).chr(150) => 'R',chr(197).chr(151) => 'r', - chr(197).chr(152) => 'R',chr(197).chr(153) => 'r', - chr(197).chr(154) => 'S',chr(197).chr(155) => 's', - chr(197).chr(156) => 'S',chr(197).chr(157) => 's', - chr(197).chr(158) => 'S',chr(197).chr(159) => 's', - chr(197).chr(160) => 'S', chr(197).chr(161) => 's', - chr(197).chr(162) => 'T', chr(197).chr(163) => 't', - chr(197).chr(164) => 'T', chr(197).chr(165) => 't', - chr(197).chr(166) => 'T', chr(197).chr(167) => 't', - chr(197).chr(168) => 'U', chr(197).chr(169) => 'u', - chr(197).chr(170) => 'U', chr(197).chr(171) => 'u', - chr(197).chr(172) => 'U', chr(197).chr(173) => 'u', - chr(197).chr(174) => 'U', chr(197).chr(175) => 'u', - chr(197).chr(176) => 'U', chr(197).chr(177) => 'u', - chr(197).chr(178) => 'U', chr(197).chr(179) => 'u', - chr(197).chr(180) => 'W', chr(197).chr(181) => 'w', - chr(197).chr(182) => 'Y', chr(197).chr(183) => 'y', - chr(197).chr(184) => 'Y', chr(197).chr(185) => 'Z', - chr(197).chr(186) => 'z', chr(197).chr(187) => 'Z', - chr(197).chr(188) => 'z', chr(197).chr(189) => 'Z', - chr(197).chr(190) => 'z', chr(197).chr(191) => 's', - // Euro Sign - chr(226).chr(130).chr(172) => 'E', - // GBP (Pound) Sign - chr(194).chr(163) => ''); - $string = strtr($string, $chars); - } else { - // Assume ISO-8859-1 if not UTF-8 - $chars['in'] = chr(128).chr(131).chr(138).chr(142).chr(154).chr(158) - .chr(159).chr(162).chr(165).chr(181).chr(192).chr(193).chr(194) - .chr(195).chr(196).chr(197).chr(199).chr(200).chr(201).chr(202) - .chr(203).chr(204).chr(205).chr(206).chr(207).chr(209).chr(210) - .chr(211).chr(212).chr(213).chr(214).chr(216).chr(217).chr(218) - .chr(219).chr(220).chr(221).chr(224).chr(225).chr(226).chr(227) - .chr(228).chr(229).chr(231).chr(232).chr(233).chr(234).chr(235) - .chr(236).chr(237).chr(238).chr(239).chr(241).chr(242).chr(243) - .chr(244).chr(245).chr(246).chr(248).chr(249).chr(250).chr(251) - .chr(252).chr(253).chr(255); - $chars['out'] = "EfSZszYcYuAAAAAACEEEEIIIINOOOOOOUUUUYaaaaaaceeeeiiiinoooooouuuuyy"; - $string = strtr($string, $chars['in'], $chars['out']); - $double_chars['in'] = array(chr(140), chr(156), chr(198), chr(208), chr(222), chr(223), chr(230), chr(240), chr(254)); - $double_chars['out'] = array('OE', 'oe', 'AE', 'DH', 'TH', 'ss', 'ae', 'dh', 'th'); - $string = str_replace($double_chars['in'], $double_chars['out'], $string); - } - return $string; - } - function converte($texto){ - if($this->convUTF == true) - $texto = mb_convert_encoding($texto,mb_detect_encoding($texto),"UTF-8"); - else - $texto = mb_convert_encoding($texto,mb_detect_encoding($texto),"ISO-8859-1"); - return $texto; - } - function verificaPapelSessao($id_papel){ - if(!empty($_COOKIE["i3geocodigologin"])){ - session_write_close(); - session_name("i3GeoLogin"); - session_id($_COOKIE["i3geocodigologin"]); - session_start(); - //var_dump($_SESSION);exit; - if($_SESSION["usuario"] != $_COOKIE["i3geousuariologin"]){ - return false; - } - foreach($_SESSION["papeis"] as $p){ - if($p == 1 || $p == $id_papel){ - return true; - } - } - } - else{//caso nao exista, retorna um erro - return false; - } - } - function verificaOperacaoSessao($operacao){ - if($_COOKIE["i3geocodigologin"] != ""){ - session_write_close(); - session_name("i3GeoLogin"); - session_id($_COOKIE["i3geocodigologin"]); - session_start(); - $resultado = false; - //verifica se e administrador - foreach($_SESSION["papeis"] as $p){ - if($p == 1){ - return true; - } - } - if(!empty($_SESSION["operacoes"][$operacao])){ - $resultado = true; - } - return $resultado; - } else { - return false; - } - } -} -?> \ No newline at end of file diff --git a/admin/php/xxxclasse_arvore.php b/admin/php/xxxclasse_arvore.php new file mode 100755 index 0000000..1f68db2 --- /dev/null +++ b/admin/php/xxxclasse_arvore.php @@ -0,0 +1,1268 @@ + +*/ +class Arvore +{ + //temas com acesso restrito e que nao podem ser acessados pelo usuario que esta logado + public $temassindevidos; + protected $locaplic; + //subgrupos que tem pelo menos um tema + //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 "; + //grupos que tem pelo menos um sub-grupo + //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 "; + //nomes de todos os grupos + public $sql_todosgrupos = "select * from i3geoadmin_grupos "; + //tipo de filtro + //ogc|download|"" + public $filtro; + //temas na raiz + //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 "; + //todos os temas + //public $sql_temas = "select * from i3geoadmin_temas "; + //temas de um subgrupo + //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 "; + /* + Function: __construct + + Cria um objeto Arvore + + Parametros: + + locaplic {string} - localização do i3geo no sistema de arquivos + + idioma {string} - default = "pt" + */ + function __construct($locaplic,$idioma="pt",$filtro="") + { + $this->locaplic = $locaplic; + $this->filtro = $filtro; + $dbh = ""; + //error_reporting(0); + + include($locaplic."/classesphp/conexao.php"); + + $this->esquemaadmin = $esquemaadmin; + $this->convUTF = $convUTF; + $this->dbh = $dbh; + + $this->idioma = $idioma; + if($idioma == "pt"){ + $coluna = "nome_grupo"; + } + else{ + $coluna = $idioma; + } + $this->sql_grupos = "select CASE i3geoadmin_grupos.$coluna WHEN '' THEN nome_grupo ELSE i3geoadmin_grupos.$coluna END as nome_grupo,i3geoadmin_grupos.id_grupo, id_n1,id_menu,i3geoadmin_n1.publicado,n1_perfil,ordem from ".$this->esquemaadmin."i3geoadmin_n1 LEFT JOIN ".$this->esquemaadmin."i3geoadmin_grupos ON i3geoadmin_n1.id_grupo = i3geoadmin_grupos.id_grupo "; + if($filtro === "ogc" || $filtro === "download"){ + //esse sql retorna tambem os grupos dos temas que estao na raiz do grupo + $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 "; + } + + if($idioma == "pt"){ + $coluna = "nome_subgrupo"; + } + else{ + $coluna = $idioma; + } + $this->sql_subgrupos = "select CASE i3geoadmin_subgrupos.$coluna WHEN '' THEN nome_subgrupo ELSE i3geoadmin_subgrupos.$coluna END as nome_subgrupo,i3geoadmin_subgrupos.id_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 "; + + if($idioma == "pt"){ + $coluna = "nome_tema"; + } + else{ + $coluna = $idioma; + } + + $this->sql_temasraiz = "select id_nivel,ordem,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, download_tema, link_tema FROM ".$this->esquemaadmin."i3geoadmin_raiz LEFT JOIN ".$this->esquemaadmin."i3geoadmin_temas ON i3geoadmin_temas.id_tema = i3geoadmin_raiz.id_tema "; + $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 "; + + //$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 "; + + $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 "; + $this->sql_temas_combo = "select id_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 "; + // + //verifica se o ip atual está cadastrado como um dos editores + //editores podem ver as coisas marcadas como não publicado + //no sistema de administração + // + $this->editor = false; + $this->editor = $this->verificaOperacaoSessao("admin/php/classe_arvore/editor"); + $this->pubsql = " (publicado != 'NAO' or publicado is null) and "; + if($this->editor){ + $this->pubsql = ""; + } + if(!function_exists("listaTemasIndevidos")){ + include_once(dirname(__FILE__)."/../../classesphp/funcoes_gerais.php"); + } + $this->temasindevidos = listaTemasIndevidos(); + } + function __destruct() + { + $this->dbh = null; + $this->dbhw = null; + } + /* + Function: validaTemas + + Remove de um array os temas que nao sao permitidos ao usuario atualmente logado + */ + function validaTemas($linhas,$id){ + $res = array(); + foreach($linhas as $l){ + if(!in_array($l[$id],$this->temasindevidos)){ + array_push($res,$l); + } + } + return $res; + } + /* + Function: pegaListaDeMenus + + Retorna a lista de menus + + Parametros: + + perfil {string} - considera apenas esse perfil + + Return: + + {array} + */ + function pegaListaDeMenus($perfil="",$filtraOgc="nao",$filtraDown="nao") + { + if($this->idioma == "pt"){ + $coluna = "nome_menu"; + } + else{ + $coluna = $this->idioma; + } + if($this->editor == true) + { + $perfil = ""; + $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"; + } + else{ + $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"; + } + $regs = $this->execSQL($sql); + $resultado = array(); + foreach($regs as $reg){ + $a = $reg["perfil_menu"]; + $a = str_replace(" ",",",$a); + if ($this->verificaOcorrencia($perfil,explode(",",$a))) + { + $status = "fechado"; + if(strtolower($reg["aberto"]) == "sim") + $status = "aberto"; + $url = ""; + $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); + } + } + return $resultado; + } + /* + Function: pegaListaDeTiposGrupos + + Retorna a lista de grupos de um menu + + Parametros: + + id_menu {string} + + Return: + + {array} + */ + function pegaListaDeTiposGrupos(){ + if($this->idioma == "pt"){ + $coluna = "nome_grupo"; + } + else{ + $coluna = $this->idioma; + } + $sql = "select CASE i3geoadmin_grupos.$coluna WHEN '' THEN nome_grupo ELSE i3geoadmin_grupos.$coluna END as nome_grupo, id_grupo from ".$this->esquemaadmin."i3geoadmin_grupos ORDER by nome_grupo "; + $grupos = $this->execSQL($sql); + return $grupos; + } + /* + Function: pegaListaDeTiposSubGrupos + + Retorna a lista de grupos de um menu + + Parametros: + + id_menu {string} + + Return: + + {array} + */ + function pegaListaDeTiposSubGrupos(){ + if($this->idioma == "pt"){ + $coluna = "nome_subgrupo"; + } + else{ + $coluna = $this->idioma; + } + $sql = "select CASE i3geoadmin_subgrupos.$coluna WHEN '' THEN nome_subgrupo ELSE i3geoadmin_subgrupos.$coluna END as nome_subgrupo, id_subgrupo from ".$this->esquemaadmin."i3geoadmin_subgrupos ORDER by nome_subgrupo "; + $subgrupos = $this->execSQL($sql); + return $subgrupos; + } + /* + Function: procuraTemas + + Localiza temas conforme uma palavra de busca + + Parametros: + + procurar {string} - palavra de busca + + perfil {string} - considera apenas esse perfil + + Return: + + {array} + */ + function procuraTemas ($procurar,$perfil) + { + if($procurar != "") + { + $procurar = $this->removeAcentos($procurar); + } + $menus = $this->pegaListaDeMenus($perfil); + $resultado = array(); + $subgrupo = array(); + $final = array(); + foreach($menus as $menu) + { + $grupos = $this->pegaGruposMenu($menu["idmenu"]); + foreach($grupos["grupos"] as $grupo) + { + $a = $grupo["n1_perfil"]; + $a = str_replace(" ",",",$a); + if($this->verificaOcorrencia($perfil,explode(",",$a))) + { + $sgrupos = $this->pegaSubgruposGrupo($menu["idmenu"],$grupo["id_n1"]); + $temasRaizGrupo = array(); + $temasR = $this->pegaTemasRaizGrupo($menu["idmenu"],$grupo["id_n1"]); + foreach($temasR as $tema) + { + $a = $tema["perfil"]; + $a = str_replace(" ",",",$a); + if($this->verificaOcorrencia($perfil,explode(",",$a))) + { + $t = $this->pegaTema($tema["id_tema"]); + $t = $t[0]; + $nome = $this->removeAcentos($tema["nome_tema"]); + $tags = $this->removeAcentos($tema["tags_tema"]); + $tags1 = $this->removeAcentos(mb_convert_encoding($tema["tags_tema"],"ISO-8859-1","UTF-8")); + $nome1 = $this->removeAcentos(mb_convert_encoding($tema["nome_tema"],"ISO-8859-1","UTF-8")); + $miniatura = "nao"; + if(file_exists($this->locaplic."/temas/miniaturas/".$t["codigo_tema"].".map.mini.png")) + { + $miniatura = "sim"; + } + $down = "sim"; + if (strtolower($t["download_tema"]) == "nao") + { + $down = "nao"; + } + $texto = array("codigo_tema"=>$t["codigo_tema"],"miniatura"=>$miniatura,"tid"=>$t["codigo_tema"],"nome"=>$this->converte($tema["nome_tema"]),"link"=>$t["link_tema"],"download"=>$down); + if($procurar == "") + { + $temasRaizGrupo[] = $texto; + } + else + { + if (stristr($nome,$procurar) || stristr($nome1,$procurar)) + { + $temasRaizGrupo[] = $texto; + } + else + { + if (stristr($tags,$procurar) || stristr($tags1,$procurar)) + { + $temasRaizGrupo[] = $texto; + } + } + } + } + } + foreach($sgrupos["subgrupos"] as $sgrupo) + { + $a = $sgrupo["n2_perfil"]; + $a = str_replace(" ",",",$a); + if($this->verificaOcorrencia($perfil,explode(",",$a))) + { + $temas = $this->pegaTemasSubGrupo($sgrupo["id_n2"]); + foreach ($temas as $tema) + { + $a = $tema["n3_perfil"]; + $a = str_replace(" ",",",$a); + if($this->verificaOcorrencia($perfil,explode(",",$a))) + { + $t = $this->pegaTema($tema["id_tema"]); + $t = $t[0]; + $nome = $this->removeAcentos($tema["nome_tema"]); + $tags = $this->removeAcentos($tema["tags_tema"]); + $tags1 = $this->removeAcentos(mb_convert_encoding($tema["tags_tema"],"ISO-8859-1","UTF-8")); + $nome1 = $this->removeAcentos(mb_convert_encoding($tema["nome_tema"],"ISO-8859-1","UTF-8")); + $miniatura = "nao"; + if(file_exists($this->locaplic."/temas/miniaturas/".$tema["codigo_tema"].".map.mini.png")) + { + $miniatura = "sim"; + } + $down = "sim"; + if (strtolower($t["download_tema"]) == "nao") + { + $down = "nao"; + } + $texto = array("codigo_tema"=>$tema["codigo_tema"],"miniatura"=>$miniatura,"tid"=>$tema["codigo_tema"],"nome"=>$this->converte($tema["nome_tema"]),"link"=>$t["link_tema"],"download"=>$down); + if($procurar == "") + { + $resultado[] = $texto; + } + else + { + if (stristr($nome,$procurar) || stristr($nome1,$procurar)) + { + $resultado[] = $texto; + } + else + { + if (stristr($tags,$procurar) || stristr($tags1,$procurar)) + { + $resultado[] = $texto; + } + } + } + } + } + } + if (count($resultado) > 0) + { + $subgrupo[] = array("subgrupo"=>$this->converte($sgrupo["nome_subgrupo"]),"temas"=>$resultado); + } + $resultado = array(); + } + } + if (count($subgrupo) > 0 || count($temasRaizGrupo) > 0) + { + $final[] = array("grupo"=>$this->converte($grupo["nome_grupo"]),"temas"=>$temasRaizGrupo,"subgrupos"=>$subgrupo); + } + $subgrupo = array(); + } + } + return $final; + } + /* + Function: procuraTemasEstrela + + Localiza temas que têm um determinado número (nível) de estrelas + + Parametros: + + nivel {numeric} - número de estrelas + + perfil {string} - considera apenas esse perfil + + Return: + + {array} + */ + function procuraTemasEstrela($nivel,$fatorestrela,$perfil) + { + $menus = $this->pegaListaDeMenus($perfil); + + $resultado = array(); + $subgrupo = array(); + $final = array(); + foreach($menus as $menu) + { + $grupos = $this->pegaGruposMenu($menu["idmenu"]); + foreach($grupos["grupos"] as $grupo) + { + $a = $grupo["n1_perfil"]; + $a = str_replace(" ",",",$a); + if($this->verificaOcorrencia($perfil,explode(",",$a))) + { + $sgrupos = $this->pegaSubgruposGrupo($menu["idmenu"],$grupo["id_n1"]); + $temasRaizGrupo = array(); + $temasR = $this->pegaTemasRaizGrupo($menu["idmenu"],$grupo["id_n1"]); + foreach($temasR as $tema) + { + $a = $tema["perfil"]; + $a = str_replace(" ",",",$a); + if($this->verificaOcorrencia($perfil,explode(",",$a))) + { + $t = $this->pegaTema($tema["id_tema"]); + $t = $t[0]; + $nome = $this->removeAcentos($tema["nome_tema"]); + $tags = $this->removeAcentos($tema["tags_tema"]); + $tags1 = $this->removeAcentos(mb_convert_encoding($tema["tags_tema"],"ISO-8859-1","UTF-8")); + $nome1 = $this->removeAcentos(mb_convert_encoding($tema["nome_tema"],"ISO-8859-1","UTF-8")); + $miniatura = "nao"; + if(file_exists($this->locaplic."/temas/miniaturas/".$t["codigo_tema"].".map.mini.png")) + { + $miniatura = "sim"; + } + $down = "sim"; + if (strtolower($t["download_tema"]) == "nao") + { + $down = "nao"; + } + $texto = array("codigo_tema"=>$t["codigo_tema"],"miniatura"=>$miniatura,"tid"=>$t["codigo_tema"],"nome"=>$this->converte($tema["nome_tema"]),"link"=>$t["link_tema"],"download"=>$down); + $n = intval($t["nacessos"] / $fatorestrela); + if($n >= 5){ + $n = 5; + } + + if ($n == $nivel) + { + $temasRaizGrupo[] = $texto; + } + } + } + foreach($sgrupos["subgrupos"] as $sgrupo) + { + $a = $sgrupo["n2_perfil"]; + $a = str_replace(" ",",",$a); + if($this->verificaOcorrencia($perfil,explode(",",$a))) + { + $temas = $this->pegaTemasSubGrupo($sgrupo["id_n2"]); + foreach ($temas as $tema) + { + $a = $tema["n3_perfil"]; + $a = str_replace(" ",",",$a); + if($this->verificaOcorrencia($perfil,explode(",",$a))) + { + $t = $this->pegaTema($tema["id_tema"]); + $t = $t[0]; + $nome = $this->removeAcentos($tema["nome_tema"]); + $tags = $this->removeAcentos($tema["tags_tema"]); + $tags1 = $this->removeAcentos(mb_convert_encoding($tema["tags_tema"],"ISO-8859-1","UTF-8")); + $nome1 = $this->removeAcentos(mb_convert_encoding($tema["nome_tema"],"ISO-8859-1","UTF-8")); + $miniatura = "nao"; + if(file_exists($this->locaplic."/temas/miniaturas/".$tema["codigo_tema"].".map.mini.png")) + { + $miniatura = "sim"; + } + $down = "sim"; + if (strtolower($t["download_tema"]) == "nao") + { + $down = "nao"; + } + $texto = array("codigo_tema"=>$tema["codigo_tema"],"miniatura"=>$miniatura,"tid"=>$tema["codigo_tema"],"nome"=>$this->converte($tema["nome_tema"]),"link"=>$t["link_tema"],"download"=>$down); + $n = abs($t["nacessos"] / $fatorestrela); + if($n >= 5){ + $n = 5; + } + if ($n == $nivel) + { + $resultado[] = $texto; + } + } + } + } + if (count($resultado) > 0) + { + $subgrupo[] = array("subgrupo"=>$this->converte($sgrupo["nome_subgrupo"]),"temas"=>$resultado); + } + $resultado = array(); + } + } + if (count($subgrupo) > 0 || count($temasRaizGrupo) > 0) + { + $final[] = array("grupo"=>$this->converte($grupo["nome_grupo"]),"temas"=>$temasRaizGrupo,"subgrupos"=>$subgrupo); + } + $subgrupo = array(); + } + } + return $final; + } + /* + Function: pegaGruposMenu + + Retorna a lista de grupos de um menu + + Parametros: + + id_menu {string} + + Return: + + {array} + */ + function pegaGruposMenu($id_menu,$ordenaNome="nao"){ + if($ordenaNome == "sim"){ + $ordem = "nome_grupo"; + } + else{ + $ordem = "ordem"; + } + $sqlgrupos = $this->sql_grupos."where ".$this->pubsql." id_menu='$id_menu' order by $ordem"; + $sqlraiz = $this->sql_temasraiz."where i3geoadmin_raiz.id_menu='$id_menu' and i3geoadmin_raiz.nivel = 0 order by ordem"; + $grupos = $this->execSQL($sqlgrupos); + $raiz = $this->execSQL($sqlraiz); + $raiz = $this->validaTemas($raiz,"codigo_tema"); + return array("raiz"=>$raiz,"grupos"=>$grupos); + } + /* + Function: pegaSubgruposGrupo + + Retorna a lista de subgrupos de um grupo + + Parametros: + + id_menu {string} + + id_n1 {string} - id do grupo + + Return: + + {array} + */ + function pegaSubgruposGrupo($id_menu,$id_n1,$ordenaNome="nao",$filtraOgc="nao",$filtraDown="nao") + { + if($ordenaNome == "sim"){ + $ordem = "nome_subgrupo"; + } + else{ + $ordem = "ordem"; + } + $f = ""; + if($filtraOgc == "sim" || $filtraDown == "sim"){ + $ff = array(); + if($filtraOgc == "sim"){ + $ff[] = " i3geoadmin_temas.ogc_tema = 'SIM' "; + } + if($filtraDown == "sim"){ + $ff[] = " i3geoadmin_temas.download_tema = 'SIM' "; + } + $f = implode(" AND ",$ff) . " AND "; + } + $subgrupos = $this->execSQL($this->sql_subgrupos."where ".$this->pubsql." i3geoadmin_n2.id_n1='$id_n1' order by $ordem"); + $raiz = $this->execSQL($this->sql_temasraiz."where $f i3geoadmin_raiz.nivel = 1 and i3geoadmin_raiz.id_nivel = $id_n1 order by ordem"); + $raiz = $this->validaTemas($raiz,"codigo_tema"); + return array("raiz"=>$raiz,"subgrupos"=>$subgrupos); + } + /* + Function: pegaTemasRaizMenu + + Retorna a lista de temas da raiz de um menu + + Parametros: + + id_menu {string} + + Return: + + {array} + */ + function pegaTemasRaizMenu($id_menu) + { + $raiz = $this->execSQL($this->sql_temasraiz."where i3geoadmin_raiz.id_menu='$id_menu' and i3geoadmin_raiz.nivel = 0 order by ordem"); + $raiz = $this->validaTemas($raiz,"codigo_tema"); + return $raiz; + } + /* + Function: pegaTemasRaizGrupo + + Retorna a lista de temas da raiz de um grupo + + Parametros: + + id_menu {string} + + id_n1 {string} - id do grupo + + Return: + + {array} + */ + function pegaTemasRaizGrupo($id_menu,$id_n1,$filtraOgc="nao",$filtraDown="nao") + { + $f = ""; + if($filtraOgc == "sim" || $filtraDown == "sim"){ + $ff = array(); + if($filtraOgc == "sim"){ + $ff[] = " i3geoadmin_temas.ogc_tema = 'SIM' "; + } + if($filtraDown == "sim"){ + $ff[] = " i3geoadmin_temas.download_tema = 'SIM' "; + } + $f = implode(" AND ",$ff) . " AND "; + } + if($id_n1 == ""){ + $raiz = $this->execSQL($this->sql_temasraiz."where $f i3geoadmin_raiz.nivel = 1 and i3geoadmin_raiz.id_nivel > 0 order by ordem"); + } + else { + $raiz = $this->execSQL($this->sql_temasraiz."where $f i3geoadmin_raiz.nivel = 1 and i3geoadmin_raiz.id_nivel = $id_n1 order by ordem"); + } + $raiz = $this->validaTemas($raiz,"codigo_tema"); + return $raiz; + } + /* + Function: pegaTodosTemas + + Retorna os dados de todos os temas + + Return: + + {array} + */ + function pegaTodosTemas($combo=false) + { + if($combo == true){ + $q = $this->execSQL($this->sql_temas_combo." ORDER BY nome_tema ASC"); + } + else{ + $q = $this->execSQL($this->sql_temas." ORDER BY nome_tema ASC"); + } + if($q){ + $q = $this->validaTemas($q,"codigo_tema"); + return $q; + } + } + /* + Function: pegaTema + + Retorna os dados de um tema + + Parametros: + + id_tema {string} + + Return: + + {array} + */ + function pegaTema($id_tema) + { + $q = $this->execSQL($this->sql_temas." and id_tema = '$id_tema' "); + if($q){ + return $q; + } + else{ + //caso de banco de dados antigo + $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 "; + $q = $this->execSQL($sql." where id_tema = '$id_tema' "); + return $q; + } + } + /* + Function: pegaTemaPorCodigo + + Retorna os dados de um tema buscando por codigo + + Parametros: + + codigo_tema {string} + + Return: + + {array} + */ + function pegaTemaPorCodigo($codigo_tema) + { + $q = $this->execSQL($this->sql_temas." and codigo_tema = '$codigo_tema' "); + if($q){ + return $q; + } + else{ + //caso de banco de dados antigo + $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 "; + $q = $this->execSQL($sql." where codigo_tema = '$codigo_tema' "); + return $q; + } + } + /* + Function: pegaTemasSubGrupo + + Retorna os temas de um subgrupo + + Parametros: + + id_n2 {string} - id do subgrupo + + Return: + + {array} + */ + function pegaTemasSubGrupo($id_n2,$filtraOgc="nao",$filtraDown="nao") + { + $f = ""; + if($filtraOgc == "sim" || $filtraDown == "sim"){ + $ff = array(); + if($filtraOgc == "sim"){ + $ff[] = " i3geoadmin_temas.ogc_tema = 'SIM' "; + } + if($filtraDown == "sim"){ + $ff[] = " i3geoadmin_temas.download_tema = 'SIM' "; + } + $f = implode(" AND ",$ff) . " AND "; + } + $temas = $this->execSQL($this->sql_temasSubgrupo."where $f ".$this->pubsql." i3geoadmin_n3.id_n2='$id_n2' order by ordem"); + $temas = $this->validaTemas($temas,"codigo_tema"); + return $temas; + } + /* + Function: formataMenus + + Retorna os menus e temas na raiz de um menu, formatados no padrão da árvore + + Return: + + {array} + */ + function formataMenus(){ + } + /* + Function: formataGruposMenu + + Retorna os grupos e temas na raiz de um menu, formatados no padrão da árvore + + Parametros: + + id_menu {string} + + perfil {string} + + listasgrupos {string} - sim|nao + + Return: + + {array} + */ + function formataGruposMenu ($id_menu,$perfil,$listasgrupos,$ordenaNome="nao",$filtraOgc="nao",$filtraDown="nao") + { + //error_reporting(0); + $dados = $this->pegaGruposMenu($id_menu,$ordenaNome); + $resultado = array(); + $temasraiz = array(); + foreach($dados["raiz"] as $temar){ + $temasraiz[] = $this->formataTema($temar["id_tema"]); + } + if(count($dados["grupos"]) == 0){ + $grupos[] = array(); + } + $raizgrupos = $this->pegaTemasRaizGrupo($id_menu,"",$filtraOgc,$filtraDown); + //var_dump($raizgrupos);exit; + foreach($dados["grupos"] as $grupo) { + $a = $grupo["n1_perfil"]; + $a = str_replace(" ",",",$a); + if($this->verificaOcorrencia($perfil,explode(",",$a)) == true) + { + $temas = array(); + //$raizgrupo = $this->pegaTemasRaizGrupo($id_menu,$grupo["id_n1"],$filtraOgc,$filtraDown); + $grupodown = "nao"; + $grupoogc = "nao"; + foreach($raizgrupos as $tema){ + if($tema["id_nivel"] == $grupo["id_n1"]){ + $temas[] = $this->formataTema($tema["id_tema"]); + } + } + if($temas > 0){ + $grupodown = "sim"; + $grupoogc = "sim"; + } + $subgrupos = array(); + if($listasgrupos=="sim"){ + $dadossubgrupos = $this->pegaSubgruposGrupo($id_menu,$grupo["id_n1"],$ordenaNome,$filtraOgc,$filtraDown); + foreach($dadossubgrupos["subgrupos"] as $sgrupo){ + $a = $sgrupo["n2_perfil"]; + $a = str_replace(" ",",",$a); + if($this->verificaOcorrencia($perfil,explode(",",$a))){ + //verifica se existem temas que podem receber download + $down = "nao"; + $ogc = "nao"; + $listaT = $this->pegaTemasSubGrupo($sgrupo["id_n2"],$filtraOgc,$filtraDown); + foreach($listaT as $tema){ + if(strtolower($tema["tipoa_tema"]) != "wms") + { + if (strtolower($tema["download_tema"]) != "nao") + { + $down = "sim";$grupodown = "sim"; + } + + if (strtolower($tema["ogc_tema"]) != "nao") + { + $ogc = "sim";$grupoogc = "sim"; + } + } + } + if(count($listaT) > 0){ + $subgrupos[] = array("id_n2"=>$sgrupo["id_n2"],"publicado"=>($sgrupo["publicado"]),"nome"=>$this->converte($sgrupo["nome_subgrupo"]),"download"=>$down,"ogc"=>$ogc); + } + } + } + } + //evita ocorrencias vazias quando for aplicado um filtro + if($filtraOgc == "sim" || $filtraDown == "sim"){ + if(count($subgrupos) > 0 || count($temas) > 0){ + $grupos[] = array("publicado"=>($grupo["publicado"]),"id_n1"=>($grupo["id_n1"]),"nome"=>$this->converte($grupo["nome_grupo"]),"ogc"=>$grupoogc,"download"=>$grupodown,"subgrupos"=>$subgrupos,"temasgrupo"=>$temas); + } + } + else{ + $grupos[] = array("publicado"=>($grupo["publicado"]),"id_n1"=>($grupo["id_n1"]),"nome"=>$this->converte($grupo["nome_grupo"]),"ogc"=>$grupoogc,"download"=>$grupodown,"subgrupos"=>$subgrupos,"temasgrupo"=>$temas); + } + } + } + $grupos[] = array("temasraiz"=>$temasraiz); + //pega os sistemas checando os perfis + $sistemas = array(); + $grupos[] = array("idmenu"=>$id_menu); + $grupos[] = array("sistemas"=>""); + return($grupos); + } + /* + Function: formataSubgruposGrupo + + Retorna os subgrupos e temas na raiz de um grupo, formatados no padrão da árvore + + Parametros: + + id_menu {string} + + id_n1 {string} - id do grupo + + perfil {string} + + Return: + + {array} + */ + function formataSubgruposGrupo ($id_menu,$id_n1,$perfil) + { + $dados = $this->pegaSubgruposGrupo($id_menu,$id_n1); + $resultado = array(); + $temasraiz = array(); + foreach($dados["raiz"] as $temar) + { + $temasraiz[] = $this->formataTema($temar["id_tema"]); + } + if(count($dados["subgrupos"]) == 0) + { + $sgrupos[] = array(); + } + $subgrupos = array(); + foreach($dados["subgrupos"] as $sgrupo) + { + $a = $sgrupo["n2_perfil"]; + $a = str_replace(" ",",",$a); + if ($this->verificaOcorrencia($perfil,explode(",",$a))) + { + $listaT = $this->pegaTemasSubGrupo($sgrupo["id_n2"]); + $down = "nao"; + $ogc = "nao"; + foreach($listaT as $tema) + { + if(strtolower($tema["tipoa_tema"]) != "wms") + { + if (strtolower($tema["download_tema"]) != "nao") + { + $down = "sim"; + } + if (strtolower($tema["ogc_tema"]) != "nao") + { + $ogc = "sim"; + } + } + } + if(count($listaT) > 0) + { + $subgrupos[] = array("publicado"=>($sgrupo["publicado"]),"id_n2"=>($sgrupo["id_n2"]),"nome"=>$this->converte($sgrupo["nome_subgrupo"]),"download"=>$down,"ogc"=>$ogc,"temas"=>$listaT); + } + } + } + return (array("subgrupo"=>$subgrupos,"temasgrupo"=>$temasraiz)); + } + /* + Function: formataTemasSubgrupo + + Retorna os temas de um subgrupo, formatados no padrão da árvore + + Parametros: + + id_n2 {string} - id do subgrupo + + perfil {string} + + Return: + + {array} + */ + function formataTemasSubgrupo($id_n2,$perfil) + { + $dados = $this->pegaTemasSubGrupo($id_n2); + $temas = array(); + foreach($dados as $tema) + { + $a = $tema["n3_perfil"]; + $a = str_replace(" ",",",$a); + if($this->verificaOcorrencia($perfil,explode(",",$a))) + { + $temas[] = $this->formataTema($tema["id_tema"],$tema["publicado"]); + } + } + return $temas; + } + /* + Function: formataTema + + Retorna os dados de um tema, formatados no padrão da árvore + + Parametros: + + id_tema {string} + + publicado {string} - SIM|NAO valor do índice "publicado" que será incluído no array de retorno + + Return: + + {array} + */ + function formataTema($id_tema,$publicado="SIM") + { + $recordset = $this->pegaTema($id_tema); + $recordset = $recordset[0]; + $down = "sim"; + $ogc = "sim"; + $link = " "; + $kmz = "nao"; + if (strtolower($recordset["download_tema"]) == "nao") + { + $down = "nao"; + } + if (strtolower($recordset["ogc_tema"]) == "nao") + { + $ogc = "nao"; + } + if(strtolower($recordset["tipoa_tema"]) == "wms") + { + $down = "nao"; + $ogc = "nao"; + } + if ($recordset["link_tema"] != "") + { + $link = $recordset["link_tema"]; + } + if (strtolower($recordset["kmz_tema"]) == "sim") + { + $kmz = "sim"; + } + //codigo_tema para fins de compatibilidade + return array("codigo_tema"=>($recordset["codigo_tema"]),"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); + } + /* + Function: execSQL + + Executa um SQL no banco de administração + + Parametros: + + sql {string} + + Return: + + {array} + */ + function execSQL($sql) + { + //echo "
".$sql; + //error_reporting(0); + $sql = str_ireplace(array("update","delete","insert","--","drop",";"),"",$sql); + $q = $this->dbh->query($sql,PDO::FETCH_ASSOC); + if($q) + { + return $q->fetchAll(); + } + else + {return false; + } + } + /* + Verifica se uma string ocorre em um array + */ + function verificaOcorrencia($procurar,$em) + { + if(count($em) == 1 && $em[0] == "") + { + $em = ""; + } + if($procurar == "" && $em == "") + { + return true; + } + if($em == "") + { + return true; + } + $resultado = false; + if($procurar != "" && $em != "") + { + foreach($em as $e) + { + $e = trim($e); + foreach($procurar as $p) + { + $p = trim($p); + if($p == $e) + { + $resultado = true; + } + } + } + } + return $resultado; + } + function seems_utf8($Str) { # by bmorel at ssi dot fr + $length = strlen($Str); + for ($i = 0; $i < $length; $i++) { + if (ord($Str[$i]) < 0x80) continue; # 0bbbbbbb + elseif ((ord($Str[$i]) & 0xE0) == 0xC0) $n = 1; # 110bbbbb + elseif ((ord($Str[$i]) & 0xF0) == 0xE0) $n = 2; # 1110bbbb + elseif ((ord($Str[$i]) & 0xF8) == 0xF0) $n = 3; # 11110bbb + elseif ((ord($Str[$i]) & 0xFC) == 0xF8) $n = 4; # 111110bb + elseif ((ord($Str[$i]) & 0xFE) == 0xFC) $n = 5; # 1111110b + else return false; # Does not match any model + for ($j = 0; $j < $n; $j++) { # n bytes matching 10bbbbbb follow ? + if ((++$i == $length) || ((ord($Str[$i]) & 0xC0) != 0x80)) + return false; + } + } + return true; + } + /** + * + * TODO Verificar ao fechar versao - verificar a acentuacao das palavras nessa funcao + */ + function removeAcentos($s) + { + $s = ereg_replace("[áàâã]","a",$s); + $s = ereg_replace("[ÁÀÂÃ]","A",$s); + $s = ereg_replace("[éèê]","e",$s); + $s = ereg_replace("[í]","i",$s); + $s = ereg_replace("[Í]","I",$s); + $s = ereg_replace("[ÉÈÊ]","E",$s); + $s = ereg_replace("[óòôõ]","o",$s); + $s = ereg_replace("[ÓÒÔÕ]","O",$s); + $s = ereg_replace("[úùû]","u",$s); + $s = ereg_replace("[ÚÙÛ]","U",$s); + $s = str_replace("ç","c",$s); + $s = str_replace("Ç","C",$s); + //$str = htmlentities($s); + $str = preg_replace("/(&)([a-z])([a-z]+;)/i", '$2', $s); + $str = preg_replace("/[^A-Z0-9]/i", ' ', $str); + $string = preg_replace("/\s+/i", ' ', $str); + + if (!preg_match('/[\x80-\xff]/', $string)){ + return $string; + } + if ($this->seems_utf8($string)) { + $chars = array( + // Decompositions for Latin-1 Supplement + chr(195).chr(128) => 'A', chr(195).chr(129) => 'A', + chr(195).chr(130) => 'A', chr(195).chr(131) => 'A', + chr(195).chr(132) => 'A', chr(195).chr(133) => 'A', + chr(195).chr(135) => 'C', chr(195).chr(136) => 'E', + chr(195).chr(137) => 'E', chr(195).chr(138) => 'E', + chr(195).chr(139) => 'E', chr(195).chr(140) => 'I', + chr(195).chr(141) => 'I', chr(195).chr(142) => 'I', + chr(195).chr(143) => 'I', chr(195).chr(145) => 'N', + chr(195).chr(146) => 'O', chr(195).chr(147) => 'O', + chr(195).chr(148) => 'O', chr(195).chr(149) => 'O', + chr(195).chr(150) => 'O', chr(195).chr(153) => 'U', + chr(195).chr(154) => 'U', chr(195).chr(155) => 'U', + chr(195).chr(156) => 'U', chr(195).chr(157) => 'Y', + chr(195).chr(159) => 's', chr(195).chr(160) => 'a', + chr(195).chr(161) => 'a', chr(195).chr(162) => 'a', + chr(195).chr(163) => 'a', chr(195).chr(164) => 'a', + chr(195).chr(165) => 'a', chr(195).chr(167) => 'c', + chr(195).chr(168) => 'e', chr(195).chr(169) => 'e', + chr(195).chr(170) => 'e', chr(195).chr(171) => 'e', + chr(195).chr(172) => 'i', chr(195).chr(173) => 'i', + chr(195).chr(174) => 'i', chr(195).chr(175) => 'i', + chr(195).chr(177) => 'n', chr(195).chr(178) => 'o', + chr(195).chr(179) => 'o', chr(195).chr(180) => 'o', + chr(195).chr(181) => 'o', chr(195).chr(182) => 'o', + chr(195).chr(182) => 'o', chr(195).chr(185) => 'u', + chr(195).chr(186) => 'u', chr(195).chr(187) => 'u', + chr(195).chr(188) => 'u', chr(195).chr(189) => 'y', + chr(195).chr(191) => 'y', + // Decompositions for Latin Extended-A + chr(196).chr(128) => 'A', chr(196).chr(129) => 'a', + chr(196).chr(130) => 'A', chr(196).chr(131) => 'a', + chr(196).chr(132) => 'A', chr(196).chr(133) => 'a', + chr(196).chr(134) => 'C', chr(196).chr(135) => 'c', + chr(196).chr(136) => 'C', chr(196).chr(137) => 'c', + chr(196).chr(138) => 'C', chr(196).chr(139) => 'c', + chr(196).chr(140) => 'C', chr(196).chr(141) => 'c', + chr(196).chr(142) => 'D', chr(196).chr(143) => 'd', + chr(196).chr(144) => 'D', chr(196).chr(145) => 'd', + chr(196).chr(146) => 'E', chr(196).chr(147) => 'e', + chr(196).chr(148) => 'E', chr(196).chr(149) => 'e', + chr(196).chr(150) => 'E', chr(196).chr(151) => 'e', + chr(196).chr(152) => 'E', chr(196).chr(153) => 'e', + chr(196).chr(154) => 'E', chr(196).chr(155) => 'e', + chr(196).chr(156) => 'G', chr(196).chr(157) => 'g', + chr(196).chr(158) => 'G', chr(196).chr(159) => 'g', + chr(196).chr(160) => 'G', chr(196).chr(161) => 'g', + chr(196).chr(162) => 'G', chr(196).chr(163) => 'g', + chr(196).chr(164) => 'H', chr(196).chr(165) => 'h', + chr(196).chr(166) => 'H', chr(196).chr(167) => 'h', + chr(196).chr(168) => 'I', chr(196).chr(169) => 'i', + chr(196).chr(170) => 'I', chr(196).chr(171) => 'i', + chr(196).chr(172) => 'I', chr(196).chr(173) => 'i', + chr(196).chr(174) => 'I', chr(196).chr(175) => 'i', + chr(196).chr(176) => 'I', chr(196).chr(177) => 'i', + chr(196).chr(178) => 'IJ',chr(196).chr(179) => 'ij', + chr(196).chr(180) => 'J', chr(196).chr(181) => 'j', + chr(196).chr(182) => 'K', chr(196).chr(183) => 'k', + chr(196).chr(184) => 'k', chr(196).chr(185) => 'L', + chr(196).chr(186) => 'l', chr(196).chr(187) => 'L', + chr(196).chr(188) => 'l', chr(196).chr(189) => 'L', + chr(196).chr(190) => 'l', chr(196).chr(191) => 'L', + chr(197).chr(128) => 'l', chr(197).chr(129) => 'L', + chr(197).chr(130) => 'l', chr(197).chr(131) => 'N', + chr(197).chr(132) => 'n', chr(197).chr(133) => 'N', + chr(197).chr(134) => 'n', chr(197).chr(135) => 'N', + chr(197).chr(136) => 'n', chr(197).chr(137) => 'N', + chr(197).chr(138) => 'n', chr(197).chr(139) => 'N', + chr(197).chr(140) => 'O', chr(197).chr(141) => 'o', + chr(197).chr(142) => 'O', chr(197).chr(143) => 'o', + chr(197).chr(144) => 'O', chr(197).chr(145) => 'o', + chr(197).chr(146) => 'OE',chr(197).chr(147) => 'oe', + chr(197).chr(148) => 'R',chr(197).chr(149) => 'r', + chr(197).chr(150) => 'R',chr(197).chr(151) => 'r', + chr(197).chr(152) => 'R',chr(197).chr(153) => 'r', + chr(197).chr(154) => 'S',chr(197).chr(155) => 's', + chr(197).chr(156) => 'S',chr(197).chr(157) => 's', + chr(197).chr(158) => 'S',chr(197).chr(159) => 's', + chr(197).chr(160) => 'S', chr(197).chr(161) => 's', + chr(197).chr(162) => 'T', chr(197).chr(163) => 't', + chr(197).chr(164) => 'T', chr(197).chr(165) => 't', + chr(197).chr(166) => 'T', chr(197).chr(167) => 't', + chr(197).chr(168) => 'U', chr(197).chr(169) => 'u', + chr(197).chr(170) => 'U', chr(197).chr(171) => 'u', + chr(197).chr(172) => 'U', chr(197).chr(173) => 'u', + chr(197).chr(174) => 'U', chr(197).chr(175) => 'u', + chr(197).chr(176) => 'U', chr(197).chr(177) => 'u', + chr(197).chr(178) => 'U', chr(197).chr(179) => 'u', + chr(197).chr(180) => 'W', chr(197).chr(181) => 'w', + chr(197).chr(182) => 'Y', chr(197).chr(183) => 'y', + chr(197).chr(184) => 'Y', chr(197).chr(185) => 'Z', + chr(197).chr(186) => 'z', chr(197).chr(187) => 'Z', + chr(197).chr(188) => 'z', chr(197).chr(189) => 'Z', + chr(197).chr(190) => 'z', chr(197).chr(191) => 's', + // Euro Sign + chr(226).chr(130).chr(172) => 'E', + // GBP (Pound) Sign + chr(194).chr(163) => ''); + $string = strtr($string, $chars); + } else { + // Assume ISO-8859-1 if not UTF-8 + $chars['in'] = chr(128).chr(131).chr(138).chr(142).chr(154).chr(158) + .chr(159).chr(162).chr(165).chr(181).chr(192).chr(193).chr(194) + .chr(195).chr(196).chr(197).chr(199).chr(200).chr(201).chr(202) + .chr(203).chr(204).chr(205).chr(206).chr(207).chr(209).chr(210) + .chr(211).chr(212).chr(213).chr(214).chr(216).chr(217).chr(218) + .chr(219).chr(220).chr(221).chr(224).chr(225).chr(226).chr(227) + .chr(228).chr(229).chr(231).chr(232).chr(233).chr(234).chr(235) + .chr(236).chr(237).chr(238).chr(239).chr(241).chr(242).chr(243) + .chr(244).chr(245).chr(246).chr(248).chr(249).chr(250).chr(251) + .chr(252).chr(253).chr(255); + $chars['out'] = "EfSZszYcYuAAAAAACEEEEIIIINOOOOOOUUUUYaaaaaaceeeeiiiinoooooouuuuyy"; + $string = strtr($string, $chars['in'], $chars['out']); + $double_chars['in'] = array(chr(140), chr(156), chr(198), chr(208), chr(222), chr(223), chr(230), chr(240), chr(254)); + $double_chars['out'] = array('OE', 'oe', 'AE', 'DH', 'TH', 'ss', 'ae', 'dh', 'th'); + $string = str_replace($double_chars['in'], $double_chars['out'], $string); + } + return $string; + } + function converte($texto){ + if($this->convUTF == true) + $texto = mb_convert_encoding($texto,mb_detect_encoding($texto),"UTF-8"); + else + $texto = mb_convert_encoding($texto,mb_detect_encoding($texto),"ISO-8859-1"); + return $texto; + } + function verificaPapelSessao($id_papel){ + if(!empty($_COOKIE["i3geocodigologin"])){ + session_write_close(); + session_name("i3GeoLogin"); + session_id($_COOKIE["i3geocodigologin"]); + session_start(); + //var_dump($_SESSION);exit; + if($_SESSION["usuario"] != $_COOKIE["i3geousuariologin"]){ + return false; + } + foreach($_SESSION["papeis"] as $p){ + if($p == 1 || $p == $id_papel){ + return true; + } + } + } + else{//caso nao exista, retorna um erro + return false; + } + } + function verificaOperacaoSessao($operacao){ + if($_COOKIE["i3geocodigologin"] != ""){ + session_write_close(); + session_name("i3GeoLogin"); + session_id($_COOKIE["i3geocodigologin"]); + session_start(); + $resultado = false; + //verifica se e administrador + foreach($_SESSION["papeis"] as $p){ + if($p == 1){ + return true; + } + } + if(!empty($_SESSION["operacoes"][$operacao])){ + $resultado = true; + } + return $resultado; + } else { + return false; + } + } +} +?> \ No newline at end of file diff --git a/admin/php/xxxmapas.php b/admin/php/xxxmapas.php deleted file mode 100755 index f327039..0000000 --- a/admin/php/xxxmapas.php +++ /dev/null @@ -1,329 +0,0 @@ -setmetadata("CUSTOMIZACOESINIT",'{'.implode(",",$customizacoesinit).'}'); - $m->save($_GET["arqmapfile"]); - } - if($_GET["ext"] && $_GET["ext"] != ""){ - $e = explode(" ",$_GET["ext"]); - $m = ms_newMapObj($_GET["arqmapfile"]); - $extatual = $m->extent; - $extatual->setextent((min($e[0],$e[2])),(min($e[1],$e[3])),(max($e[0],$e[2])),(max($e[1],$e[3]))); - $m->save($_GET["arqmapfile"]); - } - $handle = fopen ($_GET["arqmapfile"], 'r'); - $conteudo = fread ($handle, filesize ($_GET["arqmapfile"])); - fclose ($handle); - //$conteudo = base64_encode($conteudo); - $conteudo = str_replace("'","_!_",$conteudo); - $conteudo = str_replace('"',"_!!_",$conteudo); - $conteudo = str_replace(array(""),"",$conteudo); - - require_once("conexao.php"); - if($convUTF){ - $_GET["nome_mapa"] = utf8_encode($_GET["nome_mapa"]); - $conteudo = utf8_encode($conteudo); - } - $retorna = ""; - if(empty($id_mapa)){ - $dataCol = array( - "publicado_mapa" => '', - "ordem_mapa" => 0, - "perfil_mapa" => '', - "desc_mapa" => '', - "ext_mapa" => '', - "imagem_mapa" => '', - "linkdireto_mapa" => '', - "outros_mapa" => '', - "temas_mapa" => '', - "ligados_mapa" => '', - "nome_mapa" => '' - ); - $id = i3GeoAdminInsertUnico($dbhw,"i3geoadmin_mapas",$dataCol,"nome_mapa","id_mapa"); - } - else{ - $id = $id_mapa; - } - if (filter_var($id, FILTER_VALIDATE_INT) === false){ - return array("id"=>"","status"=>"Error!: "); - } - $dataCol = array( - "mapfile" => $conteudo, - "publicado_mapa" => "sim", - "nome_mapa" => $_GET["nome_mapa"], - "outros_mapa" => "&restauramapa=$id&interface=".$_GET["url"] - ); - i3GeoAdminUpdate($dbhw,"i3geoadmin_mapas",$dataCol, "WHERE id_mapa =".$id); - $dbhw = null; - $dbh = null; - return array("id"=>$id,"status"=>"ok"); - } - catch (PDOException $e){ - return array("id"=>"","status"=>"Error!: "); - } -} -/* -Altera o registro de um mapa -*/ -function alterarMapa(){ - global $esquemaadmin,$id_mapa; - //substitui a string do parametro outros - $_GET["outros_mapa"] = str_replace("*","&",$_GET["outros_mapa"]); - try{ - require_once("conexao.php"); - if($convUTF){ - $_GET["nome_mapa"] = utf8_encode($_GET["nome_mapa"]); - $_GET["desc_mapa"] = utf8_encode($_GET["desc_mapa"]); - } - $retorna = ""; - if($id_mapa != ""){ - $dataCol = array( - "publicado_mapa" => $_GET["publicado_mapa"], - "ordem_mapa" => $_GET["ordem_mapa"], - "desc_mapa" => $_GET["desc_mapa"], - "ext_mapa" => $_GET["ext_mapa"], - "imagem_mapa" => $_GET["imagem_mapa"], - "outros_mapa" => $_GET["outros_mapa"], - "nome_mapa" => $_GET["nome_mapa"], - "linkdireto_mapa" => $_GET["linkdireto_mapa"], - "temas_mapa" => $_GET["temas_mapa"], - "ligados_mapa" => $_GET["ligados_mapa"], - "perfil_mapa" => $_GET["perfil_mapa"] - ); - i3GeoAdminUpdate($dbhw,"i3geoadmin_mapas",$dataCol, "WHERE id_mapa =".$id_mapa); - $retorna = $id_mapa; - } - else{ - $dataCol = array( - "publicado_mapa" => '', - "ordem_mapa" => 0, - "perfil_mapa" => '', - "desc_mapa" => '', - "ext_mapa" => '', - "imagem_mapa" => '', - "linkdireto_mapa" => '', - "outros_mapa" => '', - "temas_mapa" => '', - "ligados_mapa" => '', - "nome_mapa" => '', - "mapfile" => '' - ); - $id = i3GeoAdminInsertUnico($dbhw,"i3geoadmin_mapas",$dataCol,"nome_mapa","id_mapa"); - $retorna = $id; - } - $dbhw = null; - $dbh = null; - return $retorna; - } - catch (PDOException $e){ - return "Error!: "; - } -} -function excluirMapa(){ - global $id,$esquemaadmin; - try{ - exclui($esquemaadmin."i3geoadmin_mapas","id_mapa",$id); - return "ok"; - } - catch (PDOException $e){ - return "Error!: "; - } -} -?> \ No newline at end of file diff --git a/admin1/catalogo/atlas/pranchas/temas/exec.php b/admin1/catalogo/atlas/pranchas/temas/exec.php index 7632d67..354f883 100755 --- a/admin1/catalogo/atlas/pranchas/temas/exec.php +++ b/admin1/catalogo/atlas/pranchas/temas/exec.php @@ -62,7 +62,7 @@ switch ($funcao) { if ($dados === false) { header ( "HTTP/1.1 500 erro ao consultar banco de dados tabela de temas de uma prancha" ); } else { - include("../../../../../admin/php/classe_arvore.php"); + include("../../../../../classesphp/classe_arvore.php"); $arvore = new Arvore($_SESSION["locaplic"]); $temas = $arvore->pegaTodosTemas(true); \admin\php\funcoesAdmin\retornaJSON ( array("dados"=>$dados, "temas"=>$temas) ); @@ -77,7 +77,7 @@ switch ($funcao) { header ( "HTTP/1.1 500 erro ao consultar banco de dados tabela de temas de uma prancha" ); } else { //pega a lista de temas - include("../../../../../admin/php/classe_arvore.php"); + include("../../../../../classesphp/classe_arvore.php"); $arvore = new Arvore($_SESSION["locaplic"]); $temas = $arvore->pegaTodosTemas(true); \admin\php\funcoesAdmin\retornaJSON ( array("dados"=>$dados, "temas"=>$temas) ); diff --git a/admin1/catalogo/mapas/exec.php b/admin1/catalogo/mapas/exec.php index 8abbd29..cacecb3 100755 --- a/admin1/catalogo/mapas/exec.php +++ b/admin1/catalogo/mapas/exec.php @@ -81,7 +81,7 @@ switch ($funcao) { $dbhw = null; $dbh = null; // pega a lista de temas - include ("../../../admin/php/classe_arvore.php"); + include ("../../../classesphp/classe_arvore.php"); $arvore = new Arvore($_SESSION["locaplic"]); $temas = $arvore->pegaTodosTemas(true); \admin\php\funcoesAdmin\retornaJSON(array( @@ -103,7 +103,7 @@ switch ($funcao) { $dbhw = null; $dbh = null; // pega a lista de temas - include ("../../../admin/php/classe_arvore.php"); + include ("../../../classesphp/classe_arvore.php"); $arvore = new Arvore($_SESSION["locaplic"]); $temas = $arvore->pegaTodosTemas(true); \admin\php\funcoesAdmin\retornaJSON(array( diff --git a/admin1/catalogo/mapfile/editor/funcoes.php b/admin1/catalogo/mapfile/editor/funcoes.php index 4ca0772..e8527b4 100755 --- a/admin1/catalogo/mapfile/editor/funcoes.php +++ b/admin1/catalogo/mapfile/editor/funcoes.php @@ -3,7 +3,7 @@ namespace admin\catalogo\mapfile\editor; function textoMapfile($codigo) { - global $dbhw; + global $dbhw, $esquemaadmin; $locaplic = $_SESSION["locaplic"]; $mapfile = $locaplic . "/temas/" . $codigo . ".map"; if (! file_exists($mapfile)) { diff --git a/admin1/catalogo/mapfile/editor/index.php b/admin1/catalogo/mapfile/editor/index.php index 4aa39ed..8f7a5f9 100755 --- a/admin1/catalogo/mapfile/editor/index.php +++ b/admin1/catalogo/mapfile/editor/index.php @@ -13,6 +13,10 @@ // include ("../../../php/checaLogin.php"); \admin\php\login\checaLogin(); + + +//$k = filter_var ( $k, FILTER_SANITIZE_STRING ); + //funcoes de administracao include ($_SESSION["locaplic"]."/admin1/php/funcoesAdmin.php"); // @@ -30,6 +34,7 @@ include ("funcoes.php"); // include ($_SESSION["locaplic"]."/admin1/php/conexao.php"); /***************************************************************/ + define ( "ONDEI3GEO", "../../../.." ); include "../../../head.php"; $codigo = filter_var ( $_GET ["codigo"], FILTER_SANITIZE_STRING ); @@ -102,7 +107,7 @@ $textoMapfile = \admin\catalogo\mapfile\editor\textoMapfile ( $codigo ); - + diff --git a/classesphp/classe_arvore.php b/classesphp/classe_arvore.php new file mode 100755 index 0000000..542fe3a --- /dev/null +++ b/classesphp/classe_arvore.php @@ -0,0 +1,1268 @@ + +*/ +class Arvore +{ + //temas com acesso restrito e que nao podem ser acessados pelo usuario que esta logado + public $temassindevidos; + protected $locaplic; + //subgrupos que tem pelo menos um tema + //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 "; + //grupos que tem pelo menos um sub-grupo + //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 "; + //nomes de todos os grupos + public $sql_todosgrupos = "select * from i3geoadmin_grupos "; + //tipo de filtro + //ogc|download|"" + public $filtro; + //temas na raiz + //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 "; + //todos os temas + //public $sql_temas = "select * from i3geoadmin_temas "; + //temas de um subgrupo + //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 "; + /* + Function: __construct + + Cria um objeto Arvore + + Parametros: + + locaplic {string} - localização do i3geo no sistema de arquivos + + idioma {string} - default = "pt" + */ + function __construct($locaplic,$idioma="pt",$filtro="") + { + $this->locaplic = $locaplic; + $this->filtro = $filtro; + $dbh = ""; + //error_reporting(0); + + include($locaplic."/classesphp/conexao.php"); + + $this->esquemaadmin = $esquemaadmin; + $this->convUTF = $convUTF; + $this->dbh = $dbh; + + $this->idioma = $idioma; + if($idioma == "pt"){ + $coluna = "nome_grupo"; + } + else{ + $coluna = $idioma; + } + $this->sql_grupos = "select CASE i3geoadmin_grupos.$coluna WHEN '' THEN nome_grupo ELSE i3geoadmin_grupos.$coluna END as nome_grupo,i3geoadmin_grupos.id_grupo, id_n1,id_menu,i3geoadmin_n1.publicado,n1_perfil,ordem from ".$this->esquemaadmin."i3geoadmin_n1 LEFT JOIN ".$this->esquemaadmin."i3geoadmin_grupos ON i3geoadmin_n1.id_grupo = i3geoadmin_grupos.id_grupo "; + if($filtro === "ogc" || $filtro === "download"){ + //esse sql retorna tambem os grupos dos temas que estao na raiz do grupo + $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 "; + } + + if($idioma == "pt"){ + $coluna = "nome_subgrupo"; + } + else{ + $coluna = $idioma; + } + $this->sql_subgrupos = "select CASE i3geoadmin_subgrupos.$coluna WHEN '' THEN nome_subgrupo ELSE i3geoadmin_subgrupos.$coluna END as nome_subgrupo,i3geoadmin_subgrupos.id_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 "; + + if($idioma == "pt"){ + $coluna = "nome_tema"; + } + else{ + $coluna = $idioma; + } + + $this->sql_temasraiz = "select id_nivel,ordem,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, download_tema, link_tema FROM ".$this->esquemaadmin."i3geoadmin_raiz LEFT JOIN ".$this->esquemaadmin."i3geoadmin_temas ON i3geoadmin_temas.id_tema = i3geoadmin_raiz.id_tema "; + $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 "; + + //$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 "; + + $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 "; + $this->sql_temas_combo = "select id_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 "; + // + //verifica se o ip atual está cadastrado como um dos editores + //editores podem ver as coisas marcadas como não publicado + //no sistema de administração + // + $this->editor = false; + $this->editor = $this->verificaOperacaoSessao("admin/php/classe_arvore/editor"); + $this->pubsql = " (publicado != 'NAO' or publicado is null) and "; + if($this->editor){ + $this->pubsql = ""; + } + if(!function_exists("listaTemasIndevidos")){ + include_once($locaplic."/classesphp/funcoes_gerais.php"); + } + $this->temasindevidos = listaTemasIndevidos(); + } + function __destruct() + { + $this->dbh = null; + $this->dbhw = null; + } + /* + Function: validaTemas + + Remove de um array os temas que nao sao permitidos ao usuario atualmente logado + */ + function validaTemas($linhas,$id){ + $res = array(); + foreach($linhas as $l){ + if(!in_array($l[$id],$this->temasindevidos)){ + array_push($res,$l); + } + } + return $res; + } + /* + Function: pegaListaDeMenus + + Retorna a lista de menus + + Parametros: + + perfil {string} - considera apenas esse perfil + + Return: + + {array} + */ + function pegaListaDeMenus($perfil="",$filtraOgc="nao",$filtraDown="nao") + { + if($this->idioma == "pt"){ + $coluna = "nome_menu"; + } + else{ + $coluna = $this->idioma; + } + if($this->editor == true) + { + $perfil = ""; + $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"; + } + else{ + $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"; + } + $regs = $this->execSQL($sql); + $resultado = array(); + foreach($regs as $reg){ + $a = $reg["perfil_menu"]; + $a = str_replace(" ",",",$a); + if ($this->verificaOcorrencia($perfil,explode(",",$a))) + { + $status = "fechado"; + if(strtolower($reg["aberto"]) == "sim") + $status = "aberto"; + $url = ""; + $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); + } + } + return $resultado; + } + /* + Function: pegaListaDeTiposGrupos + + Retorna a lista de grupos de um menu + + Parametros: + + id_menu {string} + + Return: + + {array} + */ + function pegaListaDeTiposGrupos(){ + if($this->idioma == "pt"){ + $coluna = "nome_grupo"; + } + else{ + $coluna = $this->idioma; + } + $sql = "select CASE i3geoadmin_grupos.$coluna WHEN '' THEN nome_grupo ELSE i3geoadmin_grupos.$coluna END as nome_grupo, id_grupo from ".$this->esquemaadmin."i3geoadmin_grupos ORDER by nome_grupo "; + $grupos = $this->execSQL($sql); + return $grupos; + } + /* + Function: pegaListaDeTiposSubGrupos + + Retorna a lista de grupos de um menu + + Parametros: + + id_menu {string} + + Return: + + {array} + */ + function pegaListaDeTiposSubGrupos(){ + if($this->idioma == "pt"){ + $coluna = "nome_subgrupo"; + } + else{ + $coluna = $this->idioma; + } + $sql = "select CASE i3geoadmin_subgrupos.$coluna WHEN '' THEN nome_subgrupo ELSE i3geoadmin_subgrupos.$coluna END as nome_subgrupo, id_subgrupo from ".$this->esquemaadmin."i3geoadmin_subgrupos ORDER by nome_subgrupo "; + $subgrupos = $this->execSQL($sql); + return $subgrupos; + } + /* + Function: procuraTemas + + Localiza temas conforme uma palavra de busca + + Parametros: + + procurar {string} - palavra de busca + + perfil {string} - considera apenas esse perfil + + Return: + + {array} + */ + function procuraTemas ($procurar,$perfil) + { + if($procurar != "") + { + $procurar = $this->removeAcentos($procurar); + } + $menus = $this->pegaListaDeMenus($perfil); + $resultado = array(); + $subgrupo = array(); + $final = array(); + foreach($menus as $menu) + { + $grupos = $this->pegaGruposMenu($menu["idmenu"]); + foreach($grupos["grupos"] as $grupo) + { + $a = $grupo["n1_perfil"]; + $a = str_replace(" ",",",$a); + if($this->verificaOcorrencia($perfil,explode(",",$a))) + { + $sgrupos = $this->pegaSubgruposGrupo($menu["idmenu"],$grupo["id_n1"]); + $temasRaizGrupo = array(); + $temasR = $this->pegaTemasRaizGrupo($menu["idmenu"],$grupo["id_n1"]); + foreach($temasR as $tema) + { + $a = $tema["perfil"]; + $a = str_replace(" ",",",$a); + if($this->verificaOcorrencia($perfil,explode(",",$a))) + { + $t = $this->pegaTema($tema["id_tema"]); + $t = $t[0]; + $nome = $this->removeAcentos($tema["nome_tema"]); + $tags = $this->removeAcentos($tema["tags_tema"]); + $tags1 = $this->removeAcentos(mb_convert_encoding($tema["tags_tema"],"ISO-8859-1","UTF-8")); + $nome1 = $this->removeAcentos(mb_convert_encoding($tema["nome_tema"],"ISO-8859-1","UTF-8")); + $miniatura = "nao"; + if(file_exists($this->locaplic."/temas/miniaturas/".$t["codigo_tema"].".map.mini.png")) + { + $miniatura = "sim"; + } + $down = "sim"; + if (strtolower($t["download_tema"]) == "nao") + { + $down = "nao"; + } + $texto = array("codigo_tema"=>$t["codigo_tema"],"miniatura"=>$miniatura,"tid"=>$t["codigo_tema"],"nome"=>$this->converte($tema["nome_tema"]),"link"=>$t["link_tema"],"download"=>$down); + if($procurar == "") + { + $temasRaizGrupo[] = $texto; + } + else + { + if (stristr($nome,$procurar) || stristr($nome1,$procurar)) + { + $temasRaizGrupo[] = $texto; + } + else + { + if (stristr($tags,$procurar) || stristr($tags1,$procurar)) + { + $temasRaizGrupo[] = $texto; + } + } + } + } + } + foreach($sgrupos["subgrupos"] as $sgrupo) + { + $a = $sgrupo["n2_perfil"]; + $a = str_replace(" ",",",$a); + if($this->verificaOcorrencia($perfil,explode(",",$a))) + { + $temas = $this->pegaTemasSubGrupo($sgrupo["id_n2"]); + foreach ($temas as $tema) + { + $a = $tema["n3_perfil"]; + $a = str_replace(" ",",",$a); + if($this->verificaOcorrencia($perfil,explode(",",$a))) + { + $t = $this->pegaTema($tema["id_tema"]); + $t = $t[0]; + $nome = $this->removeAcentos($tema["nome_tema"]); + $tags = $this->removeAcentos($tema["tags_tema"]); + $tags1 = $this->removeAcentos(mb_convert_encoding($tema["tags_tema"],"ISO-8859-1","UTF-8")); + $nome1 = $this->removeAcentos(mb_convert_encoding($tema["nome_tema"],"ISO-8859-1","UTF-8")); + $miniatura = "nao"; + if(file_exists($this->locaplic."/temas/miniaturas/".$tema["codigo_tema"].".map.mini.png")) + { + $miniatura = "sim"; + } + $down = "sim"; + if (strtolower($t["download_tema"]) == "nao") + { + $down = "nao"; + } + $texto = array("codigo_tema"=>$tema["codigo_tema"],"miniatura"=>$miniatura,"tid"=>$tema["codigo_tema"],"nome"=>$this->converte($tema["nome_tema"]),"link"=>$t["link_tema"],"download"=>$down); + if($procurar == "") + { + $resultado[] = $texto; + } + else + { + if (stristr($nome,$procurar) || stristr($nome1,$procurar)) + { + $resultado[] = $texto; + } + else + { + if (stristr($tags,$procurar) || stristr($tags1,$procurar)) + { + $resultado[] = $texto; + } + } + } + } + } + } + if (count($resultado) > 0) + { + $subgrupo[] = array("subgrupo"=>$this->converte($sgrupo["nome_subgrupo"]),"temas"=>$resultado); + } + $resultado = array(); + } + } + if (count($subgrupo) > 0 || count($temasRaizGrupo) > 0) + { + $final[] = array("grupo"=>$this->converte($grupo["nome_grupo"]),"temas"=>$temasRaizGrupo,"subgrupos"=>$subgrupo); + } + $subgrupo = array(); + } + } + return $final; + } + /* + Function: procuraTemasEstrela + + Localiza temas que têm um determinado número (nível) de estrelas + + Parametros: + + nivel {numeric} - número de estrelas + + perfil {string} - considera apenas esse perfil + + Return: + + {array} + */ + function procuraTemasEstrela($nivel,$fatorestrela,$perfil) + { + $menus = $this->pegaListaDeMenus($perfil); + + $resultado = array(); + $subgrupo = array(); + $final = array(); + foreach($menus as $menu) + { + $grupos = $this->pegaGruposMenu($menu["idmenu"]); + foreach($grupos["grupos"] as $grupo) + { + $a = $grupo["n1_perfil"]; + $a = str_replace(" ",",",$a); + if($this->verificaOcorrencia($perfil,explode(",",$a))) + { + $sgrupos = $this->pegaSubgruposGrupo($menu["idmenu"],$grupo["id_n1"]); + $temasRaizGrupo = array(); + $temasR = $this->pegaTemasRaizGrupo($menu["idmenu"],$grupo["id_n1"]); + foreach($temasR as $tema) + { + $a = $tema["perfil"]; + $a = str_replace(" ",",",$a); + if($this->verificaOcorrencia($perfil,explode(",",$a))) + { + $t = $this->pegaTema($tema["id_tema"]); + $t = $t[0]; + $nome = $this->removeAcentos($tema["nome_tema"]); + $tags = $this->removeAcentos($tema["tags_tema"]); + $tags1 = $this->removeAcentos(mb_convert_encoding($tema["tags_tema"],"ISO-8859-1","UTF-8")); + $nome1 = $this->removeAcentos(mb_convert_encoding($tema["nome_tema"],"ISO-8859-1","UTF-8")); + $miniatura = "nao"; + if(file_exists($this->locaplic."/temas/miniaturas/".$t["codigo_tema"].".map.mini.png")) + { + $miniatura = "sim"; + } + $down = "sim"; + if (strtolower($t["download_tema"]) == "nao") + { + $down = "nao"; + } + $texto = array("codigo_tema"=>$t["codigo_tema"],"miniatura"=>$miniatura,"tid"=>$t["codigo_tema"],"nome"=>$this->converte($tema["nome_tema"]),"link"=>$t["link_tema"],"download"=>$down); + $n = intval($t["nacessos"] / $fatorestrela); + if($n >= 5){ + $n = 5; + } + + if ($n == $nivel) + { + $temasRaizGrupo[] = $texto; + } + } + } + foreach($sgrupos["subgrupos"] as $sgrupo) + { + $a = $sgrupo["n2_perfil"]; + $a = str_replace(" ",",",$a); + if($this->verificaOcorrencia($perfil,explode(",",$a))) + { + $temas = $this->pegaTemasSubGrupo($sgrupo["id_n2"]); + foreach ($temas as $tema) + { + $a = $tema["n3_perfil"]; + $a = str_replace(" ",",",$a); + if($this->verificaOcorrencia($perfil,explode(",",$a))) + { + $t = $this->pegaTema($tema["id_tema"]); + $t = $t[0]; + $nome = $this->removeAcentos($tema["nome_tema"]); + $tags = $this->removeAcentos($tema["tags_tema"]); + $tags1 = $this->removeAcentos(mb_convert_encoding($tema["tags_tema"],"ISO-8859-1","UTF-8")); + $nome1 = $this->removeAcentos(mb_convert_encoding($tema["nome_tema"],"ISO-8859-1","UTF-8")); + $miniatura = "nao"; + if(file_exists($this->locaplic."/temas/miniaturas/".$tema["codigo_tema"].".map.mini.png")) + { + $miniatura = "sim"; + } + $down = "sim"; + if (strtolower($t["download_tema"]) == "nao") + { + $down = "nao"; + } + $texto = array("codigo_tema"=>$tema["codigo_tema"],"miniatura"=>$miniatura,"tid"=>$tema["codigo_tema"],"nome"=>$this->converte($tema["nome_tema"]),"link"=>$t["link_tema"],"download"=>$down); + $n = abs($t["nacessos"] / $fatorestrela); + if($n >= 5){ + $n = 5; + } + if ($n == $nivel) + { + $resultado[] = $texto; + } + } + } + } + if (count($resultado) > 0) + { + $subgrupo[] = array("subgrupo"=>$this->converte($sgrupo["nome_subgrupo"]),"temas"=>$resultado); + } + $resultado = array(); + } + } + if (count($subgrupo) > 0 || count($temasRaizGrupo) > 0) + { + $final[] = array("grupo"=>$this->converte($grupo["nome_grupo"]),"temas"=>$temasRaizGrupo,"subgrupos"=>$subgrupo); + } + $subgrupo = array(); + } + } + return $final; + } + /* + Function: pegaGruposMenu + + Retorna a lista de grupos de um menu + + Parametros: + + id_menu {string} + + Return: + + {array} + */ + function pegaGruposMenu($id_menu,$ordenaNome="nao"){ + if($ordenaNome == "sim"){ + $ordem = "nome_grupo"; + } + else{ + $ordem = "ordem"; + } + $sqlgrupos = $this->sql_grupos."where ".$this->pubsql." id_menu='$id_menu' order by $ordem"; + $sqlraiz = $this->sql_temasraiz."where i3geoadmin_raiz.id_menu='$id_menu' and i3geoadmin_raiz.nivel = 0 order by ordem"; + $grupos = $this->execSQL($sqlgrupos); + $raiz = $this->execSQL($sqlraiz); + $raiz = $this->validaTemas($raiz,"codigo_tema"); + return array("raiz"=>$raiz,"grupos"=>$grupos); + } + /* + Function: pegaSubgruposGrupo + + Retorna a lista de subgrupos de um grupo + + Parametros: + + id_menu {string} + + id_n1 {string} - id do grupo + + Return: + + {array} + */ + function pegaSubgruposGrupo($id_menu,$id_n1,$ordenaNome="nao",$filtraOgc="nao",$filtraDown="nao") + { + if($ordenaNome == "sim"){ + $ordem = "nome_subgrupo"; + } + else{ + $ordem = "ordem"; + } + $f = ""; + if($filtraOgc == "sim" || $filtraDown == "sim"){ + $ff = array(); + if($filtraOgc == "sim"){ + $ff[] = " i3geoadmin_temas.ogc_tema = 'SIM' "; + } + if($filtraDown == "sim"){ + $ff[] = " i3geoadmin_temas.download_tema = 'SIM' "; + } + $f = implode(" AND ",$ff) . " AND "; + } + $subgrupos = $this->execSQL($this->sql_subgrupos."where ".$this->pubsql." i3geoadmin_n2.id_n1='$id_n1' order by $ordem"); + $raiz = $this->execSQL($this->sql_temasraiz."where $f i3geoadmin_raiz.nivel = 1 and i3geoadmin_raiz.id_nivel = $id_n1 order by ordem"); + $raiz = $this->validaTemas($raiz,"codigo_tema"); + return array("raiz"=>$raiz,"subgrupos"=>$subgrupos); + } + /* + Function: pegaTemasRaizMenu + + Retorna a lista de temas da raiz de um menu + + Parametros: + + id_menu {string} + + Return: + + {array} + */ + function pegaTemasRaizMenu($id_menu) + { + $raiz = $this->execSQL($this->sql_temasraiz."where i3geoadmin_raiz.id_menu='$id_menu' and i3geoadmin_raiz.nivel = 0 order by ordem"); + $raiz = $this->validaTemas($raiz,"codigo_tema"); + return $raiz; + } + /* + Function: pegaTemasRaizGrupo + + Retorna a lista de temas da raiz de um grupo + + Parametros: + + id_menu {string} + + id_n1 {string} - id do grupo + + Return: + + {array} + */ + function pegaTemasRaizGrupo($id_menu,$id_n1,$filtraOgc="nao",$filtraDown="nao") + { + $f = ""; + if($filtraOgc == "sim" || $filtraDown == "sim"){ + $ff = array(); + if($filtraOgc == "sim"){ + $ff[] = " i3geoadmin_temas.ogc_tema = 'SIM' "; + } + if($filtraDown == "sim"){ + $ff[] = " i3geoadmin_temas.download_tema = 'SIM' "; + } + $f = implode(" AND ",$ff) . " AND "; + } + if($id_n1 == ""){ + $raiz = $this->execSQL($this->sql_temasraiz."where $f i3geoadmin_raiz.nivel = 1 and i3geoadmin_raiz.id_nivel > 0 order by ordem"); + } + else { + $raiz = $this->execSQL($this->sql_temasraiz."where $f i3geoadmin_raiz.nivel = 1 and i3geoadmin_raiz.id_nivel = $id_n1 order by ordem"); + } + $raiz = $this->validaTemas($raiz,"codigo_tema"); + return $raiz; + } + /* + Function: pegaTodosTemas + + Retorna os dados de todos os temas + + Return: + + {array} + */ + function pegaTodosTemas($combo=false) + { + if($combo == true){ + $q = $this->execSQL($this->sql_temas_combo." ORDER BY nome_tema ASC"); + } + else{ + $q = $this->execSQL($this->sql_temas." ORDER BY nome_tema ASC"); + } + if($q){ + $q = $this->validaTemas($q,"codigo_tema"); + return $q; + } + } + /* + Function: pegaTema + + Retorna os dados de um tema + + Parametros: + + id_tema {string} + + Return: + + {array} + */ + function pegaTema($id_tema) + { + $q = $this->execSQL($this->sql_temas." and id_tema = '$id_tema' "); + if($q){ + return $q; + } + else{ + //caso de banco de dados antigo + $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 "; + $q = $this->execSQL($sql." where id_tema = '$id_tema' "); + return $q; + } + } + /* + Function: pegaTemaPorCodigo + + Retorna os dados de um tema buscando por codigo + + Parametros: + + codigo_tema {string} + + Return: + + {array} + */ + function pegaTemaPorCodigo($codigo_tema) + { + $q = $this->execSQL($this->sql_temas." and codigo_tema = '$codigo_tema' "); + if($q){ + return $q; + } + else{ + //caso de banco de dados antigo + $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 "; + $q = $this->execSQL($sql." where codigo_tema = '$codigo_tema' "); + return $q; + } + } + /* + Function: pegaTemasSubGrupo + + Retorna os temas de um subgrupo + + Parametros: + + id_n2 {string} - id do subgrupo + + Return: + + {array} + */ + function pegaTemasSubGrupo($id_n2,$filtraOgc="nao",$filtraDown="nao") + { + $f = ""; + if($filtraOgc == "sim" || $filtraDown == "sim"){ + $ff = array(); + if($filtraOgc == "sim"){ + $ff[] = " i3geoadmin_temas.ogc_tema = 'SIM' "; + } + if($filtraDown == "sim"){ + $ff[] = " i3geoadmin_temas.download_tema = 'SIM' "; + } + $f = implode(" AND ",$ff) . " AND "; + } + $temas = $this->execSQL($this->sql_temasSubgrupo."where $f ".$this->pubsql." i3geoadmin_n3.id_n2='$id_n2' order by ordem"); + $temas = $this->validaTemas($temas,"codigo_tema"); + return $temas; + } + /* + Function: formataMenus + + Retorna os menus e temas na raiz de um menu, formatados no padrão da árvore + + Return: + + {array} + */ + function formataMenus(){ + } + /* + Function: formataGruposMenu + + Retorna os grupos e temas na raiz de um menu, formatados no padrão da árvore + + Parametros: + + id_menu {string} + + perfil {string} + + listasgrupos {string} - sim|nao + + Return: + + {array} + */ + function formataGruposMenu ($id_menu,$perfil,$listasgrupos,$ordenaNome="nao",$filtraOgc="nao",$filtraDown="nao") + { + //error_reporting(0); + $dados = $this->pegaGruposMenu($id_menu,$ordenaNome); + $resultado = array(); + $temasraiz = array(); + foreach($dados["raiz"] as $temar){ + $temasraiz[] = $this->formataTema($temar["id_tema"]); + } + if(count($dados["grupos"]) == 0){ + $grupos[] = array(); + } + $raizgrupos = $this->pegaTemasRaizGrupo($id_menu,"",$filtraOgc,$filtraDown); + //var_dump($raizgrupos);exit; + foreach($dados["grupos"] as $grupo) { + $a = $grupo["n1_perfil"]; + $a = str_replace(" ",",",$a); + if($this->verificaOcorrencia($perfil,explode(",",$a)) == true) + { + $temas = array(); + //$raizgrupo = $this->pegaTemasRaizGrupo($id_menu,$grupo["id_n1"],$filtraOgc,$filtraDown); + $grupodown = "nao"; + $grupoogc = "nao"; + foreach($raizgrupos as $tema){ + if($tema["id_nivel"] == $grupo["id_n1"]){ + $temas[] = $this->formataTema($tema["id_tema"]); + } + } + if($temas > 0){ + $grupodown = "sim"; + $grupoogc = "sim"; + } + $subgrupos = array(); + if($listasgrupos=="sim"){ + $dadossubgrupos = $this->pegaSubgruposGrupo($id_menu,$grupo["id_n1"],$ordenaNome,$filtraOgc,$filtraDown); + foreach($dadossubgrupos["subgrupos"] as $sgrupo){ + $a = $sgrupo["n2_perfil"]; + $a = str_replace(" ",",",$a); + if($this->verificaOcorrencia($perfil,explode(",",$a))){ + //verifica se existem temas que podem receber download + $down = "nao"; + $ogc = "nao"; + $listaT = $this->pegaTemasSubGrupo($sgrupo["id_n2"],$filtraOgc,$filtraDown); + foreach($listaT as $tema){ + if(strtolower($tema["tipoa_tema"]) != "wms") + { + if (strtolower($tema["download_tema"]) != "nao") + { + $down = "sim";$grupodown = "sim"; + } + + if (strtolower($tema["ogc_tema"]) != "nao") + { + $ogc = "sim";$grupoogc = "sim"; + } + } + } + if(count($listaT) > 0){ + $subgrupos[] = array("id_n2"=>$sgrupo["id_n2"],"publicado"=>($sgrupo["publicado"]),"nome"=>$this->converte($sgrupo["nome_subgrupo"]),"download"=>$down,"ogc"=>$ogc); + } + } + } + } + //evita ocorrencias vazias quando for aplicado um filtro + if($filtraOgc == "sim" || $filtraDown == "sim"){ + if(count($subgrupos) > 0 || count($temas) > 0){ + $grupos[] = array("publicado"=>($grupo["publicado"]),"id_n1"=>($grupo["id_n1"]),"nome"=>$this->converte($grupo["nome_grupo"]),"ogc"=>$grupoogc,"download"=>$grupodown,"subgrupos"=>$subgrupos,"temasgrupo"=>$temas); + } + } + else{ + $grupos[] = array("publicado"=>($grupo["publicado"]),"id_n1"=>($grupo["id_n1"]),"nome"=>$this->converte($grupo["nome_grupo"]),"ogc"=>$grupoogc,"download"=>$grupodown,"subgrupos"=>$subgrupos,"temasgrupo"=>$temas); + } + } + } + $grupos[] = array("temasraiz"=>$temasraiz); + //pega os sistemas checando os perfis + $sistemas = array(); + $grupos[] = array("idmenu"=>$id_menu); + $grupos[] = array("sistemas"=>""); + return($grupos); + } + /* + Function: formataSubgruposGrupo + + Retorna os subgrupos e temas na raiz de um grupo, formatados no padrão da árvore + + Parametros: + + id_menu {string} + + id_n1 {string} - id do grupo + + perfil {string} + + Return: + + {array} + */ + function formataSubgruposGrupo ($id_menu,$id_n1,$perfil) + { + $dados = $this->pegaSubgruposGrupo($id_menu,$id_n1); + $resultado = array(); + $temasraiz = array(); + foreach($dados["raiz"] as $temar) + { + $temasraiz[] = $this->formataTema($temar["id_tema"]); + } + if(count($dados["subgrupos"]) == 0) + { + $sgrupos[] = array(); + } + $subgrupos = array(); + foreach($dados["subgrupos"] as $sgrupo) + { + $a = $sgrupo["n2_perfil"]; + $a = str_replace(" ",",",$a); + if ($this->verificaOcorrencia($perfil,explode(",",$a))) + { + $listaT = $this->pegaTemasSubGrupo($sgrupo["id_n2"]); + $down = "nao"; + $ogc = "nao"; + foreach($listaT as $tema) + { + if(strtolower($tema["tipoa_tema"]) != "wms") + { + if (strtolower($tema["download_tema"]) != "nao") + { + $down = "sim"; + } + if (strtolower($tema["ogc_tema"]) != "nao") + { + $ogc = "sim"; + } + } + } + if(count($listaT) > 0) + { + $subgrupos[] = array("publicado"=>($sgrupo["publicado"]),"id_n2"=>($sgrupo["id_n2"]),"nome"=>$this->converte($sgrupo["nome_subgrupo"]),"download"=>$down,"ogc"=>$ogc,"temas"=>$listaT); + } + } + } + return (array("subgrupo"=>$subgrupos,"temasgrupo"=>$temasraiz)); + } + /* + Function: formataTemasSubgrupo + + Retorna os temas de um subgrupo, formatados no padrão da árvore + + Parametros: + + id_n2 {string} - id do subgrupo + + perfil {string} + + Return: + + {array} + */ + function formataTemasSubgrupo($id_n2,$perfil) + { + $dados = $this->pegaTemasSubGrupo($id_n2); + $temas = array(); + foreach($dados as $tema) + { + $a = $tema["n3_perfil"]; + $a = str_replace(" ",",",$a); + if($this->verificaOcorrencia($perfil,explode(",",$a))) + { + $temas[] = $this->formataTema($tema["id_tema"],$tema["publicado"]); + } + } + return $temas; + } + /* + Function: formataTema + + Retorna os dados de um tema, formatados no padrão da árvore + + Parametros: + + id_tema {string} + + publicado {string} - SIM|NAO valor do índice "publicado" que será incluído no array de retorno + + Return: + + {array} + */ + function formataTema($id_tema,$publicado="SIM") + { + $recordset = $this->pegaTema($id_tema); + $recordset = $recordset[0]; + $down = "sim"; + $ogc = "sim"; + $link = " "; + $kmz = "nao"; + if (strtolower($recordset["download_tema"]) == "nao") + { + $down = "nao"; + } + if (strtolower($recordset["ogc_tema"]) == "nao") + { + $ogc = "nao"; + } + if(strtolower($recordset["tipoa_tema"]) == "wms") + { + $down = "nao"; + $ogc = "nao"; + } + if ($recordset["link_tema"] != "") + { + $link = $recordset["link_tema"]; + } + if (strtolower($recordset["kmz_tema"]) == "sim") + { + $kmz = "sim"; + } + //codigo_tema para fins de compatibilidade + return array("codigo_tema"=>($recordset["codigo_tema"]),"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); + } + /* + Function: execSQL + + Executa um SQL no banco de administração + + Parametros: + + sql {string} + + Return: + + {array} + */ + function execSQL($sql) + { + //echo "
".$sql; + //error_reporting(0); + $sql = str_ireplace(array("update","delete","insert","--","drop",";"),"",$sql); + $q = $this->dbh->query($sql,PDO::FETCH_ASSOC); + if($q) + { + return $q->fetchAll(); + } + else + {return false; + } + } + /* + Verifica se uma string ocorre em um array + */ + function verificaOcorrencia($procurar,$em) + { + if(count($em) == 1 && $em[0] == "") + { + $em = ""; + } + if($procurar == "" && $em == "") + { + return true; + } + if($em == "") + { + return true; + } + $resultado = false; + if($procurar != "" && $em != "") + { + foreach($em as $e) + { + $e = trim($e); + foreach($procurar as $p) + { + $p = trim($p); + if($p == $e) + { + $resultado = true; + } + } + } + } + return $resultado; + } + function seems_utf8($Str) { # by bmorel at ssi dot fr + $length = strlen($Str); + for ($i = 0; $i < $length; $i++) { + if (ord($Str[$i]) < 0x80) continue; # 0bbbbbbb + elseif ((ord($Str[$i]) & 0xE0) == 0xC0) $n = 1; # 110bbbbb + elseif ((ord($Str[$i]) & 0xF0) == 0xE0) $n = 2; # 1110bbbb + elseif ((ord($Str[$i]) & 0xF8) == 0xF0) $n = 3; # 11110bbb + elseif ((ord($Str[$i]) & 0xFC) == 0xF8) $n = 4; # 111110bb + elseif ((ord($Str[$i]) & 0xFE) == 0xFC) $n = 5; # 1111110b + else return false; # Does not match any model + for ($j = 0; $j < $n; $j++) { # n bytes matching 10bbbbbb follow ? + if ((++$i == $length) || ((ord($Str[$i]) & 0xC0) != 0x80)) + return false; + } + } + return true; + } + /** + * + * TODO Verificar ao fechar versao - verificar a acentuacao das palavras nessa funcao + */ + function removeAcentos($s) + { + $s = ereg_replace("[áàâã]","a",$s); + $s = ereg_replace("[ÁÀÂÃ]","A",$s); + $s = ereg_replace("[éèê]","e",$s); + $s = ereg_replace("[í]","i",$s); + $s = ereg_replace("[Í]","I",$s); + $s = ereg_replace("[ÉÈÊ]","E",$s); + $s = ereg_replace("[óòôõ]","o",$s); + $s = ereg_replace("[ÓÒÔÕ]","O",$s); + $s = ereg_replace("[úùû]","u",$s); + $s = ereg_replace("[ÚÙÛ]","U",$s); + $s = str_replace("ç","c",$s); + $s = str_replace("Ç","C",$s); + //$str = htmlentities($s); + $str = preg_replace("/(&)([a-z])([a-z]+;)/i", '$2', $s); + $str = preg_replace("/[^A-Z0-9]/i", ' ', $str); + $string = preg_replace("/\s+/i", ' ', $str); + + if (!preg_match('/[\x80-\xff]/', $string)){ + return $string; + } + if ($this->seems_utf8($string)) { + $chars = array( + // Decompositions for Latin-1 Supplement + chr(195).chr(128) => 'A', chr(195).chr(129) => 'A', + chr(195).chr(130) => 'A', chr(195).chr(131) => 'A', + chr(195).chr(132) => 'A', chr(195).chr(133) => 'A', + chr(195).chr(135) => 'C', chr(195).chr(136) => 'E', + chr(195).chr(137) => 'E', chr(195).chr(138) => 'E', + chr(195).chr(139) => 'E', chr(195).chr(140) => 'I', + chr(195).chr(141) => 'I', chr(195).chr(142) => 'I', + chr(195).chr(143) => 'I', chr(195).chr(145) => 'N', + chr(195).chr(146) => 'O', chr(195).chr(147) => 'O', + chr(195).chr(148) => 'O', chr(195).chr(149) => 'O', + chr(195).chr(150) => 'O', chr(195).chr(153) => 'U', + chr(195).chr(154) => 'U', chr(195).chr(155) => 'U', + chr(195).chr(156) => 'U', chr(195).chr(157) => 'Y', + chr(195).chr(159) => 's', chr(195).chr(160) => 'a', + chr(195).chr(161) => 'a', chr(195).chr(162) => 'a', + chr(195).chr(163) => 'a', chr(195).chr(164) => 'a', + chr(195).chr(165) => 'a', chr(195).chr(167) => 'c', + chr(195).chr(168) => 'e', chr(195).chr(169) => 'e', + chr(195).chr(170) => 'e', chr(195).chr(171) => 'e', + chr(195).chr(172) => 'i', chr(195).chr(173) => 'i', + chr(195).chr(174) => 'i', chr(195).chr(175) => 'i', + chr(195).chr(177) => 'n', chr(195).chr(178) => 'o', + chr(195).chr(179) => 'o', chr(195).chr(180) => 'o', + chr(195).chr(181) => 'o', chr(195).chr(182) => 'o', + chr(195).chr(182) => 'o', chr(195).chr(185) => 'u', + chr(195).chr(186) => 'u', chr(195).chr(187) => 'u', + chr(195).chr(188) => 'u', chr(195).chr(189) => 'y', + chr(195).chr(191) => 'y', + // Decompositions for Latin Extended-A + chr(196).chr(128) => 'A', chr(196).chr(129) => 'a', + chr(196).chr(130) => 'A', chr(196).chr(131) => 'a', + chr(196).chr(132) => 'A', chr(196).chr(133) => 'a', + chr(196).chr(134) => 'C', chr(196).chr(135) => 'c', + chr(196).chr(136) => 'C', chr(196).chr(137) => 'c', + chr(196).chr(138) => 'C', chr(196).chr(139) => 'c', + chr(196).chr(140) => 'C', chr(196).chr(141) => 'c', + chr(196).chr(142) => 'D', chr(196).chr(143) => 'd', + chr(196).chr(144) => 'D', chr(196).chr(145) => 'd', + chr(196).chr(146) => 'E', chr(196).chr(147) => 'e', + chr(196).chr(148) => 'E', chr(196).chr(149) => 'e', + chr(196).chr(150) => 'E', chr(196).chr(151) => 'e', + chr(196).chr(152) => 'E', chr(196).chr(153) => 'e', + chr(196).chr(154) => 'E', chr(196).chr(155) => 'e', + chr(196).chr(156) => 'G', chr(196).chr(157) => 'g', + chr(196).chr(158) => 'G', chr(196).chr(159) => 'g', + chr(196).chr(160) => 'G', chr(196).chr(161) => 'g', + chr(196).chr(162) => 'G', chr(196).chr(163) => 'g', + chr(196).chr(164) => 'H', chr(196).chr(165) => 'h', + chr(196).chr(166) => 'H', chr(196).chr(167) => 'h', + chr(196).chr(168) => 'I', chr(196).chr(169) => 'i', + chr(196).chr(170) => 'I', chr(196).chr(171) => 'i', + chr(196).chr(172) => 'I', chr(196).chr(173) => 'i', + chr(196).chr(174) => 'I', chr(196).chr(175) => 'i', + chr(196).chr(176) => 'I', chr(196).chr(177) => 'i', + chr(196).chr(178) => 'IJ',chr(196).chr(179) => 'ij', + chr(196).chr(180) => 'J', chr(196).chr(181) => 'j', + chr(196).chr(182) => 'K', chr(196).chr(183) => 'k', + chr(196).chr(184) => 'k', chr(196).chr(185) => 'L', + chr(196).chr(186) => 'l', chr(196).chr(187) => 'L', + chr(196).chr(188) => 'l', chr(196).chr(189) => 'L', + chr(196).chr(190) => 'l', chr(196).chr(191) => 'L', + chr(197).chr(128) => 'l', chr(197).chr(129) => 'L', + chr(197).chr(130) => 'l', chr(197).chr(131) => 'N', + chr(197).chr(132) => 'n', chr(197).chr(133) => 'N', + chr(197).chr(134) => 'n', chr(197).chr(135) => 'N', + chr(197).chr(136) => 'n', chr(197).chr(137) => 'N', + chr(197).chr(138) => 'n', chr(197).chr(139) => 'N', + chr(197).chr(140) => 'O', chr(197).chr(141) => 'o', + chr(197).chr(142) => 'O', chr(197).chr(143) => 'o', + chr(197).chr(144) => 'O', chr(197).chr(145) => 'o', + chr(197).chr(146) => 'OE',chr(197).chr(147) => 'oe', + chr(197).chr(148) => 'R',chr(197).chr(149) => 'r', + chr(197).chr(150) => 'R',chr(197).chr(151) => 'r', + chr(197).chr(152) => 'R',chr(197).chr(153) => 'r', + chr(197).chr(154) => 'S',chr(197).chr(155) => 's', + chr(197).chr(156) => 'S',chr(197).chr(157) => 's', + chr(197).chr(158) => 'S',chr(197).chr(159) => 's', + chr(197).chr(160) => 'S', chr(197).chr(161) => 's', + chr(197).chr(162) => 'T', chr(197).chr(163) => 't', + chr(197).chr(164) => 'T', chr(197).chr(165) => 't', + chr(197).chr(166) => 'T', chr(197).chr(167) => 't', + chr(197).chr(168) => 'U', chr(197).chr(169) => 'u', + chr(197).chr(170) => 'U', chr(197).chr(171) => 'u', + chr(197).chr(172) => 'U', chr(197).chr(173) => 'u', + chr(197).chr(174) => 'U', chr(197).chr(175) => 'u', + chr(197).chr(176) => 'U', chr(197).chr(177) => 'u', + chr(197).chr(178) => 'U', chr(197).chr(179) => 'u', + chr(197).chr(180) => 'W', chr(197).chr(181) => 'w', + chr(197).chr(182) => 'Y', chr(197).chr(183) => 'y', + chr(197).chr(184) => 'Y', chr(197).chr(185) => 'Z', + chr(197).chr(186) => 'z', chr(197).chr(187) => 'Z', + chr(197).chr(188) => 'z', chr(197).chr(189) => 'Z', + chr(197).chr(190) => 'z', chr(197).chr(191) => 's', + // Euro Sign + chr(226).chr(130).chr(172) => 'E', + // GBP (Pound) Sign + chr(194).chr(163) => ''); + $string = strtr($string, $chars); + } else { + // Assume ISO-8859-1 if not UTF-8 + $chars['in'] = chr(128).chr(131).chr(138).chr(142).chr(154).chr(158) + .chr(159).chr(162).chr(165).chr(181).chr(192).chr(193).chr(194) + .chr(195).chr(196).chr(197).chr(199).chr(200).chr(201).chr(202) + .chr(203).chr(204).chr(205).chr(206).chr(207).chr(209).chr(210) + .chr(211).chr(212).chr(213).chr(214).chr(216).chr(217).chr(218) + .chr(219).chr(220).chr(221).chr(224).chr(225).chr(226).chr(227) + .chr(228).chr(229).chr(231).chr(232).chr(233).chr(234).chr(235) + .chr(236).chr(237).chr(238).chr(239).chr(241).chr(242).chr(243) + .chr(244).chr(245).chr(246).chr(248).chr(249).chr(250).chr(251) + .chr(252).chr(253).chr(255); + $chars['out'] = "EfSZszYcYuAAAAAACEEEEIIIINOOOOOOUUUUYaaaaaaceeeeiiiinoooooouuuuyy"; + $string = strtr($string, $chars['in'], $chars['out']); + $double_chars['in'] = array(chr(140), chr(156), chr(198), chr(208), chr(222), chr(223), chr(230), chr(240), chr(254)); + $double_chars['out'] = array('OE', 'oe', 'AE', 'DH', 'TH', 'ss', 'ae', 'dh', 'th'); + $string = str_replace($double_chars['in'], $double_chars['out'], $string); + } + return $string; + } + function converte($texto){ + if($this->convUTF == true) + $texto = mb_convert_encoding($texto,mb_detect_encoding($texto),"UTF-8"); + else + $texto = mb_convert_encoding($texto,mb_detect_encoding($texto),"ISO-8859-1"); + return $texto; + } + function verificaPapelSessao($id_papel){ + if(!empty($_COOKIE["i3geocodigologin"])){ + session_write_close(); + session_name("i3GeoLogin"); + session_id($_COOKIE["i3geocodigologin"]); + session_start(); + //var_dump($_SESSION);exit; + if($_SESSION["usuario"] != $_COOKIE["i3geousuariologin"]){ + return false; + } + foreach($_SESSION["papeis"] as $p){ + if($p == 1 || $p == $id_papel){ + return true; + } + } + } + else{//caso nao exista, retorna um erro + return false; + } + } + function verificaOperacaoSessao($operacao){ + if($_COOKIE["i3geocodigologin"] != ""){ + session_write_close(); + session_name("i3GeoLogin"); + session_id($_COOKIE["i3geocodigologin"]); + session_start(); + $resultado = false; + //verifica se e administrador + foreach($_SESSION["papeis"] as $p){ + if($p == 1){ + return true; + } + } + if(!empty($_SESSION["operacoes"][$operacao])){ + $resultado = true; + } + return $resultado; + } else { + return false; + } + } +} +?> \ No newline at end of file diff --git a/classesphp/classe_menutemas.php b/classesphp/classe_menutemas.php index ed7820d..3c5ed8b 100755 --- a/classesphp/classe_menutemas.php +++ b/classesphp/classe_menutemas.php @@ -5,7 +5,7 @@ Title: classe_menutemas.php Manipulação dos temas do arquivo menutemas.xml ou sistema de administração Quando o i3Geo está configurado para acessar o sistema de administração, os métodos desta classe -passam a utilizar a classe i3geo/admin/php/classe_arvore.php +passam a utilizar a classe i3geo/classesphp/classe_arvore.php Lista temas, grupos,etc. @@ -113,7 +113,7 @@ array $locaplic = $this->locaplic; if(!isset($this->locaplic)) {return "locaplic nao foi definido";} - include_once($this->locaplic."/admin/php/classe_arvore.php"); + include_once($this->locaplic."/classesphp/classe_arvore.php"); $arvore = new Arvore($this->locaplic,$this->idioma); $resultado = $arvore->pegaListaDeMenus($this->perfil,$filtraOgc,$filtraDown); $final = array(); @@ -155,7 +155,7 @@ array else {$tipo = "gruposeraiz";} $tempm = $this->pegaListaDeMenus($filtraOgc,$filtraDown); - include_once(dirname(__FILE__)."/../admin/php/classe_arvore.php"); + include_once(dirname(__FILE__)."/../classesphp/classe_arvore.php"); $arvore = new Arvore($this->locaplic,$this->idioma,$this->filtro); foreach($tempm as $menu) { @@ -192,7 +192,7 @@ array { if($menu["idmenu"] == $idmenu || $idmenu == "") { - include_once(dirname(__FILE__)."/../admin/php/classe_arvore.php"); + include_once(dirname(__FILE__)."/../classesphp/classe_arvore.php"); $arvore = new Arvore($this->locaplic,$this->idioma,$this->filtro); $subGrupos = $arvore->formataSubgruposGrupo($idmenu,$codgrupo,$this->perfil); unset($arvore); @@ -219,7 +219,7 @@ array */ function pegaListaDeTemas($grupo,$subgrupo,$idmenu) { - include_once(dirname(__FILE__)."/../admin/php/classe_arvore.php"); + include_once(dirname(__FILE__)."/../classesphp/classe_arvore.php"); $arvore = new Arvore($this->locaplic,$this->idioma); $temas = $arvore->formataTemasSubgrupo($subgrupo,$this->perfil); unset($arvore); @@ -384,7 +384,7 @@ $procurar - String que será procurada. } else { - include_once(dirname(__FILE__)."/../admin/php/classe_arvore.php"); + include_once(dirname(__FILE__)."/../classesphp/classe_arvore.php"); $arvore = new Arvore($this->locaplic,$this->idioma); $temas = $arvore->procuraTemas($procurar,$this->perfil); unset($arvore); @@ -495,7 +495,7 @@ $procurar - String que será procurada. */ function procurartemas2($procurar) { - include_once(dirname(__FILE__)."/../admin/php/classe_arvore.php"); + include_once(dirname(__FILE__)."/../classesphp/classe_arvore.php"); $arvore = new Arvore($this->locaplic,$this->idioma); $temas = $arvore->procuraTemas($procurar,$this->perfil); unset($arvore); @@ -514,7 +514,7 @@ $fatorestrela - valor para normalizar o total de acessos com o valor da estrela */ function procurartemasestrela($nivel,$fatorestrela) { - include_once(dirname(__FILE__)."/../admin/php/classe_arvore.php"); + include_once(dirname(__FILE__)."/../classesphp/classe_arvore.php"); $arvore = new Arvore($this->locaplic,$this->idioma); $temas = $arvore->procuraTemasEstrela($nivel,$fatorestrela,$this->perfil); unset($arvore); diff --git a/classesphp/mapa_controle.php b/classesphp/mapa_controle.php index 0672ff6..7958e34 100755 --- a/classesphp/mapa_controle.php +++ b/classesphp/mapa_controle.php @@ -1744,7 +1744,7 @@ switch (strtoupper($funcao)) { * Pega a lista de todos os temas que nao possuem restricoes de acesso */ case "PEGATODOSTEMAS": - include ("../admin/php/classe_arvore.php"); + include ("../classesphp/classe_arvore.php"); $idioma = $_pg["idioma"]; $arvore = new Arvore($locaplic, $idioma); diff --git a/fontetema.php b/fontetema.php index abf305e..ce33ba6 100755 --- a/fontetema.php +++ b/fontetema.php @@ -39,7 +39,7 @@ fontetema.php?tema=bioma */ include(dirname(__FILE__)."/ms_configura.php"); -include(dirname(__FILE__)."/admin/php/classe_arvore.php"); +include(dirname(__FILE__)."/classesphp/classe_arvore.php"); include_once (dirname(__FILE__)."/classesphp/sani_request.php"); $_GET = array_merge($_GET,$_POST); diff --git a/interface/carto_ol.htm b/interface/carto_ol.htm index 936dcb0..46ace6a 100755 --- a/interface/carto_ol.htm +++ b/interface/carto_ol.htm @@ -20,8 +20,6 @@