repositório com os arquivos utilizados para integração entre o sistema SimplesIP e diversos sistemas.
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.

518 lines
20 KiB

3 years ago
#!/usr/bin/php -q
<?php
include_once 'conf.php';
include_once 'config.php';
require_once 'IntegracaoDataBase.php';
include_once("util/util.php");
include_once '/var/www/html/aplicativo/admin/funcoes.php';
include_once 'util/funcoesAmi.php';
error_reporting(E_ALL);
ini_set('display_errors', 1);
/**
* CONEXAO COM BANCO DE DADOS
*/
$db = new IntegracaoDataBase();
/**
* APRESENTA OS PROVEDORES DISPONIVEIS
*/
apresentaProvedoresDisponiveis($provedores);
/**
* AGUARDA O COLABORADOR INFORMAR O SISTEMA A SER USADO!
*/
$provedor = informaSistemaProvedor($provedores);
/**
* INFORMA A EMPRESA CASO FOR CLOUD
*/
$empresa = informaEmpresa();
/**
* INFORMA A FILA A SER INSTALADA
*/
$queue = informaFilas();
$filasInput = explode(",", $queue);
$filas = validaFilas($filasInput);
$horarios = $filas;
/**
* COLETA A VERSAO DO BANCO DE DADOS
*/
$version = installIntegracaoAtiva($provedor, $empresa);
$db->beginTransaction();
if ($version) {
#############CADASTRO################
echo "Integracao install init...\n";
//ANUNCIOS
if(installAnuncio($empresa, $version)){
echo "Anuncio install [ OK ]\n";
} else {
echo "Anuncio install [ FAIL ]\n";
$db->rollbackTransaction();
}
//URAS
if(installURA($empresa, $version)){
echo "URA install [ OK ]\n";
}else{
echo "URA install [ FAIL ]\n";
$db->rollbackTransaction();
}
//HORARIOS
if(installHorario($empresa, $version)){
echo "Horario install [ OK ]\n";
}else{
echo "Horario install [ FAIL ]\n";
$db->rollbackTransaction();
}
//URA REDIR
if(installURARedir($provedor, $empresa, $version)){
echo "URA Redir install [ OK ]\n";
}else{
echo "URA Redir install [ FAIL ]\n";
$db->rollbackTransaction();
}
#########CONFIGURA FLUXO################
echo "Integracao config init...\n";
//ANUNCIO
if(configuraFluxoAnuncio($provedor, $empresa, $version)){
echo "Anuncio fluxo config [ OK ]\n";
}else{
echo "Anuncio fluxo config [ FAIL ]\n";
$db->rollbackTransaction();
}
//URA
if(configuraFluxoUra($provedor, $empresa, $version)){
echo "Ura fluxo config [ OK ]\n";
}else{
echo "Ura fluxo config [ FAIL ]\n";
$db->rollbackTransaction();
}
//HORARIO
if(configuraFluxoHorario($provedor, $empresa, $version)){
echo "Horario fluxo config [ OK ]\n";
}else{
echo "Horario fluxo config [ FAIL ]\n";
$db->rollbackTransaction();
}
//URA REDIR
if(configuraFluxoUraRedir($provedor, $empresa, $version)){
echo "Ura Redir fluxo config [ OK ]\n";
}else{
echo "Ura Redir fluxo config [ FAIL ]\n";
$db->rollbackTransaction();
}
atualizaAsterisk();
$db->commitTransaction();
} else {
$db->rollbackTransaction();
}
############################################################################
#### FUNCOES INSTALACAO ####
############################################################################
function installIntegracaoAtiva($provedor, $empresa) {
global $provedores, $configs, $db;
try {
$db->findIntegracaoCustom();
$versao = $db->findVersion($empresa)['versao'] + 1;
$version = $versao ? $versao : 1;
$metodos = $provedores[$provedor]['METODOS'];
foreach ($metodos as $metodo) {
$nome = $metodo . "_" . $configs['CONF']['NOMENCLATURA'] . "_" . ($empresa ? $empresa . '_' : '') . 'V' . $version;
$comando = ($empresa ? $empresa . '/' : '') . $provedor . '/' . lcfirst(str_replace(' ', '', ucwords(strtolower(str_replace('_', ' ', $metodo))))) . '.php';
$db->createIntegracaoAtiva($nome, $version, $comando);
}
return $version;
} catch (Exception $ex) {
echo $ex->getMessage();
}
return false;
}
function installAnuncio($empresa, $version) {
global $anuncios, $configs, $db;
try {
foreach ($anuncios as $key => $val) {
$nome = $key . "_" . $configs['CONF']['NOMENCLATURA'] . "_" . ($empresa ? $empresa . '_' : '') . 'V' . $version;
$musica = strtolower($key . "_" . $configs['CONF']['NOMENCLATURA']) . ".ulaw";
$db->addAnuncio($nome, $musica, null, null);
}
return true;
} catch (Exception $ex) {
echo $ex->getMessage();
}
return false;
}
function installURA($empresa, $version) {
global $ura, $configs, $db;
try {
foreach ($ura as $key => $val) {
$nome = $key . "_" . $configs['CONF']['NOMENCLATURA'] . "_" . ($empresa ? $empresa . '_' : '') . 'V' . $version;
$musica = strtolower($key . "_" . $configs['CONF']['NOMENCLATURA']) . ".ulaw";
$db->addUra($nome, $musica);
}
return true;
} catch (Exception $ex) {
echo $ex->getMessage();
}
return false;
}
function installHorario($empresa, $version) {
global $horarios, $db, $configs;
try {
foreach ($horarios as $val) {
$nome = $val . "_" . $configs['CONF']['NOMENCLATURA'] . "_" . ($empresa ? $empresa . '_' : '') . 'V' . $version;
$db->addHorario($nome);
}
return true;
} catch (Exception $ex) {
echo $ex->getMessage();
}
return false;
}
function installURARedir($provedor, $empresa, $version) {
global $provedores, $ura_redir, $configs, $db;
$metodos = $provedores[$provedor]['METODOS'];
try {
foreach ($ura_redir as $key => $val) {
if(in_array(str_replace("REDIR_", "", $key), $metodos)){
$nome = $key . "_" . $configs['CONF']['NOMENCLATURA'] . "_" . ($empresa ? $empresa . '_' : '') . 'V' . $version;
$musica = "silencio_int.ulaw";
$db->addUra($nome, $musica);
}
}
return true;
} catch (Exception $ex) {
echo $ex->getMessage();
}
return false;
}
############################################################################
#### FUNCOES CONFIGURA FLUXO ####
############################################################################
/*
* Configura<EFBFBD><EFBFBD>o de Anuncios
*/
function configuraFluxoAnuncio($provedor, $empresa, $version) {
global $provedores, $anuncios, $configs, $db, $horarios;
$metodos = $provedores[$provedor]['METODOS'];
try {
foreach ($anuncios as $key => $val) {
$direcaoTipo = null;
$direcaoNome = null;
foreach($val as $tipo => $nome){
if(in_array($nome, $metodos)){//PRIORIZAR INTEGRACAO CASO O PROVEDOR TIVER
$direcaoTipo = $tipo;
$direcaoNome = $nome;
break;
}else if($tipo != CONF_INTEGRACAO){//CASO NAO EXISTIR INTEGRACAO DO PROVEDOR, NAO PODE PEGAR INTEGRACAO, POIS O PROXIMO PODE SER UMA INTEGRACAO NAO EXISTENTE
$direcaoTipo = $tipo;
$direcaoNome = $nome;
if($tipo == CONF_HORARIO){
$direcaoNome = $horarios[0];
}
break;
}
}
$nome = $direcaoNome . "_" . $configs['CONF']['NOMENCLATURA'] . "_" . ($empresa ? $empresa . '_' : '') . 'V' . $version;
$key .= "_" . $configs['CONF']['NOMENCLATURA'] . "_" . ($empresa ? $empresa . '_' : '') . 'V' . $version;
$idAnuncio = $db->getAnuncioIdByName($key);
$idAcao = $db->getIdDirecionamento($direcaoTipo, $nome);
$db->updateAnuncio($direcaoTipo, $idAcao, $idAnuncio);
}
return true;
} catch (Exception $ex) {
echo $ex->getMessage();
}
return false;
}
/*
* Configura<EFBFBD><EFBFBD>o de Horarios
*/
function configuraFluxoHorario($provedor, $empresa, $version) {
global $filas, $configs, $db, $horarios, $horarioPadrao;
try {
foreach ($horarios as $horarioNome) {
$nome = $horarioNome . "_" . $configs['CONF']['NOMENCLATURA'] . "_" . ($empresa ? $empresa . '_' : '') . 'V' . $version;
$horarioId = $db->getHorarioIdByName($nome);
$fila = $filas[0] . ($empresa ? '_'.$empresa: '');
foreach($horarioPadrao as $horarioPadraoItem){
foreach ($horarioPadraoItem as $tipo => $dado){
switch ($tipo) {
case "ITENS":
foreach($dado as $itens){
$horario_ini = $itens['HORARIO_INICIAL'];
$horario_fim = $itens['HORARIO_FINAL'];
$dias_semana = 0;
$semana = $itens['DIA_SEMANA_INICIO'];
$semana_fim = $itens['DIA_SEMANA_FIM'];
$opcao = CONF_FILAS;
$acao = $fila;
$idAcao = $db->getIdDirecionamento($opcao, $acao);
$db->addHorarioItens($horarioId, $horario_ini, $horario_fim, $dias_semana, $semana, $semana_fim, $opcao, $idAcao);
}
break;
case "FORA_HORARIO":
foreach($dado as $tipo => $nome){
$nome = $nome . "_" . $configs['CONF']['NOMENCLATURA'] . "_" . ($empresa ? $empresa . '_' : '') . 'V' . $version;
$idAcao = $db->getIdDirecionamento($tipo, $nome);
$db->updateHorario($horarioId, $tipo, $idAcao);
}
break;
default:
break;
}
}
}
}
return true;
} catch (Exception $ex) {
echo $ex->getMessage();
}
return false;
}
/*
* Configura<EFBFBD><EFBFBD>o de Uras
*/
function configuraFluxoUra($provedor, $empresa, $version) {
global $provedores, $ura, $configs, $db, $horarios;
$metodos = $provedores[$provedor]['METODOS'];
try {
foreach ($ura as $key => $val) {
$key .= "_" . $configs['CONF']['NOMENCLATURA'] . "_" . ($empresa ? $empresa . '_' : '') . 'V' . $version;
$uraId = $db->getUraIdByName($key);
foreach($val as $key => $itens){
switch ($key) {
case "ITENS":
foreach ($itens as $item){
$direcaoTipo = null;
$direcaoNome = null;
foreach ($item['acao'] as $tipo => $nome) {
if(in_array($nome, $metodos)){//PRIORIZAR INTEGRACAO CASO O PROVEDOR TIVER
$direcaoTipo = $tipo;
$direcaoNome = $nome;
break;
}else if($tipo != CONF_INTEGRACAO){//CASO NAO EXISTIR INTEGRACAO DO PROVEDOR, NAO PODE PEGAR INTEGRACAO, POIS O PROXIMO PODE SER UMA INTEGRACAO NAO EXISTENTE
$direcaoTipo = $tipo;
$direcaoNome = $nome;
if($tipo == CONF_HORARIO){
$direcaoNome = $horarios[0];
}
break;
}
}
$nome = $direcaoNome . "_" . $configs['CONF']['NOMENCLATURA'] . "_" . ($empresa ? $empresa . '_' : '') . 'V' . $version;
$idAcao = $db->getIdDirecionamento($direcaoTipo, $nome);
$db->addUraDestino($uraId, $item['numero'], $tipo, $idAcao, $item['sequencia'], $nome) ;
}
break;
case "TIMEOUT":
$direcaoTipo = null;
$direcaoNome = null;
foreach ($itens as $tipo => $nome){//PRIORIZAR INTEGRACAO CASO O PROVEDOR TIVER
if(in_array($nome, $metodos)){
$direcaoTipo = $tipo;
$direcaoNome = $nome;
break;
}else if($tipo != CONF_INTEGRACAO){//CASO NAO EXISTIR INTEGRACAO DO PROVEDOR, NAO PODE PEGAR INTEGRACAO, POIS O PROXIMO PODE SER UMA INTEGRACAO NAO EXISTENTE
$direcaoTipo = $tipo;
$direcaoNome = $nome;
if($tipo == CONF_HORARIO){
$direcaoNome = $horarios[0];
}
break;
}
}
$nome = $direcaoNome . "_" . $configs['CONF']['NOMENCLATURA'] . "_" . ($empresa ? $empresa . '_' : '') . 'V' . $version;
$idAcao = $db->getIdDirecionamento($direcaoTipo, $nome);
$db->updateUra($uraId, $direcaoTipo, $idAcao) ;
break;
default:
break;
}
}
}
return true;
} catch (Exception $ex) {
echo $ex->getMessage();
}
return false;
}
/*
* Configura<EFBFBD><EFBFBD>o de Uras Redirecionamento
*/
function configuraFluxoUraRedir($provedor, $empresa, $version) {
global $provedores, $ura_redir, $configs, $db, $horarios;
$metodos = $provedores[$provedor]['METODOS'];
try {
foreach ($ura_redir as $key => $val) {
$key .= "_" . $configs['CONF']['NOMENCLATURA'] . "_" . ($empresa ? $empresa . '_' : '') . 'V' . $version;
$uraId = $db->getUraIdByName($key);
$sequencia=1;
foreach($val as $key => $item){
$sequencia+=1;
if(!empty($item)){
$direcaoTipo = null;
$direcaoNome = null;
foreach ($item as $tipo => $nome){
if($tipo != CONF_INTEGRACAO){//NAO PODE TER REDIRECIONAMENTO PARA INTEGRACAO
$direcaoTipo = $tipo;
$direcaoNome = $nome;
if($tipo == CONF_HORARIO){
$direcaoNome = $horarios[0];
}
break;
}
}
$nome = $direcaoNome . "_" . $configs['CONF']['NOMENCLATURA'] . "_" . ($empresa ? $empresa . '_' : '') . 'V' . $version;
$idAcao = $db->getIdDirecionamento($direcaoTipo, $nome);
$db->addUraDestino($uraId, $key, $tipo, $idAcao, $sequencia, $nome);
}else{
$db->addUraDestino($uraId, $key, '', null, $sequencia, null);
}
}
}
return true;
} catch (Exception $ex) {
echo $ex->getMessage();
}
return false;
}
############################################################################
#### FUNCOES IMPORTANTES ####
############################################################################
function apresentaProvedoresDisponiveis($provedores, $select = null) {
$prov = "Sistemas de provedores disponiveis: \n\n";
foreach ($provedores as $key => $val) {
$prov .= sprintf(" - [ %s ] \n", $key);
if (strtoupper($select) == $key) {
return true;
}
}
if (!$select) {
echo $prov;
} else {
return false;
}
}
function informaSistemaProvedor($provedores) {
do {
echo "\n --------------------------------- \n";
echo "\nSelecione o sistema de provedor: \n";
echo "\n --------------------------------- \n";
$input = strtoupper(trim(fgets(STDIN)));
$resp = apresentaProvedoresDisponiveis($provedores, $input);
} while (!$resp);
return $input;
}
function informaEmpresa() {
echo "\n --------------------------------- \n";
echo "\nInforme a empresa: \n";
echo "\n OBS: APENAS PARA EMPRESAS NO CLOUD \n";
echo "\n --------------------------------- \n";
$empresa = strtoupper(trim(fgets(STDIN)));
return $empresa;
}
function informaFilas() {
echo "\n --------------------------------- \n";
echo "\nInforme as que seram utilizadas na integracao: \n";
echo "\n OBS: FILAS DEVEM SER SEPADADAS POR Virgulas(,) \n";
echo "\n --------------------------------- \n";
$queue = strtoupper(trim(fgets(STDIN)));
return $queue;
}
function validaFilas($filas){
global $db, $empresa;
$filaValidada = [];
foreach ($filas as $value) {
$fila = $value . ($empresa ? '_'.$empresa: '');
$filaId = $db->getFilaNumeroByName($fila);
if(empty($filaId)){
echo "\n --------------------------------- \n";
echo "\n Fila $value nao existe \n";
echo "\n --------------------------------- \n";
exit();
return null;
}
array_push($filaValidada, $value);
}
return $filaValidada;
}
function atualizaAsterisk(){
global $db;
gera_arquivos($db->getConnection(), 'ANUNCIOS');
gera_arquivos($db->getConnection(), 'TESTES');
gera_arquivos($db->getConnection(), 'URA');
gera_arquivos($db->getConnection(), 'TESTES');
gera_arquivos($db->getConnection(), 'HORARIOS');
gera_arquivos($db->getConnection(), 'TESTES');
}