forked from Claudio/integracao
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.
463 lines
18 KiB
463 lines
18 KiB
<?php |
|
|
|
require_once 'Logger.php'; |
|
|
|
// ************************************************************************* |
|
// * SISTEMA UNICO DE INTEGRACAO * |
|
// ************************************************************************* |
|
|
|
/** |
|
* Classe para utilizar os registros do Banco de Dados; |
|
* |
|
* OBS: Deixar como usuario de execucao e acesso pbx:pbx |
|
* |
|
* @author Lucas Awade |
|
* @function developer |
|
* @company SimplesIP |
|
* @version 1.0.1 |
|
*/ |
|
class IntegracaoDataBase { |
|
|
|
private $query; |
|
private $connection; |
|
private $registros; |
|
private $log; |
|
private $credentials = array(); |
|
private $debug; |
|
private $idAudioError; |
|
|
|
/** |
|
* @file |
|
* Arquivo de configuracoes do banco e manager |
|
*/ |
|
const FILE_DB = "/var/www/html/include/bd"; |
|
|
|
public function __construct() { |
|
$this->log = new Logger(CONF_LOGGER_PATH, CONF_LOGGER_DB_ATIVO); |
|
} |
|
|
|
/** |
|
* Retorna os registros armazenados na variavel registros pra ser disponibilizado |
|
* no decorrer de uma integracao; |
|
* |
|
* @return array |
|
*/ |
|
public function getRegistros() { |
|
return $this->registros; |
|
} |
|
|
|
/** |
|
* Informações coletadas do banco de dados para ser escritas no log. |
|
* |
|
* @param array $array |
|
*/ |
|
private function logResult($array) { |
|
if ($array) { |
|
$this->log->success(print_r($array, true), $this->debug); |
|
} else { |
|
$this->log->warning('Nenhum resultado encontrado!', $this->debug); |
|
} |
|
} |
|
|
|
/** |
|
* Audio de erro padrao |
|
* |
|
* @param string $idAudioError |
|
*/ |
|
public function setIdAudioError($idAudioError) { |
|
$this->idAudioError = $idAudioError; |
|
} |
|
|
|
######################################################################## |
|
## BANCO DE DADOS ## |
|
######################################################################## |
|
|
|
/** |
|
* Pega as informacoes das credenciais no arquivos padrao "bd"; |
|
*/ |
|
private function filedb() { |
|
if (file_exists(self::FILE_DB)) { |
|
$contents = fopen(self::FILE_DB, 'r'); |
|
while (!feof($contents) && $contents) { |
|
$str = fgets($contents); |
|
$dados = explode('=', $str); |
|
$this->credentials[strtolower($dados[0])] = str_replace('"', '', $dados[1]); |
|
} |
|
fclose($contents); |
|
$this->credentials = array_filter($this->credentials); |
|
$this->log->debug("Credenciais banco de dados: " . print_r($this->credentials, true), debug_backtrace()); |
|
} else { |
|
$this->log->error("Nao foi possivel encontrar o arquivo 'bd' em " . self::FILE_DB); |
|
} |
|
} |
|
|
|
/** |
|
* Executa as querys da consulta a serem feitas, além de gravar logs de registros de dados, |
|
* e qualquer erro é repassado a classe que está executando para tratar o erro; |
|
* |
|
* @param string $type |
|
* @return boolean|array |
|
*/ |
|
private function execute($type = '') { |
|
try { |
|
if (!$this->connection) { |
|
$this->connection = $this->getConnection(); |
|
} |
|
|
|
$result = pg_query($this->connection, $this->query); |
|
switch (strtolower($type)) { |
|
case 'assoc': |
|
$data = pg_fetch_assoc($result); |
|
break; |
|
case 'row': |
|
$data = pg_fetch_row($result); |
|
break; |
|
case 'array': |
|
$data = pg_fetch_array($result); |
|
break; |
|
case 'all': |
|
$data = pg_fetch_all($result); |
|
break; |
|
} |
|
$this->logResult($data); |
|
return $data; |
|
} catch (Exception $ex) { |
|
$this->log->error("Exception: {$ex->getMessage()} | Postgres : " . pg_last_error(), $this->debug); |
|
} |
|
} |
|
|
|
public function getConnection(){ |
|
$this->filedb(); |
|
$this->connection = pg_connect(sprintf('host=%s port=%s dbname=%s user=%s password=%s', $this->credentials['host_db'], $this->credentials['porta_db'], $this->credentials['base_db'], $this->credentials['usuario'], $this->credentials['senha'])); |
|
if (pg_connection_status($this->connection) === 0) { |
|
$this->log->success("Conectado na base {$this->credentials['base_db']}.", debug_backtrace()); |
|
return $this->connection; |
|
|
|
} else { |
|
throw new Exception('Nao foi possivel conectar na base de dados'); |
|
return null; |
|
} |
|
} |
|
######################################################################## |
|
## ASTERISK ## |
|
######################################################################## |
|
|
|
/** |
|
* Coleta em qual Asterisk a central está rodadando e retorna o modelo padrao |
|
* de configuracao do exten; |
|
* |
|
* @return string |
|
*/ |
|
private function getVersionAsterisk() { |
|
$result = array(); |
|
exec("asterisk -V", $result); |
|
$this->log->info("Versao Asterisk: " . $result[0], debug_backtrace()); |
|
if (strpos($result[0], '1.4') !== false) { |
|
return "|"; |
|
} else { |
|
return ","; |
|
} |
|
} |
|
|
|
/** |
|
* Transforma uma string exten com "," para "|" de acordo com a versao do Asterisk |
|
* |
|
* @param string $string |
|
* @return string |
|
*/ |
|
private function string_exten($string) { |
|
return str_replace(",", $this->getVersionAsterisk(), $string); |
|
} |
|
|
|
/** |
|
* Coleta os dados de autenticacao do manager. |
|
* |
|
* @return array |
|
*/ |
|
public function getAuthAgi() { |
|
$data = array(); |
|
foreach ($this->credentials as $key => $value) { |
|
if (strpos($key, '_sck') !== false) { |
|
$data[$key] = $value; |
|
} |
|
} |
|
return $data; |
|
} |
|
|
|
######################################################################## |
|
## QUERYS ## |
|
######################################################################## |
|
|
|
/** |
|
* Inicia um Transacao; |
|
*/ |
|
private function beginTransaction() { |
|
$this->debug = debug_backtrace(); |
|
$this->query = "BEGIN;"; |
|
$this->execute(); |
|
} |
|
|
|
/** |
|
* Registra uma Transacao. |
|
*/ |
|
private function commitTransaction() { |
|
$this->debug = debug_backtrace(); |
|
$this->query = "COMMIT;"; |
|
$this->execute(); |
|
} |
|
|
|
/** |
|
* Retorna as informacoes antes da Transacao. |
|
*/ |
|
private function rollbackTransaction() { |
|
$this->debug = debug_backtrace(); |
|
$this->query = "ROLLBACK;"; |
|
$this->execute(); |
|
} |
|
|
|
/** |
|
* Busca o DDD padrao cadastrado na central. |
|
* |
|
* @param string $name |
|
* @return string |
|
*/ |
|
public function getDDD() { |
|
$this->debug = debug_backtrace(); |
|
$this->query = "SELECT prm_ddd_padrao FROM pbx_parametros"; |
|
return $this->execute('assoc') ? $this->execute('assoc')['prm_ddd_padrao'] : ''; |
|
} |
|
|
|
/** |
|
* Consulta no banco o nome do Anuncio e retorna o ID para ser escrito no exten; |
|
* |
|
* @param string $name |
|
* @return string |
|
*/ |
|
public function getAnuncio($name = null) { |
|
$this->debug = debug_backtrace(); |
|
$this->query = "SELECT id FROM pbx_anuncios WHERE nome = '$name'"; |
|
$result = $this->execute('row')[0] ? $this->execute('row')[0] : $this->idAudioError; |
|
return sprintf($this->string_exten('ext-anuncios,a%s,1'), $result); |
|
} |
|
|
|
/** |
|
* Consulta no banco o nome do Ura e retorna o ID para ser escrito no exten; |
|
* |
|
* @param string $name |
|
* @return string |
|
*/ |
|
public function getUra($name = null) { |
|
$this->debug = debug_backtrace(); |
|
$this->query = "SELECT id FROM pbx_ura WHERE nome = '$name'"; |
|
$result = $this->execute('row')[0] ? $this->execute('row')[0] : $this->idAudioError; |
|
return sprintf($this->string_exten('ura-%s,s,1'), $result); |
|
} |
|
|
|
/** |
|
* Consulta no banco a Ura por ID e retorna suas informacoes; |
|
* |
|
* @param string|int $id |
|
* @return string |
|
*/ |
|
public function getURAById($id) { |
|
$this->debug = debug_backtrace(); |
|
$this->query = "SELECT * FROM pbx_ura WHERE id = '{$id}'"; |
|
$result = $this->execute('assoc') ? $this->execute('assoc') : $this->idAudioError; |
|
return $result; |
|
} |
|
|
|
/** |
|
* Consulta no banco o nome do Fila e retorna o ID para ser escrito no exten; |
|
* |
|
* @param string $name |
|
* @return string |
|
*/ |
|
public function getFila($name = null) { |
|
$this->debug = debug_backtrace(); |
|
$this->query = "SELECT numero FROM pbx_dacs WHERE nome = '$name'"; |
|
$result = $this->execute('row')[0] ? $this->execute('row')[0] : $this->idAudioError; |
|
return sprintf($this->string_exten('ext-fila,%s,1'), $result); |
|
} |
|
|
|
/** |
|
* Consulta no banco o nome do Ramal e retorna o ID para ser escrito no exten; |
|
* |
|
* @param string $name |
|
* @return string |
|
*/ |
|
public function getRamal($name = null) { |
|
$this->debug = debug_backtrace(); |
|
$this->query = "SELECT nome FROM pbx_ramais WHERE nome = '$name'"; |
|
$result = $this->execute('row')[0] ? $this->execute('row')[0] : $this->idAudioError; |
|
return sprintf($this->string_exten('ext-ramais,%s,1'), $result); |
|
} |
|
|
|
/** |
|
* Coleta as opcoes que o usuario passou nas uras da sua chamada. |
|
* |
|
* @param string $uniqueid |
|
* @param int $ura_id |
|
* @return boolean|array |
|
*/ |
|
public function getOptionsURA($uniqueid, $ura_id) { |
|
$this->debug = debug_backtrace(); |
|
$this->query = "SELECT umv_ura_id,umv_ura_nome,uniqueid,umv_ura_opcao " |
|
. "FROM pbx_ura_movimento WHERE uniqueid = '$uniqueid' " |
|
. "AND umv_ura_opcao IS NOT NULL AND umv_opcao = 'ura' " |
|
. "AND umv_ura_id = $ura_id " |
|
. "ORDER BY umv_id"; |
|
return $this->execute('all'); |
|
} |
|
|
|
/** |
|
* Retorna o ID e Data Hora da primeira entrada da ligacao em um URA de |
|
* acordo com o uniqueid; |
|
* @param string $uniqueid |
|
* @return array |
|
*/ |
|
public function getFristURA($uniqueid) { |
|
$this->debug = debug_backtrace(); |
|
$this->query = "SELECT destino, min(data_registro) " |
|
. "FROM ast_bilhetes_complemento " |
|
. "WHERE direcao = 'ura' " |
|
. "AND uniqueid2 = '{$uniqueid}' GROUP BY destino LIMIT 1"; |
|
$result = $this->execute('assoc'); |
|
return $result; |
|
} |
|
|
|
public function registraIntegracao() { |
|
$this->debug = debug_backtrace(); |
|
/** |
|
* Parametros REGISTROS |
|
* |
|
* id -> Id do qual gerou a integracao para o retorno_cliente |
|
* |
|
* Todos os parametros devem ser igual a da tabela pbx_integracao_reg |
|
*/ |
|
$ura = trim($this->registros['reg_ura']) ? trim($this->registros['reg_ura']) : 'null'; |
|
$tronco = trim($this->registros['reg_tronco']) ? trim($this->registros['reg_tronco']) : 'null'; |
|
|
|
$this->query = "INSERT INTO pbx_integracao_reg (reg_id_metodo,reg_uniqueid,reg_uniqueid_old,reg_fone,reg_inicio, reg_tronco, reg_ura) |
|
VALUES('{$this->registros['reg_id_metodo']}','{$this->registros['reg_uniqueid']}','{$this->registros['reg_uniqueid_old']}','{$this->registros['reg_fone']}', now(), '$tronco', '$ura')"; |
|
$this->log->debug("Query: {$this->query}", $this->debug); |
|
return $this->execute(); |
|
} |
|
|
|
public function atualizaIntegracao() { |
|
$this->debug = debug_backtrace(); |
|
$tronco = trim($this->registros['reg_tronco']) ? sprintf(",\nreg_tronco='%s'", trim($this->registros['reg_tronco'])) : ''; |
|
$ura = trim($this->registros['reg_ura']) ? sprintf(",\nreg_ura='%s'", trim($this->registros['reg_ura'])) : ''; |
|
$reg_msg = QuotedStr($this->registros['reg_msg']); |
|
$reg_retorno = QuotedStr($this->registros['reg_fone']); |
|
$retorno_cliente = substr($this->registros['retorno_cliente'], 0, 255); |
|
$this->query = "UPDATE pbx_integracao_reg |
|
SET reg_fim = NOW(), |
|
reg_retorno = $reg_retorno, |
|
reg_msg = $reg_msg, |
|
reg_status_exec = '{$this->registros['reg_status_exec']}', |
|
retorno_cliente = '{$retorno_cliente}'{$tronco}{$ura} |
|
WHERE reg_uniqueid = '{$this->registros['reg_uniqueid']}'"; |
|
$this->log->debug("Query: {$this->query}", $this->debug); |
|
return $this->execute(); |
|
} |
|
|
|
/** |
|
* Informa os dados para ser inseridos na tabela de integracao_reg; |
|
* |
|
* @param array $registros |
|
*/ |
|
public function setRegistros($registros) { |
|
if (is_array($registros) && !$this->registros) { |
|
$this->registros = $registros; |
|
$this->registraIntegracao(); |
|
} else { |
|
foreach ($registros as $key => $value) { |
|
$this->registros[$key] = $value; |
|
} |
|
} |
|
} |
|
|
|
/** |
|
* Retorna todas as informacoes da tabela Supervisor_Dacs |
|
* @param array $dacs |
|
* @return array |
|
*/ |
|
public function getSupervisorDAC($dacs = array()) { |
|
$this->query = "SELECT * FROM pbx_supervisor_dacs "; |
|
if ($dacs) { |
|
$this->query .= sprintf("WHERE id IN (%s)", implode(",", $dacs)); |
|
} |
|
return $this->execute('all'); |
|
} |
|
|
|
/** |
|
* Retorna credenciais cadastradas nos metodos de integracao |
|
* @param int $id |
|
* @return array |
|
*/ |
|
public function getConexaoAPI($id) { |
|
$this->query = "SELECT itgc_nome AS name, itgc_port AS id_user, itgc_host AS url, |
|
itgc_database AS token, itgc_user AS user, itgc_password AS password, |
|
itgc_timeout AS timeout |
|
FROM pbx_integracao_configuracao |
|
WHERE itgc_id = {$id}"; |
|
return $this->execute('assoc'); |
|
} |
|
|
|
public function getScriptCredenciais($script) { |
|
$this->query = "SELECT itgc_nome AS name, itgc_port AS id_user, itgc_host AS url, |
|
itgc_database AS token, itgc_user AS user, itgc_password AS password, |
|
itgc_timeout AS timeout |
|
FROM pbx_integracao_configuracao a |
|
INNER JOIN pbx_integracao_metodo b ON a.itgc_id = b.itgc_id |
|
WHERE itgm_comando = '{$script}'"; |
|
return $this->execute('assoc'); |
|
} |
|
|
|
public function getFilaPorNome($name) { |
|
$this->debug = debug_backtrace(); |
|
$this->query = "SELECT * FROM pbx_dacs WHERE nome = '$name'"; |
|
return $this->execute('assoc'); |
|
} |
|
|
|
public function getLastUraPorUniqueid($uniqueid) { |
|
$this->query = "SELECT data_reg, umv_ura_id,umv_ura_nome,uniqueid,umv_ura_opcao |
|
FROM pbx_ura_movimento WHERE uniqueid = '{$uniqueid}' |
|
ORDER BY data_reg DESC |
|
LIMIT 1"; |
|
return $this->execute('assoc'); |
|
} |
|
|
|
public function insertXvision($idchamada, $uniqueid,$token) { |
|
$this->debug = debug_backtrace(); |
|
$this->query = "INSERT INTO pbx_xvision (id_chamada,audio_enviado,uniqueid,token) |
|
VALUES('{$idchamada}','N','{$uniqueid}','{$token}')"; |
|
$this->log->debug("Query: {$this->query}", $this->debug); |
|
return $this->execute(); |
|
} |
|
|
|
public function getDadosXvision() { |
|
$this->query = "SELECT * FROM pbx_xvision WHERE audio_enviado = 'N' "; |
|
return $this->execute('all'); |
|
} |
|
|
|
public function atualizaXvision($id_chamada) { |
|
$this->debug = debug_backtrace(); |
|
$this->query = "UPDATE pbx_xvision |
|
SET audio_enviado = 'S' |
|
WHERE id_chamada = '$id_chamada'"; |
|
$this->log->debug("Query: {$this->query}", $this->debug); |
|
return $this->execute(); |
|
} |
|
|
|
public function atualizaProtocoloParceiro($uid, $protocoloParceiro) { |
|
$this->debug = debug_backtrace(); |
|
$this->query = "UPDATE pbx_protocolo_reg |
|
SET protoparceiro='$protocoloParceiro' |
|
WHERE uniqueid='$uid'"; |
|
$this->log->debug("Query: {$this->query}", $this->debug); |
|
return $this->execute(); |
|
} |
|
} |
|
|
|
|