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}}"> | ... | ... |