#!/usr/bin/php -q 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çã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çã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çã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çã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'); }