forked from SimplesIP/pabx-app
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
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; |
|
} |
|
?>
|
|
|