Commit 4aa53048f3879dcb3a2495346a3ee1db9cc35c32

Authored by Edmar Moretti
1 parent b6725ed0

Inclusão de função de ordenação na edição da árvore do catálogo

admin/admin.db
No preview for this file type
admin/php/admin.php
... ... @@ -313,6 +313,38 @@ function i3GeoAdminInsertUnico($pdo,$tabela,$data,$colTemp,$colId){
313 313 return "UPDATE ID ";
314 314 }
315 315 }
  316 +function i3GeoAdminOrdena($pdo,$ordem,$tabela,$colunaid){
  317 + global $esquemaadmin;
  318 + $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  319 + $arr = array();
  320 + $n = count($ordem) + 1;
  321 + for($i = 1; $i < $n; $i++){
  322 + $arr[$ordem[$i - 1]] = $i;
  323 + }
  324 + $str_ids = implode(',', array_keys($arr));
  325 + $str_when_then = "";
  326 + foreach($arr as $id => $ordem) {
  327 + $str_when_then .= sprintf(" WHEN " . $colunaid . " = %d THEN %s ",
  328 + $id,
  329 + $ordem // note, you'd sanitize this if from user input
  330 + );
  331 + }
  332 + //whitespace + appends included in example for readability
  333 + $template = "UPDATE '".$esquemaadmin . $tabela."' "
  334 + . " SET 'ordem' = CASE "
  335 + . " %s "
  336 + . " END "
  337 + . " WHERE " . $colunaid . " IN (%s);";
  338 + $sql = sprintf($template, $str_when_then, $str_ids);
  339 +
  340 + try {
  341 + $resultado = $pdo->query($sql);
  342 + } catch (PDOException $e) {
  343 + return false;
  344 + }
  345 + i3GeoAdminInsertLog($pdo,$sql,array());
  346 + return true;
  347 +}
