Commit 3d97b4e5fe02a2a2a2df0f4a539b4a226bff6555

Authored by Edmar Moretti
1 parent 44f57331

Criação da classe_arvore.php para controlar o acesso e edição da árvore de menus…

… do sistema de administração
admin/php/arvore.php
... ... @@ -33,20 +33,48 @@ error_reporting(0);
33 33 switch ($funcao)
34 34 {
35 35 case "pegaGrupos":
36   - $grupos = pegaDados("select i3geoadmin_grupos.nome_grupo,id_n1,id_menu,i3geoadmin_n1.publicado from i3geoadmin_n1 LEFT JOIN i3geoadmin_grupos ON i3geoadmin_n1.id_grupo = i3geoadmin_grupos.id_grupo where id_menu='$id_menu' order by ordem");
37   - $raiz = pegaDados("select id_raiz,i3geoadmin_raiz.id_tema,nome_tema FROM i3geoadmin_raiz LEFT JOIN i3geoadmin_temas ON i3geoadmin_temas.id_tema = i3geoadmin_raiz.id_tema where i3geoadmin_raiz.id_menu='$id_menu' and i3geoadmin_raiz.nivel = 0 order by ordem");
38   - retornaJSON(array("raiz"=>$raiz,"grupos"=>$grupos));
  36 + require_once("classe_arvore.php");
  37 + $arvore = new Arvore($locaplic);
  38 + $grupos = $arvore->pegaGruposMenu($id_menu);
  39 + unset($arvore);
  40 + retornaJSON($grupos);
39 41 exit;
40 42 break;
41 43 case "pegaSubGrupos":
42   - $subgrupos = pegaDados("select i3geoadmin_subgrupos.nome_subgrupo,i3geoadmin_n2.id_n2,i3geoadmin_n2.publicado from i3geoadmin_n2 LEFT JOIN i3geoadmin_subgrupos ON i3geoadmin_n2.id_subgrupo = i3geoadmin_subgrupos.id_subgrupo where i3geoadmin_n2.id_n1='$id_n1' order by ordem");
43   - $raiz = pegaDados("select id_raiz,i3geoadmin_raiz.id_tema,nome_tema from i3geoadmin_raiz LEFT JOIN i3geoadmin_temas ON i3geoadmin_temas.id_tema = i3geoadmin_raiz.id_tema where i3geoadmin_raiz.id_menu='$id_menu' and i3geoadmin_raiz.nivel = 1 and i3geoadmin_raiz.id_nivel = $id_n1 order by ordem");
44   - retornaJSON(array("raiz"=>$raiz,"subgrupos"=>$subgrupos));
45   - exit;
  44 + require_once("classe_arvore.php");
  45 + $arvore = new Arvore($locaplic);
  46 + $sgrupos = $arvore->pegaSubgruposGrupo($id_menu,$id_n1);
  47 + unset($arvore);
  48 + retornaJSON($sgrupos);
  49 + exit;
  50 + break;
46 51 case "pegaTemas":
47   - retornaJSON(pegaDados("select i3geoadmin_temas.nome_tema,i3geoadmin_n3.id_n3,i3geoadmin_n3.publicado from i3geoadmin_n3 LEFT JOIN i3geoadmin_temas ON i3geoadmin_n3.id_tema = i3geoadmin_temas.id_tema where i3geoadmin_n3.id_n2='$id_n2' order by ordem"));
  52 + require_once("classe_arvore.php");
  53 + $arvore = new Arvore($locaplic);
  54 + $temas = $arvore->pegaTemasSubGrupo($id_n2);
  55 + unset($arvore);
  56 + retornaJSON($temas);
  57 + exit;
  58 + break;
  59 +
  60 + case "pegaDadosGrupo":
  61 + retornaJSON(pegaDados("select * from i3geoadmin_n1 LEFT JOIN i3geoadmin_grupos ON i3geoadmin_n1.id_grupo = i3geoadmin_grupos.id_grupo where id_n1 = $id"));
  62 + exit;
  63 + break;
  64 + case "pegaDadosSubGrupo":
  65 + retornaJSON(pegaDados("select * from i3geoadmin_n2 LEFT JOIN i3geoadmin_subgrupos ON i3geoadmin_n2.id_subgrupo = i3geoadmin_subgrupos.id_subgrupo where id_n2 = $id"));
  66 + exit;
  67 + break;
  68 + case "pegaDadosTema":
  69 + retornaJSON(pegaDados("select * from i3geoadmin_n3 LEFT JOIN i3geoadmin_temas ON i3geoadmin_n3.id_tema = i3geoadmin_temas.id_tema where id_n3 = $id"));
  70 + exit;
  71 + break;
  72 + case "pegaDadosRaiz":
  73 + retornaJSON(pegaDados("select * from i3geoadmin_raiz LEFT JOIN i3geoadmin_temas ON i3geoadmin_raiz.id_tema = i3geoadmin_temas.id_tema where id_raiz = $id"));
48 74 exit;
49 75 break;
  76 +
  77 +
50 78 case "adicionarTemaRaiz":
51 79 if(verificaEditores($editores) == "nao")
52 80 {echo "Vc nao e um editor cadastrado. Apenas os editores definidos em i3geo/ms_configura.php podem acessar o sistema de administracao.";exit;}
... ... @@ -94,22 +122,6 @@ switch ($funcao)
94 122 retornaJSON($temas);
95 123 exit;
96 124 break;
97   - case "pegaDadosGrupo":
98   - retornaJSON(pegaDados("select * from i3geoadmin_n1 LEFT JOIN i3geoadmin_grupos ON i3geoadmin_n1.id_grupo = i3geoadmin_grupos.id_grupo where id_n1 = $id"));
99   - exit;
100   - break;
101   - case "pegaDadosSubGrupo":
102   - retornaJSON(pegaDados("select * from i3geoadmin_n2 LEFT JOIN i3geoadmin_subgrupos ON i3geoadmin_n2.id_subgrupo = i3geoadmin_subgrupos.id_subgrupo where id_n2 = $id"));
103   - exit;
104   - break;
105   - case "pegaDadosTema":
106   - retornaJSON(pegaDados("select * from i3geoadmin_n3 LEFT JOIN i3geoadmin_temas ON i3geoadmin_n3.id_tema = i3geoadmin_temas.id_tema where id_n3 = $id"));
107   - exit;
108   - break;
109   - case "pegaDadosRaiz":
110   - retornaJSON(pegaDados("select * from i3geoadmin_raiz LEFT JOIN i3geoadmin_temas ON i3geoadmin_raiz.id_tema = i3geoadmin_temas.id_tema where id_raiz = $id"));
111   - exit;
112   - break;
113 125 case "alterarGrupo":
114 126 if(verificaEditores($editores) == "nao")
115 127 {echo "Vc nao e um editor cadastrado. Apenas os editores definidos em i3geo/ms_configura.php podem acessar o sistema de administracao.";exit;}
... ...
admin/php/classe_arvore.php 0 → 100644
... ... @@ -0,0 +1,226 @@
  1 +<?php
  2 +class Arvore
  3 +{
  4 + protected $locaplic;
  5 + //subgrupos que tem pelo menos um tema
  6 + 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 ";
  7 + //grupos que tem pelo menos um sub-grupo
  8 + 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 ";
  9 + //nomes de todos os grupos
  10 + public $sql_todosgrupos = "select * from i3geoadmin_grupos ";
  11 + //temas na raiz
  12 + public $sql_temasraiz = "select id_raiz,i3geoadmin_raiz.id_tema,nome_tema FROM i3geoadmin_raiz LEFT JOIN i3geoadmin_temas ON i3geoadmin_temas.id_tema = i3geoadmin_raiz.id_tema ";
  13 + //todos os temas
  14 + public $sql_temas = "select * from i3geoadmin_temas ";
  15 + //temas de um subgrupo
  16 + public $sql_temasSubgrupo = "select 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 ";
  17 + function __construct($locaplic)
  18 + {
  19 + $this->locaplic = $locaplic;
  20 + $dbh = "";
  21 + error_reporting(0);
  22 + include($locaplic."/admin/php/conexao.php");
  23 + $this->dbh = $dbh;
  24 + //
  25 + //verifica se o ip atual está cadastrado como um dos editores
  26 + //editores podem ver as coisas marcadas como não publicado
  27 + //no sistema de administração
  28 + //
  29 + include($locaplic."/ms_configura.php");
  30 + $this->editor = false;
  31 + if($editores != "")
  32 + {$this->editor = $this->verificaeditores($editores);}
  33 + $this->editores = $editores;
  34 + $this->pubsql = "publicado != 'NAO' or publicado isnull";
  35 + if($this->editor)
  36 + {$this->pubsql = "";}
  37 + }
  38 + function __destruct()
  39 + {
  40 + $this->dbh = null;
  41 + $this->dbhw = null;
  42 + }
  43 + //pega os grupos de um menu específico e os temas na raiz do menu
  44 + function pegaGruposMenu($id_menu)
  45 + {
  46 + $grupos = $this->execSQL($this->sql_grupos."where ".$this->pubsql." id_menu='$id_menu' order by ordem");
  47 + $raiz = $this->execSQL($this->sql_temasraiz."where i3geoadmin_raiz.id_menu='$id_menu' and i3geoadmin_raiz.nivel = 0 order by ordem");
  48 + return array("raiz"=>$raiz,"grupos"=>$grupos);
  49 + }
  50 + //pega os subgrupos de um grupo e os temas na raiz de um grupo
  51 + function pegaSubgruposGrupo($id_menu,$id_n1)
  52 + {
  53 + $subgrupos = $this->execSQL($this->sql_subgrupos."where ".$this->pubsql." i3geoadmin_n2.id_n1='$id_n1' order by ordem");
  54 + $raiz = $this->execSQL($this->sql_temasraiz."where i3geoadmin_raiz.id_menu='$id_menu' and i3geoadmin_raiz.nivel = 1 and i3geoadmin_raiz.id_nivel = $id_n1 order by ordem");
  55 + return array("raiz"=>$raiz,"subgrupos"=>$subgrupos);
  56 + }
  57 + //pega os temas na raiz de um grupo
  58 + function pegaTemasRaizGrupo($id_menu,$id_n1)
  59 + {
  60 + return $this->execSQL($this->sql_temasraiz."where i3geoadmin_raiz.id_menu='$id_menu' and i3geoadmin_raiz.nivel = 1 and i3geoadmin_raiz.id_nivel = $id_n1 order by ordem");
  61 + }
  62 + //pega os dados de um tema
  63 + function pegaTema($id_tema)
  64 + {
  65 + return $this->execSQL($this->sql_temas."where id_tema = '$id_tema' ");
  66 + }
  67 + //pega os temas de um subgrupo
  68 + function pegaTemasSubGrupo($id_n2)
  69 + {
  70 + return $this->execSQL($this->sql_temasSubgrupo."where ".$this->pubsql." i3geoadmin_n3.id_n2='$id_n2' order by ordem");
  71 + }
  72 + //formata os dados com grupos e temas na raiz do menu
  73 + function formataGruposMenu ($id_menu,$perfil,$listasgrupos)
  74 + {
  75 + $dados = $this->pegaGruposMenu($id_menu);
  76 + $resultado = array();
  77 + $temasraiz = array();
  78 + foreach($dados["raiz"] as $temar)
  79 + {$temasraiz[] = $this->formataTema($temar["id_tema"]);}
  80 + if(count($dados["grupos"]) == 0)
  81 + {$grupos[] = array();}
  82 + foreach($dados["grupos"] as $grupo)
  83 + {
  84 + if ($this->verificaOcorrencia($perfil,explode(",",$grupo["n1_perfil"])))
  85 + {
  86 + $temas = array();
  87 + $raizgrupo = $this->pegaTemasRaizGrupo($id_menu,$grupo["id_n1"]);
  88 + foreach($raizgrupo as $tema)
  89 + {$temas[] = $this->formataTema($tema["id_tema"]);}
  90 +
  91 + $grupodown = "nao";
  92 + $grupoogc = "nao";
  93 + $subgrupos = array();
  94 + if($listasgrupos=="sim")
  95 + {
  96 + $dadossubgrupos = $this->pegaSubgruposGrupo($id_menu,$grupo["id_n1"]);
  97 + foreach($dadossubgrupos["subgrupos"] as $sgrupo)
  98 + {
  99 + if($this->verificaOcorrencia($perfil,explode(",",$sgrupo["n2_perfil"])))
  100 + {
  101 + //verifica se existem temas que podem receber download
  102 + $down = "nao";
  103 + $ogc = "nao";
  104 + foreach($this->pegaTemasSubGrupo($sgrupo["id_n2"]) as $tema)
  105 + {
  106 + if (strtolower($tema["download_tema"]) == "sim")
  107 + {$down = "sim";$grupodown = "sim";}
  108 + if (strtolower($tema["ogc_tema"]) == "sim")
  109 + {$ogc = "sim";$grupoogc = "sim";}
  110 + }
  111 + $subgrupos[] = array("publicado"=>($sgrupo["publicado"]),"nome"=>($sgrupo["nome_subgrupo"]),"download"=>$down,"ogc"=>$ogc);
  112 + }
  113 + }
  114 + }
  115 + $grupos[] = array("publicado"=>($grupo["publicado"]),"id_n1"=>($grupo["id_n1"]),"nome"=>($grupo["nome_grupo"]),"ogc"=>$grupoogc,"download"=>$grupodown,"subgrupos"=>$subgrupos,"temasgrupo"=>$temas);
  116 + }
  117 + }
  118 + $grupos[] = array("temasraiz"=>$temasraiz);
  119 + //pega os sistemas checando os perfis
  120 + $sistemas = array();
  121 + $grupos[] = array("idmenu"=>$id_menu);
  122 + $grupos[] = array("sistemas"=>"");
  123 + return($grupos);
  124 + }
  125 + //formata os dados com subgrupos de um grupo e temas na raiz do grupo
  126 + function formataSubgruposGrupo ($id_menu,$id_n1,$perfil)
  127 + {
  128 + $dados = $this->pegaSubgruposGrupo($id_menu,$id_n1);
  129 + $resultado = array();
  130 + $temasraiz = array();
  131 + foreach($dados["raiz"] as $temar)
  132 + {$temasraiz[] = $this->formataTema($temar["id_tema"]);}
  133 + if(count($dados["subgrupos"]) == 0)
  134 + {$sgrupos[] = array();}
  135 + $subgrupos = array();
  136 + foreach($dados["subgrupos"] as $sgrupo)
  137 + {
  138 + if ($this->verificaOcorrencia($perfil,explode(",",$sgrupo["n2_perfil"])))
  139 + {
  140 + $sgrupodown = "nao";
  141 + $sgrupoogc = "nao";
  142 + $down = "nao";
  143 + $ogc = "nao";
  144 + foreach($this->pegaTemasSubGrupo($sgrupo["id_n2"]) as $tema)
  145 + {
  146 + if (strtolower($tema["download_tema"]) == "sim")
  147 + {$down = "sim";$grupodown = "sim";}
  148 + if (strtolower($tema["ogc_tema"]) == "sim")
  149 + {$ogc = "sim";$grupoogc = "sim";}
  150 + }
  151 + $subgrupos[] = array("publicado"=>($sgrupo["publicado"]),"id_n2"=>($sgrupo["id_n2"]),"nome"=>($sgrupo["nome_subgrupo"]),"download"=>$down,"ogc"=>$ogc);
  152 + }
  153 + }
  154 + return (array("subgrupo"=>$subgrupos,"temasgrupo"=>$temasraiz));
  155 + }
  156 + //formata os temas de um subgrupo
  157 + function formataTemasSubgrupo($id_n2,$perfil)
  158 + {
  159 + $dados = $this->pegaTemasSubGrupo($id_n2);
  160 + $temas = array();
  161 + foreach($dados as $tema)
  162 + {
  163 + if($this->verificaOcorrencia($perfil,explode(",",$tema["n3_perfil"])))
  164 + {$temas[] = $this->formataTema($tema["id_tema"],$tema["publicado"]);}
  165 + }
  166 + return $temas;
  167 + }
  168 + //formata os dados de um tema
  169 + function formataTema($id_tema,$publicado="SIM")
  170 + {
  171 + $recordset = $this->pegaTema($id_tema);
  172 + $recordset = $recordset[0];
  173 + $down = "nao";
  174 + $ogc = "sim";
  175 + $link = " ";
  176 + if (strtolower($recordset["download_tema"]) == "sim")
  177 + {$down = "sim";}
  178 + if (strtolower($recordset["ogc_tema"]) == "nao")
  179 + {$ogc = "nao";}
  180 + if ($recordset["link_tema"] != "")
  181 + {$link = $recordset["link_tema"];}
  182 + return array("publicado"=>$publicado,"nacessos"=>($recordset["nacessos"]),"tid"=>($recordset["codigo_tema"]),"nome"=>($recordset["nome_tema"]),"link"=>$link,"download"=>$down,"ogc"=>$ogc);
  183 + }
  184 + //executa o sql
  185 + function execSQL($sql)
  186 + {
  187 + $q = $this->dbh->query($sql,PDO::FETCH_ASSOC);
  188 + return $q->fetchAll();
  189 + }
  190 + function verificaOcorrencia($procurar,$em)
  191 + {
  192 + if($procurar == "" && $em == "")
  193 + {return TRUE;}
  194 + $resultado = FALSE;
  195 + if($procurar != "" && $em != "")
  196 + {
  197 + foreach($em as $e)
  198 + {
  199 + $e = trim($e);
  200 + foreach($procurar as $p)
  201 + {
  202 + $p = trim($p);
  203 + if($p == $e)
  204 + {$resultado = TRUE;}
  205 + }
  206 + }
  207 + }
  208 + return $resultado;
  209 + }
  210 + function verificaEditores($editores)
  211 + {
  212 + $editor = false;
  213 + foreach ($editores as $e)
  214 + {
  215 + $e = gethostbyname($e);
  216 + $ip = "UNKNOWN";
  217 + if (getenv("HTTP_CLIENT_IP")) $ip = getenv("HTTP_CLIENT_IP");
  218 + else if(getenv("HTTP_X_FORWARDED_FOR")) $ip = getenv("HTTP_X_FORWARDED_FOR");
  219 + else if(getenv("REMOTE_ADDR")) $ip = getenv("REMOTE_ADDR");
  220 + else $ip = "UNKNOWN";
  221 + if ($e == $ip){$editor=true;}
  222 + }
  223 + return $editor;
  224 + }
  225 +}
  226 +?>
0 227 \ No newline at end of file
... ...
admin/php/conexao.php
... ... @@ -87,4 +87,5 @@ if($conexaoadmin == &quot;&quot;)
87 87 }
88 88 else
89 89 include($conexaoadmin);
  90 +
90 91 ?>
91 92 \ No newline at end of file
... ...