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.

538 lines
19 KiB

<?php
/*
* TIMEOUT DE RESPOSTA - (SEGUNDOS)
*/
ini_set('default_socket_timeout', 10);
/*
* VARIAVEIS CONSTANTES
*/
define('DIR_APP_AUDIO', "/var/www/html/aplicativo/audio/");
define('LOGIN_API', 'sinccontasenha');
define('PASSWD_API', 's3ncC0nt@S2nh@');
/*
* VARIAVEIS DE ENTRADA DE DADOS
*/
$dataIni = isset($_REQUEST["dataIni"]) ? trim($_REQUEST["dataIni"]) : date("d/m/Y");
$dataFim = isset($_REQUEST["dataFim"]) ? trim($_REQUEST["dataFim"]) : date("d/m/Y");
$src = isset($_REQUEST["src"]) ? trim($_REQUEST["src"]) : '';
$dst = isset($_REQUEST["dst"]) ? trim($_REQUEST["dst"]) : '';
$protocolo = isset($_REQUEST["proto"]) ? trim($_REQUEST["proto"]) : '';
$empresa = isset($_REQUEST["listaDacs"]) ? trim($_REQUEST["listaDacs"]) : '';
$agente = isset($_REQUEST["listaAgente"]) ? trim($_REQUEST["listaAgente"]) : '';
$classificacao = isset($_REQUEST["listaClass"]) ? trim($_REQUEST["listaClass"]) : '';
$item = isset($_REQUEST["listaItem"]) ? trim($_REQUEST["listaItem"]) : '';
$audio = isset($_GET['audio']) ? $_GET['audio'] : '';
$servidor = isset($_GET['srv']) ? $_GET['srv'] : '';
$dwn = isset($_GET['download']) ? true : false;
$ajax = isset($_GET['ajax']) ? $_GET['ajax'] : '';
/*
* LIMPA OS SERVIDORES COM STATUS OFFLINE
*/
if ($ajax == 1) {
SetServidorOffline('RemoveAll');
echo "OK";
exit();
}
/*
* VARIAVEIS COMPLEMENTARES
*/
$revendasUser = GetRevendasUsuario($dbcon, 0, true);
$colspan = 11;
$exitAudio = 0;
$pagMostra = 0;
$contaReg = 0;
$param = '';
try {
/*
* VERIFICA SE POSSUI UM <EFBFBD>UDIO NA CHAMADA DA APP
*/
GetAudioAlgar($servidor, $audio, $dwn);
/*
* CARREGA COMBOS DA PAGINA
*/
$emp = ___GetEmpresa($dataIni, $dataFim, $revendasUser, $empresa);
$agentes = ___GetAgente($revendasUser, $agente, $empresa);
$optClass = ___GetClassificacao($dataIni, $dataFim, $revendasUser, $empresa, $classificacao, $item, $agente);
$class = $optClass[0];
$itemClass = $optClass[1];
/*
* LISTA DO REQUEST
*/
$params = array('listaDacs', 'listaAgente', 'listaItem', 'listaClass', 'dataIni', 'dataFim', 'src', 'dst', 'tipoConsulta');
foreach ($params as $nomeParam) {
$param .= sprintf('&%s=%s', $nomeParam, $_REQUEST[$nomeParam]);
}
/*
* COLETA A QUERY A SER EXECUTADA
*/
$setQuery = GetQuery($dataIni, $dataFim, $src, $dst, $protocolo, $empresa, $agente, $classificacao, $item, $revendasUser, 'query');
/*
* EXECUTA A QUERY COM A PAGINACAO
*/
$links = PaginaDados($idProg, $setQuery, $param, $regPagina, $offSet, $pagMostra, true);
$dadosAudios = GetQuery('', '', '', '', '', '', '', '', '', '', $setQuery . " LIMIT $regPagina OFFSET $offSet ");
/*
* EXIBE A RESPOSTA NA GRID
*/
$linhas = ___GetGrid($dadosAudios);
} catch (Exception $ex) {
$mensagem = $ex->getMessage();
}
$jsJQuery[] = "\$('#dataIni').keypress(function(){formataDataHora(this);}) ";
$jsJQuery[] = "\$('#dataFim').keypress(function(){formataDataHora(this);}) ";
/*
* VARIAVEIS PARA SER PASSADA PARA O SMARTY
*/
$smarty->assign('dtIni', $dataIni);
$smarty->assign('dtFim', $dataFim);
$smarty->assign('src', $src);
$smarty->assign('dst', $dst);
$smarty->assign('proto', $protocolo);
$smarty->assign('dacs', $emp);
$smarty->assign('agentes', $agentes);
$smarty->assign('class', $class);
$smarty->assign('hasClass', $classificacao);
$smarty->assign('itemClas', $itemClass);
$smarty->assign('linhas', $linhas);
$smarty->assign('colspan', 10);
$smarty->assign('mensagem', $mensagem);
$smarty->assign('links', $links);
$smarty->assign("pagMostra", $pagMostra);
$smarty->assign("totalReg", $totalReg);
$smarty->assign("status", $statusAtivo);
$smarty->assign("pgn", $_REQUEST["pgn"]);
$smarty->assign("bloco", $_REQUEST["bloco"]);
$smarty->assign("pg", $_REQUEST["pg"]);
GetTemplate($smarty, 'audio_algar.tpl');
/*
* DETERMINA QUAL O TIPO DE EXECUCAO SER<EFBFBD> FEITA (STREMING NA PAGINA OU DOWNLOAD)
*/
function GetAudioAlgar($servidor, $audio, $dwn = false) {
global $jsJQuery;
if (!$audio) {
return null;
}
if ($servidor && !$dwn) {
echo GetAudioApi($servidor, $audio);
} else if ($servidor && $dwn) {
GetAudioApi($servidor, $audio, true);
CreateDownloadStream(base64_decode($audio));
} else {
$patch = explode('/', base64_decode($audio));
$arq = count($patch);
$file = $patch[$arq - 1];
$dstAudio = DIR_APP_AUDIO . str_ireplace('.WAV', '.MP3', $file);
CnvrtWavToMp3(base64_decode($audio), $dstAudio);
DownloadAudio($file, base64_decode($audio), 'mp3');
}
exit();
}
/*
* BUSCA NO SERVIDOR O AUDIO PARA SER REPRODUZIDO
*/
function GetAudioApi($servidor, $audio, $create = false) {
$vpn = base64_decode($servidor);
$audioMp3 = base64_decode($audio);
$url = "http://$vpn/integracao?method=GetAudio&login=" . LOGIN_API . "&uniqueid=$audioMp3&senha=" . PASSWD_API . "&tipo=mp3&tipoRetorno=XML";
if ($create) {
file_put_contents(DIR_APP_AUDIO . $audioMp3 . '.WAV', file_get_contents($url));
} else {
return file_get_contents($url);
}
}
/*
* EXECUCAO DA QUERY DE CHAMADAS NO BANCO
*/
function GetQuery($dataIni, $dataFim, $src, $dst, $protocolo, $empId, $agente, $classificacao, $item, $revendasUser, $param = null) {
global $contaReg;
$org_id = GetOrganizacao();
if ($param == 'query') {
$query = "SELECT a.uid,e.emp_nome_fantasia,emp_cnpj,chm_fila,vdr_apelido,chm_calldate,chm_duration,chm_src,
chm_dst,prt_proto_parceiro,clas_descricao,clas_descricao_item,a.uid,chm_userfield,emp_vpn,emp_diretorio_ftp
FROM vds_chamadas a
INNER JOIN vds_vendedores b ON a.emp_id = b.emp_id and a.org_id = b.org_id
INNER JOIN vds_classificacoes c ON c.uid = a.uid and c.org_id = a.org_id
INNER JOIN vds_protcolos d ON d.uid = a.uid and d.org_id = a.org_id
INNER JOIN vds_empresas e ON e.emp_id = a.emp_id and e.org_id = a.org_id
WHERE chm_matricula = vdr_matricula
AND a.chm_evento IN ('COMPLETEAGENT','COMPLETECALLER','COMPLETAAGENT','COMPLETACALLER', 'TRANSFER')
AND a.org_id = $org_id";
if (!$protocolo) {
$query .= $dataIni && $dataFim ? sprintf(" AND chm_data_bilhete >= '%s' AND chm_data_bilhete <= '%s' ", FormatDtMssql($dataIni), FormatDtMssql($dataFim)) : '';
$query .= $src ? "AND chm_src = '$src' " : '';
$query .= $dst ? "AND chm_dst = '$dst' " : '';
$query .= $agente ? sprintf("AND vdr_apelido = '%s' ", explode('|', $agente)[1]) : '';
$query .= $classificacao ? "AND clas_descricao = '$classificacao' " : '';
$query .= $item ? "AND clas_descricao_item = '$item' " : '';
if ($empId) {
$query .= sprintf("AND a.emp_id IN (%s) ", $empId);
} else if ($agente) {
$query .= sprintf("AND a.emp_id IN (%s) ", explode('|', $agente)[0]);
} else {
$query .= "AND a.emp_id IN ($revendasUser) ";
}
} else {
$query .= $protocolo ? "AND prt_proto_parceiro = '$protocolo' " : '';
}
$query .= " ORDER BY 3 DESC ";
$data = ___GetData($query);
$contaReg = count($data);
return $query;
}
$data = ___GetData($param);
if (!$data) {
throw new Exception("N<EFBFBD>o foi encontrado nenhum dado com as informa<EFBFBD><EFBFBD>es passadas!");
}
return $data;
}
/*
* CRIA O COMBO COM AS EMPRESAS DE ACORDO COM A RAGE DE DATA E CHAMADA PRESENTE NA PESQUISA
*/
function ___GetEmpresa($dataIni, $dataFim, $revendaUser, $empId = null) {
$query = sprintf("SELECT DISTINCT a.emp_id,emp_diretorio_ftp
FROM vds_chamadas a
INNER JOIN vds_empresas b ON a.emp_id = b.emp_id
WHERE chm_data_bilhete >= '%s' AND chm_data_bilhete <= '%s' ", FormatDtMssql($dataIni), FormatDtMssql($dataFim));
$query .= " AND emp_diretorio_ftp IS NOT NULL AND a.emp_id IN($revendaUser) ORDER BY 2;";
$select = $empId ? '' : 'selected="selected"';
$option = "<select name=\"listaDacs\" id=\"listaDacs\" size=\"1\">";
$option .= "<option value=\"0\" $select>-----------------</option>";
$dadosEmp = ___GetData($query);
foreach ($dadosEmp as $emp) {
if (strpos($emp['emp_diretorio_ftp'], '/') !== false) {
$str = explode('/', $emp['emp_diretorio_ftp']);
$str = $str[count($str) - 1];
} else {
$str = $emp['emp_diretorio_ftp'];
}
if ($emp['emp_id'] == $empId) {
$select = "selected=\"selected\"";
} else {
$select = '';
}
$option .= "<option value=\"{$emp['emp_id']}\" $select>$str</option>";
}
$option .= "</select>";
return $option;
}
/*
* CRIA O COMBO COM OS AGENTES DE ACORDO COM A RAGE DE DATA E CHAMADA PRESENTE NA PESQUISA
*/
function ___GetAgente($revendaUser, $agente = null, $empId = null) {
global $dataIni, $dataFim;
$org_id = GetOrganizacao();
if (!$empId) {
$query = "SELECT vdr_apelido AS apelido, vdr_matricula AS matricula, emp_id
FROM vds_vendedores
WHERE ";
$query .= "emp_id IN ($revendaUser) and org_id = $org_id ORDER BY apelido";
} else {
$query = sprintf("SELECT DISTINCT vdr_apelido AS apelido, vdr_matricula AS matricula, a.emp_id
FROM vds_chamadas a
INNER JOIN vds_vendedores b ON a.emp_id = b.emp_id and a.org_id = b.org_id
WHERE chm_data_bilhete >= '%s' AND chm_data_bilhete <= '%s' AND b.emp_id = %s and org_id = %d", FormatDtMssql($dataIni), FormatDtMssql($dataFim), $empId, $org_id);
$query .= " ORDER BY apelido";
}
$select = $agente ? '' : 'selected="selected"';
$option = "<select name=\"listaAgente\" id=\"listaAgente\" size=\"1\">";
$option .= "<option value=\"0\" $select>-----------------</option>";
$dadosAgentes = ___GetData($query);
foreach ($dadosAgentes as $agt) {
if ("{$agt['emp_id']}|{$agt['apelido']}|{$agt['matricula']}" == $agente) {
$select = "selected=\"selected\"";
} else {
$select = '';
}
$option .= "<option value=\"{$agt['emp_id']}|{$agt['apelido']}|{$agt['matricula']}\" $select>{$agt['apelido']}</option>";
}
$option .= "</select>";
return $option;
}
/*
* CRIA O COMBO COM AS CLASSIFICACOES DE ACORDO COM A RAGE DE DATA E CHAMADA PRESENTE NA PESQUISA
*/
function ___GetClassificacao($dataIni, $dataFim, $revendaUser, $empId = null, $classificacao = null, $item = null, $agente = null) {
$query = sprintf("SELECT DISTINCT clas_descricao AS classificacao FROM vds_classificacoes
WHERE clas_data >= '%s' AND clas_data <= '%s' ", FormatDtMssql($dataIni), FormatDtMssql($dataFim));
if ($empId) {
$query .= sprintf(" AND emp_id IN('%s') ", $empId);
} else if ($agente) {
$query .= sprintf(" AND clas_matricula = '%s' ", explode('|', $agente)[2]);
$query .= sprintf(" AND emp_id IN('%s') ", explode('|', $agente)[0]);
} else {
$query .= " AND emp_id IN($revendaUser) ";
}
$select = $classificacao ? '' : 'selected="selected"';
$option = "<select name=\"listaClass\" id=\"listaClass\" size=\"1\">";
$option .= "<option value=\"0\" $select>-----------------</option>";
$dadosClassificacao = ___GetData($query);
foreach ($dadosClassificacao as $clas) {
if ($clas['classificacao'] == $classificacao) {
$select = "selected=\"selected\"";
} else {
$select = '';
}
$option .= "<option value=\"{$clas['classificacao']}\" $select>{$clas['classificacao']}</option>";
}
$option .= "</select>";
if ($classificacao) {
$itemOption = ___GetClassificacaoItem($dataIni, $dataFim, $revendaUser, $classificacao, $item ? $item : '', $empId);
return array($option, $itemOption);
} else {
return array($option);
}
}
/*
* CRIA E EXIBE COMBO COM OS ITENS DE CLASSIFICACAO DE ACORDO A PESQUISA DE CLASSFICACAO
*/
function ___GetClassificacaoItem($dataIni, $dataFim, $revendaUser, $classificacao, $item = null, $empId = null) {
$query = sprintf("SELECT DISTINCT clas_descricao_item AS item
FROM vds_classificacoes a
INNER JOIN vds_chamadas b ON a.uid = b.uid
WHERE clas_reg::DATE >= '%s' AND clas_reg::DATE <= '%s'
AND clas_descricao = '$classificacao' ", FormatDtMssql($dataIni), FormatDtMssql($dataFim));
if ($empId) {
$query .= sprintf(" AND a.emp_id IN(%s); ", $empId);
} else {
$query .= " AND emp_id IN($revendaUser);";
}
$select = $classificacao ? '' : 'selected="selected"';
$option = "<select name=\"listaItem\" id=\"listaItem\" size=\"1\">";
$option .= "<option value=\"0\" $select>-----------------</option>";
$dadosClassificacao = ___GetData($query);
foreach ($dadosClassificacao as $clas) {
if ($clas['item'] == $item) {
$select = "selected=\"selected\"";
} else {
$select = '';
}
$option .= "<option value=\"{$clas['item']}\" $select>{$clas['item']}</option>";
}
$option .= "</select>";
return $option;
}
/*
* FUNCAO PARA EXECUTAR QUERY E TRAZER OS DADOS EM ARRAY
*/
function ___GetData($query) {
global $dbcon;
$result = pg_query($dbcon, $query);
$resp = pg_fetch_all($result);
if (!$resp) {
return null;
}
return $resp;
}
/*
* MONTA A GRID A SER APRESENTADA PARA O USUARIO FINAL DA APLICACAO
*/
function ___GetGrid($dadosAudios) {
global $colspan, $pagMostra, $contaReg;
foreach ($dadosAudios as $dados) {
$audioHTML = '';
$uid = $dados['uid'] ? $dados['uid'] : "";
$empresa = $dados['emp_nome_fantasia'] ? str_replace(" - ALGAR TELECOM", '', $dados['emp_nome_fantasia']) : ' - ';
$fila = $dados['chm_fila'] ? $dados['chm_fila'] : ' - ';
$apelido = $dados['vdr_apelido'] ? $dados['vdr_apelido'] : ' - ';
$data = date('d/m/Y H:i:s', strtotime($dados['chm_calldate']));
$dataDir = date('Y/m/d', strtotime($dados['chm_calldate']));
$duration = SecondToStrTime($dados['chm_duration']);
$orig = $dados['chm_src'] ? $dados['chm_src'] : ' - ';
$dest = $dados['chm_dst'] ? $dados['chm_dst'] : ' - ';
$proto = $dados["prt_proto_parceiro"] ? $dados["prt_proto_parceiro"] : ' - ';
$clasDesc = !$dados["clas_descricao"] ? '-' : $dados["clas_descricao"];
$ItemDesc = !$dados["clas_descricao_item"] ? '-' : $dados["clas_descricao_item"];
$vpn = $dados['emp_vpn'] ? base64_encode($dados['emp_vpn']) : '';
$audioUnique = $dados['uid'] ? base64_encode($dados['uid']) : '';
$url = $_SERVER['SERVER_NAME'];
$audioDir = VerificaAudioHDAUX($dados['emp_diretorio_ftp'], $dataDir, $proto, $uid);
if ($audioDir) {
$linkAudio = "https://$url/index.php?idProg=327&audio=$audioDir";
$audioHTML = "<audio controls preload='none' controlsList=\"download\" reconnect src=\"$linkAudio\"></audio>";
}
// } else if ($vpn && VerificaConexaoCentral(base64_decode($vpn))) {
// $linkAudio = "http://$url/index.php?idProg=327&audio=$audioUnique&srv=$vpn";
// $audioHTML = "<audio controls preload='none' controlsList=\"nodownload\" reconnect src=\"$linkAudio\"></audio>";
// }
$downloadAudio = "<a href='$linkAudio&download=dwn'><img src=\"imgSite/cloud-download.png\" width='35px' ></a>";
$linhas .= "<tr>
<td align=\"left\" class=\"headData\">$empresa</td>
<td align=\"left\" class=\"headData\">$fila</td>
<td align=\"left\" class=\"headData\">$apelido</td>
<td align=\"left\" class=\"headData\">$data</td>
<td align=\"center\" class=\"headData\">$duration</td>
<td align=\"center\" class=\"headData\">$orig</td>
<td align=\"center\" class=\"headData\">$dest</td>
<td align=\"center\" class=\"headData\">$proto</td>
<td align=\"center\" class=\"headData\">$clasDesc</td>
<td align=\"center\" class=\"headData\">$ItemDesc</td>";
if (empty($audioHTML)) {
$linhas .= "<td align=\"center\" class=\"headData\" colspan='2'><b><EFBFBD>udio/Servidor inacess<EFBFBD>vel!</b></td>";
} else {
$linhas .= "<td align=\"center\" class=\"headData\">$audioHTML</td>
<td align=\"center\" class=\"headData\">$downloadAudio</td>";
}
$linhas .= "</tr>";
}
$linhas .= "<tr>
<th colspan=\"$colspan\" align=\"center\" class=\"headColun\">Total de Registros</th>
<th align=\"center\" class=\"headColun\">$pagMostra de $contaReg</th>
</tr>";
return $linhas;
}
/*
* FUNCAO QUE UTILIZA API PING PARA VERIFICAR SE O SERVIDOR EST<EFBFBD> ATIVO
*/
function VerificaConexaoCentral($servidor) {
if (!SetServidorOffline($servidor)) {
return false;
}
$url = "http://$servidor/integracao/?method=Ping&login=" . LOGIN_API . "&senha=" . PASSWD_API . "&tipoRetorno=XML";
$ret = file_get_contents($url);
$xml = simplexml_load_string($ret);
if (strval($xml->status) == 'OK' && strval($xml->result) == true) {
return true;
} else {
SetServidorOffline($servidor, 1);
return false;
}
}
/*
* ARMAZENA AS VPN's COM O STATUS OFFLINE
*/
function SetServidorOffline($servidor, $add = null) {
if ($servidor == 'RemoveAll') {
unset($_SESSION['SSServerPingFail']);
}
if (!isset($_SESSION['SSServerPingFail'])) {
$_SESSION['SSServerPingFail'] = array();
return true;
}
if ($add) {
$_SESSION['SSServerPingFail'][] = $servidor;
return null;
}
foreach ($_SESSION['SSServerPingFail'] as $server) {
if ($servidor == $server) {
return false;
}
}
return true;
}
/*
* VERIFICA SE O ARQUIVO EST<EFBFBD> NO SERVIDOR
*/
function VerificaAudioHDAUX($dir, $dataDir, $proto, $uid) {
if ($dir && $proto != ' - ') {
$filename = '/hdaux/ftp/algar/audios/' . $dir . '/' . $dataDir . '/' . $proto . '.WAV';
if (CnvrtFileExists($filename)) {
return base64_encode($filename);
}
$filename = sprintf('/hdaux/ftp/algar/audios/%s/%s/%s_%s.WAV', $dir, $dataDir, $proto, $uid);
if (CnvrtFileExists($filename)) {
return base64_encode($filename);
}
return null;
}
}
?>