|
|
|
|
#!/usr/bin/php -Cq
|
|
|
|
|
<?php
|
|
|
|
|
error_reporting(E_ERROR);
|
|
|
|
|
ini_set('display_errors', 0);
|
|
|
|
|
include('util/util.php');
|
|
|
|
|
include '/var/lib/asterisk/scripts/integracao/constServerIntegra.php';
|
|
|
|
|
require '/var/lib/asterisk/scripts/integracao/shm.php';
|
|
|
|
|
require '/var/lib/asterisk/scripts/integracao/localDataBase.php';
|
|
|
|
|
require '/var/lib/asterisk/scripts/integracao/serverFunctions.php';
|
|
|
|
|
require '/var/lib/asterisk/scripts/integracao/dbAbstract.php';
|
|
|
|
|
|
|
|
|
|
$nivelLog = LOG_MSG_DISPLAY;
|
|
|
|
|
$scrpt = $argv[0];
|
|
|
|
|
$idMetodo = $argv[1]; //C<EFBFBD>digo do metodo passado no opcao/acao
|
|
|
|
|
$numero = $argv[2]; //Bina
|
|
|
|
|
$uid = $argv[3]; //Uniqueid corrente.
|
|
|
|
|
$uidOld = $argv[4]; //Uniqueid transbordado
|
|
|
|
|
$ura = $argv[5]; //Variavel capturada na ura
|
|
|
|
|
$idProc = $argv[6]; //Id do processo aberto em serverAgi.
|
|
|
|
|
$tronco = $argv[8];
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Mapeamento entre os parametros da integracao e $arqv baseado no array $pI declarado ConstServerIntegra.
|
|
|
|
|
*/
|
|
|
|
|
$paramMapa = array($pI['uniqueid'] => 3, $pI['telefone'] => 2, $pI['transbordo'] => 4, $pI['ura'] => 5, $pI['data'] => 7, $pI['tronco'] => 8);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Associa os valores
|
|
|
|
|
*/
|
|
|
|
|
$paramValue = GetValuesIntegracaoAtv($paramMapa, $argv);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$msg = sprintf('$idMetodo=%s $numero=%s $uid=%s $uidOld=%s $ura=%s $idProc=%s', $idMetodo, $numero, $uid, $uidOld, $ura, $idProc);
|
|
|
|
|
__logStr("InicioAgiIntegra", $msg, $scrpt, true);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Acessa memoria compartilhada
|
|
|
|
|
*/
|
|
|
|
|
$memoryAllocated = Malloc();
|
|
|
|
|
|
|
|
|
|
$shmSystemKey = ShmGetId(SHM_IPC_FILE);
|
|
|
|
|
$shmKey = ShmOpen($shmSystemKey, SHM_ACESS_MODE, SHM_ACESS_PERMISSION, $memoryAllocated);
|
|
|
|
|
|
|
|
|
|
if (!$shmKey) {
|
|
|
|
|
$msg = "N<EFBFBD>o foi poss<EFBFBD>vel acessar a memoria do compartilhada.";
|
|
|
|
|
__logStr("ShmOpen", $msg, $scrpt, true);
|
|
|
|
|
exit;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Tras informa<EFBFBD><EFBFBD>es sobre o m<EFBFBD>todo
|
|
|
|
|
*/
|
|
|
|
|
$infoMetodo = GetInfoMetodo($idMetodo);
|
|
|
|
|
|
|
|
|
|
if ($infoMetodo === false) {
|
|
|
|
|
$msg = "Nao foi possivel obter informacoes sobre o metodo!";
|
|
|
|
|
__logStr("GetInfoMetodo", $msg, $scrpt, true);
|
|
|
|
|
} else {
|
|
|
|
|
//select a.itgm_tipo, a.itgm_comando, itgm_retorno, a.opcao as opcao_metodo, a.stored_params,
|
|
|
|
|
//c.itgp_prefix, b.itgc_host, b.itgc_port, b.itgc_database, b.itgc_user, b.itgc_password, b.itgc_timeout, b.opcao, b.acao
|
|
|
|
|
//"1|#|uid@2|#|fone@5|123|tipo"
|
|
|
|
|
$host = $infoMetodo['itgc_host'];
|
|
|
|
|
$port = $infoMetodo['itgc_port'];
|
|
|
|
|
$dataBase = $infoMetodo['itgc_database'];
|
|
|
|
|
$user = $infoMetodo['itgc_user'];
|
|
|
|
|
$passWord = $infoMetodo['itgc_password'];
|
|
|
|
|
$isProcedure = $infoMetodo['itgm_tipo'];
|
|
|
|
|
$opc = $infoMetodo['opcao'];
|
|
|
|
|
$acao = $infoMetodo['acao'];
|
|
|
|
|
$tipoDb = $infoMetodo['itgp_prefix'];
|
|
|
|
|
|
|
|
|
|
$cmd = $infoMetodo['itgm_comando'];
|
|
|
|
|
$params = $infoMetodo['stored_params'];
|
|
|
|
|
$isEvento = $infoMetodo['evento'] != 0;
|
|
|
|
|
|
|
|
|
|
$db = new dbAbstract($tipoDb, $host, $port, $dataBase, $user, $passWord);
|
|
|
|
|
if (!$db->db_connect()) {
|
|
|
|
|
$dados = sprintf("host->%s portt->%s dataBaset->%s usert->%s passWordt->%s", $host, $port, $dataBase, $user, $passWord);
|
|
|
|
|
$msg = sprintf("Nao foi possivel conectar a base de dados!!\nErro:[%s]\nDados:[%s]", $db->db_getmessage(), $dados);
|
|
|
|
|
__logStr("db_connect", $msg, $scrpt, true);
|
|
|
|
|
} else {
|
|
|
|
|
/*
|
|
|
|
|
* Quando a query <EFBFBD> passada pode ser incluido varios comandos sql separados por ";', estes
|
|
|
|
|
* com exce<EFBFBD><EFBFBD>o do primeiro que <EFBFBD> retornado na variavel "$cmd" os demais ser<EFBFBD>o reotnados em array
|
|
|
|
|
* para serem executados ao final da opera<EFBFBD><EFBFBD>o. O primeiro comando retornado <EFBFBD> o un<EFBFBD>co que poder<EFBFBD>
|
|
|
|
|
* retorna um resultset do banco, este retorno podera ser utilizado como parametro dos outros
|
|
|
|
|
* comando.
|
|
|
|
|
*/
|
|
|
|
|
$cmdQuery = array();
|
|
|
|
|
$cmdQuery = GetCommand($cmd, $cmd);
|
|
|
|
|
/*
|
|
|
|
|
* Esta variavel ir<EFBFBD> coletar o resultado do primeiro comandado.
|
|
|
|
|
*/
|
|
|
|
|
$resultQuery = array();
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Executa o primeiro comando.
|
|
|
|
|
*/
|
|
|
|
|
$query = GetQueryIntegracao($cmd, $params);
|
|
|
|
|
__logStr("exec_query_integra", $query, $scrpt);
|
|
|
|
|
$result = $db->db_query($query);
|
|
|
|
|
if (!$result) {
|
|
|
|
|
$msg = sprintf("Erro ao executar comando no banco de dados!\nQuery: %s Erro: %s", $query, $db->db_getmessage());
|
|
|
|
|
__logStr("db_query", $msg, $scrpt, true);
|
|
|
|
|
} else {
|
|
|
|
|
/*
|
|
|
|
|
* Clear and rewrite memory segment with database result.
|
|
|
|
|
*/
|
|
|
|
|
ClearSegment($shmKey, $idProc);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Verifica se a consulta retornou dados
|
|
|
|
|
*/
|
|
|
|
|
if (!$db->db_num_rows($result)) {
|
|
|
|
|
$msg = sprintf("Executou o comando mas nao retornou dados!\nQuery: %s", $query);
|
|
|
|
|
__logStr("db_num_rows", $msg, $scrpt, true);
|
|
|
|
|
|
|
|
|
|
$data = sprintf("%s|%s|%s|%s", $uid, $numero, -1, '');
|
|
|
|
|
ShmWrite($shmKey, $data, GetOffSet($idProc));
|
|
|
|
|
ExecutaComandosAd($db, $cmdQuery, $resultQuery, $params);
|
|
|
|
|
} else {
|
|
|
|
|
$row = $db->db_fetch_array($result);
|
|
|
|
|
/*
|
|
|
|
|
* O valores retornados poder<EFBFBD>o ser usados como parametros para execu<EFBFBD><EFBFBD>o
|
|
|
|
|
* de outros comandos sql.
|
|
|
|
|
*/
|
|
|
|
|
$resultQuery = GetArrayOrd($row);
|
|
|
|
|
$dataClient = '';
|
|
|
|
|
$i = 0;
|
|
|
|
|
foreach ($row as $key => $value) {
|
|
|
|
|
if (!$i++) {
|
|
|
|
|
$queue = trim($value);
|
|
|
|
|
} else {
|
|
|
|
|
$dataClient .= sprintf("|%s:%s", trim($key), trim($value));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (!$queue) {
|
|
|
|
|
$msg = sprintf("Executou o comando mas retornou um valor nulo!\n: Val->\"%s\"", $queue);
|
|
|
|
|
$queue = '-1';
|
|
|
|
|
__logStr("db_num_rows", $msg, $scrpt, true);
|
|
|
|
|
}
|
|
|
|
|
$data = substr(sprintf("%s|%s|%s%s", $uid, $numero, $queue, $dataClient), 0, MEMORY_SEGMENT_WITH);
|
|
|
|
|
/*
|
|
|
|
|
* Rewrite memory segment with new information.
|
|
|
|
|
*/
|
|
|
|
|
ShmWrite($shmKey, $data, GetOffSet($idProc));
|
|
|
|
|
/*
|
|
|
|
|
* Executa comandos adiconais no banco de dados.
|
|
|
|
|
*/
|
|
|
|
|
ExecutaComandosAd($db, $cmdQuery, $resultQuery, $params);
|
|
|
|
|
}
|
|
|
|
|
/*
|
|
|
|
|
* Updates the status of process.
|
|
|
|
|
*/
|
|
|
|
|
ShmWrite($shmKey, PROCESSESS_READ, $idProc);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if ($shmKey)
|
|
|
|
|
ShmClose($shmKey);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function ExecutaComandosAd($db, $cmds, $returns, $params) {
|
|
|
|
|
global $scrpt; // 4|#|ura@2|#|fone@5||uid
|
|
|
|
|
|
|
|
|
|
$listParams = GetParamQuery($params);
|
|
|
|
|
|
|
|
|
|
for ($i = 0; $i < count($cmds); $i++) {
|
|
|
|
|
//CALL InformaPagamento(@id,@nome,'')
|
|
|
|
|
$cmdStr = $cmds[$i] . "\n\n";
|
|
|
|
|
for ($j = 0; $j < count($listParams); $j++) {
|
|
|
|
|
$cmdStr = str_replace('@' . $listParams[$j], QuotedStr($returns[strtolower($listParams[$j])]), $cmdStr);
|
|
|
|
|
}
|
|
|
|
|
$cmds[$i] = $cmdStr;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
foreach ($cmds as $query) {
|
|
|
|
|
if (!$db->db_query($query)) {
|
|
|
|
|
$msg = sprintf("Comando Adicional executado com erro!\n Val->\"%s\"", $query);
|
|
|
|
|
__logStr("ExecutaComandosAd", $msg, $scrpt, true);
|
|
|
|
|
} else {
|
|
|
|
|
__logStr("ExecutaComandosAd", $query, $scrpt, true);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function GetArrayOrd($arAssoc) {
|
|
|
|
|
$arOrd = array();
|
|
|
|
|
foreach ($row as $value) {
|
|
|
|
|
$arOrd[] = $value;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $arOrd;
|
|
|
|
|
}
|
|
|
|
|
?>
|