|
|
#!/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'); |
|
|
} |