<?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;
}
}
?>