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.
 
 
 
 
 
 

242 lines
8.8 KiB

<?php
ini_set("memory_limit", "1024M");
/*
* Inicializa as datas na chamda do formulário ou recebe a submissão do usuário.
*/
$dtIni = IsPostBack() ? $_POST['dataIni'] : date('d/m/Y') . " 00:00";
$dtFim = IsPostBack() ? $_POST['dataFim'] : date('d/m/Y') . " 23:59";
$modulo = IsPostBack() ? $_POST['listaModulo'] : '';
$usuario = IsPostBack() ? $_POST['listaUsuario'] : 0;
$request = IsPostBack() ? $_POST['request'] : '';
$log = IsPostBack() ? $_POST['full_log'] : '';
/*
* Inicializa variaveis globais.
*/
$imp = 0;
$linhas = '';
$msg = "Informe os parametros e clique em consultar!";
$dtIni = strlen($dtIni) == 10 ? $dtIni . " 00:00" : $dtIni;
$dtFim = strlen($dtFim) == 10 ? $dtFim . " 23:59" : $dtFim;
try {
if (IsPostBack()) {
ValidaData($dtIni, 'd/m/Y H:i', "A data inicial informada: %s é inválida!");
ValidaData($dtFim, 'd/m/Y H:i', "A data final informada %s é inválida!");
$query = GetQuery();
$result = pg_query($dbcon, $query);
while ($row = pg_fetch_array($result)) {
$imp++;
$id = $row['id'];
$idPag = $row['id_prog'];
$idPagPai = $row['id_prog_pai'];
$user = $row['usuario'];
$data = date('d/m/Y H:i:s', strtotime($row['data']));
$req = $row['full_tipo'];
$ip = $row['ip'];
/**
* Prepara o botão de detalhes com informações
*/
$titleImg = 'Mais detalhes!';
$imgDet = "imgSite/detalhadoEnabled.png";
$selc = sprintf("href=\"javascript:NovaJanela('index.php?idProg=305&idFull=%s','logFullDetalhes','550', '550', 'resizable=NO,scrollbars=NO')\"", $id);
$jsonDados = json_decode($row['dados'], true);
/**
* Verifica se possui o REQUEST para popular apenas com o REQUEST.
*/
if ($jsonDados['request']) {
$dados = GetJson($jsonDados['request']);
$mod = $row['id_prog'] == 58 ? $jsonDados['request']['menuNome'] : $mod = $row['modulo'];
} else {
$mod = $row['modulo'];
$dados = GetJson($jsonDados) ? GetJson($jsonDados) : "idProg: " . $idPag . " | " . str_replace(".php", "", $mod);
}
/**
* Verifica o JSON possui DADOS suficientes para abrir a janela de detalhes.
*/
if ($jsonDados) {
if (count($jsonDados) < 7 && count($jsonDados['request']) < 4) {
$selc = '';
$titleImg = 'Detalhes já apresentados!';
$imgDet = "imgSite/detalhadoDesabled.png";
}
}
/**
* Monta o botão com dados atualizados
*/
$linkRel = sprintf("<a %s>"
. "<img src='%s' alt='Detalhes Auditoria!' width='14' height='18' border='0' title='%s'>"
. "</a>", $selc, $imgDet, $titleImg);
/**
* Informa o diretorio pai se houver
*/
$diretorio = GetDiretorioPai($idPag, $idPagPai);
$dirPath = $diretorio ? $diretorio . ' > ' . str_replace(".php", "", $mod) : str_replace(".php", "", $mod);
$linhas .= " <tr align=\"center\">
<td align=\"left\" class=\"headData\">" . $dirPath . "</td>
<td nowrap align=\"left\" class=\"headData\">$user</td>
<td nowrap align=\"center\" class=\"headData\">$data</td>
<td nowrap align=\"left\" class=\"headData\">$ip</td>
<td nowrap align=\"left\" class=\"headData\">$req</td>
<td align=\"left\" class=\"headData\">$dados</td>
<td nowrap align=\"center\" class=\"headData\">$linkRel</td>
</tr>";
}
$msg = !$imp ? 'Nenhum registro Encontrado!' : "$imp Registros Encontrados!";
}
} catch (Exception $ex) {
$msg = $ex->getMessage();
}
/*
* Adciona formatação de data ao formulário.
*/
$jsJQuery[] = "\$('#dataIni').keypress(function(){formataDataHora(this);}) ";
$jsJQuery[] = "\$('#dataFim').keypress(function(){formataDataHora(this);}) ";
/*
* Carrega o combo de módulos do sistema.
*/
$modulos = GetLogFullModulos($modulo);
/*
* Carrega o combo de módulos do sistema.
*/
$agentes = GetLogFullUsuarios($usuario);
/*
* Mescla informações no template correspondente.
*/
$smarty->assign('imp', $imp);
$smarty->assign('dtIni', $dtIni);
$smarty->assign('dtFim', $dtFim);
$smarty->assign('modulos', $modulos);
$smarty->assign('usuarios', $agentes);
$smarty->assign('linhas', $linhas);
$smarty->assign('msg', $msg);
GetTemplate($smarty, 'auditoria/logFull.tpl');
function GetQuery()
{
global $dtIni, $dtFim, $modulo, $usuario, $request, $log;
$dataIni = QuebraData($dtIni);
$dataFim = QuebraData($dtFim);
$org_id = GetOrganizacao();
$query = sprintf("SELECT
a.full_id AS id,
b.id_prog_pai,
a.id_prog,
a.full_prog_nome AS modulo,
a.full_ip AS ip, full_data_hora AS data,
login AS usuario,
a.full_tipo,
full_log AS dados
FROM pbx_audita_full a
LEFT JOIN pbx_funcoes_internas b ON b.id_prog = a.id_prog
LEFT JOIN pbx_usuarios c ON c.apelido = a.login
WHERE full_data::date >= %s
AND full_data::date <= %s AND a.org_id = %s ", QuotedStr($dataIni), QuotedStr($dataFim), $org_id);
$query .= " AND a.full_prog_nome <> 'logFull.php' ";
if ($usuario) {
$query .= sprintf("AND c.id = %s ", $usuario);
}
if ($modulo) {
$query .= sprintf("AND a.id_prog = %s ", $modulo);
}
if ($request) {
$query .= sprintf("AND a.full_tipo = '%s' ", $request);
}
if ($log) {
$search = explode(':', $log);
$log = $search[1] ? '"' . $search[0] . '":"' . trim($search[1]) . '"' : $log;
$query .= sprintf("AND a.full_log LIKE '%%%s%%' ", $log);
}
$query .= " ORDER BY data DESC";
return $query;
}
function GetLogFullModulos($pId)
{
global $dtIni, $dtFim, $dbcon;
$dataIni = QuebraData($dtIni);
$dataFim = QuebraData($dtFim);
$org_id = GetOrganizacao();
$str = "<select name=\"listaModulo\" id=\"listaModulo\" size=\"1\" style=\"width:150px;\">";
$str .= sprintf("<option value=\"\" %s>-------</option>", $pId ? ' ' : 'selected="selected"');
$query = sprintf(
"SELECT DISTINCT a.full_prog_nome,a.id_prog
FROM pbx_audita_full a
WHERE a.full_data::date >= %s
AND a.full_data::date <= %s AND a.org_id = %s ",
QuotedStr($dataIni),
QuotedStr($dataFim),
$org_id
);
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
$sel = ($pId === $dados['id_prog']) ? 'selected="selected"' : ' ';
$str .= sprintf("<option value=\"%s\" %s>%s</option>", $dados['id_prog'], $sel, str_replace(".php", "", $dados['full_prog_nome']));
}
return $str .= "</select>";
}
function GetLogFullUsuarios($pId = 0)
{
global $dtIni, $dtFim, $dbcon;
$dataIni = QuebraData($dtIni);
$dataFim = QuebraData($dtFim);
$str = "<select name=\"listaUsuario\" id=\"listaUsuario\" size=\"1\" style=\"width:150px;\">";
$str .= sprintf("<option value=\"0\" %s>-------</option>", $pId ? ' ' : 'selected="selected"');
$org_id = GetOrganizacao();
$query = sprintf("SELECT DISTINCT
b.id, a.login
FROM pbx_audita_full a
INNER JOIN pbx_usuarios b
ON a.login = b.apelido
WHERE full_data::date >= %s
AND full_data::date <= %s AND a.org_id = %s", QuotedStr($dataIni), QuotedStr($dataFim), $org_id);
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
$sel = ($pId === $dados['id']) ? 'selected="selected"' : ' ';
$str .= sprintf("<option value=\"%s\" %s>%s</option>", $dados['id'], $sel, $dados['login']);
}
return $str .= "</select>";
}
function GetJson($json)
{
$dados = "";
foreach ($json as $chave => $valor) {
if (!is_array($valor)) {
$dados .= $chave . ': ' . $valor . ' | ';
}
}
return $dados;
}
function GetDiretorioPai($idPag, $idPagPai)
{
global $dbcon;
$nomeModulo = '';
if ($idPag && $idPagPai && ($idPag != $idPagPai)) {
$query = sprintf("SELECT arquivo FROM pbx_funcoes_internas a
WHERE a.id_prog = %s", $idPagPai);
$result = pg_query($dbcon, $query);
$select = pg_fetch_array($result);
$dir = substr(strrchr($select['arquivo'], "/"), 1);
$diretorio = $dir == NULL ? $select['arquivo'] : $dir;
$nomeModulo = str_replace(".php", "", $diretorio);
}
return $nomeModulo;
}