From 4e42537b5f61a1dd9692df36a0bcdffef69a7ca1 Mon Sep 17 00:00:00 2001 From: Edmar Moretti Date: Fri, 28 Dec 2012 00:29:37 +0000 Subject: [PATCH] Verificação dos acessos aos temas bloqueados ou não publicados --- admin/admin.db | Bin 172032 -> 0 bytes admin/hiperbolica.php | 34 +++++++++++++++++++++------------- admin/php/parsemapfile.php | 2 +- admin/php/xml.php | 33 +++++++++++++++++++++++++-------- classesphp/funcoes_gerais.php | 47 +++++++++++++++++++++++++++++++++++++---------- classesphp/mapa_inicia.php | 2 +- classesphp/wscliente.php | 2 +- ms_criamapa.php | 2 +- temas/_llocalirestrito.map | 3 +-- temas/_wlocalirestrito.map | 3 +-- 10 files changed, 89 insertions(+), 39 deletions(-) diff --git a/admin/admin.db b/admin/admin.db index 11f3d2c..c7ae2a0 100644 Binary files a/admin/admin.db and b/admin/admin.db differ diff --git a/admin/hiperbolica.php b/admin/hiperbolica.php index 3acf002..bd2474f 100644 --- a/admin/hiperbolica.php +++ b/admin/hiperbolica.php @@ -4,7 +4,7 @@ Cria um arquivo no formato XML para o aplicativo arvore hiperbolica. -A �rvore hiperbolica e montada por um applet que carrega um XML contendo a estrutura de nos. +A arvore hiperbolica e montada por um applet que carrega um XML contendo a estrutura de nos. Esse programa le o banco de administração e monta o XML contendo os menus, grupos, subgrupos e temas. @@ -34,7 +34,7 @@ Este programa é distribuído na expectativa de que seja útil porém, SEM NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral do GNU para mais detalhes. -Você deve ter recebido uma cópia da Licença Pública Geral do +Você deve ter recebido uma copia da Licença Pública Geral do GNU junto com este programa; se não, escreva para a Free Software Foundation, Inc., no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. @@ -68,19 +68,14 @@ $xml .= ""; // //obtem a lista de menus // -$menus = pegaDados("SELECT * from ".$esquemaadmin."i3geoadmin_menus order by nome_menu ",$locaplic); +$menus = pegaDados("SELECT * from ".$esquemaadmin."i3geoadmin_menus where publicado_menu != 'NAO' order by nome_menu ",$locaplic); $xml .= ''; $contador = 0; $xml .= ' '."\n"; // //varre cada menu // -foreach ($menus as $menu) -{ - if(strtolower($menu["publicado_menu"]) == "nao") - { - continue; - } +foreach ($menus as $menu){ $id = $menu["id_menu"]; $nome = html_entity_decode($menu["nome_menu"]); $nome = h_converteTexto($nome); @@ -89,7 +84,7 @@ foreach ($menus as $menu) // //obtem a lista de grupos // - $grupos = pegaDados("select i3geoadmin_grupos.nome_grupo,id_n1,id_menu from ".$esquemaadmin."i3geoadmin_n1 LEFT JOIN ".$esquemaadmin."i3geoadmin_grupos ON i3geoadmin_n1.id_grupo = i3geoadmin_grupos.id_grupo where id_menu='$id' order by ordem",$locaplic); + $grupos = pegaDados("select i3geoadmin_grupos.nome_grupo,id_n1,id_menu from ".$esquemaadmin."i3geoadmin_n1 LEFT JOIN ".$esquemaadmin."i3geoadmin_grupos ON i3geoadmin_n1.id_grupo = i3geoadmin_grupos.id_grupo where id_menu='$id' and i3geoadmin_n1.publicado != 'NAO' order by ordem",$locaplic); for($i=0;$i < count($grupos);++$i) { $contador++; @@ -102,7 +97,13 @@ foreach ($menus as $menu) // //obtem os temas na raiz do grupo // - $temasRaizGrupo = pegaDados("select i3geoadmin_temas.tags_tema as tags_tema,i3geoadmin_temas.codigo_tema as codigo_tema,i3geoadmin_raiz.id_tema,nome_tema as nome_tema,perfil FROM ".$esquemaadmin."i3geoadmin_raiz LEFT JOIN ".$esquemaadmin."i3geoadmin_temas ON i3geoadmin_temas.id_tema = i3geoadmin_raiz.id_tema where i3geoadmin_raiz.nivel = 1 and i3geoadmin_raiz.id_nivel = ".$grupos[$i]["id_n1"]." order by ordem"); + $temasRaizGrupo = pegaDados(" + select i3geoadmin_temas.tags_tema as tags_tema,i3geoadmin_temas.codigo_tema as codigo_tema,i3geoadmin_raiz.id_tema,nome_tema as nome_tema,perfil + FROM ".$esquemaadmin."i3geoadmin_raiz + LEFT JOIN ".$esquemaadmin."i3geoadmin_temas ON i3geoadmin_temas.id_tema = i3geoadmin_raiz.id_tema + LEFT JOIN ".$esquemaadmin."i3geousr_grupotema ON i3geoadmin_raiz.id_tema = i3geousr_grupotema.id_tema + where i3geousr_grupotema.id_grupo is null and i3geoadmin_raiz.nivel = 1 and i3geoadmin_raiz.id_nivel = ".$grupos[$i]["id_n1"]." order by ordem"); + //var_dump($temasRaizGrupo);exit; $t = obtemTemas($temasRaizGrupo,$contador,$id); $xml .= $t[0]; @@ -110,7 +111,7 @@ foreach ($menus as $menu) // //obtem os subgrupos // - $subgrupos = pegaDados("select i3geoadmin_subgrupos.nome_subgrupo,i3geoadmin_n2.id_n2 from ".$esquemaadmin."i3geoadmin_n2 LEFT JOIN ".$esquemaadmin."i3geoadmin_subgrupos ON i3geoadmin_n2.id_subgrupo = i3geoadmin_subgrupos.id_subgrupo where i3geoadmin_n2.id_n1='$idgrupo' order by ordem",$locaplic); + $subgrupos = pegaDados("select i3geoadmin_subgrupos.nome_subgrupo,i3geoadmin_n2.id_n2 from ".$esquemaadmin."i3geoadmin_n2 LEFT JOIN ".$esquemaadmin."i3geoadmin_subgrupos ON i3geoadmin_n2.id_subgrupo = i3geoadmin_subgrupos.id_subgrupo where i3geoadmin_n2.id_n1='$idgrupo' and i3geoadmin_n2.publicado != 'NAO' order by ordem",$locaplic); if(count($subgrupos) > 0) $xml .= ' '."\n"; for($j=0;$j < count($subgrupos);++$j) @@ -123,7 +124,14 @@ foreach ($menus as $menu) $contador++; $xml .= ' '."\n"; $id_n2 = $subgrupos[$j]["id_n2"]; - $temas = pegaDados("select i3geoadmin_temas.tags_tema,i3geoadmin_temas.nome_tema,i3geoadmin_temas.codigo_tema,i3geoadmin_n3.id_n3 from ".$esquemaadmin."i3geoadmin_n3 LEFT JOIN ".$esquemaadmin."i3geoadmin_temas ON i3geoadmin_n3.id_tema = i3geoadmin_temas.id_tema where i3geoadmin_n3.id_n2='$id_n2' order by ordem",$locaplic); + $temas = pegaDados(" + select i3geoadmin_temas.tags_tema,i3geoadmin_temas.nome_tema,i3geoadmin_temas.codigo_tema,i3geoadmin_n3.id_n3 + from ".$esquemaadmin."i3geoadmin_n3 + LEFT JOIN ".$esquemaadmin."i3geoadmin_temas ON i3geoadmin_n3.id_tema = i3geoadmin_temas.id_tema + LEFT JOIN ".$esquemaadmin."i3geousr_grupotema ON i3geoadmin_n3.id_tema = i3geousr_grupotema.id_tema + where i3geousr_grupotema.id_grupo is null and i3geoadmin_n3.id_n2='$id_n2' and i3geoadmin_n3.publicado != 'NAO' order by ordem",$locaplic + ); + //var_dump($temas);exit; $t = obtemTemas($temas,$contador,$id); $xml .= $t[0]; $contador += $t[1]; diff --git a/admin/php/parsemapfile.php b/admin/php/parsemapfile.php index e029356..a3d9a6a 100644 --- a/admin/php/parsemapfile.php +++ b/admin/php/parsemapfile.php @@ -292,9 +292,9 @@ function mapfile() $nlayers = array(); foreach ($layers as $layer) { + $layer = $mapa->getlayerbyname($layer); if($objcontype[$layer->connectiontype] != MS_WMS ) { - $layer = $mapa->getlayerbyname($layer); if($layer->group == "") {$nlayers[] = $layer->name;} else diff --git a/admin/php/xml.php b/admin/php/xml.php index e9892fa..1b52173 100644 --- a/admin/php/xml.php +++ b/admin/php/xml.php @@ -33,9 +33,6 @@ Arquivo: i3geo/admin/php/xml.php */ -if(!function_exists("verificaEditores")){ - include_once(__DIR__."/../../classesphp/funcoes_gerais.php"); -} // //processa a variável $esquemaadmin definida em ms_configura.php //essa variável precisa ter um . no final quando não for vazia, evitando erros na inclusão dentro dos SQLs @@ -146,7 +143,12 @@ RSS function geraRSStemas($locaplic,$id_n2) { global $esquemaadmin; - $sql = "select '' as tipo_ws, t.codigo_tema as id_ws,t.nome_tema as nome_ws,'' as desc_ws,'php/parsemapfile.php?id='||t.codigo_tema as link_ws,t.link_tema as autor_ws from ".$esquemaadmin."i3geoadmin_n3 as n3,".$esquemaadmin."i3geoadmin_temas as t where t.id_tema = n3.id_tema and n3.id_n2 = '$id_n2' and n3.n3_perfil = '' order by nome_ws"; + $sql = " + select '' as tipo_ws, i3geoadmin_temas.codigo_tema as id_ws,i3geoadmin_temas.nome_tema as nome_ws,'' as desc_ws,'php/parsemapfile.php?id='||i3geoadmin_temas.codigo_tema as link_ws,i3geoadmin_temas.link_tema as autor_ws + from ".$esquemaadmin."i3geoadmin_n3 as n3 + LEFT JOIN ".$esquemaadmin."i3geoadmin_temas ON i3geoadmin_temas.id_tema = n3.id_tema + LEFT JOIN ".$esquemaadmin."i3geousr_grupotema ON n3.id_tema = i3geousr_grupotema.id_tema + where i3geousr_grupotema.id_grupo is null and i3geoadmin_temas.id_tema = n3.id_tema and n3.id_n2 = '$id_n2' and n3.n3_perfil = '' and n3.publicado != 'NAO' order by nome_ws"; return geraXmlRSS($locaplic,$sql,"Lista de temas"); } /* @@ -169,7 +171,12 @@ RSS function geraRSStemasRaiz($locaplic,$id,$nivel) { global $esquemaadmin; - $sql = "select '' as tipo_ws, t.codigo_tema as id_ws,t.nome_tema as nome_ws,'' as desc_ws,'php/parsemapfile.php?id='||t.codigo_tema as link_ws,t.link_tema as autor_ws from ".$esquemaadmin."i3geoadmin_raiz as r,".$esquemaadmin."i3geoadmin_temas as t where t.id_tema = r.id_tema and r.nivel = '$nivel' and r.id_nivel = '$id' order by nome_ws"; + $sql = " + select '' as tipo_ws, i3geoadmin_temas.codigo_tema as id_ws,i3geoadmin_temas.nome_tema as nome_ws,'' as desc_ws,'php/parsemapfile.php?id='||i3geoadmin_temas.codigo_tema as link_ws,i3geoadmin_temas.link_tema as autor_ws + from ".$esquemaadmin."i3geoadmin_raiz as r + LEFT JOIN ".$esquemaadmin."i3geoadmin_temas ON i3geoadmin_temas.id_tema = r.id_tema + LEFT JOIN ".$esquemaadmin."i3geousr_grupotema ON r.id_tema = i3geousr_grupotema.id_tema + where i3geousr_grupotema.id_grupo is null and i3geoadmin_temas.id_tema = r.id_tema and r.nivel = '$nivel' and r.id_nivel = '$id' order by nome_ws"; return geraXmlRSS($locaplic,$sql,"Temas na raiz"); } /* @@ -190,7 +197,8 @@ RSS function geraRSSsubgrupos($locaplic,$id_n1) { global $esquemaadmin; - $sql = "select '' as tipo_ws, n2.id_n2 as id_ws,g.nome_subgrupo as nome_ws,'' as desc_ws,'rsstemas.php?id='||n2.id_n2 as link_ws,'' as autor_ws from ".$esquemaadmin."i3geoadmin_n2 as n2,".$esquemaadmin."i3geoadmin_subgrupos as g where g.id_subgrupo = n2.id_subgrupo and n2.id_n1 = '$id_n1' and n2.n2_perfil = '' order by nome_ws"; + $sql = "select '' as tipo_ws, n2.id_n2 as id_ws,g.nome_subgrupo as nome_ws,'' as desc_ws,'rsstemas.php?id='||n2.id_n2 as link_ws,'' as autor_ws from ".$esquemaadmin."i3geoadmin_n2 as n2,".$esquemaadmin."i3geoadmin_subgrupos as g "; + $sql .= " where g.id_subgrupo = n2.id_subgrupo and n2.id_n1 = '$id_n1' and n2.n2_perfil = '' and n2.publicado != 'NAO' order by nome_ws"; return geraXmlRSS($locaplic,$sql,"Lista de sub-grupos"); } /* @@ -211,7 +219,7 @@ function geraRSSgrupos($locaplic) global $esquemaadmin; $sql = "select '' as tipo_ws, n1.id_n1 as id_ws, g.nome_grupo as nome_ws,'rsstemasraiz.php?nivel=1&id='||n1.id_n1 as desc_ws,'rsssubgrupos.php?id='||n1.id_n1 as link_ws,'' as autor_ws "; $sql .= "from ".$esquemaadmin."i3geoadmin_n1 as n1,".$esquemaadmin."i3geoadmin_grupos as g "; - $sql .= "where g.id_grupo = n1.id_grupo and n1.n1_perfil = '' group by id_ws,tipo_ws,nome_ws,desc_ws,link_ws,autor_ws order by nome_ws"; + $sql .= "where g.id_grupo = n1.id_grupo and n1.n1_perfil = '' and n1.publicado != 'NAO' group by id_ws,tipo_ws,nome_ws,desc_ws,link_ws,autor_ws order by nome_ws"; return geraXmlRSS($locaplic,$sql,"Lista de grupos"); } /* @@ -338,9 +346,12 @@ function geraRSStemasDownload($locaplic) and n1.id_grupo = g.id_grupo and (t.download_tema != 'nao' and t.download_tema != 'NAO') and t.tipoa_tema != 'WMS' - and n3.n3_perfil = '' + and n3.n3_perfil = '' and n2.n2_perfil = '' and n1.n1_perfil = '' + and n3.publicado != 'NAO' + and n2.publicado != 'NAO' + and n1.publicado != 'NAO' "; //echo $sql;exit; return geraXmlRSS($locaplic,$sql,"Temas para download"); @@ -376,6 +387,9 @@ function geraRSStemasKml($locaplic) and n3.n3_perfil = '' and n2.n2_perfil = '' and n1.n1_perfil = '' + and n3.publicado != 'NAO' + and n2.publicado != 'NAO' + and n1.publicado != 'NAO' "; //echo $sql;exit; return geraXmlRSS($locaplic,$sql,"Temas em KML"); @@ -412,6 +426,9 @@ function geraRSStemasOgc($locaplic) and n3.n3_perfil = '' and n2.n2_perfil = '' and n1.n1_perfil = '' + and n3.publicado != 'NAO' + and n2.publicado != 'NAO' + and n1.publicado != 'NAO' "; //echo $sql;exit; return geraXmlRSS($locaplic,$sql,"Temas em KML"); diff --git a/classesphp/funcoes_gerais.php b/classesphp/funcoes_gerais.php index 72f87a1..88a7452 100644 --- a/classesphp/funcoes_gerais.php +++ b/classesphp/funcoes_gerais.php @@ -2466,6 +2466,7 @@ $salva - salva o mapfile com os layers removidos ou nao Retorno: boolean indicando se o mapfile contem layers indevidos */ function validaAcessoTemas($map_file,$salva = true){ + error_reporting(0); $indevidos = listaLayersIndevidos($map_file); $existeIndevidos = false; if(count($indevidos) > 0){ @@ -2491,16 +2492,15 @@ O retorno e um array com a chave sendo o codigo do tema e o valor um array com a */ function listaTemasRestritos(){ include_once(__DIR__."/../admin/php/admin.php"); + error_reporting(0); $res = pegaDados("select id_grupo,codigo_tema from ".$esquemaadmin."i3geousr_grupotema as gt,".$esquemaadmin."i3geoadmin_temas as te where gt.id_tema = te.id_tema"); $restritos = array(); foreach ($res as $r){ - if(!empty ($restritos[$r["codigo_tema"]])){ - if($restritos[$r["codigo_tema"]]){ - array_push($restritos[$r["codigo_tema"]],$r["id_grupo"]); - } - else{ - $restritos[$r["codigo_tema"]] = array($r["id_grupo"]); - } + if(in_array($r["codigo_tema"],$restritos)){ + array_push($restritos[$r["codigo_tema"]],$r["id_grupo"]); + } + else{ + $restritos[$r["codigo_tema"]] = array($r["id_grupo"]); } } return $restritos; @@ -2511,10 +2511,26 @@ Function: listaLayersIndevidos Lista os layers de um mapfile que sao restritos e que nao sao permitidos ao usuario logado */ function listaLayersIndevidos($map_file){ + error_reporting(0); $indevidos = array(); $restritos = listaTemasRestritos(); + /* + array(1) { + ["_wlocalirestrito"]=> + array(1) { + [0]=> + string(1) "1" + } + } + */ if(count($restritos) > 0){ $gruposusr = listaGruposUsrLogin(); + /* + array(1) { + [0]=> + string(1) "1" + } + */ $m = ms_newMapObj($map_file); $c = $m->numlayers; for ($i=0;$i < $c;++$i) { @@ -2525,9 +2541,18 @@ function listaLayersIndevidos($map_file){ $meta = str_replace(".map","",basename($map_file)); } if($meta != ""){ - $t = $restritos[$meta]; - if($t && !in_array($t,$gruposusr)){ - array_push($indevidos,$layer->name); + if(in_array($meta,array_keys($restritos))){ + $indevido = true; + foreach($gruposusr as $g){ + foreach($restritos[$meta] as $r){ + if($g == $r){ + $indevido = false; + } + } + } + if($indevido == true){ + array_push($indevidos,$layer->name); + } } } } @@ -2540,6 +2565,7 @@ function listaLayersIndevidos($map_file){ Lista os temas que sao restritos e que nao sao permitidos ao usuario logado */ function listaTemasIndevidos(){ + error_reporting(0); $indevidos = array(); $restritos = listaTemasRestritos(); if(count($restritos) > 0){ @@ -2561,6 +2587,7 @@ function listaTemasIndevidos(){ Lista os grupos ao qual pertence o usuario atualmente logado */ function listaGruposUsrLogin(){ + error_reporting(0); if(empty($_COOKIE["i3geocodigologin"])){ return array(); } diff --git a/classesphp/mapa_inicia.php b/classesphp/mapa_inicia.php index c7be80c..6aed480 100644 --- a/classesphp/mapa_inicia.php +++ b/classesphp/mapa_inicia.php @@ -110,7 +110,7 @@ function iniciaMapa() if(!function_exists("validaAcessoTemas")){ include_once("funcoes_gerais.php"); } - validaAcessoTemas($_SESSION["map_file"]); + validaAcessoTemas($map_file); if(!isset($kmlurl)) {$kmlurl = "";} error_reporting(0); diff --git a/classesphp/wscliente.php b/classesphp/wscliente.php index d614882..2c767c8 100644 --- a/classesphp/wscliente.php +++ b/classesphp/wscliente.php @@ -430,7 +430,7 @@ function listaRSSws2() } else {$canali = simplexml_load_file($rss);} - $linhas[] = "####"; + $linhas[] = "####"; //var_dump($canali); foreach ($canali->channel->item as $item) { diff --git a/ms_criamapa.php b/ms_criamapa.php index 28ae323..e8d6f06 100644 --- a/ms_criamapa.php +++ b/ms_criamapa.php @@ -645,7 +645,7 @@ function incluiTemasIniciais(){ if ($layern->name == "estadosl") {$layern->set("data",$locaplic."/aplicmap/dados/estados.shp");} $layern->setmetadata("nomeoriginal",$layern->name); - $nNome = str_replace(".map","",basename($arqtemp)). + $nNome = str_replace(".map","",basename($arqtemp)); $layern->setmetadata("arquivotemaoriginal",$nNome); autoClasses($layern,$mapn); // diff --git a/temas/_llocalirestrito.map b/temas/_llocalirestrito.map index cd2de3f..f2b7932 100644 --- a/temas/_llocalirestrito.map +++ b/temas/_llocalirestrito.map @@ -20,7 +20,6 @@ MAP "LTEMPOITEMLINK" "" "METAESTAT_CODIGO_TIPO_REGIAO" "" "palletefile" "" - "nomeoriginal" "locali" "permitedownload" "sim" "permitecomentario" "" "metaestat" "" @@ -34,7 +33,7 @@ MAP "editorsql" "" "legendaimg" "" END # METADATA - NAME "localirestrito" + NAME "_llocalirestrito" STATUS DEFAULT TEMPLATE "none.htm" TILEITEM "location" diff --git a/temas/_wlocalirestrito.map b/temas/_wlocalirestrito.map index f7c4f9b..90dfafa 100644 --- a/temas/_wlocalirestrito.map +++ b/temas/_wlocalirestrito.map @@ -20,7 +20,6 @@ MAP "LTEMPOITEMLINK" "" "METAESTAT_CODIGO_TIPO_REGIAO" "" "palletefile" "" - "nomeoriginal" "locali" "permitedownload" "sim" "permitecomentario" "" "metaestat" "" @@ -34,7 +33,7 @@ MAP "editorsql" "" "legendaimg" "" END # METADATA - NAME "localirestrito" + NAME "_wlocalirestrito" STATUS DEFAULT TEMPLATE "none.htm" TILEITEM "location" -- libgit2 0.21.2