PABX criado para pesquisas
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.
 
 
 
 
 
 

194 lines
7.1 KiB

#!/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ó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ão foi possível acessar a memoria do compartilhada.";
__logStr("ShmOpen", $msg, $scrpt, true);
exit;
}
/*
* Tras informações sobre o mé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 é passada pode ser incluido varios comandos sql separados por ";', estes
* com exceção do primeiro que é retornado na variavel "$cmd" os demais serão reotnados em array
* para serem executados ao final da operação. O primeiro comando retornado é o uníco que poderá
* retorna um resultset do banco, este retorno podera ser utilizado como parametro dos outros
* comando.
*/
$cmdQuery = array();
$cmdQuery = GetCommand($cmd, $cmd);
/*
* Esta variavel irá 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ão ser usados como parametros para execuçã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;
}
?>