diff --git a/admin/admin.db b/admin/admin.db index 4c43979..aaa613c 100755 Binary files a/admin/admin.db and b/admin/admin.db differ diff --git a/admin/php/admin.php b/admin/php/admin.php index a88da59..3c18a50 100755 --- a/admin/php/admin.php +++ b/admin/php/admin.php @@ -313,6 +313,38 @@ function i3GeoAdminInsertUnico($pdo,$tabela,$data,$colTemp,$colId){ return "UPDATE ID "; } } +function i3GeoAdminOrdena($pdo,$ordem,$tabela,$colunaid){ + global $esquemaadmin; + $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + $arr = array(); + $n = count($ordem) + 1; + for($i = 1; $i < $n; $i++){ + $arr[$ordem[$i - 1]] = $i; + } + $str_ids = implode(',', array_keys($arr)); + $str_when_then = ""; + foreach($arr as $id => $ordem) { + $str_when_then .= sprintf(" WHEN " . $colunaid . " = %d THEN %s ", + $id, + $ordem // note, you'd sanitize this if from user input + ); + } + //whitespace + appends included in example for readability + $template = "UPDATE '".$esquemaadmin . $tabela."' " + . " SET 'ordem' = CASE " + . " %s " + . " END " + . " WHERE " . $colunaid . " IN (%s);"; + $sql = sprintf($template, $str_when_then, $str_ids); + + try { + $resultado = $pdo->query($sql); + } catch (PDOException $e) { + return false; + } + i3GeoAdminInsertLog($pdo,$sql,array()); + return true; +} //$logTransacoes vem do ms_configura.php //ver tambem classe_metaestat.php function i3GeoAdminInsertLog($pdo,$sql,$data=array()){ diff --git a/admin1/catalogo/menus/grupos/exec.php b/admin1/catalogo/menus/grupos/exec.php index d5f4f3d..863bc30 100755 --- a/admin1/catalogo/menus/grupos/exec.php +++ b/admin1/catalogo/menus/grupos/exec.php @@ -34,7 +34,8 @@ include_once (dirname ( __FILE__ ) . "/../../../../admin/php/login.php"); $funcoesEdicao = array ( "ADICIONAR", "ALTERAR", - "EXCLUIR" + "EXCLUIR", + "ORDENA" ); if (in_array ( strtoupper ( $funcao ), $funcoesEdicao )) { if (verificaOperacaoSessao ( "admin/html/arvore" ) === false) { @@ -46,6 +47,31 @@ include (dirname ( __FILE__ ) . "/../../../../admin/php/conexao.php"); $funcao = strtoupper ( $funcao ); switch ($funcao) { + case "ORDENA" : + $ordem = explode(" ",$ordem); + //verifica se existe a mesma quantidade de registros no banco e na lista de ids + $dados = pegaDados ( "SELECT ordem from ".$esquemaadmin."i3geoadmin_n1 WHERE id_menu = $id_menu", $dbh, false ); + if(count($dados) != count($ordem)){ + header ( "HTTP/1.1 500 erro numero de registros nao batem" ); + exit (); + } + //verifica se os ids existem no mesmo nivel + $dados = pegaDados ( "SELECT ordem from ".$esquemaadmin."i3geoadmin_n1 WHERE id_menu = $id_menu AND id_n1 IN (" . implode(",",$ordem). ")", $dbh, false ); + if(count($dados) != count($ordem)){ + header ( "HTTP/1.1 500 erro ids nao batem" ); + exit (); + } + + $retorna = i3GeoAdminOrdena($dbhw,$ordem,i3geoadmin_n1,"id_n1"); + $dbhw = null; + $dbh = null; + if ($retorna === false) { + header ( "HTTP/1.1 500 erro ao ordenar" ); + exit (); + } + retornaJSON ( $retorna ); + exit(); + break; case "ADICIONAR" : $novo = adicionar( $id_grupo, $id_menu, $publicado, $n1_perfil, $ordem, $dbhw ); if ($novo === false) { diff --git a/admin1/catalogo/menus/grupos/execraiz.php b/admin1/catalogo/menus/grupos/execraiz.php index e8912f2..f3e13f1 100755 --- a/admin1/catalogo/menus/grupos/execraiz.php +++ b/admin1/catalogo/menus/grupos/execraiz.php @@ -34,7 +34,8 @@ include_once (dirname ( __FILE__ ) . "/../../../../admin/php/login.php"); $funcoesEdicao = array ( "ADICIONAR", "ALTERAR", - "EXCLUIR" + "EXCLUIR", + "ORDENA" ); if (in_array ( strtoupper ( $funcao ), $funcoesEdicao )) { if (verificaOperacaoSessao ( "admin/html/arvore" ) === false) { @@ -46,6 +47,31 @@ include (dirname ( __FILE__ ) . "/../../../../admin/php/conexao.php"); $funcao = strtoupper ( $funcao ); switch ($funcao) { + case "ORDENA" : + $ordem = explode(" ",$ordem); + //verifica se existe a mesma quantidade de registros no banco e na lista de ids + $dados = pegaDados ( "SELECT ordem from ".$esquemaadmin."i3geoadmin_raiz WHERE nivel = 0 AND id_menu = $id_menu", $dbh, false ); + if(count($dados) != count($ordem)){ + header ( "HTTP/1.1 500 erro numero de registros nao batem" ); + exit (); + } + //verifica se os ids existem no mesmo nivel + $dados = pegaDados ( "SELECT ordem from ".$esquemaadmin."i3geoadmin_raiz WHERE nivel = 0 AND id_menu = $id_menu AND id_raiz IN (" . implode(",",$ordem). ")", $dbh, false ); + if(count($dados) != count($ordem)){ + header ( "HTTP/1.1 500 erro ids nao batem" ); + exit (); + } + + $retorna = i3GeoAdminOrdena($dbhw,$ordem,i3geoadmin_raiz,"id_raiz"); + $dbhw = null; + $dbh = null; + if ($retorna === false) { + header ( "HTTP/1.1 500 erro ao ordenar" ); + exit (); + } + retornaJSON ( $retorna ); + exit(); + break; case "ADICIONAR" : if (empty ( $id_tema ) || empty ( $id_menu )) { header ( "HTTP/1.1 500 erro nos parametros" ); diff --git a/admin1/catalogo/menus/grupos/index.js b/admin1/catalogo/menus/grupos/index.js index 763db2b..62c6828 100755 --- a/admin1/catalogo/menus/grupos/index.js +++ b/admin1/catalogo/menus/grupos/index.js @@ -53,14 +53,21 @@ i3GEOadmin.grupos = { ); i3GEOadmin.grupos.listaRaiz(json["raiz"],opcoesPerfil,json["temas"]); i3GEOadmin.grupos.listaNos(json["grupos"],opcoesPerfil,json["tiposGrupos"]); + //torna os paineis ordenavies i3GEOadmin.grupos.ondeNos.sortable({ update: function( event, ui ) { var data = i3GEOadmin.grupos.ondeNos.sortable('toArray', {attribute: "data-id"}); - console.info(data); + i3GEOadmin.grupos.ordenaNos(data); + } + }); + i3GEOadmin.grupos.ondeRaiz.sortable({ + update: function( event, ui ) { + var data = i3GEOadmin.grupos.ondeRaiz.sortable('toArray', {attribute: "data-id"}); + i3GEOadmin.grupos.ordenaRaiz(data); } }); - i3GEOadmin.grupos.ondeRaiz.sortable(); + //faz com que seja mostrado um icone de ordenamento no mouseover $('.panel').hover( function(){ $(this).find('.move').fadeIn(400); @@ -423,6 +430,46 @@ i3GEOadmin.grupos = { } ); }, + ordenaNos: function(data){ + i3GEOadmin.core.modalAguarde(true); + $.post( + "exec.php?funcao=ordena", + "id_menu=" + i3GEOadmin.grupos.id_menu + "&ordem=" + data.join(" ") + ) + .done( + function(data, status){ + i3GEOadmin.core.modalAguarde(false); + i3GEOadmin.core.iconeAguarde(i3GEOadmin.grupos.ondeNos); + i3GEOadmin.grupos.lista(); + } + ) + .fail( + function(data){ + i3GEOadmin.core.modalAguarde(false); + i3GEOadmin.core.mostraErro(data.status + " " +data.statusText); + } + ); + }, + ordenaRaiz: function(data){ + i3GEOadmin.core.modalAguarde(true); + $.post( + "execraiz.php?funcao=ordena", + "id_menu=" + i3GEOadmin.grupos.id_menu + "&ordem=" + data.join(" ") + ) + .done( + function(data, status){ + i3GEOadmin.core.modalAguarde(false); + i3GEOadmin.core.iconeAguarde(i3GEOadmin.grupos.ondeNos); + i3GEOadmin.grupos.lista(); + } + ) + .fail( + function(data){ + i3GEOadmin.core.modalAguarde(false); + i3GEOadmin.core.mostraErro(data.status + " " +data.statusText); + } + ); + }, editarSubGrupos: function(id,titulo){ //muda a url para que o usuario possa voltar pelo botao do navegador var u = window.location.origin diff --git a/admin1/catalogo/menus/grupos/index.php b/admin1/catalogo/menus/grupos/index.php index d608887..10c2989 100755 --- a/admin1/catalogo/menus/grupos/index.php +++ b/admin1/catalogo/menus/grupos/index.php @@ -90,7 +90,9 @@ $nome_menu = filter_var ( $_GET ["nome_menu"], FILTER_SANITIZE_STRING );   + aria-expanded="false" aria-controls="#body-formRaiz-{{id_raiz}}"> {{{nome_tema}}} + +
-- libgit2 0.21.2