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.
193 lines
7.7 KiB
193 lines
7.7 KiB
<?php |
|
|
|
require('funcoesFormulario.php'); |
|
$templateName = 'seguranca/grupos/gruposUsuario.htm'; |
|
$tpLayout = 1; |
|
$upload = 1; |
|
$org_id = GetOrganizacao(); |
|
$fieldsForm = array(); |
|
$fieldsForm = IsPostBack() ? $_POST : $_GET; |
|
|
|
if (isset($fieldsForm['gp_id']) && (strpos($fieldsForm['gp_id'], '|') !== false)) { |
|
$search = strpbrk($fieldsForm['gp_id'], '|'); |
|
$fieldsForm['gp_id'] = str_replace($search, '', $fieldsForm['gp_id']); |
|
} |
|
|
|
$isLgpd = $fieldsForm["gp_lgpd"]; |
|
|
|
$idCampanha = $fieldsForm['cmp_id']; |
|
$fieldsForm['erro'] = ""; |
|
|
|
if (isset($fieldsForm['btIncAgente'])) { |
|
if (empty($fieldsForm['user_id'])) { |
|
$fieldsForm['erro'] = fmtMsg('Selecione um agente!'); |
|
} else { |
|
try { |
|
$result = pg_query($dbcon, 'begin'); |
|
|
|
$query = sprintf('SELECT count(*) FROM pbx_grupo_usuario a, pbx_grupo b WHERE b.gp_id = a.gp_id AND b.user_id > 0 AND b.gp_id = %s', $fieldsForm['gp_id']); |
|
if (RegistroInc($dbcon, $query)) { |
|
throw new Exception('Operação inválida, "Usuários" só podem ser vinculados a "Grupos"!'); |
|
} |
|
|
|
if ($result) { |
|
$cont = 0; |
|
foreach ($fieldsForm['user_id'] as $idUser) { |
|
/* |
|
* Valida se o usuario ja não pertence a outro grupo lgpd. |
|
*/ |
|
if ($isLgpd && ($jaLgpd = JaInseridoLgps($idUser))) { |
|
throw new Exception($jaLgpd); |
|
} |
|
$query = "INSERT INTO pbx_grupo_usuario(user_id, gp_id, org_id) VALUES(%s, '%s', $org_id)"; |
|
$query = sprintf($query, $idUser, $fieldsForm['gp_id']); |
|
$result = pg_query($dbcon, $query); |
|
if (!$result) { |
|
break; |
|
} |
|
$cont++; |
|
} |
|
} |
|
|
|
$result = $result && pg_query($dbcon, 'commit'); |
|
|
|
if (!$result) { |
|
throw new Exception('A operação não pode ser realizada!'); |
|
} |
|
|
|
$fieldsForm['erro'] = $cont > 1 ? fmtMsg('Agentes incluidos com sucesso!') : fmtMsg('Agente incluido com sucesso!'); |
|
} catch (Exception $e) { |
|
pg_query($dbcon, 'rollback'); |
|
fmtErro($e->getMessage(), pg_last_error($dbcon)); |
|
} |
|
} |
|
} else if (isset($fieldsForm['btRmAgente'])) { |
|
if (empty($fieldsForm['user_inc'])) { |
|
$fieldsForm['erro'] = fmtMsg('Selecione um agente!'); |
|
} else { |
|
try { |
|
$result = pg_query($dbcon, 'begin'); |
|
if ($result) { |
|
$userAdmin = IsAdmin() || IsUserAdmin() ? 1 : 0; |
|
$cont = 0; |
|
foreach ($fieldsForm['user_inc'] as $idUser) { |
|
$query = "DELETE from pbx_grupo_usuario |
|
WHERE user_id = '%s' |
|
AND gp_id = '%s' |
|
AND user_id <> (SELECT id FROM pbx_usuarios WHERE apelido = 'administrador') |
|
AND not exists(select '' from pbx_grupo WHERE gp_id = '%s' AND gp_user = CASE WHEN(%s=0)THEN '%s' ELSE -1 END)"; //Nao permite o usuario remover o pai do grupo(quem criou). |
|
$query = sprintf($query, $idUser, $fieldsForm['gp_id'], $fieldsForm['gp_id'], $userAdmin, $idUser); |
|
$result = pg_query($dbcon, $query); |
|
if (!$result) |
|
break; |
|
$cont++; |
|
} |
|
} |
|
|
|
$result = $result && pg_query($dbcon, 'commit'); |
|
if (!$result) { |
|
throw new Exception('A operação não pode ser realizada!'); |
|
} |
|
|
|
$fieldsForm['erro'] = $cont > 1 ? fmtMsg('Agentes removidos com sucesso!') : fmtMsg('Agente removido com sucesso!'); |
|
} catch (Exception $e) { |
|
pg_query($dbcon, 'rollback'); |
|
fmtErro($e->getMessage(), pg_last_error($dbcon)); |
|
} |
|
} |
|
} |
|
|
|
$fieldsForm['user_id'] = GetUser($dbcon, $fieldsForm['gp_id'], $fieldsForm['user_id'], 8, "user_id", "240", 0, 1); |
|
$fieldsForm['listaGrupo'] = GetGrupoUser($dbcon, $fieldsForm['gp_id'], 0, 8, "user_inc", "240", 0, 1); |
|
|
|
/* |
|
* Atualiza templates templates |
|
*/ |
|
foreach ($fieldsForm as $key => $value) { |
|
$smarty->assign($key, $value); |
|
} |
|
|
|
GetTemplate($smarty, $templateName); |
|
function GetGrupoUser($dbcon, $codGp, $codSel, $size = 1, $nomeLista = "user_id", $tamPx = "200", $desabilita = 0, $multiple = 0) |
|
{ |
|
if (strpos($codGp, '|') !== false) { |
|
$codG = explode('|', $codGp); |
|
$codGp = $codG[0]; |
|
} |
|
$query = "SELECT b.id, b.nome || (CASE WHEN( (SELECT count(*) FROM pbx_grupo WHERE gp_id = a.gp_id AND gp_user = a.user_id) > 0)THEN '*' ELSE '' END) AS apelido, b.matricula, a.gp_id FROM pbx_grupo_usuario a, pbx_usuarios b WHERE b.id = a.user_id AND a.gp_id = $codGp ORDER BY 2"; |
|
|
|
$result = pg_query($dbcon, $query); |
|
$cont = 0; |
|
$sel = ""; |
|
|
|
$lista = '<select name="%s%s" id="%s" size="%s" style="width:%spx;" %s>%s'; |
|
$lista = sprintf($lista, $nomeLista, ($multiple ? "[]" : ""), $nomeLista, $size, $tamPx, ($multiple ? 'multiple="multiple"' : ''), "\n"); |
|
|
|
while (($row = @pg_fetch_array($result))) { |
|
$cod = $row["id"]; |
|
$sel = ($codSel == $cod) ? "selected" : ""; |
|
|
|
$desc = $row["apelido"] . "-" . $row["matricula"]; |
|
$lista .= "<option value=\"$cod\" $sel>$desc</option>\n"; |
|
$cont++; |
|
} |
|
$lista .= $cont ? "</select>" : "<option value=\"0\" selected>-</option>\n</select>\n"; |
|
return $lista; |
|
} |
|
|
|
function GetUser($dbcon, $codGrupo, $codSel, $size = 1, $nomeLista = "user_id", $tamPx = "200", $desabilita = 0, $multiple = 0) |
|
{ |
|
$sel = ""; |
|
$org_id = GetOrganizacao(); |
|
if (strpos($codGrupo, '|') !== false) { |
|
$codG = explode('|', $codGrupo); |
|
$codGrupo = $codG[0]; |
|
} |
|
|
|
$query = "SELECT a.id, nome, apelido, matricula |
|
FROM pbx_usuarios a |
|
INNER JOIN pbx_organizacao_usuarios b ON b.id_usuario = a.id |
|
WHERE status = true |
|
AND delete_ = 0 |
|
AND a.id NOT IN(SELECT user_id FROM pbx_grupo_usuario WHERE gp_id = '$codGrupo') |
|
AND upper(apelido) <> 'ADMIN' |
|
AND upper(apelido) <> 'SINCCONTASENHA' |
|
AND b.id_organizacao = $org_id |
|
ORDER BY 2 "; |
|
|
|
$result = pg_query($dbcon, $query); |
|
|
|
$lista = '<select name="%s%s" id="%s" size="%s" style="width:%spx" %s >%s'; |
|
$lista = sprintf($lista, $nomeLista, ($multiple ? '[]' : ''), $nomeLista, $size, $tamPx, ($multiple ? 'multiple="multiple"' : ''), "\n"); |
|
|
|
while (($row = @pg_fetch_array($result))) { |
|
$cod = $row["id"]; |
|
$desc = $row["nome"] . "-" . $row["matricula"]; |
|
$sel = ($codSel == $cod) ? "selected" : ""; |
|
$lista .= "<option value=\"$cod\" $sel>$desc</option>\n"; |
|
} |
|
$lista .= "</select>\n"; |
|
return $lista; |
|
} |
|
|
|
function JaInseridoLgps($userId) |
|
{ |
|
global $dbcon; |
|
$org_id = GetOrganizacao(); |
|
$query = "SELECT c.id, c.matricula, c.nome, b.gp_id, b.gp_nome |
|
FROM pbx_grupo_usuario a |
|
INNER JOIN pbx_grupo b ON b.gp_id = a.gp_id |
|
INNER JOIN pbx_usuarios c ON c.id = a.user_id |
|
WHERE b.gp_nome ilike 'LGPD_%_%_%' |
|
AND a.user_id = '{$userId}' |
|
AND org_id = $org_id;"; |
|
|
|
$result = pg_query($dbcon, $query); |
|
|
|
if (!pg_num_rows($result)) { |
|
return false; |
|
} |
|
|
|
$row = pg_fetch_array($result); |
|
return sprintf("O usuário: %s-%s já esta incluido no grupo %s da LGDP!", $row["matricula"], $row["nome"], $row["gp_nome"]); |
|
}
|
|
|