PABX da Simples IP
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.

322 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<EFBFBD>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<EFBFBD> cadastrado!');";
} else if (($_POST["btGravar"] != "Alterar") && ExisteRegistro($dbcon, "pbx_usuarios", "matricula", ($_POST["userMatriculaH"]))) {
$msg = "alert('Matr<EFBFBD>cula j<EFBFBD> cadastrada!');";
} else if ($_POST["userEmail"] && !is_email($_POST["userEmail"])) {
$msg = "alert('Email Inv<EFBFBD>lido!');";
} else if (ExisteRegistro($dbcon, "pbx_usuarios", "email", (strtolower($_POST["userEmail"])), ($idUser ? "a.id <> {$idUser}" : ''))) {
$msg = "alert('O e-mail informado j<EFBFBD> foi registrado!');";
} else if ($_POST["userExpiraSenha"] < 0) {
$msg = "alert('O tempo de expira<EFBFBD><EFBFBD>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, %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<EFBFBD>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<EFBFBD><EFBFBD>o n<EFBFBD>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<EFBFBD><EFBFBD>o realizada com sucesso!');";
$jsStartup[] = 'window.close()';
} else {
$msgAgt = trim($msgAgt);
$erroBd = @pg_last_error($dbcon);
$msg = sprintf("alert('%s');", (empty($msgAgt) ? "A opera<EFBFBD><EFBFBD>o n<EFBFBD>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;
}