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.

127 lines
5.9 KiB

<?php
if ($tipo == 'URA') {
$arq = $caminho_producao . "extensions_ura.conf";
$escreve = fopen($arq, 'w+');
/*
* Inicia a URA buscanco as configuracoes no banco de dados.
*/
$query = "SELECT id, permite_ligacao, tempo_espera, som_ura, opcao,acao, timeout_digito, nome FROM pbx_ura order by id asc";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
$x++;
$id_da_ura = $dados['id'];
$uraAtiva = $dados['opcao'] == "uraativa";
/*
* Esta opcao desvia a chamada para uma ura interativa personalizada.
*/
if ($uraAtiva) {
fwrite($escreve, sprintf("[ura-%s]\n", trim($dados['id'])));
fwrite($escreve, "include => padrao\n");
fwrite($escreve, "exten => s,1,Answer()\n");
$agiUra = sprintf("exten => s,2,AGI(/var/lib/asterisk/scripts/uraativa/%s.php)\n", $dados['nome']);
fwrite($escreve, $agiUra);
continue;
}
$numFields = pg_num_fields($result) - 1;
for ($i = 0; $numFields > $i; $i++) {
/*
* Identificador da URA no extensions.
*/
if (pg_field_name($result, $i) == 'id') {
fwrite($escreve, '[ura-' . trim($dados[pg_field_name($result, $i)]) . ']' . "\n");
}
if (pg_field_name($result, $i) == 'permite_ligacao') {
if (trim($dados[pg_field_name($result, $i)]) == 'S') {
fwrite($escreve, 'include => padrao' . "\n");
}
}
if ($i == 1) {
fwrite($escreve, 'exten => s,1,Set(LOOPCOUNT=0)' . "\n");
fwrite($escreve, sprintf("exten => s,n,AGI(pbx_complemento.php,ura,ini,%s\n)", $id_da_ura));
fwrite($escreve, 'exten => s,n,GotoIf($["${CDR(disposition)}" = "ANSWERED"]?inicio)' . "\n");
fwrite($escreve, 'exten => s,n,Answer()' . "\n");
fwrite($escreve, 'exten => s,n,Wait(1)' . "\n");
fwrite($escreve, 'exten => s,n(inicio),Set(TIMEOUT(digit)=' . $dados['timeout_digito'] . ')' . "\n");
}
if (pg_field_name($result, $i) == 'tempo_espera') {
fwrite($escreve, 'exten => s,n,Set(TIMEOUT(response)=' . $dados[pg_field_name($result, $i)] . ')' . "\n");
}
if (pg_field_name($result, $i) == 'som_ura') {
if (trim($dados[pg_field_name($result, $i)]) != '') {
$som = explode('.', $dados['som_ura']);
fwrite($escreve, 'exten => s,n,Background(customizados/' . $som[0] . ')' . "\n");
}
}
} //fecha for
fwrite($escreve, 'exten => s,n,WaitExten()' . "\n");
/*
* Monta as opcoes da URA.
* A funcao GetSetUra verifica se a opcao chamara uma integracao ativa,
* em caso verdadeiro seta a variavel URA com o valor do exten.
*/
$setUra = GetSetUra($dbcon, $id_da_ura);
$query2 = "SELECT * FROM pbx_ura_destino where id_ura = $id_da_ura";
$result2 = pg_query($dbcon, $query2);
while ($dados2 = pg_fetch_array($result2)) {
$opcUra = $dados2['numero'];
fwrite($escreve, sprintf(" exten => %s,1,AGI(pbx_complemento.php,ura,opc,%s,%s,%s,%s)\n", $opcUra, $id_da_ura, $opcUra, trim($dados2['tipo']), trim($dados2['comando'])));
if (!empty($dados2['tipo'])) {
if (trim($dados2['tipo']) == 'repetir') {
//repetir
$dispAcao = sprintf('exten => %s,n,Goto(${CONTEXT},s,inicio)%s', $dados2['numero'], "\n");
fwrite($escreve, $dispAcao);
fwrite($escreve, 'exten => ' . $dados2['numero'] . ',n,Hangup()' . "\n");
} else if (trim($dados2['tipo']) == 'desligar') {
$dispAcao = sprintf('exten => %s,n,Goto(${CONTEXT},desliga,1)%s', $dados2['numero'], "\n");
fwrite($escreve, $dispAcao);
fwrite($escreve, 'exten => ' . $dados2['numero'] . ',n,Hangup()' . "\n");
} else {
/*
* Para evitar sobrescrita das variaveis digitas na ura com integra<EFBFBD><EFBFBD>o ativa
* n<EFBFBD>o insere set ura para os outros casos.
*/
if ($setUra) {
fwrite($escreve, sprintf("exten => %s,n,set(URA=\${EXTEN})\n", $dados2['numero']));
}
$dispAcao = GetOpcaoAcao(trim($dados2['tipo']), trim($dados2['comando']), '', '');
$dispAcao = sprintf('exten => %s,n,%s%s', $dados2['numero'], $dispAcao, "\n");
fwrite($escreve, $dispAcao);
fwrite($escreve, 'exten => ' . $dados2['numero'] . ',n,Hangup()' . "\n");
}
}
}
if (trim($dados['opcao']) != '') {
fwrite($escreve, sprintf("exten => t,1,AGI(pbx_complemento.php,ura,def,%s,%s,%s)", $id_da_ura, $dados['opcao'], $dados['acao']));
$dispAcao = GetOpcaoAcao($dados['opcao'], $dados['acao'], '', '');
$dispAcao = sprintf('exten => t,n,%s%s', $dispAcao, "\n");
fwrite($escreve, $dispAcao);
} else {
fwrite($escreve, 'exten => t,1,Goto(loop,1)' . "\n");
}
fwrite($escreve, 'exten => loop,1,Set(LOOPCOUNT=$[${LOOPCOUNT} + 1])' . "\n");
fwrite($escreve, 'exten => loop,n,GotoIf($[${LOOPCOUNT} > 2]?desliga,1)' . "\n");
fwrite($escreve, 'exten => loop,n,Goto(${CONTEXT},s,inicio)' . "\n");
fwrite($escreve, 'exten => desliga,1,Playback(vm-goodbye)' . "\n");
fwrite($escreve, 'exten => desliga,n,Hangup' . "\n");
fwrite($escreve, 'exten => i,1,Playback(invalid)' . "\n");
fwrite($escreve, 'exten => i,n,Goto(loop,1)' . "\n" . "\n");
}
fclose($escreve);
//EXECUTA RELOAD DO ASTERISK
if ($reloadUra)
CommandAsterisk($dbcon, 'URA');
}