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.
302 lines
13 KiB
302 lines
13 KiB
<?php |
|
|
|
require_once("util/constantes.php"); |
|
$tpLayout = 1; |
|
$limpaVar = 0; |
|
$msgLogin = ""; |
|
$idUser = isset($_GET["idUser"]) ? $_GET["idUser"] : $_POST["idUser"]; |
|
$msgMatricula = "disabled"; |
|
$msgAgt = ""; |
|
$userAgente = ""; |
|
$userSuper = ""; |
|
$userAdm = ""; |
|
$userStatus = isset($_POST["userStatus"]) ? "checked" : ""; |
|
$org_id = GetOrganizacao(); |
|
|
|
if (isset($_GET["idUser"]) && $_GET["idUser"] == 0) { |
|
$acaoUser = 'Incluir'; |
|
$userMatricula = GetMatriculaAgente($dbcon); |
|
$userPassword = '1234'; |
|
$dacPadrao = GetDacs($dbcon, 0, "", 0, 1); |
|
$userStatus = "checked"; |
|
} else if (isset($_GET["idUser"]) && $_GET["idUser"] > 0) { |
|
$msgLogin = "disabled"; |
|
$acaoUser = 'Alterar'; |
|
$query = "SELECT id, nome, apelido, matricula, flag, coalesce(\"admin\", false)::int as adm , senha, coalesce(supervisor, false)::int as supervisor, coalesce(agente,false)::int as agente, email, coalesce(status,true)::int as status, penalidade, senha_dias_expira, org_padrao FROM pbx_usuarios \n"; |
|
$query .= "WHERE id = $idUser"; |
|
|
|
$result = pg_query($dbcon, $query); |
|
if ($result) { |
|
$dados = pg_fetch_array($result); |
|
} |
|
$userNome = $dados["nome"]; |
|
$userLogin = $dados["apelido"]; |
|
$userMatricula = $dados["matricula"]; |
|
$userPassword = DEFAULT_MASC_PASSWORD; |
|
$userEmail = $dados["email"]; |
|
$userExpiraSenha = $dados["senha_dias_expira"]; |
|
$userStatus = $dados["status"] ? "checked" : ""; |
|
$penalidade = $dados["penalidade"]; |
|
$empPadrao = $dados['org_padrao']; |
|
$dacAgente = GetIdDacPadrao($dbcon, $idUser); |
|
$dacPadrao = GetDacs($dbcon, $dacAgente, "", 0, 1); |
|
} else if ((isset($_POST["btGravar"]))) { |
|
$msg = ""; |
|
if (empty($_POST["userNome"])) { |
|
$msg = "alert('Informe o nome do Usuário!');"; |
|
} else if (($_POST["btGravar"] != "Alterar") && empty($_POST["userLogin"])) { |
|
$msg = "alert('Informe um apelido!');"; |
|
} else if (empty($_POST["userPassword"])) { |
|
$msg = "alert('Informe a senha');"; |
|
} else if (($_POST["btGravar"] != "Alterar") && ExisteRegistro($dbcon, "pbx_usuarios", "apelido", (strtolower($_POST["userLogin"])))) { |
|
$msg = "alert('Login já cadastrado!');"; |
|
} else if (($_POST["btGravar"] != "Alterar") && ExisteRegistro($dbcon, "pbx_usuarios", "matricula", ($_POST["userMatriculaH"]))) { |
|
$msg = "alert('Matrícula já cadastrada!');"; |
|
} else if ($_POST["userEmail"] && !is_email($_POST["userEmail"])) { |
|
$msg = "alert('Email Inválido!');"; |
|
} else if (ExisteRegistro($dbcon, "pbx_usuarios", "email", (strtolower($_POST["userEmail"])), ($idUser ? "a.id <> {$idUser}" : ''))) { |
|
$msg = "alert('O e-mail informado já foi registrado!');"; |
|
} else if ($_POST["userExpiraSenha"] < 0) { |
|
$msg = "alert('O tempo de expiração deve ser maior ou igual 0 'zero');"; |
|
} |
|
$userNome = mb_strtoupper(RemoveAcentos($_POST["userNome"])); |
|
$userLogin = mb_strtolower(RemoveAcentos(RemoveEspaco($_POST["btGravar"] != "Alterar" ? $_POST["userLogin"] : $_POST["userLoginH"]), -1)); |
|
$userMatricula = $_POST["userMatriculaH"]; |
|
$userPassword = ($_POST["userPassword"]); |
|
$userEmail = RemoveAcentos(strtolower($_POST["userEmail"])); |
|
$userStatus = isset($_POST["userStatus"]) ? "checked" : ""; |
|
$acaoUser = $_POST["btGravar"]; |
|
$penalidade = $_POST["penalidade"] ? soNumero($_POST["penalidade"]) : "0"; |
|
$dacPadraoSel = $_POST["listaDacs"] ? $_POST["listaDacs"] : "0"; |
|
$empPadrao = $_POST["empPadrao"] ? $_POST["empPadrao"] : null; |
|
$dacPadrao = GetDacs($dbcon, $dacPadraoSel, "", 0, 1); |
|
$userExpiraSenha = $_POST["userExpiraSenha"] ? $_POST["userExpiraSenha"] : 0; |
|
|
|
if (empty($msg) && ($_POST["btGravar"] == 'Incluir')) { |
|
$result = pg_query($dbcon, "begin"); |
|
if ($result) { |
|
$userMatricula = GetMatriculaAgente($dbcon); |
|
$query = "INSERT INTO pbx_usuarios(nome, apelido, matricula, flag, \"admin\", senha, supervisor, agente, email, status, penalidade, dac_padrao, check_vl, senha_dias_expira, org_padrao) |
|
VALUES(%s, lower(%s), %s, %s, %s, md5(%s), %s, %s, %s, %s, %s, %s, md5(lower(%s)), %s) RETURNING id;"; |
|
$query = sprintf($query, QuotedStr($userNome), QuotedStr($userLogin), QuotedStr($userMatricula), 1, $userAdm == "checked" ? 'true' : 'false', QuotedStr($userPassword), $userSuper == "checked" ? 'true' : 'false', $userAgente == "checked" ? 'true' : 'false', QuotedStr($userEmail), $userStatus == "checked" ? 'true' : 'false', $penalidade, QuotedStr($dacPadraoSel), QuotedStr($userLogin), $userExpiraSenha, $empPadrao); |
|
$result = pg_query($dbcon, $query); |
|
|
|
if ($result) { |
|
$user = pg_fetch_assoc($result); |
|
$ret = IncluiAgenteFile($dbcon); |
|
$result = strtoupper($ret) == "OK"; |
|
} |
|
|
|
$query = sprintf("INSERT INTO pbx_organizacao_usuarios (id_usuario, id_organizacao, updated_at) VALUES (%s,%s,'%s')", $user['id'], $org_id, date('Y-m-d H:i:s')); |
|
$result1 = $result && pg_query($dbcon, $query); |
|
|
|
echo pg_last_error() . "<br>"; |
|
|
|
/* |
|
* Inclui usuario como grupo. |
|
*/ |
|
$query = sprintf("INSERT INTO pbx_grupo(gp_nome, gp_status, user_id, gp_user, org_id) |
|
SELECT apelido, 1, id, id, $org_id FROM pbx_usuarios WHERE apelido = %s", QuotedStr($userLogin)); |
|
$result2 = $result && pg_query($dbcon, $query); |
|
|
|
echo pg_last_error() . "<br>"; |
|
/* |
|
* Insere o usuario no mesmo grupo criado com seu login. |
|
*/ |
|
$query = sprintf("INSERT INTO pbx_grupo_usuario(user_id, gp_id, org_id) |
|
SELECT user_id, gp_id, $org_id FROM pbx_grupo WHERE gp_nome = %s", QuotedStr($userLogin)); |
|
$result3 = $result && pg_query($dbcon, $query); |
|
|
|
echo pg_last_error() . "<br>"; |
|
/* |
|
* Se o dac for selecionado no cadastro do usuario, o mesmo sera atribuido para o proprio usuario. |
|
*/ |
|
if ($dacPadraoSel) { |
|
$query = sprintf("INSERT INTO pbx_fila_grupos(id, gp_id, org_id) |
|
SELECT $dacPadraoSel, gp_id, $org_id FROM pbx_grupo WHERE gp_nome = %s", QuotedStr($userLogin)); |
|
$result4 = $result && pg_query($dbcon, $query); |
|
} |
|
|
|
echo pg_last_error() . "<br>"; |
|
/* |
|
* Finaliza a transacao. |
|
*/ |
|
if ($result) { |
|
$result = pg_query($dbcon, "commit"); |
|
} |
|
} |
|
|
|
if ($result) { |
|
$limpaVar = 1; |
|
$acaoUser = 'Incluir'; |
|
$idUser = 0; |
|
$userMatricula = GetMatriculaAgente($dbcon); |
|
$msg = "alert('Usuário: $userLogin matricula: $userMatricula, incluido com sucesso');"; |
|
$userPassword = "1234"; |
|
$penalidade = 0; |
|
$jsStartup[] = "window.opener.ResetForm();"; |
|
} else { |
|
$erroBd = @pg_last_error($dbcon); |
|
pg_query($dbcon, "rollback"); |
|
$acaoUser = 'Incluir'; |
|
$msg = sprintf("alert('%s');", "A operação não pode ser realizada!"); |
|
} |
|
} else if (empty($msg) && ($_POST["btGravar"] == 'Alterar')) { |
|
$acaoUser = 'Alterar'; |
|
$msgMatricula = "disabled"; |
|
$msgLogin = "disabled"; |
|
$userLogin = strtolower($_POST["userLoginH"]); |
|
$userMatricula = $_POST["userMatriculaH"]; |
|
$userExpiraSenha = $_POST["userExpiraSenha"]; |
|
$updSenha = DEFAULT_MASC_PASSWORD !== $userPassword; |
|
$result = pg_query($dbcon, "begin"); |
|
|
|
$query = "UPDATE pbx_usuarios |
|
SET nome = %s, |
|
%s |
|
email = %s, |
|
status = %s, |
|
penalidade = %s, |
|
dac_padrao = %s, |
|
senha_dias_expira = %s, |
|
org_padrao = %s |
|
WHERE id = %s "; |
|
|
|
if ($updSenha) { |
|
$updSenha = sprintf(" senha = md5(%s), ", QuotedStr($userPassword)); |
|
$queryAlt = sprintf("UPDATE pbx_controle_acesso SET acs_erro = 2 WHERE acs_login = '%s' AND acs_erro = 1;", $userLogin); |
|
pg_query($dbcon, $queryAlt); |
|
} else { |
|
$updSenha = ''; |
|
} |
|
|
|
$query = sprintf($query, QuotedStr($userNome), $updSenha, QuotedStr($userEmail), $userStatus == "checked" ? 'true' : 'false', $penalidade, $dacPadraoSel, $userExpiraSenha, $empPadrao, $idUser); |
|
$result = pg_query($dbcon, $query); |
|
|
|
/* |
|
* Se o dac for selecionado no cadastro do usuario, o mesmo sera atribuido para o proprio usuario. |
|
*/ |
|
if ($dacPadraoSel && !GetNotExistsDacUser($dacPadraoSel, $idUser)) { |
|
$query = sprintf("INSERT INTO pbx_fila_grupos(id, gp_id) select $dacPadraoSel, gp_id from pbx_grupo where gp_nome = %s", QuotedStr($userLogin)); |
|
$result = $result && pg_query($dbcon, $query); |
|
} |
|
|
|
if ($result) { |
|
$ret = IncluiAgenteFile($dbcon); |
|
$result = strtoupper($ret) == "OK"; |
|
} |
|
|
|
if ($result) { |
|
$result = pg_query($dbcon, "commit"); |
|
} |
|
|
|
if ($result) { |
|
$acaoUser = 'Alterar'; |
|
$jsStartup[] = "window.opener.ResetForm();"; |
|
$msg = "alert('Operação realizada com sucesso!');"; |
|
$jsStartup[] = 'window.close()'; |
|
} else { |
|
$msgAgt = trim($msgAgt); |
|
$erroBd = @pg_last_error($dbcon); |
|
$msg = sprintf("alert('%s');", (empty($msgAgt) ? "A operação não pode ser realizada!" : $msgAgt)); |
|
pg_query($dbcon, "rollback"); |
|
$acaoUser = 'Alterar'; |
|
} |
|
} |
|
$jsStartup[] = $msg; |
|
} |
|
|
|
$smarty->assign("userExpiraSenha", $userExpiraSenha ? $userExpiraSenha : 0); |
|
$smarty->assign("userNome", $limpaVar ? "" : $userNome); |
|
$smarty->assign("userLogin", $limpaVar ? "" : $userLogin); |
|
$smarty->assign("msgLogin", $limpaVar ? "" : $msgLogin); |
|
$smarty->assign("userMatricula", $userMatricula); |
|
$smarty->assign("msgMatricula", $msgMatricula); |
|
$smarty->assign("userPassword", $userPassword); |
|
$smarty->assign("userEmail", $limpaVar ? "" : $userEmail); |
|
$smarty->assign("habAdm", IsAdmin() ? "" : "disabled"); |
|
$smarty->assign("userStatus", $limpaVar ? "checked" : $userStatus); |
|
$smarty->assign("acaoUser", $acaoUser); |
|
$smarty->assign("idUser", $idUser); |
|
$smarty->assign("dacPadrao", $dacPadrao); |
|
$smarty->assign("empPadrao", getOrgPadrao($dbcon, $idUser)); |
|
$smarty->assign("penalidade", $penalidade ? $penalidade : "0"); |
|
|
|
$jsJQuery[] = "\$('#userLogin').change(function(){limpaEspaco(this);}) "; |
|
$jsJQuery[] = "\$('#penalidade').keyup(function(){somenteNumeros(this);}) "; |
|
|
|
GetTemplate($smarty, 'seguranca/usuario.tpl'); |
|
|
|
function GetMatriculaAgente($db) |
|
{ |
|
$org_id = GetOrganizacao(); |
|
$query = "SELECT MAX(matricula) |
|
FROM pbx_usuarios a |
|
INNER JOIN pbx_organizacao_usuarios b ON b.id_usuario = a.id |
|
WHERE b.id_organizacao = $org_id"; |
|
$result = pg_query($db, $query); |
|
if ($result) |
|
$dados = @pg_fetch_array($result); |
|
return ($dados[0] + 1); |
|
} |
|
|
|
function ValidaPassword($password) |
|
{ |
|
$match = preg_match_all('/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[$*&@#_!.%?])[0-9a-zA-Z$_*&@#]{8,}$/', $password); |
|
|
|
if (empty($password) || !$match) { |
|
return false; |
|
} |
|
return true; |
|
} |
|
|
|
function VerificaEmailExists($dbcon, $email) |
|
{ |
|
$query = "SELECT email FROM pbx_usuarios WHERE email = '$email';"; |
|
$result = pg_query($dbcon, $query); |
|
$res = pg_fetch_assoc($result); |
|
return $res; |
|
} |
|
|
|
function getEmailUser($dbcon, $email, $id = null) |
|
{ |
|
$query = "SELECT count(*) FROM pbx_usuarios WHERE email = '$email' "; |
|
if ($id) { |
|
$query .= " AND id <> $id "; |
|
} |
|
|
|
$result = pg_query($dbcon, $query); |
|
$res = pg_fetch_assoc($result); |
|
|
|
if ($res['count']) { |
|
return false; |
|
} |
|
return true; |
|
} |
|
|
|
function getOrgPadrao($dbcon, $idUser) |
|
{ |
|
$query = "SELECT a.id, a.nome, a.master, org_padrao |
|
FROM pbx_organizacao a |
|
INNER JOIN pbx_organizacao_usuarios b ON b.id_organizacao = a.id |
|
INNER JOIN pbx_usuarios c ON c.id = b.id_usuario |
|
WHERE b.id_usuario = {$idUser} |
|
AND a.status = 1 |
|
ORDER BY a.id"; |
|
|
|
$result = pg_query($dbcon, $query); |
|
$data = pg_fetch_all($result); |
|
|
|
if (!$data) { |
|
return null; |
|
} |
|
|
|
$select = "<select name='empPadrao' id='empPadrao'>"; |
|
foreach ($data as $v) { |
|
$sel = $v['id'] == $v['org_padrao'] ? 'selected' : ''; |
|
$select .= "<option value='{$v['id']}' $sel>{$v['nome']}</option>"; |
|
} |
|
$select .= "</select>"; |
|
|
|
return $select; |
|
}
|
|
|