Commit 3d97b4e5fe02a2a2a2df0f4a539b4a226bff6555
1 parent
44f57331
Exists in
master
and in
7 other branches
Criação da classe_arvore.php para controlar o acesso e edição da árvore de menus…
… do sistema de administração
Showing
3 changed files
with
263 additions
and
24 deletions
Show diff stats
admin/php/arvore.php
| @@ -33,20 +33,48 @@ error_reporting(0); | @@ -33,20 +33,48 @@ error_reporting(0); | ||
| 33 | switch ($funcao) | 33 | switch ($funcao) |
| 34 | { | 34 | { |
| 35 | case "pegaGrupos": | 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 | exit; | 41 | exit; |
| 40 | break; | 42 | break; |
| 41 | case "pegaSubGrupos": | 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 | case "pegaTemas": | 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 | exit; | 74 | exit; |
| 49 | break; | 75 | break; |
| 76 | + | ||
| 77 | + | ||
| 50 | case "adicionarTemaRaiz": | 78 | case "adicionarTemaRaiz": |
| 51 | if(verificaEditores($editores) == "nao") | 79 | if(verificaEditores($editores) == "nao") |
| 52 | {echo "Vc nao e um editor cadastrado. Apenas os editores definidos em i3geo/ms_configura.php podem acessar o sistema de administracao.";exit;} | 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,22 +122,6 @@ switch ($funcao) | ||
| 94 | retornaJSON($temas); | 122 | retornaJSON($temas); |
| 95 | exit; | 123 | exit; |
| 96 | break; | 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 | case "alterarGrupo": | 125 | case "alterarGrupo": |
| 114 | if(verificaEditores($editores) == "nao") | 126 | if(verificaEditores($editores) == "nao") |
| 115 | {echo "Vc nao e um editor cadastrado. Apenas os editores definidos em i3geo/ms_configura.php podem acessar o sistema de administracao.";exit;} | 127 | {echo "Vc nao e um editor cadastrado. Apenas os editores definidos em i3geo/ms_configura.php podem acessar o sistema de administracao.";exit;} |
| @@ -0,0 +1,226 @@ | @@ -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 | \ No newline at end of file | 227 | \ No newline at end of file |
admin/php/conexao.php