316 348 //$logTransacoes vem do ms_configura.php
317 349 //ver tambem classe_metaestat.php
318 350 function i3GeoAdminInsertLog($pdo,$sql,$data=array()){
... ...
admin1/catalogo/menus/grupos/exec.php
... ... @@ -34,7 +34,8 @@ include_once (dirname ( __FILE__ ) . &quot;/../../../../admin/php/login.php&quot;);
34 34 $funcoesEdicao = array (
35 35 "ADICIONAR",
36 36 "ALTERAR",
37   - "EXCLUIR"
  37 + "EXCLUIR",
  38 + "ORDENA"
38 39 );
39 40 if (in_array ( strtoupper ( $funcao ), $funcoesEdicao )) {
40 41 if (verificaOperacaoSessao ( "admin/html/arvore" ) === false) {
... ... @@ -46,6 +47,31 @@ include (dirname ( __FILE__ ) . &quot;/../../../../admin/php/conexao.php&quot;);
46 47  
47 48 $funcao = strtoupper ( $funcao );
48 49 switch ($funcao) {
  50 + case "ORDENA" :
  51 + $ordem = explode(" ",$ordem);
  52 + //verifica se existe a mesma quantidade de registros no banco e na lista de ids
  53 + $dados = pegaDados ( "SELECT ordem from ".$esquemaadmin."i3geoadmin_n1 WHERE id_menu = $id_menu", $dbh, false );
  54 + if(count($dados) != count($ordem)){
  55 + header ( "HTTP/1.1 500 erro numero de registros nao batem" );
  56 + exit ();
  57 + }
  58 + //verifica se os ids existem no mesmo nivel
  59 + $dados = pegaDados ( "SELECT ordem from ".$esquemaadmin."i3geoadmin_n1 WHERE id_menu = $id_menu AND id_n1 IN (" . implode(",",$ordem). ")", $dbh, false );
  60 + if(count($dados) != count($ordem)){
  61 + header ( "HTTP/1.1 500 erro ids nao batem" );
  62 + exit ();
  63 + }
  64 +
  65 + $retorna = i3GeoAdminOrdena($dbhw,$ordem,i3geoadmin_n1,"id_n1");
  66 + $dbhw = null;
  67 + $dbh = null;
  68 + if ($retorna === false) {
  69 + header ( "HTTP/1.1 500 erro ao ordenar" );
  70 + exit ();
  71 + }
  72 + retornaJSON ( $retorna );
  73 + exit();
  74 + break;
49 75 case "ADICIONAR" :
50 76 $novo = adicionar( $id_grupo, $id_menu, $publicado, $n1_perfil, $ordem, $dbhw );
51 77 if ($novo === false) {
... ...
admin1/catalogo/menus/grupos/execraiz.php
... ... @@ -34,7 +34,8 @@ include_once (dirname ( __FILE__ ) . &quot;/../../../../admin/php/login.php&quot;);
34 34 $funcoesEdicao = array (
35 35 "ADICIONAR",
36 36 "ALTERAR",
37   - "EXCLUIR"
  37 + "EXCLUIR",
  38 + "ORDENA"
38 39 );
39 40 if (in_array ( strtoupper ( $funcao ), $funcoesEdicao )) {
40 41 if (verificaOperacaoSessao ( "admin/html/arvore" ) === false) {
... ... @@ -46,6 +47,31 @@ include (dirname ( __FILE__ ) . &quot;/../../../../admin/php/conexao.php&quot;);
46 47  
47 48 $funcao = strtoupper ( $funcao );
48 49 switch ($funcao) {
  50 + case "ORDENA" :
  51 + $ordem = explode(" ",$ordem);
  52 + //verifica se existe a mesma quantidade de registros no banco e na lista de ids
  53 + $dados = pegaDados ( "SELECT ordem from ".$esquemaadmin."i3geoadmin_raiz WHERE nivel = 0 AND id_menu = $id_menu", $dbh, false );
  54 + if(count($dados) != count($ordem)){
  55 + header ( "HTTP/1.1 500 erro numero de registros nao batem" );
  56 + exit ();
  57 + }
  58 + //verifica se os ids existem no mesmo nivel
  59 + $dados = pegaDados ( "SELECT ordem from ".$esquemaadmin."i3geoadmin_raiz WHERE nivel = 0 AND id_menu = $id_menu AND id_raiz IN (" . implode(",",$ordem). ")", $dbh, false );
  60 + if(count($dados) != count($ordem)){
  61 + header ( "HTTP/1.1 500 erro ids nao batem" );
  62 + exit ();
  63 + }
  64 +
  65 + $retorna = i3GeoAdminOrdena($dbhw,$ordem,i3geoadmin_raiz,"id_raiz");
  66 + $dbhw = null;
  67 + $dbh = null;
  68 + if ($retorna === false) {
  69 + header ( "HTTP/1.1 500 erro ao ordenar" );
  70 + exit ();
  71 + }
  72 + retornaJSON ( $retorna );
  73 + exit();
  74 + break;
49 75 case "ADICIONAR" :
50 76 if (empty ( $id_tema ) || empty ( $id_menu )) {
51 77 header ( "HTTP/1.1 500 erro nos parametros" );
... ...
admin1/catalogo/menus/grupos/index.js
... ... @@ -53,14 +53,21 @@ i3GEOadmin.grupos = {
53 53 );
54 54 i3GEOadmin.grupos.listaRaiz(json["raiz"],opcoesPerfil,json["temas"]);
55 55 i3GEOadmin.grupos.listaNos(json["grupos"],opcoesPerfil,json["tiposGrupos"]);
  56 + //torna os paineis ordenavies
56 57 i3GEOadmin.grupos.ondeNos.sortable({
57 58 update: function( event, ui ) {
58 59 var data = i3GEOadmin.grupos.ondeNos.sortable('toArray', {attribute: "data-id"});
59   - console.info(data);
  60 + i3GEOadmin.grupos.ordenaNos(data);
  61 + }
  62 + });
  63 + i3GEOadmin.grupos.ondeRaiz.sortable({
  64 + update: function( event, ui ) {
  65 + var data = i3GEOadmin.grupos.ondeRaiz.sortable('toArray', {attribute: "data-id"});
  66 + i3GEOadmin.grupos.ordenaRaiz(data);
60 67 }
61 68 });
62   - i3GEOadmin.grupos.ondeRaiz.sortable();
63 69  
  70 + //faz com que seja mostrado um icone de ordenamento no mouseover
64 71 $('.panel').hover(
65 72 function(){
66 73 $(this).find('.move').fadeIn(400);
... ... @@ -423,6 +430,46 @@ i3GEOadmin.grupos = {
423 430 }
424 431 );
425 432 },
  433 + ordenaNos: function(data){
  434 + i3GEOadmin.core.modalAguarde(true);
  435 + $.post(
  436 + "exec.php?funcao=ordena",
  437 + "id_menu=" + i3GEOadmin.grupos.id_menu + "&ordem=" + data.join(" ")
  438 + )
  439 + .done(
  440 + function(data, status){
  441 + i3GEOadmin.core.modalAguarde(false);
  442 + i3GEOadmin.core.iconeAguarde(i3GEOadmin.grupos.ondeNos);
  443 + i3GEOadmin.grupos.lista();
  444 + }
  445 + )
  446 + .fail(
  447 + function(data){
  448 + i3GEOadmin.core.modalAguarde(false);
  449 + i3GEOadmin.core.mostraErro(data.status + " " +data.statusText);
  450 + }
  451 + );
  452 + },
  453 + ordenaRaiz: function(data){
  454 + i3GEOadmin.core.modalAguarde(true);
  455 + $.post(
  456 + "execraiz.php?funcao=ordena",
  457 + "id_menu=" + i3GEOadmin.grupos.id_menu + "&ordem=" + data.join(" ")
  458 + )
  459 + .done(
  460 + function(data, status){
  461 + i3GEOadmin.core.modalAguarde(false);
  462 + i3GEOadmin.core.iconeAguarde(i3GEOadmin.grupos.ondeNos);
  463 + i3GEOadmin.grupos.lista();
  464 + }
  465 + )
  466 + .fail(
  467 + function(data){
  468 + i3GEOadmin.core.modalAguarde(false);
  469 + i3GEOadmin.core.mostraErro(data.status + " " +data.statusText);
  470 + }
  471 + );
  472 + },
426 473 editarSubGrupos: function(id,titulo){
427 474 //muda a url para que o usuario possa voltar pelo botao do navegador
428 475 var u = window.location.origin
... ...
admin1/catalogo/menus/grupos/index.php
... ... @@ -90,7 +90,9 @@ $nome_menu = filter_var ( $_GET [&quot;nome_menu&quot;], FILTER_SANITIZE_STRING );
90 90 </a>
91 91 &nbsp;
92 92 <a class="collapsed in" role="button" data-toggle="collapse" href="#body-formRaiz-{{id_raiz}}"
93   - aria-expanded="false" aria-controls="#body-formRaiz-{{id_raiz}}"> {{{nome_tema}}} </a>
  93 + aria-expanded="false" aria-controls="#body-formRaiz-{{id_raiz}}"> {{{nome_tema}}}
  94 + <i class="material-icons move" style="color: gray; display:none;">swap_vert</i>
  95 + </a>
94 96 </h3>
95 97 </div>
96 98 <div class="panel-body panel-collapse collapse" id="body-formRaiz-{{id_raiz}}">
... ...