forked from SimplesIP/pabx-app
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
317 lines
12 KiB
317 lines
12 KiB
<?php |
|
|
|
$tpLayout = 1; |
|
if (isset($_GET["lstGrupo"])) { |
|
$_SESSION["lstGrupo"] = $_GET["lstGrupo"]; |
|
$_SESSION["nameGrupo"] = $_GET["nameGrupo"]; |
|
} |
|
$codGp = $_SESSION["lstGrupo"]; |
|
$nomeGp = $_SESSION["nameGrupo"]; |
|
$_SESSION["SStreRoot"] = $nomeGp; |
|
$funId = isset($_GET["funId"]) ? $_GET["funId"] : null; |
|
$acao = isset($_GET["acao"]) ? $_GET["acao"] : null; |
|
$erros = 0; |
|
$msg = ''; |
|
$acaoRemove = 0; |
|
$tpLayout = 1; |
|
$rem = 0; |
|
|
|
// echo "funid => $funId acao => $acao codGp => $codGp nomegp = > $nomeGp"; |
|
|
|
/* |
|
* Css para formatação da árvove de permissões |
|
*/ |
|
$cssBlock = "<style> |
|
a, A:link, a:visited, a:active |
|
{color: #0000aa; text-decoration: none; font-family: Tahoma, Verdana; font-size: 11px} |
|
A:hover |
|
{color: #ff0000; text-decoration: none; font-family: Tahoma, Verdana; font-size: 11px} |
|
</style>"; |
|
/* |
|
* Adiciona uma ou mais permissões a árvore de usuários |
|
*/ |
|
if (isset($_GET["acao"]) && (strtolower($_GET["acao"]) == 'add')) { |
|
if (!IsAdmin() && IsSysAdmin($nomeGp)) { |
|
$msg = 'Esta operação pode ser realizada apenas pelo usuário "Admin"!'; |
|
} else { |
|
/* |
|
* lista as funcoes disponiveis no sistema |
|
* e as adiciona ao array $dadosMenu |
|
*/ |
|
$dadosMenu = array(); |
|
$query = "Select * from pbx_funcoes order by fun_id"; |
|
$result = pg_query($dbcon, $query); |
|
if ($result) { |
|
while ($row = pg_fetch_array($result)) { |
|
$dadosMenu[$row["fun_id"]] = $row["fun_id_pai"]; |
|
} |
|
/* |
|
* lista as funcoes do grupo |
|
*/ |
|
$funcGrupo = array(); |
|
$query = " Select gp_id, fun_id from pbx_grupo_funcoes where gp_id = $codGp order by fun_id"; |
|
$result = pg_query($dbcon, $query); |
|
|
|
if ($result) { |
|
while ($row = pg_fetch_array($result)) { |
|
$funcGrupo[$row["fun_id"]] = $row["fun_id"]; |
|
} |
|
$result = pg_query($dbcon, 'begin'); |
|
addFuncaoDB($dbcon, $codGp, $funId, $funcGrupo); |
|
if (!$erros) { |
|
addFuncaoAbaixo($dbcon, $codGp, $funId, $dadosMenu, $funcGrupo); |
|
} |
|
if (!$erros) { |
|
addFuncaoAcima($dbcon, $codGp, $dadosMenu[$funId], $dadosMenu, $funcGrupo); |
|
} |
|
if (!$erros) { |
|
$result = pg_query($dbcon, 'commit'); |
|
if ($result) |
|
$msg = 'Operação Realizada com Sucesso!'; |
|
} |
|
else { |
|
$erroDb = pg_last_error($dbcon); |
|
pg_query($dbcon, 'rollback'); |
|
$msg = 'A Operação não Pode ser Realizada!' . (empty($erroDb) ? '' : ' Erro: ' . $erroDb); |
|
} |
|
} |
|
} |
|
} |
|
} else if (isset($_GET["acao"]) && (strtolower($_GET["acao"]) == 'rem')) { |
|
$acaoRemove = 1; |
|
if (!IsAdmin() && IsSysAdmin($nomeGp)) { |
|
$rem = GetMsgRemFormat('Esta Operação Pode ser Realizada Apenas pelo Usuário "Admin"!'); |
|
} else { |
|
//lista as funcoes disponiveis no sistema |
|
$dadosMenu = array(); |
|
$idUser = GetIdUser(); |
|
$query = IsAdmin() ? "Select * from pbx_funcoes order by fun_id " : |
|
"Select * from pbx_funcoes where fun_id in(select gf.fun_id from pbx_grupo_funcoes gf, pbx_grupo_usuario gu where gf.gp_id = gu.gp_id and gu.user_id = '$idUser' ) order by fun_id "; |
|
$result = pg_query($dbcon, $query); |
|
if ($result) { |
|
while ($row = pg_fetch_array($result)) { |
|
$dadosMenu[$row["fun_id"]] = $row["fun_id_pai"]; |
|
} |
|
|
|
//lista as funcoes do grupo |
|
$funcGrupo = array(); |
|
$query = " Select gp_id, fun_id from pbx_grupo_funcoes where gp_id = $codGp order by fun_id"; |
|
$result = pg_query($dbcon, $query); |
|
if ($result) { |
|
while ($row = pg_fetch_array($result)) { |
|
$funcGrupo[$row["fun_id"]] = $dadosMenu[$row["fun_id"]]; |
|
} |
|
remFuncaoDB($dbcon, $codGp, $funId, $funcGrupo); |
|
if (!$erros) { |
|
remFuncaoAbaixo($dbcon, $codGp, $funId, $dadosMenu, $funcGrupo); |
|
} |
|
if (!$erros) { |
|
remFuncaoAcima($dbcon, $codGp, $dadosMenu[$funId], $dadosMenu, $funcGrupo); |
|
} |
|
if (!$erros) { |
|
$result = pg_query($dbcon, 'commit'); |
|
if ($result) { |
|
//$msg = 'Operação Realizada com Sucesso!'; |
|
$rem = GetModulosRemovidos($dbcon); |
|
} else { |
|
$msg = 'A Operação não Pode ser Realizada! Erro: Não foi possível concluir a transação.'; |
|
} |
|
} else { |
|
$erroDb = pg_last_error($dbcon); |
|
pg_query($dbcon, 'rollback'); |
|
$msg = 'A Operação não Pode ser Realizada!' . (empty($erroDb) ? '' : ' Erro: ' . $erroDb); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
|
|
if (!$acaoRemove) |
|
$_SESSION["modulosRemovidos"] = array(); |
|
|
|
$jsPage[] = "scriptApl/tree.js"; |
|
$jsPage[] = "scriptApl/tree_tpl.js"; |
|
$jsStartup[] = "document.getElementById('footer').style.visibility='hidden';"; |
|
//$jsStartup[] = "function hiddeFooter(){document.getElementById('footer').visibility='hidden;'"; |
|
|
|
if (!$acaoRemove) |
|
$funcs = GetFunc($dbcon, $codGp, 0); |
|
$smarty->assign("funcs", $funcs); |
|
$smarty->assign("msg", $msg); |
|
$smarty->assign("rem", $rem); |
|
|
|
GetTemplate($smarty, 'seguranca/perfilFuncoesGrupos.tpl'); |
|
|
|
function GetFunc($dbcon, $idGrupo, $notMenu = 0) { |
|
$_SESSION["SStreView"] = 1; |
|
$_SESSION["SSperfilAcao"] = "rem"; |
|
//$dadosMenu = Menu($dbcon, QueryPerfilHead($idGrupo), QueryPerfilItens($idGrupo)); |
|
$dadosMenu = MontaMenu(0, -$idGrupo, 2, $notMenu, "rem"); |
|
$dadosMenu = str_replace("MENU_ITEMS", "TREE_ITEMS_GP", $dadosMenu); |
|
$GLOBALS["jsBlok"][] = $dadosMenu; |
|
|
|
$menu = "<div style=\"width:200px; height:800px;position:relative;\">\n"; |
|
$menu .= "<script language=\"JavaScript\">\n"; |
|
$menu .= "<!--//\n"; |
|
$menu .= " new tree (TREE_ITEMS_GP, tree_tpl);\n"; |
|
$menu .= "//-->\n"; |
|
$menu .= "</script>\n"; |
|
$menu .= "</div>\n"; |
|
|
|
return $menu; |
|
} |
|
|
|
function QueryPerfilHead($idGrupo) { |
|
$query = "select b.fun_id, b.fun_nome, b.fun_menu, b.fun_menu_text, b.fun_menu_url, b.fun_menu_img, b.fun_id_pai |
|
from pbx_funcoes b |
|
where coalesce(b.fun_id_pai, 0) = 0 |
|
and b.fun_id in(select gf.fun_id from pbx_grupo_funcoes gf where gf.gp_id = '$idGrupo') |
|
Union |
|
select b.fun_id, b.fun_nome, b.fun_menu, b.fun_menu_text, b.fun_menu_url, b.fun_menu_img, b.fun_id_pai |
|
from pbx_funcoes b where coalesce(b.fun_id_pai, 0) = 0 and fun_public = 1 |
|
order by 1 "; |
|
return $query; |
|
} |
|
|
|
function QueryPerfilItens($idGrupo) { |
|
|
|
$idUser = GetIdUser(); |
|
$query = "select b.fun_id, b.fun_nome, b.fun_menu, b.fun_menu_text, b.fun_menu_url, b.fun_menu_img, b.fun_id_pai |
|
from pbx_funcoes b |
|
where 1=1 |
|
and b.fun_id in(select g.fun_id from pbx_grupo_funcoes g where g.gp_id = '$idGrupo') |
|
order by b.fun_id "; |
|
|
|
return $query; |
|
} |
|
|
|
function FuncExiste($funId, $funcGrupo) { |
|
foreach ($funcGrupo as $value) { |
|
if ($funId == $value) |
|
return 1; |
|
} |
|
return 0; |
|
} |
|
|
|
function addFuncaoAbaixo($dbcon, $codGP, $fun_id, $dadosMenu, $funcGrupo) { |
|
foreach ($dadosMenu as $key => $value) { |
|
if ($value == $fun_id) { |
|
addFuncaoDB($dbcon, $codGP, $key, $funcGrupo); |
|
addFuncaoAbaixo($dbcon, $codGP, $key, $dadosMenu, $funcGrupo); |
|
} |
|
} |
|
} |
|
|
|
function addFuncaoAcima($dbcon, $codGP, $fun_id_pai, $dadosMenu, $funcGrupo) { |
|
foreach ($dadosMenu as $key => $value) { |
|
if ($key == $fun_id_pai) { |
|
addFuncaoDB($dbcon, $codGP, $key, $funcGrupo); |
|
if ($value) |
|
addFuncaoAcima($dbcon, $codGP, $value, $dadosMenu, $funcGrupo); |
|
} |
|
} |
|
} |
|
|
|
function addFuncaoDB($dbcon, $codGP, $fun_id, $funcGrupo) { |
|
$result = false; |
|
if (!isset($funcGrupo[$fun_id]) || (!$funcGrupo[$fun_id])) { |
|
$query = "insert into pbx_grupo_funcoes( gp_id, fun_id) values($codGP, $fun_id)"; |
|
$result = @pg_query($dbcon, $query); |
|
if (!$result) |
|
$GLOBALS["erros"] ++; |
|
} |
|
return $result; |
|
} |
|
|
|
function remFuncaoDB($dbcon, $codGp, $funId, &$funcGrupo) { |
|
if (!$funcGrupo[$fun_id]) { |
|
$query = "delete from pbx_grupo_funcoes where gp_id = $codGp and fun_id = $funId"; |
|
$result = @pg_query($dbcon, $query); |
|
if ($result) { |
|
$_SESSION["modulosRemovidos"][] = $funId; |
|
$rmFunc = array(); |
|
foreach ($funcGrupo as $key => $value) { |
|
if ($funId != $key) |
|
$rmFunc[$key] = $value; |
|
} |
|
$funcGrupo = array(); |
|
$funcGrupo = $rmFunc; |
|
} |
|
else { |
|
$GLOBALS["erros"] ++; |
|
} |
|
} |
|
} |
|
|
|
function remFuncaoAbaixo($dbcon, $codGp, $fun_id, $dadosMenu, $funcGrupo) { |
|
foreach ($dadosMenu as $key => $value) { |
|
if ($value == $fun_id) { |
|
remFuncaoDB($dbcon, $codGp, $key, $funcGrupo); |
|
remFuncaoAbaixo($dbcon, $codGp, $key, $dadosMenu, $funcGrupo); |
|
} |
|
} |
|
} |
|
|
|
function remFuncaoAcima($dbcon, $codGP, $fun_id_pai, $dadosMenu, $funcGrupo) { |
|
if (!ExisteFilhos($fun_id_pai, $funcGrupo)) { |
|
foreach ($dadosMenu as $key => $value) { |
|
if ($key == $fun_id_pai) { |
|
remFuncaoDB($dbcon, $codGP, $key, $funcGrupo); |
|
if ($value) |
|
remFuncaoAcima($dbcon, $codGP, $key, $value, $dadosMenu, $funcGrupo); |
|
} |
|
} |
|
} |
|
} |
|
|
|
function ExisteFilhos($fun_id_pai, $funcGrupo) { |
|
|
|
foreach ($funcGrupo as $key => $value) { |
|
if ($value == $fun_id_pai) |
|
return true; |
|
} |
|
return false; |
|
} |
|
|
|
function GetModulosRemovidos($dbcon) { |
|
$modRem = $_SESSION["modulosRemovidos"]; |
|
$modIn = ''; |
|
foreach ($modRem as $value) { |
|
$modIn .= empty($modIn) ? $value : ',' . $value; |
|
} |
|
|
|
$query = "Select * from pbx_funcoes where fun_id in($modIn) order by fun_menu_text"; |
|
$result = pg_query($dbcon, $query); |
|
if ($result) { |
|
$mod = '<html><head><title>Módulos Removidos</title></head><body bgcolor="FFFFFF"> |
|
<table width="100%" border="0" cellpadding="2" cellspacing="0" class="formCad"> |
|
<tr> |
|
<th>Módulo(s) Removido(s)</th> |
|
</tr>'; |
|
|
|
while ($row = pg_fetch_array($result)) { |
|
$nomeMod = $row["fun_menu_text"]; |
|
$mod .= "<tr> |
|
<td>$nomeMod</td> |
|
</tr>"; |
|
} |
|
$mod .= '</table></body></html>'; |
|
|
|
return $mod; |
|
$str = 'Operação Realizada com Sucesso!'; |
|
} |
|
} |
|
|
|
function GetMsgRemFormat($msg) { |
|
$mod = '<table width="100%" border="0" cellpadding="2" cellspacing="0" class="formCad"> |
|
<tr> |
|
<th>Mensagem</th> |
|
</tr>'; |
|
$mod .= "<tr> |
|
<td>$msg</td> |
|
</tr> |
|
</table>"; |
|
return $mod; |
|
} |
|
|
|
?>
|
|
|