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.
241 lines
8.9 KiB
241 lines
8.9 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($query); |
|
$duracaoTotal = ''; |
|
|
|
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 (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. |
|
*/ |
|
$duracaoTotal = SecondToStrTime($duracaoTotal); |
|
$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); |
|
$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 ", QuotedStr($dataIni), QuotedStr($dataFim)); |
|
|
|
$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"; |
|
//if(IsAdmin()){echo $query; exit(); } |
|
return $query; |
|
} |
|
|
|
function GetLogFullModulos($pId) { |
|
global $dtIni, $dtFim; |
|
$dataIni = QuebraData($dtIni); |
|
$dataFim = QuebraData($dtFim); |
|
|
|
$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" |
|
, QuotedStr($dataIni), QuotedStr($dataFim)); |
|
$result = pg_query($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; |
|
$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"'); |
|
|
|
$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", QuotedStr($dataIni), QuotedStr($dataFim)); |
|
$result = pg_query($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) { |
|
foreach ($json as $chave => $valor) { |
|
if (!is_array($valor)) { |
|
$dados .= $chave . ': ' . $valor . ' | '; |
|
} |
|
} |
|
return $dados; |
|
} |
|
|
|
function GetDiretorioPai($idPag, $idPagPai) { |
|
$nomeModulo = ''; |
|
|
|
if ($idPag != $idPagPai) { |
|
$query = sprintf("SELECT arquivo FROM pbx_funcoes_internas a |
|
WHERE a.id_prog = %s", $idPagPai); |
|
$result = pg_query($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; |
|
} |
|
|
|
?>
|
|
|