Commit 4aa53048f3879dcb3a2495346a3ee1db9cc35c32
1 parent
b6725ed0
Exists in
master
and in
7 other branches
Inclusão de função de ordenação na edição da árvore do catálogo
Showing
6 changed files
with
138 additions
and
5 deletions
Show diff stats
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__ ) . "/../../../../admin/php/login.php"); |
| 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__ ) . "/../../../../admin/php/conexao.php"); |
| 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__ ) . "/../../../../admin/php/login.php"); |
| 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__ ) . "/../../../../admin/php/conexao.php"); |
| 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 ["nome_menu"], FILTER_SANITIZE_STRING ); |
| 90 | 90 | </a> |
| 91 | 91 | |
| 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}}"> | ... | ... |