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.
 
 
 
 
 
 

4089 lines
209 KiB

<?php
//função para para execução de comandos no servidor
//Função para converter as datas no formato dd/mm/YYYY
function arruma_data($data) {
return substr($data, 8, 2) . "/" . substr($data, 5, 2) . "/" . substr($data, 0, 4);
}
//func�o para converter as datas no formato YYYY-mm-dd
function inverte_data($data) {
return substr($data, 6, 4) . "-" . substr($data, 3, 2) . "-" . substr($data, 0, 2);
}
//Função¿½o para limpar os relacionamentos do banco de dados
function Ajusta_ramais($nome, $conexao, $reload = false, $reloadUra = false) {
$query = "delete from pbx_agenda where tipo = 'R' and ramal = '$nome'";
$result = pg_query($conexao, $query);
$query = "delete from pbx_grupos_numeros where ramal = '$nome'";
if ($result)
$result = pg_query($conexao, $query);
$query = "delete from pbx_grupos_atendimento_ramais where ramal = '$nome'";
if ($result)
$result = pg_query($conexao, $query);
$query = "delete from pbx_queues_membros where dispositivo like '%/$nome'";
if ($result)
$result = pg_query($conexao, $query);
$query = "delete from rma_depto_ramais where nome = '$nome'";
if ($result)
$result = pg_query($conexao, $query);
if (!$result) {
return false;
}
ApagaUrl($conexao, $nome);
return true;
}
//Função¿½o para limpar os relacionamentos do banco de dados
function Ajusta_troncos($nome, $conexao) {
$query1 = "delete from pbx_rotas_entrada_troncos where id_tronco='$nome'";
$query2 = "delete from pbx_grupos_atendimento_ramais where ramal='$nome'";
$query3 = "delete from pbx_queues_membros where dispositivo='%/$nome'";
pg_query($conexao, $query1);
pg_query($conexao, $query2);
pg_query($conexao, $query3);
}
/**
* Limpa as referencias de um recurso que sera apagado
* @param String $opcao Ex.: ANUNCIO, DISA, ETC
* @param String $acao O valor da opcao referenciada, ex.: Se for um auncio a $acao sera seu id
* @param Recurso $conexao Conexao para o banco de dados
* @param Boolean $reload indica que o arquivo sera inserido na data base do asterisk
* @param Boolean $reloadUra Sera necessario excutar o Dialplan reload no asterisk
*/
function Ajusta_tabelas($opcao, $acao, $conexao, $reload = true, $reloadUra = true) {
$path = '/var/log/asterisk/ajusta_tabelas.log';
$tables = array('pbx_anuncios' => array('opcao', 'acao', 'ANUNCIOS', 'Y', 'N'),
'pbx_callback' => array('opcao', 'acao', 'CALLBACK', 'N', 'N'),
'pbx_callback' => array('opcao1', 'acao1', 'CALLBACK', 'Y', 'N'),
'pbx_contextos' => array('opcao', 'acao', 'CONTEXTOS', 'N', 'N'),
'pbx_contextos_opcoes' => array('opcao', 'acao', 'CONTEXTOS', 'Y', 'N'),
'pbx_disa' => array('opcao', 'acao', 'DISA', 'Y', 'N'),
'NOTABLE' => array('opcao', 'acao', 'CONFERENCIA', 'Y', 'N'),
'pbx_grupos' => array('opcao', 'acao', 'GRUPOS', 'Y', 'N'),
'pbx_horarios' => array('opcao_nao', 'acao_nao', 'HORARIOS', 'N', 'N'),
'pbx_horarios_itens' => array('opcao', 'acao', 'HORARIOS', 'Y', 'N'),
'pbx_integracao_configuracao' => array('opcao', 'acao', '', 'N', 'N'),
'pbx_listanegra' => array('opcao', 'acao', '', 'N', 'N'),
'pbx_queues_grupos' => array('opcao', 'acao', 'QUEUES_GRUPOS', 'Y', 'N'),
'pbx_rotas_entrada' => array('opcao', 'acao', 'ROTA_ENTRADA', 'Y', 'N'),
'pbx_ura' => array('opcao', 'acao', 'URA', 'N', 'N'),
'NOTABLE' => array('', '', 'TESTES', 'Y', 'N'),
'NOTABLE' => array('', '', 'VOICEMAIL', 'Y', 'N'),
'NOTABLE' => array('', '', 'SIP_RAMAIS', 'Y', 'N'),
'NOTABLE' => array('', '', 'DIGIVOICE', 'Y', 'N'),
'NOTABLE' => array('', '', 'DGV', 'Y', 'N'),
'NOTABLE' => array('', '', 'IAX_PBX', 'Y', 'N'),
'NOTABLE' => array('', '', 'PBX', 'Y', 'N'),
'pbx_ura_destino' => array('tipo', 'comando', 'URA', 'Y', 'Y')
);
if ($opcao == 'voice') {
$acao = sprintf("%s/%%", $acao);
}
try {
foreach ($tables as $table => $dados) {
$fOpcao = $dados[0];
$fAcao = $dados[1];
$idxGeraArq = $dados[2];
$reloadArq = $dados[3] === 'Y' ? $reload : false;
$reloadDialPlan = $dados[4] === 'Y' ? $reloadUra : false;
if (($table != 'NOTABLE') && ($opcao)) {
$query = sprintf("update %s set %s = '', %s = '' where %s = %s and %s like %s", $table, $fOpcao, $fAcao, $fOpcao, QuotedStr($opcao), $fAcao, QuotedStr($acao));
//WriteLog($query . "\n", $path);
if (!pg_query($conexao, $query)) {
GeraExcept(sprintf("Comando: [%s] Erro: %s\n", $query, GetLasterror()));
}
}
if ($reloadArq) {
gera_arquivos($conexao, $idxGeraArq, $reloadArq, $reloadDialPlan);
}
}
} catch (Exception $exc) {
WriteLog($exc->getMessage(), $path);
}
}
function GetParamAmi($tipo, $paramAdic) {
$tipo = str_replace(" ", "_", $tipo);
$acao["SIP"] = array("action" => "command", "command" => "module reload chan_sip.so");
$acao["IAX"] = array("action" => "command", "command" => "module reload chan_iax2.so");
$acao["VOICE"] = array("action" => "command", "command" => "module reload app_voicemail.so");
$acao["QUEUES"] = array("action" => "command", "command" => "module reload app_queue.so");
$acao["MUSIC"] = array("action" => "command", "command" => "module reload res_musiconhold.so");
$acao["URA"] = array("action" => "command", "command" => "dialplan reload");
$acao["ESPERA"] = array("action" => "DBPut", "Family" => "CHAMADA-ESPERA");
$acao["SIGAME-INTERNO"] = array("action" => "DBPut", "Family" => "SIGAME-INTERNO");
$acao["GRAVACAO"] = array("action" => "DBPut", "Family" => "GRAVACAO-IN");
$acao["GRAVACAO-OUT"] = array("action" => "DBPut", "Family" => "GRAVACAO-OUT");
$acao["MUSICA"] = array("action" => "DBPut", "Family" => "MUSICA-ESPERA");
$acao["NAOPERTUBE"] = array("action" => "DBPut", "Family" => "NAOPERTUBE");
$acao["CADEADO"] = array("action" => "DBPut", "Family" => "CADEADO");
$acao["SIGAME-EXTERNO"] = array("action" => "DBPut", "Family" => "SIGAME-EXTERNO");
$acao["SIGAME-NAOATENDE"] = array("action" => "DBPut", "Family" => "SIGAME-NAOATENDE");
$acao["SIGAME-OCUPADO"] = array("action" => "DBPut", "Family" => "SIGAME-OCUPADO");
$acao["VOICE2"] = array("action" => "DBPut", "Family" => "VM");
$acao["SENHA"] = array("action" => "DBPut", "Family" => "SENHA");
$acao["DISPOSITIVO"] = array("action" => "DBPut", "Family" => "DIAL");
$acao["DEL_ESPERA"] = array("action" => "command", "command" => "database del CHAMADA-ESPERA");
$acao["DEL_SIGAME-INTERNO"] = array("action" => "command", "command" => "database del SIGAME-INTERNO");
$acao["DEL_GRAVACAO"] = array("action" => "command", "command" => "database del GRAVACAO-IN");
$acao["DEL_GRAVACAO-OUT"] = array("action" => "command", "command" => "database del GRAVACAO-OUT");
$acao["DEL_MUSICA"] = array("action" => "command", "command" => "database del MUSICA-ESPERA");
$acao["DEL_NAOPERTUBE"] = array("action" => "command", "command" => "database del NAOPERTUBE");
$acao["DEL_CADEADO"] = array("action" => "command", "command" => "database del CADEADO");
$acao["DEL_SIGAME-EXTERNO"] = array("action" => "command", "command" => "database del SIGAME-EXTERNO");
$acao["DEL_SIGAME-NAOATENDE"] = array("action" => "command", "command" => "database del SIGAME-NAOATENDE");
$acao["DEL_SIGAME-OCUPADO"] = array("action" => "command", "command" => "database del SIGAME-OCUPADO");
$acao["DEL_VOICE2"] = array("action" => "command", "command" => "database del VM");
$acao["DEL_SENHA"] = array("action" => "command", "command" => "database del SENHA");
$acao["DEL_DISPOSITIVO"] = array("action" => "command", "command" => "database del DIAL");
$acao["CONFERENCIA"] = array("action" => "command", "command" => "module reload app_meetme.so");
$acao["DEL_TRONCO"] = array("action" => "command", "command" => "database del TRONCO");
$acao["TRONCO"] = array("action" => "DBPut", "Family" => "TRONCO");
$acao["AGENDA_RAMAL"] = array("action" => "dbput", "Family" => "AGENDA");
$acao["DEL_AGENDA"] = array("action" => "command", "command" => "database del AGENDA");
$acao["AGENTS"] = array("action" => "command", "command" => "module reload chan_agent.so");
$acao["MONITORAMENTO"] = array("action" => "dbput", "Family" => "MONITORAMENTO");
$acao["DEL_MONITORAMENTO"] = array("action" => "command", "command" => "database del MONITORAMENTO");
$acao["BASE"] = array("action" => "command", "command" => "module reload cdr_pgsql.so");
$acao["FEATURES"] = array("action" => "command", "command" => "module reload features");
$acao["RELOAD"] = array("action" => "command", "command" => "reload");
$acao["BINA-EXTERNO"] = array("action" => "DBPut", "Family" => "BINA-EXTERNO");
$acao["BINA-NOME"] = array("action" => "DBPut", "Family" => "BINA-NOME");
$acao["DEL_BINA-NOME"] = array("action" => "command", "command" => "database del BINA-NOME");
$acao["DEL_BINA-EXTERNO"] = array("action" => "command", "command" => "database del BINA-EXTERNO");
$acao["RESTART"] = array("action" => "command", "command" => "restart now");
$acao["CONTA-SENHA"] = array("action" => "DBPut", "Family" => "CONTA-SENHA");
$acao["DEL_CONTA-SENHA"] = array("action" => "command", "command" => "database del CONTA-SENHA");
$acao["CHAN_DAHDI"] = array("action" => "command", "command" => "module reload chan_dahdi.so");
$acao["CHAN_DAHDI_RESTART"] = array("action" => "command", "command" => "dahdi restart");
$acao["CHAN_KHOMP"] = array("action" => "command", "command" => "module reload chan_khomp.so");
$acao["TEMPO-RING-RAMAL"] = array("action" => "DBPut", "Family" => "RING");
$acao["DEL_TEMPO-RING-RAMAL"] = array("action" => "command", "command" => "database del RING");
$acao["TIMEOUT-RAMAL"] = array("action" => "DBPut", "Family" => "TIMEOUT");
$numParam = count($paramAdic);
if ((substr($tipo, 0, 3) == 'DEL') && $numParam) {
$cmd = trim(sprintf("%s %s", $acao[$tipo]["command"], $paramAdic["Key"]));
$acao[$tipo]["command"] = $cmd;
} else if ($numParam) {
$ar = $acao[$tipo];
$ar = array_merge($ar, $paramAdic);
$acao[$tipo] = $ar;
}
return isset($acao[$tipo]) ? $acao[$tipo] : array();
}
//Executa comandos via url do asterisk
function CommandAsterisk($conexao, $tipo, $paramAdic = array()) {
//$query = "select prm_sk_host_externo as prm_sk_host, prm_sk_port, prm_sk_login, prm_sk_password from pbx_parametros";
$query = "select prm_sk_host, prm_sk_port, prm_sk_login, prm_sk_password from pbx_parametros";
$result = pg_query($conexao, $query);
if ($result) {
$dados = pg_fetch_array($result);
$socket = ConectaAmi($dados['prm_sk_host'], $dados['prm_sk_port'], $dados['prm_sk_login'], $dados['prm_sk_password']);
if ($socket) {
$params = GetParamAmi($tipo, $paramAdic);
if (count($params)) {
$get = ExecutaAmi($socket, $params);
return ($get && (stripos($get, "Error") === false));
}
}
}
return false;
}
/*
* Executa comandos via url do asterisk.
* Subistituida pela função acima que elimina o astman proxy
*/
function _CommandAsterisk($conexao, $tipo) {
$query = "SELECT * FROM pbx_conf_padrao";
$result = pg_query($conexao, $query);
while ($dados = pg_fetch_array($result)) {
$url_asterisk = $dados['url_asterisk'];
}
$query = "SELECT * FROM pbx_urls where tipo='$tipo'";
$result = pg_query($conexao, $query);
while ($dados = pg_fetch_array($result)) {
$get = @file_get_contents($url_asterisk . eregi_replace('&actionid=100', '', $dados['endereco']) . '&actionid=' . rand(0, 99999999999999));
// echo $url_asterisk.eregi_replace('&actionid=100','',$dados['endereco']).'&actionid='.rand(0,99999999999999);
if ($get)
return !stripos($get, "Error");
return true;
}
}
//executa comandos via url do asterisk do tipo inser??o e delete de banco interno
function CommandAsterisk2($conexao, $tipo, $chave, $valor) {
$paramAdic = array();
$chave = trim($chave);
if ($chave) {
$paramAdic["Key"] = $chave;
}
$valor = trim($valor);
if ($valor) {
$paramAdic["Val"] = $valor;
}
return CommandAsterisk($conexao, $tipo, $paramAdic);
}
/*
* Executa comandos via url do asterisk do tipo inser??o e delete de banco interno
* Substituido pela função acima
*/
function _CommandAsterisk2($conexao, $tipo, $chave, $valor) {
$query = "SELECT * FROM pbx_conf_padrao";
$result = pg_query($conexao, $query);
while ($dados = pg_fetch_array($result)) {
$url_asterisk = $dados['url_asterisk'];
}
$query = "SELECT * FROM pbx_urls where tipo='$tipo'";
$result = pg_query($conexao, $query);
while ($dados = pg_fetch_array($result)) {
if (substr($tipo, 0, 3) != 'DEL') {
$url = $url_asterisk . eregi_replace('action:', 'action=', $dados['endereco']) . '&Key=' . eregi_replace('/', '%2F', $chave) . '&Val=' . eregi_replace('/', '%2F', $valor);
} else {
$url = $url_asterisk . eregi_replace('action:', 'action=', $dados['endereco']) . ' ' . eregi_replace('/', '%2F', $chave);
}
//echo $url;
$get = file_get_contents($url);
if ($get)
return !stripos($get, "Error");
return true;
}
}
//tratamento de upload de arquivos para o sistema, verificar o arquivo php.ini para o tamanho maximo de upload de arquivo
function upload($arquivo, $caminho) {
if (!(empty($arquivo))) {
$arquivo1 = $arquivo;
$arquivo_minusculo = strtolower($arquivo1['name']);
$caracteres = array("�", "~", "^", "]", "[", "{", "}", ";", ":", "�", ",", ">", "<", "-", "/", "|", "@", "$", "%", "�", "�", "�", "�", "�", "�", "�", "�", "+", "=", "*", "&", "(", ")", "!", "#", "?", "`", "�", " ", "�", "'");
$arquivo_tratado = str_replace($caracteres, "", $arquivo_minusculo);
$destino = $caminho . "/" . $arquivo_tratado;
if (move_uploaded_file($arquivo1['tmp_name'], $destino)) {
echo $destino;
echo "<script>window.alert('Arquivo enviado com sucesso.');</script>";
} else {
echo "<script>window.alert('Erro ao enviar o arquivo');</script>";
}
}
}
//REALIZA BACKUP BO BANCO
function backup($conexao, $tabela, $tipo, $registro, $comando, $reload) {
return true;
$ins = '';
$data = date("Y-m-d");
$hora = date("H:i:s");
//BACKUPS DO GENERAL
if (($comando == 'update') && ($registro == '')) {
$query = "SELECT * FROM $tabela";
$result = pg_query($conexao, $query);
$ins = "UPDATE $tabela set ";
while ($dados = pg_fetch_array($result)) {
for ($i = 0; pg_num_fields($result) > $i; $i++) {
if (pg_num_fields($result) != ($i + 1)) {
$ins = $ins . pg_field_name($result, $i) . '=' . '"' . trim($dados[pg_field_name($result, $i)]) . '"' . ',';
} else {
$ins = $ins . pg_field_name($result, $i) . '=' . '"' . trim($dados[pg_field_name($result, $i)]) . '"';
}
}
}
}
//UPDATE EM GERAL
if (($comando == 'update') && ($registro != '')) {
if ($tabela == 'pbx_digivoice_grupos') {
$query = "SELECT * FROM $tabela where \"group\"=$registro";
} else {
$query = "SELECT * FROM $tabela where id=$registro";
}
$result = pg_query($conexao, $query);
$ins = "UPDATE $tabela set ";
while ($dados = pg_fetch_array($result)) {
for ($i = 0; pg_num_fields($result) > $i; $i++) {
if (pg_num_fields($result) != ($i + 1)) {
$ins .= pg_field_name($result, $i) . '=' . '"' . trim($dados[pg_field_name($result, $i)]) . '"' . ',';
} else {
$ins .= pg_field_name($result, $i) . '=' . '"' . trim($dados[pg_field_name($result, $i)]) . '"';
}
}
}
if ($tabela == 'pbx_digivoice_grupos') {
$ins .= " where \"group\"=$registro";
} else {
$ins .= " where id=$registro";
}
}
if (($comando == 'delete')) {
$query = "SELECT * FROM $tabela where id=$registro";
$result = pg_query($conexao, $query);
$ins = "INSERT INTO $tabela (";
while ($dados = pg_fetch_array($result)) {
for ($i = 0; pg_num_fields($result) > $i; $i++) {
if (pg_num_fields($result) != ($i + 1)) {
$ins .= pg_field_name($result, $i) . ',';
} else {
$ins .= pg_field_name($result, $i) . ")";
}
}
}
$ins .= " values (";
$query = "SELECT * FROM $tabela where id=$registro";
$result = pg_query($conexao, $query);
while ($dados = pg_fetch_array($result)) {
for ($i = 0; pg_num_fields($result) > $i; $i++) {
if (pg_num_fields($result) != ($i + 1)) {
$ins .= '"' . trim($dados[pg_field_name($result, $i)]) . '"' . ',';
} else {
$ins .= '"' . trim($dados[pg_field_name($result, $i)]) . '")';
}
}
}
}
$query = "insert into pbx_backups(
data, hora, tabela, tipo, comando_retorno, padrao,executa_reload)
VALUES ('$data','$hora','$tabela','$tipo','$ins','0','$reload')";
$result = pg_query($conexao, $query);
}
//FUNC�O RESPONSAVEL PARA GERAR TODOS OS ARQUIVOS NECESS�RIOS PELO ASTERISK
//SER� TRATADO PARTICULARIDADES ARQUIVO � ARQUIVO
//EM TODA GERA��O DE ARQUIVO, CASO O CAMPO DO BANCO ESTEJA EM BRANCO, O PARAMETRO NO ASTERISK IR� SEM O "CAMPO = VALOR"
function gera_arquivos($dbcon, $tipo, $reload = 1, $reloadUra = 1) {
$query = "SELECT * FROM pbx_conf_padrao";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
$caminho_back = $dados['caminho_backup'];
$caminho_producao = $dados['caminho_producao'];
$caminho_musicas = $dados['caminho_musicas'];
$url_musicas = $dados['url_musicas'];
$url_asterisk = $dados['url_asterisk'];
}
//GERAÇÃO DO ARQUIVO DE URA
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);
$x = 0;
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");
fwrite($escreve, 'exten => s,n,ExecIf($["${ISNULL(${CDR(direcao)})}" = "1"]?Set(CDR(direcao)=I))' . "\n");
fwrite($escreve, 'exten => s,n,ExecIf($["${CDR(direcao)}" != "E" && "${ISNULL(${CDR(ramal_origem)})}" = "1"]?Set(CDR(ramal_origem)=${CALLERID(num)}))' . "\n");
$agiUra = sprintf("exten => s,n,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,ExecIf($["${ISNULL(${CDR(direcao)})}" = "1"]?Set(CDR(direcao)=I))' . "\n");
fwrite($escreve, 'exten => s,n,ExecIf($["${CDR(direcao)}" != "E" && "${ISNULL(${CDR(ramal_origem)})}" = "1"]?Set(CDR(ramal_origem)=${CALLERID(num)}))' . "\n");
fwrite($escreve, 'exten => s,n,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 === '_X.') ? '${EXTEN}' : $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ção ativa
* nã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,%s)\n", $id_da_ura, '99', $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');
}
if ($tipo == 'AGENTS_GENERAL') {
$arq = $caminho_producao . "agents_general.conf";
$escreve = fopen($arq, 'w');
$query = "SELECT persistentagents, multiplelogin FROM pbx_parametros";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
$x++;
for ($i = 0; pg_num_fields($result) > $i; $i++) {
fwrite($escreve, ';' . pg_field_name($result, $i) . '=' . $dados[pg_field_name($result, $i)] . "\n");
}
}
fclose($escreve);
//EXECUTA O RELOAD DO ASTERISK
CommandAsterisk($dbcon, 'AGENTS');
}
//GERA��O DO ARQUIVO DE AGENTS ADICIONAL
if ($tipo == 'AGENTS_ADICIONAL') {
$arq = $caminho_producao . "agents_adicional.conf";
$escreve = fopen($arq, 'w');
fwrite($escreve, '[agents](!)' . "\n");
$query = "SELECT CASE WHEN (autologoff = '')THEN '0' ELSE autologoff END AS autologoff,ackcall,wrapuptime,musiconhold,recordagentcalls,custom_beep FROM pbx_parametros";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
$x++;
for ($i = 0; pg_num_fields($result) > $i; $i++) {
if ((pg_field_name($result, $i) != "musiconhold")and ( pg_field_name($result, $i) != "goodbye")) {
fwrite($escreve, pg_field_name($result, $i) . '=' . $dados[pg_field_name($result, $i)] . "\n");
} else {
fwrite($escreve, pg_field_name($result, $i) . '=' . $dados[pg_field_name($result, $i)] . "\n");
}
}
}
fclose($escreve);
//EXECUTA O RELOAD DO ASTERISK
CommandAsterisk($dbcon, 'AGENTS');
}
//GERA O ARQUIVO DE FEATURES
if ($tipo == 'FEATURES_APPLICATION') {
$arq = $caminho_producao . "features_applicationmap.conf";
$escreve = fopen($arq, 'w');
$query = "SELECT * FROM pbx_features_application order by seq asc";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
fwrite($escreve, $dados['comando'] . "\n");
}
fwrite($escreve, chr(13) . chr(10));
fclose($escreve);
//EXECUTA COMANDO DO ASTERISK
CommandAsterisk($dbcon, 'FEATURES');
}
//GERA O ARQUIVO DE RAMAIS IAX
if ($tipo == 'IAX_PBX') {
$arq = $caminho_producao . "iax_ramais.conf";
$escreve = fopen($arq, 'w');
$query = "SELECT nome, \"type\", host, secret, identificador as callerid, context, disallow, allow,
deny, permit, 'no' as requirecalltoken, inkeys, outkeys,callgroup,pickupgroup, case when(conta_senha = 'V')then 'yes' else 'no' end as qualify FROM pbx_iax_pbx order by id asc";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
for ($i = 0; pg_num_fields($result) > $i; $i++) {
/* Alan Pablo - 2011-01-16
* Alterado username para nome => if (pg_field_name($result,$i)=="nome")
*/
if (pg_field_name($result, $i) == "nome") {
fwrite($escreve, "[" . $dados[pg_field_name($result, $i)] . "]" . "\n");
} else {
if ($dados[pg_field_name($result, $i)] != '') {
if (pg_field_name($result, $i) == "callerid") {
fwrite($escreve, pg_field_name($result, $i) . '=' . $dados["nome"] . "\n");
} else {
fwrite($escreve, pg_field_name($result, $i) . '=' . $dados[pg_field_name($result, $i)] . "\n");
}
}
}
}
fwrite($escreve, chr(13) . chr(10));
}
//GERA TRONCOS IAX DENTRO DO ARQUIVO DE RAMAIS IAX
$query = "SELECT nome, username, secret, type, context, host,
port, case when(coalesce(permit,'') = '')then '' else deny end as deny, permit, qualify, trunk, disallow, allow,
fromuser, fromdomain, 'no' as requirecalltoken
FROM pbx_troncos_iax order by id asc";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
for ($i = 0; pg_num_fields($result) > $i; $i++) {
if (pg_field_name($result, $i) == "nome") {
fwrite($escreve, "[" . $dados[pg_field_name($result, $i)] . "]" . "\n");
//fwrite($escreve,pg_field_name($result,$i).'='.$dados[pg_field_name($result,$i)]. "\n");
} else {
if (trim($dados[pg_field_name($result, $i)]) != '') {
if (pg_field_name($result, $i) == "permit") {
fwrite($escreve, pg_field_name($result, $i) . '=' . $dados[pg_field_name($result, $i)] . '/255.255.255.255' . "\n");
} else {
fwrite($escreve, pg_field_name($result, $i) . '=' . $dados[pg_field_name($result, $i)] . "\n");
}
}
}
}
fwrite($escreve, chr(13) . chr(10));
}
fclose($escreve);
//GERA O ARQUIVO DE DENTRO DO EXTENSIONS_RAMAIS E HINTS
GeraExtRamais($dbcon);
//GERA OS REGISTROS DE IAX
$arq = $caminho_producao . "iax_register.conf";
$escreve = fopen($arq, 'w');
$query = "select * from pbx_troncos_iax";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
if (($dados['pedido_registro'] == 'yes') && (!empty($dados['registro']))) {
fwrite($escreve, 'register => ' . trim($dados['registro']) . "\n");
}
}
//EXECUTA O RELOADO DO IAX2
if ($reload)
CommandAsterisk($dbcon, 'IAX');
//EXECUTA O RELOADO DO EXTENSIONS
if ($reloadUra)
CommandAsterisk($dbcon, 'URA');
}
//GERA O ARQUIVO DAS MUSICAS DE ESPERA
if ($tipo == 'MUSICHOLD_GRUPOS') {
$arq = $caminho_producao . "musiconhold.conf";
$escreve = fopen($arq, 'w');
fwrite($escreve, "[general]" . "\n");
fwrite($escreve, chr(13) . chr(10));
//Asterisk 1.4
//$query = "SELECT nome, \"mode\", '/var/lib/asterisk/moh/'||replace(nome, ' ', '') as directory, random from pbx_musichold_grupos order by id asc";
$query = "SELECT nome, \"mode\", '/var/lib/asterisk/moh/'||replace(nome, ' ', '') as directory, case when random = 'yes' then 'random' else 'alpha' end as sort from pbx_musichold_grupos order by id asc";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
for ($i = 0; pg_num_fields($result) > $i; $i++) {
if (pg_field_name($result, $i) == "nome") {
fwrite($escreve, "[" . $dados[pg_field_name($result, $i)] . "]" . "\n");
} else {
if ($dados[pg_field_name($result, $i)] != '') {
fwrite($escreve, pg_field_name($result, $i) . '=' . $dados[pg_field_name($result, $i)] . "\n");
}
}
}
fwrite($escreve, "\n");
}
//fwrite($escreve, "[final]" . "\n");
fclose($escreve);
//EXECUTA O RELOADO DO MUSICONHOLD
if ($reload)
CommandAsterisk($dbcon, 'MUSIC');
}
//GERA AS FILAS DE ANTENDIMENTO
if ($tipo == 'QUEUES_GRUPOS') {
$arq = $caminho_producao . "queues_filas.conf";
$escreve = fopen($arq, 'w');
$query = 'SELECT id,nome, musicclass, anuncio as announce ,strategy, servicelevel, \'1\' as retry,tempo_ring as timeout,
maxlen, joinempty, periodic_announce_frequency as "periodic-announce-frequency",
wrapuptime, \'yes\' as autofill, "announce-frequency", "announce-holdtime", \'10\' as "announce-round-seconds",
"monitor-format", "monitor-type", reportholdtime, \'yes\' as setinterfacevar, \'yes\' as timeoutrestart, context, ringinuse
FROM pbx_queues_grupos
where status=\'A\'
order by id asc';
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
for ($i = 0; pg_num_fields($result) > $i; $i++) {
if (pg_field_name($result, $i) != "id") {
if (pg_field_name($result, $i) == "nome") {
fwrite($escreve, "[" . $dados[pg_field_name($result, $i)] . "]" . "\n");
} else {
if ($dados[pg_field_name($result, $i)] != '') {
if (pg_field_name($result, $i) == 'announce') {
if ($dados['announce'] != 'customizados/') {
$som = explode('.', $dados['announce']);
fwrite($escreve, pg_field_name($result, $i) . '=' . $som[0] . "\n");
}
} else {
fwrite($escreve, pg_field_name($result, $i) . '=' . $dados[pg_field_name($result, $i)] . "\n");
}
}
}
}
}
fwrite($escreve, "\n");
//GERA OS MEMBROS DAS FILAS
$idFila = $dados['id'];
$query2 = "select case when(b.tipo_ramal = 'KHOMP' ) then 'Khomp/r' || b.nome else a.dispositivo end as dispositivo, b.nome, a.prioridade,
case when b.sigame_interno <> '' or sigame_externo <> '' then 1 else 0 end as sigame
from pbx_queues_membros a, pbx_ramais b
where b.dispositivo = a.dispositivo
and id_fila = '$idFila'
order by 2";
$result2 = pg_query($dbcon, $query2);
while ($dados2 = pg_fetch_array($result2)) {
if ($dados2['sigame'] == 0)
fwrite($escreve, sprintf("member => Local/%s@padrao/n,%s,%s,%s\n", trim($dados2['nome']), trim($dados2['prioridade']), trim($dados2['dispositivo']), trim($dados2['dispositivo'])));
if ($dados2['sigame'] == 1)
fwrite($escreve, sprintf("member => Local/%s@padrao/n,%s,%s\n", trim($dados2['nome']), trim($dados2['prioridade']), trim($dados2['dispositivo'])));
}
fwrite($escreve, "\n");
}
fclose($escreve);
//GERA OS EXTENSIONS DA FILA
$arq = $caminho_producao . "extensions_fila.conf";
$escreve = fopen($arq, 'w');
fwrite($escreve, '[ext-fila]' . "\n");
fwrite($escreve, 'exten => h,1,Macro(hangup)' . "\n");
/* fwrite($escreve,'exten => h,1,Noop(MATRICULA = ${MATRICULA} e IDORIGEM = ${IDORIGEM})'. "\n");
fwrite($escreve,'exten => h,n,GotoIf($["X${MATRICULA}" = "X"]?desliga)'. "\n");
fwrite($escreve,'exten => h,n,GotoIf($["${CONTEXT:0:3}" = "psq"]?desliga)'. "\n");
fwrite($escreve,'exten => h,n,GotoIf($["${DB(CANAL/${MATRICULA}/${IDORIGEM})}" = "DESLIGADO"]?desliga)'. "\n");
fwrite($escreve,'exten => h,n,Set(DB(CANAL/${MATRICULA}/${IDORIGEM})=DESLIGADO)'. "\n");
fwrite($escreve,'exten => h,n,System(${ATUALIZAR} LIVRE ${MATRICULA} ${DAC})'. "\n");
fwrite($escreve,'exten => h,n(desliga),DeadAGI(${INTEGRACAO_ABD},${UNIQUEID},${DAC},${CALLERID(NUM):-10})'. "\n");
fwrite($escreve,'exten => h,n,Hangup()'. "\n");
*/
$query = "SELECT * FROM pbx_queues_grupos where status='A'";
$result = pg_query($dbcon, $query);
$dados2 = array();
$x = 0;
while ($dados = pg_fetch_array($result)) {
$dados2[] = $dados;
$x++;
fwrite($escreve, 'exten => _' . $dados['numero'] . ',1,' . ( ($dados['m_espera'] == 'N') ? 'Ringing()' : 'Answer()' ) . "\n");
fwrite($escreve, 'exten => _' . $dados['numero'] . ',n,ExecIf($["${ISNULL(${CDR(direcao)})}" = "1"]?Set(CDR(direcao)=I))' . "\n");
fwrite($escreve, 'exten => _' . $dados['numero'] . ',n,ExecIf($["${CDR(direcao)}" != "E" && "${ISNULL(${CDR(ramal_origem)})}" = "1"]?Set(CDR(ramal_origem)=${CALLERID(num)}))' . "\n");
fwrite($escreve, 'exten => _' . $dados['numero'] . ',n,Set(CHANNEL(accountcode)=${TRANSFER})' . "\n");
fwrite($escreve, 'exten => _' . $dados['numero'] . ',n,AGI(pbx_complemento.php,ext-fila,' . trim($dados['nome']) . ')' . "\n");
fwrite($escreve, 'exten => _' . $dados['numero'] . ',n,AGI(indisponibilidade.php,' . trim($dados['nome']) . ')' . "\n");
fwrite($escreve, 'exten => _' . $dados['numero'] . ',n,AGI(prioridade_fila.php,${CALLERID(NUM):-13},' . trim($dados['nome']) . ')' . "\n");
fwrite($escreve, 'exten => _' . $dados['numero'] . ',n,Set(UNICO=${RAND(0000000000,9999999999)})' . "\n");
//fwrite($escreve,'exten => _'.$dados['numero'].',n,Set(AUDIOHOOK_INHERIT(MixMonitor)=yes)'. "\n");
fwrite($escreve, 'exten => _' . $dados['numero'] . ',n,Set(MONITOR_FILENAME=${EXTEN}-${UNICO}-${UNIQUEID})' . "\n");
fwrite($escreve, 'exten => _' . $dados['numero'] . ',n,Set(__DAC=' . trim($dados['nome']) . ')' . "\n");
$monitorFormat = strtoupper($dados['monitor-format']);
if (!empty($monitorFormat)) {
if ($monitorFormat == 'WAV')
$ext = 'wav';
else if ($monitorFormat == 'GSM')
$ext = 'gsm';
else if ($monitorFormat == 'WAV49')
$ext = 'WAV';
fwrite($escreve, 'exten => _' . $dados['numero'] . ',n,Set(CDR(userfield)=${EXTEN}-${UNICO}-${UNIQUEID}.' . $ext . ')' . "\n");
}
if ($dados['m_espera'] == 'N') {
fwrite($escreve, sprintf('exten => _' . $dados['numero'] . ',n,Queue(' . trim($dados['nome']) . ',%s,,${ANUNCIO},' . $dados['timeout2'] . ',agente_fila.php,,,,)' . "\n",$dados['id_pesquisa_liberacao'] ? 'trc': 'tr'));
} else {
//Asterisk 1.4
//fwrite($escreve,'exten => _'.$dados['numero'].',n,SetMusicOnHold('.$dados['musicclass'].')'. "\n");
fwrite($escreve, 'exten => _' . $dados['numero'] . ',n,Set(CHANNEL(musicclass)=${IF($["X${CHANNEL(musicclass)}" = "X"]?' . $dados['musicclass'] . ':${CHANNEL(musicclass)})})' . "\n");
//fwrite($escreve,'exten => _'.$dados['numero'].',n,Queue('.trim($dados['nome']).',t,,${ANUNCIO},'.$dados['timeout2'].',agente_fila.php,'.trim($dados['nome']).')'. "\n");
fwrite($escreve, sprintf('exten => _' . $dados['numero'] . ',n,Queue(' . trim($dados['nome']) . ',%s,,${ANUNCIO},' . $dados['timeout2'] . ',agente_fila.php,,,,)' . "\n", $dados['id_pesquisa_liberacao'] ? 'tc': 't'));
}
if (!empty($dados['opcao'])) {
$dispAcao = GetOpcaoAcao($dados['opcao'], $dados['acao'], '', $dados['numero']);
fwrite($escreve, sprintf('exten => _%s,n,ExecIf($["${QUEUESTATUS}" = "TIMEOUT"]?AGI(transbordo.php,%s,%s,%s,%s,%s))' . "\n", $dados['numero'], trim($dados['nome']), $dados['numero'], $dados['opcao'], $dados['acao'], '${UNIQUEID}'));
$dispAcao = sprintf('exten => _%s,n,ExecIf($["${QUEUESTATUS}" = "TIMEOUT"]?%s)%s', $dados['numero'], $dispAcao, "\n");
fwrite($escreve, $dispAcao);
}
if($dados['id_pesquisa_liberacao']){
fwrite($escreve,"exten => _{$dados['numero']},n,Macro(hangup,PESQUISA) \n");
fwrite($escreve,"exten => _{$dados['numero']},n,Goto(psq-{$dados['id_pesquisa_liberacao']}-ini,s,1) \n");
}
fwrite($escreve, 'exten => _' . $dados['numero'] . ',n,Hangup()' . "\n");
}
fclose($escreve);
// ROTINA PARA LOGIN MANUAL - EM CASO DE PROBLEMA COM A APLICA��O
$arq = $caminho_producao . "extensions_fila_login.conf";
$escreve = fopen($arq, 'w');
$dados = array();
fwrite($escreve, '[ext-fila-login]' . "\n");
foreach ($dados2 as $dados) {
fwrite($escreve, 'exten => **' . $dados['numero'] . ',1,AddQueueMember(' . trim($dados['nome']) . ',${DB(DIAL/${CALLERID(NUM)})})' . "\n");
fwrite($escreve, 'exten => **' . $dados['numero'] . ',n,Goto(${AQMSTATUS})' . "\n");
fwrite($escreve, 'exten => **' . $dados['numero'] . ',n(ADDED),Playback(agent-loginok)' . "\n");
fwrite($escreve, 'exten => **' . $dados['numero'] . ',n,Hangup()' . "\n");
fwrite($escreve, 'exten => **' . $dados['numero'] . ',n(MEMBERALREADY),Playback(agent-alreadyon)' . "\n");
fwrite($escreve, 'exten => **' . $dados['numero'] . ',n,Hangup()' . "\n");
fwrite($escreve, 'exten => **' . $dados['numero'] . ',n(NOSUCHQUEUE),Playback(agent-incorrect)' . "\n");
fwrite($escreve, 'exten => **' . $dados['numero'] . ',n,Hangup()' . "\n");
fwrite($escreve, 'exten => *0' . $dados['numero'] . ',1,RemoveQueueMember(' . trim($dados['nome']) . ',${DB(DIAL/${CALLERID(NUM)})})' . "\n");
fwrite($escreve, 'exten => *0' . $dados['numero'] . ',n,Playback(agent-loggedoff)' . "\n");
fwrite($escreve, 'exten => *0' . $dados['numero'] . ',n,Hangup()' . "\n");
}
fclose($escreve);
//EXECUTA O RELOAD DAS FILAS
if ($reload)
CommandAsterisk($dbcon, 'QUEUES');
//EXECUTA O RELOAD DO EXTENSIONS
if ($reloadUra)
CommandAsterisk($dbcon, 'URA');
}
//GERA O ARQUIVO DE RAMAIS SIP
if ($tipo == 'SIP_RAMAIS') {
$arq = $caminho_producao . "sip_ramais.conf";
$escreve = fopen($arq, 'w');
$query = "SELECT nome,
type,
secret,
callerid,
qualify,
port,
case when nat = 'yes' then 'force_rport,comedia' else nat end as nat,
host,
dtmfmode,
context,
canreinvite,
disallow,
allow,
\"call-limit\",
videosupport,
fromdomain,
t38pt_udptl,
mailbox,
pickupgroup,
callgroup,
insecure,
accountcode,
extranet,
'DYNAMIC_FEATURES=solintel-lgpd' as setvar
FROM pbx_sip_ramais order by id asc";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
for ($i = 0; pg_num_fields($result) > $i; $i++) {
$nomeCampo = pg_field_name($result, $i);
if ($nomeCampo == "nome") {
fwrite($escreve, "[" . $dados[pg_field_name($result, $i)] . "]" . "\n");
} else if ($nomeCampo == "extranet") {
$extranet = trim($dados['extranet']);
if ($extranet) {
fwrite($escreve, "deny=0.0.0.0/0.0.0.0\n");
/*
* Escreve as redes permitidas para autenticação dos ramais.
*/
$redes = $extranet;
$redes = preg_split('/[\\\ | - ; , \n]/', $redes, -1, PREG_SPLIT_NO_EMPTY);
foreach ($redes as $rede) {
$rede = trim($rede);
if ($rede !== '') {
fwrite($escreve, "permit=$rede\n");
}
}
}
} else {
if (trim($dados[pg_field_name($result, $i)]) != '') {
if (pg_field_name($result, $i) == 'callerid') {
fwrite($escreve, pg_field_name($result, $i) . '=' . $dados["nome"] . "\n"); //.'" <'.$dados['nome'].'>'. "\n");
} else {
fwrite($escreve, pg_field_name($result, $i) . '=' . $dados[pg_field_name($result, $i)] . "\n");
}
}
}
}
fwrite($escreve, chr(13) . chr(10));
}
//GERA OS TRONCOS SIP DENTRO DO ARQUIVO DE RAMAIS callerid,
$query = "SELECT nome, username, secret, type, context, host,
username as fromuser,fromdomain, fromuser as grava_fromuser,
port,case when permit = '' then '' else deny end as deny,
permit, qualify,case when nat = 'yes' then 'force_rport,comedia' else nat end as nat, canreinvite, disallow, allow, dtmfmode, 'port,invite' as insecure
FROM pbx_troncos_sip order by id asc";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
for ($i = 0; pg_num_fields($result) > $i; $i++) {
$fieldName = trim(pg_field_name($result, $i));
if ($fieldName == "nome") {
fwrite($escreve, "[" . $dados[$fieldName] . "]" . "\n");
} else if ($fieldName == "fromuser") {
if ($dados['grava_fromuser']) {
fwrite($escreve, $fieldName . '=' . $dados[$fieldName] . "\n");
}
} else if ($fieldName != "grava_fromuser") {
if (trim($dados[$fieldName]) != '') {
if (trim($fieldName) == 'permit') {
fwrite($escreve, $fieldName . '=' . $dados[$fieldName] . '/255.255.255.255' . "\n");
} else {
fwrite($escreve, $fieldName . '=' . $dados[$fieldName] . "\n");
}
}
}
}
fwrite($escreve, chr(13) . chr(10));
}
fclose($escreve);
//GERA O ARQUIVO DE DENTRO DO EXTENSIONS_RAMAIS E HINTS
GeraExtRamais($dbcon);
//GERA OS REGISTROS DO SIP
$arq = $caminho_producao . "sip_register.conf";
$escreve = fopen($arq, 'w');
$query = "select * from pbx_troncos_sip";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
if (($dados['pedido_registro'] == 'yes') && (!empty($dados['registro']))) {
//fwrite($escreve,'register => '.trim($dados['username']).':'.trim($dados['secret']).'@'.trim($dados['permit']).':'.trim($dados['port']). "\n");
fwrite($escreve, 'register => ' . trim($dados['registro']) . "\n");
}
}
//EXECUTA O RELOAD DO SIP
if ($reload)
CommandAsterisk($dbcon, 'SIP');
//EXECUTA O RELOAD DO EXTENSIONS
if ($reloadUra)
CommandAsterisk($dbcon, 'URA');
}
if ($tipo == 'SIP_NOTIFY') {
$arq = $caminho_producao . "sip_notify.conf";
$escreve = fopen($arq, 'w');
$query = "SELECT * FROM pbx_sip_notify";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
$x++;
for ($i = 0; pg_num_fields($result) > $i; $i++) {
if (trim($dados[pg_field_name($result, $i)]) != '') {
if (pg_field_name($result, $i) == 'nome') {
fwrite($escreve, '[' . $dados[pg_field_name($result, $i)] . ']' . "\n");
} else {
fwrite($escreve, pg_field_name($result, $i) . '=>' . $dados[pg_field_name($result, $i)] . "\n");
}
}
}
}
fclose($escreve);
CommandAsterisk($dbcon, 'SIP');
}
//GERA O ARQUIVO INTEGRAL DO DIGIVOICE
if ($tipo == 'DIGIVOICE') {
$arq = $caminho_producao . "digivoice.conf";
$escreve = fopen($arq, 'w');
fwrite($escreve, '[general]' . "\n");
$query = "SELECT * FROM pbx_digivoice_general";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
$x++;
for ($i = 0; pg_num_fields($result) > $i; $i++) {
fwrite($escreve, pg_field_name($result, $i) . '=' . $dados[pg_field_name($result, $i)] . "\n");
}
}
fwrite($escreve, chr(13) . chr(10) . '[allportsconfig]' . "\n");
$query = "SELECT * FROM pbx_digivoice_allportsconfig";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
$x++;
for ($i = 0; pg_num_fields($result) > $i; $i++) {
fwrite($escreve, pg_field_name($result, $i) . '=' . $dados[pg_field_name($result, $i)] . "\n");
}
}
fwrite($escreve, chr(13) . chr(10) . '[groups]' . "\n");
$query = "SELECT * FROM pbx_digivoice_grupos_ order by numero";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
if (!empty($dados['numero']))
fwrite($escreve, 'group=' . $dados['numero'] . "\n");
if (!empty($dados['portas']))
fwrite($escreve, 'ports=>' . $dados['portas'] . "\n");
}
fwrite($escreve, chr(13) . chr(10) . "\n" . '[port_config]' . "\n");
$query = " SELECT \"group\", signalling, context, \"language\", accountcode, musiconhold, tx_gain, rx_gain, echocan, echotraining, callprogress,
silence_threshold, callgroup, pickupgroup, relaxdtmf, gen_dtmf, gen_ringback, gen_busy, dtmf_to_asterisk, polarity, faxdetection,
drop_tx_samples_factor, r2_country, immediate, min_digits as min_digits_rx, max_digits_rx, cid_pos, category, pin_number, group_b_value,
port_id, b_subscriber_hangup, wait_dialtone, ccb_pass_through, ring_type, flash_min_time, flash_max_time, interdigit_timeout, hide_number,
cid_type, customcascfg, dialtone_timeout, second_call_digits, ports
FROM pbx_digivoice_grupos order by ports_1,ports_2 ";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
$x++;
for ($i = 0; pg_num_fields($result) > $i; $i++) {
if (pg_field_name($result, $i) != "group") {
if (pg_field_name($result, $i) == "ports") {
if (trim($dados[pg_field_name($result, $i)]) != "")
fwrite($escreve, 'ports=>' . $dados[pg_field_name($result, $i)] . "\n" . "\n");
}
else {
if (trim($dados[pg_field_name($result, $i)]) != "")
fwrite($escreve, pg_field_name($result, $i) . '=' . $dados[pg_field_name($result, $i)] . "\n");
}
}
}
fwrite($escreve, chr(13) . chr(10));
$query2 = "select coalesce(contexto,'default') as contexto,identificador,voicemail,immediate,grupo,capturar,musica_espera,
accountcode,dispositivo, numero from pbx_digivoice_ramais_fxs a, pbx_dgv b
where cast(a.ramal as integer) = cast(b.numero as integer)
and a.id_grupo=" . $dados['group'];
$result2 = pg_query($dbcon, $query2);
while ($dados2 = pg_fetch_array($result2)) {
if (trim($dados2['contexto']) == '') {
$contexto = "padrao";
} else {
$contexto = $dados2['contexto'];
}
fwrite($escreve, 'context=' . $contexto . chr(13) . chr(10));
if (!empty($dados2['numero']))
fwrite($escreve, 'port_id=' . $dados2['numero'] . "\n");
if (!empty($dados2['voicemail']))
fwrite($escreve, 'mailbox=' . $dados2['voicemail'] . "\n");
if (!empty($dados2['immediate']))
fwrite($escreve, 'immediate=' . $dados2['immediate'] . "\n");
if (!empty($dados2['grupo']))
fwrite($escreve, 'callgroup=' . $dados2['grupo'] . "\n");
if (!empty($dados2['capturar']))
fwrite($escreve, 'pickupgroup=' . $dados2['capturar'] . "\n");
if (!empty($dados2['musica_espera']))
fwrite($escreve, 'musiconhold=' . $dados2['musica_espera'] . "\n");
if (!empty($dados2['accountcode']))
fwrite($escreve, 'accountcode=' . $dados2['accountcode'] . "\n");
if (!empty($dados2['dispositivo'])) {
$var = explode('/', $dados2['dispositivo']);
fwrite($escreve, 'ports=>' . $var[1] . "\n" . "\n");
}
}
}
fwrite($escreve, chr(13) . chr(10) . '[e1_config]' . "\n");
$query = "SELECT e1_sync, use_crc4, span, span2,cards FROM pbx_digivoice_e1config";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
fwrite($escreve, 'e1_sync=' . $dados['e1_sync'] . "\n");
fwrite($escreve, 'use_crc4=' . $dados['use_crc4'] . "\n");
if (!empty($dados['span']))
fwrite($escreve, 'span=' . $dados['span'] . "\n");
if (!empty($dados['span2']))
fwrite($escreve, 'span=' . $dados['span2'] . "\n");
fwrite($escreve, 'cards=>' . $dados['cards'] . "\n");
fwrite($escreve, chr(13) . chr(10));
}
fwrite($escreve, chr(13) . chr(10));
fclose($escreve);
if ($reload)
CommandAsterisk($dbcon, 'RELOAD');
if ($reloadUra)
CommandAsterisk($dbcon, 'URA');
}
if ($tipo == 'FEATURE_FEATUREMAP') {
$arq = $caminho_producao . "features_featuremap.conf";
$escreve = fopen($arq, 'w');
fwrite($escreve, '[featuremap]' . "\n");
$query = "SELECT * FROM pbx_features_featuremap";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
$x++;
for ($i = 0; pg_num_fields($result) > $i; $i++) {
if (trim($dados[pg_field_name($result, $i)]) != '') {
fwrite($escreve, pg_field_name($result, $i) . '=>' . $dados[pg_field_name($result, $i)] . "\n");
}
}
}
fclose($escreve);
if ($reload)
CommandAsterisk($dbcon, 'FEATURE');
}
if ($tipo == 'FEATURE_GENERAL') {
$arq = $caminho_producao . "features_general.conf";
$escreve = fopen($arq, 'w');
//Asterisk 1.4
// $query = "SELECT * FROM pbx_features_general";
$query = "SELECT courtesytone, transferdigittimeout, xfersound, xferfailsound, pickupexten, featuredigittimeout, atxfernoanswertimeout FROM pbx_features_general";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
$x++;
for ($i = 0; pg_num_fields($result) > $i; $i++) {
if (trim($dados[pg_field_name($result, $i)]) != '') {
if ((pg_field_name($result, $i) == 'parkext')or ( pg_field_name($result, $i) == 'parkpos')or ( pg_field_name($result, $i) == 'parkingtime')or ( pg_field_name($result, $i) == 'transferdigittimeout')or ( pg_field_name($result, $i) == 'findslot')) {
fwrite($escreve, pg_field_name($result, $i) . '=>' . $dados[pg_field_name($result, $i)] . "\n");
} else {
fwrite($escreve, pg_field_name($result, $i) . '=' . $dados[pg_field_name($result, $i)] . "\n");
}
}
}
}
fclose($escreve);
if ($reload)
CommandAsterisk($dbcon, 'FEATURES');
}
if ($tipo == 'VOICEMAIL') {
$arq = $caminho_producao . "voicemail.conf";
$escreve = fopen($arq, 'w');
$query = "SELECT attach, format, charset, \"delete\", emailsubject, emailbody, serveremail,
fromstring, mailcmd, forcegreetings, forcename,
maxmsg, maxmessage as maxsecs, minmessage as minsecs, maxgreet, maxsilence, silencethreshold,
maxlogins, skipms, saycid, emaildateformat, zonemessages
FROM pbx_voicemail_general";
$result = pg_query($dbcon, $query);
fwrite($escreve, '[general]' . "\n");
while ($dados = pg_fetch_array($result)) {
$x++;
for ($i = 0; pg_num_fields($result) > $i; $i++) {
if ($dados[pg_field_name($result, $i)] != '') {
if (pg_field_name($result, $i) == 'zonemessages') {
fwrite($escreve, '[zonemessages]' . "\n");
}
fwrite($escreve, pg_field_name($result, $i) . '=' . $dados[pg_field_name($result, $i)] . "\n");
}
}
}
fwrite($escreve, chr(13) . chr(10));
fwrite($escreve, '[default]' . "\n");
$query = "SELECT * FROM pbx_voicemail_usuarios order by id asc";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
fwrite($escreve, $dados['caixa_postal'] . '=>' . $dados['senha'] . ',' . $dados['nome'] . ',' . $dados['email'] . ',' . 'attach=' . $dados['attach'] . ',saycid=' . $dados['saycid'] . ',envelope=' . $dados['envelope'] . ',delete=' . $dados['delete'] . "\n");
}
fwrite($escreve, chr(13) . chr(10));
fclose($escreve);
if ($reload)
CommandAsterisk($dbcon, 'VOICE');
}
if ($tipo == 'SIP_GENERAL') {
$arq = $caminho_producao . "sip_general.conf";
$escreve = fopen($arq, 'w');
//externip='$externip', externhost='$externhost', localnet='$localnet',
$query = "SELECT nome, context, callerid, allowguest, allowoverlap, allowtransfer,
realm, bindport, bindaddr, srvlookup, pedantic, tos_sip, tos_audio,
tos_video, maxexpiry, minexpiry, notifymimetype, buggymwi, vmexten,
mohinterpret, mohsuggest, language, relaxdtmf, trustrpid, sendrpid,
progressinband, useragent, promiscredir, userqphone, dtmfmode,
compactheaders, videosupport, 'yes' as alwaysauthreject, g726nonstandard,
matchexterniplocally, regcontext, rtpkeepalive, sipdebug, recordhistory,
dumphistory, allowsubscribe, subscribecontext, notifyringing,
notifyhold, limitonpeers, t38pt_udptl, externip, externhost,
localnet, nat, canreinvite, directrtpsetup, rtcachefriends, rtsavesysname,
rtupdate, rtautoclear, ignoreregexpire, domain, autodomain,
allowexternaldomains, fromdomain, jbenable, jbforce, jbmaxsize,
jbresyncthreshold, jbimpl, jblog, auth FROM pbx_sip_general limit 1";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
$x++;
for ($i = 0; pg_num_fields($result) > $i; $i++) {
if (trim($dados[pg_field_name($result, $i)]) != '') {
if (pg_field_name($result, $i) != 'localnet') {
fwrite($escreve, pg_field_name($result, $i) . '=' . $dados[pg_field_name($result, $i)] . "\n");
}
}
}
// fwrite($escreve,'alwaysauthreject=yes'. "\n");
/*
* Escreve as redes locais.
*/
$redes = $dados['localnet'];
$redes = preg_split('/[\\\ | - ; , \n]/', $redes, -1, PREG_SPLIT_NO_EMPTY);
foreach ($redes as $rede) {
$rede = trim($rede);
if ($rede !== '') {
fwrite($escreve, "localnet=$rede\n");
}
}
}
fclose($escreve);
if ($reload)
CommandAsterisk($dbcon, 'SIP');
}
if ($tipo == 'QUEUES_GENERAL') {
$arq = $caminho_producao . "queues_general.conf";
$escreve = fopen($arq, 'w');
$query = "SELECT * FROM pbx_queues_general";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
$x++;
for ($i = 0; pg_num_fields($result) > $i; $i++) {
fwrite($escreve, pg_field_name($result, $i) . '=' . $dados[pg_field_name($result, $i)] . "\n");
}
}
fclose($escreve);
if ($reload)
CommandAsterisk($dbcon, 'QUEUES');
}
if ($tipo == 'IAX_GENERAL') {
$arq = $caminho_producao . "iax_general.conf";
$escreve = fopen($arq, 'w');
$query = "SELECT bindport, bindaddr, autokill, trunkfreq, trunktimestamps, minregexpire, maxregexpire, authdebug, tos FROM pbx_iax_general";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
$x++;
for ($i = 0; pg_num_fields($result) > $i; $i++) {
fwrite($escreve, pg_field_name($result, $i) . '=' . $dados[pg_field_name($result, $i)] . "\n");
}
}
fclose($escreve);
if ($reload)
CommandAsterisk($dbcon, 'IAX');
}
if ($tipo == 'DISA') {
$arq = $caminho_producao . "extensions_disa.conf";
$escreve = fopen($arq, 'w');
fwrite($escreve, '[ext-disa]' . "\n");
fwrite($escreve, 'include => ext-disa-custom' . "\n");
$query = "SELECT * FROM pbx_disa";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
$x++;
fwrite($escreve, 'exten => _' . $dados['numero'] . ',1,Answer()' . "\n");
fwrite($escreve, 'exten => _' . $dados['numero'] . ',n,ExecIf($["${ISNULL(${CDR(direcao)})}" = "1"]?Set(CDR(direcao)=I))' . "\n");
fwrite($escreve, 'exten => _' . $dados['numero'] . ',n,ExecIf($["${CDR(direcao)}" != "E" && "${ISNULL(${CDR(ramal_origem)})}" = "1"]?Set(CDR(ramal_origem)=${CALLERID(num)}))' . "\n");
fwrite($escreve, 'exten => _' . $dados['numero'] . ',n,Set(CHANNEL(accountcode)=${TRANSFER})' . "\n");
fwrite($escreve, 'exten => _' . $dados['numero'] . ',n,Agi(pbx_complemento.php,ext-disa)' . "\n");
$sql_conta = pg_query("SELECT * FROM pbx_disa_numeros where id_disa=" . $dados['id'] . " order by id asc");
$quantreg = pg_num_rows($sql_conta);
if ($quantreg > 0) {
fwrite($escreve, 'exten => _' . $dados['numero'] . ',n,Agi(disa.php,${CALLERID(NUM):-13})' . "\n");
}
fwrite($escreve, 'exten => _' . $dados['numero'] . ',n,Set(TIMEOUT(digit)=' . $dados['tempo_timeout'] . ')' . "\n");
fwrite($escreve, 'exten => _' . $dados['numero'] . ',n,Set(TIMEOUT(response)=' . $dados['timeout'] . ')' . "\n");
if (trim($dados['senha']) != '') {
fwrite($escreve, 'exten => _' . $dados['numero'] . ',n,Authenticate(' . $dados['senha'] . ')' . "\n");
}
// Ramal saida
fwrite($escreve, 'exten => _' . $dados['numero'] . ',n,Set(CALLERID(NUM)=' . $dados['ramal_saida'] . ')' . "\n");
if ($dados['ligacao_externa'])
fwrite($escreve, 'exten => _' . $dados['numero'] . ',n,Set(__PERMISSAO=OK)' . "\n");
fwrite($escreve, 'exten => _' . $dados['numero'] . ',n,DISA(no-password,disa)' . "\n");
fwrite($escreve, 'exten => _' . $dados['numero'] . ',n,Hangup()' . "\n");
$opcao = trim($dados['opcao']);
if (!empty($opcao)) {
$dispAcao = GetOpcaoAcao($dados['opcao'], $dados['acao']);
$dispAcao = sprintf('exten => _%s,n(destino),%s%s', $dados['numero'], $dispAcao, "\n");
fwrite($escreve, $dispAcao);
}
fwrite($escreve, sprintf('exten => _%s,n%s,Hangup()', $dados['numero'], $opcao ? '' : '(destino)') . "\n");
}
fclose($escreve);
if ($reload)
CommandAsterisk($dbcon, 'DISA');
if ($reloadUra)
CommandAsterisk($dbcon, 'URA');
}
if ($tipo == "TESTES") {
$arq = $caminho_producao . "extensions_teste.conf";
$escreve = fopen($arq, 'w+');
fwrite($escreve, '[ext-testes]' . "\n");
fwrite($escreve, 'include => ext-testes-custom' . "\n");
fwrite($escreve, 'exten => h,1,Macro(hangup)' . "\n");
$query = "SELECT id,permite_ligacao,tempo_espera,som_ura,teste FROM pbx_ura where teste <> '' order by id asc";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
fwrite($escreve, 'exten => _' . $dados['teste'] . ',1,ExecIf($["${ISNULL(${CDR(direcao)})}" = "1"]?Set(CDR(direcao)=I))' . "\n");
fwrite($escreve, 'exten => _' . $dados['teste'] . ',n,ExecIf($["${CDR(direcao)}" != "E" && "${ISNULL(${CDR(ramal_origem)})}" = "1"]?Set(CDR(ramal_origem)=${CALLERID(num)}))' . "\n");
fwrite($escreve, 'exten => _' . $dados['teste'] . ',n,Set(CHANNEL(accountcode)=${TRANSFER})' . "\n");
fwrite($escreve, 'exten => _' . $dados['teste'] . ',n,AGI(pbx_complemento.php,ext-testes)' . "\n");
fwrite($escreve, 'exten => _' . $dados['teste'] . ',n,Goto(ura-' . $dados['id'] . ',s,1)' . "\n");
fwrite($escreve, 'exten => _' . $dados['teste'] . ',n,Hangup()' . "\n");
}
$query2 = "SELECT * FROM pbx_horarios where discar <> '' order by id asc";
$result2 = pg_query($dbcon, $query2);
while ($dados2 = pg_fetch_array($result2)) {
fwrite($escreve, 'exten => _' . $dados2['discar'] . ',1,ExecIf($["${ISNULL(${CDR(direcao)})}" = "1"]?Set(CDR(direcao)=I))' . "\n");
fwrite($escreve, 'exten => _' . $dados2['discar'] . ',n,ExecIf($["${CDR(direcao)}" != "E" && "${ISNULL(${CDR(ramal_origem)})}" = "1"]?Set(CDR(ramal_origem)=${CALLERID(num)}))' . "\n");
fwrite($escreve, 'exten => _' . $dados2['discar'] . ',n,Set(CHANNEL(accountcode)=${TRANSFER})' . "\n");
fwrite($escreve, 'exten => _' . $dados2['discar'] . ',n,AGI(pbx_complemento.php,ext-testes)' . "\n");
fwrite($escreve, 'exten => _' . $dados2['discar'] . ',n,Goto(ext-horarios,' . $dados2['id'] . ',1)' . "\n");
fwrite($escreve, 'exten => _' . $dados2['discar'] . ',n,Hangup()' . "\n");
}
$query2 = "select * from pbx_anuncios where teste <> '' order by id asc";
$result2 = pg_query($dbcon, $query2);
while ($dados2 = pg_fetch_array($result2)) {
fwrite($escreve, 'exten => _' . $dados2['teste'] . ',1,ExecIf($["${ISNULL(${CDR(direcao)})}" = "1"]?Set(CDR(direcao)=I))' . "\n");
fwrite($escreve, 'exten => _' . $dados2['teste'] . ',n,ExecIf($["${CDR(direcao)}" != "E" && "${ISNULL(${CDR(ramal_origem)})}" = "1"]?Set(CDR(ramal_origem)=${CALLERID(num)}))' . "\n");
fwrite($escreve, 'exten => _' . $dados2['teste'] . ',n,Set(CHANNEL(accountcode)=${TRANSFER})' . "\n");
fwrite($escreve, 'exten => _' . $dados2['teste'] . ',n,AGI(pbx_complemento.php,ext-testes)' . "\n");
fwrite($escreve, 'exten => _' . $dados2['teste'] . ',n,Goto(ext-anuncios,a' . $dados2['id'] . ',1)' . "\n");
fwrite($escreve, 'exten => _' . $dados2['teste'] . ',n,Hangup()' . "\n");
}
fclose($escreve);
if ($reloadUra)
CommandAsterisk($dbcon, 'URA');
}
if ($tipo == 'HORARIOS') {
$arq = $caminho_producao . "extensions_horarios.conf";
$escreve = fopen($arq, 'w');
fwrite($escreve, '[ext-horarios]' . "\n");
fwrite($escreve, 'include => ext-horarios-custom' . "\n");
fwrite($escreve, 'exten => h,1,Macro(hangup)' . "\n");
$query = "SELECT distinct a.id, a.nome, a.discar, a.opcao_nao, a.acao_nao
FROM pbx_horarios a, pbx_horarios_itens b
where b.id_horario = a.id order by a.id";
$query1 = "select * from (SELECT b.id, b.id_horario, b.horario_inicio, b.horario_fim, b.todos_dias_semana, b.semana, b.
semana_fim, b.todos_dias_mes, b.dias_mes, b.dias_mes_fim, b.todos_mes, b.mes, b.
mes_fim, b.opcao, b.acao, case when(b.feriado = 'A')then 0 else 1 end as feriado
FROM pbx_horarios a, pbx_horarios_itens b
where b.id_horario = a.id
and b.id_horario = '{ID}')as itens order by feriado asc, id desc";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
$x++;
$idHorario = $dados['id'];
fwrite($escreve, 'exten => ' . $idHorario . ',1,ExecIf($["${ISNULL(${CDR(direcao)})}" = "1"]?Set(CDR(direcao)=I))' . "\n");
fwrite($escreve, 'exten => ' . $idHorario . ',n,ExecIf($["${CDR(direcao)}" != "E" && "${ISNULL(${CDR(ramal_origem)})}" = "1"]?Set(CDR(ramal_origem)=${CALLERID(num)}))' . "\n");
fwrite($escreve, 'exten => ' . $idHorario . ',n,Agi(pbx_complemento.php,ext-horarios)' . "\n");
$sql = str_replace("{ID}", $idHorario, $query1);
$result1 = pg_query($dbcon, $sql);
$ln = 0;
$lnTotal = pg_num_rows($result1);
$integraAtiva = strtoupper($opcao_ok) == "INTEGATIVA";
while ($dados1 = pg_fetch_array($result1)) {
$ln++;
$opcao_ok = $dados1['opcao'];
$acao_ok = $dados1['acao'];
$horaIni = $dados1['horario_inicio'];
$horaFim = $dados1['horario_fim'];
$diaSemana = $dados1['todos_dias_semana'] ? '*' : $dados1['semana'] . ($dados1['semana'] == $dados1['semana_fim'] ? "" : '-' . $dados1['semana_fim']);
$diaMes = $dados1['todos_dias_mes'] ? '*' : $dados1['dias_mes'] . ($dados1['dias_mes'] == $dados1['dias_mes_fim'] ? "" : '-' . $dados1['dias_mes_fim']);
$mes = $dados1['todos_mes'] ? '*' : $dados1['mes'] . ( $dados1['mes'] == $dados1['mes_fim'] ? "" : '-' . $dados1['mes_fim']);
$strIntegra = $integraAtiva ? "integracao)\n" : "";
$linha = sprintf('exten => %s,n,GotoIfTime(%s-%s,%s,%s,%s?%s', $idHorario, $horaIni, $horaFim, $diaSemana, $diaMes, $mes, $strIntegra);
fwrite($escreve, $linha);
if (!$integraAtiva) {
$dispAcao = GetOpcaoAcao($opcao_ok, $acao_ok, $tipo);
$dispAcao = sprintf('%s)%s', $dispAcao, "\n");
fwrite($escreve, $dispAcao);
}
}
$opcNao = $dados['opcao_nao'];
$acaoNao = $dados['acao_nao'];
$integraAtiva = strtoupper($opcNao) == "INTEGATIVA";
if (!empty($dados['opcao_nao'])) {
if ($integraAtiva) {
$dispAcao = GetOpcaoAcao($opcNao, $acaoNao, $tipo);
$linha = sprintf('exten => %s,n,%s%s', $idHorario, $dispAcao, "\n");
fwrite($escreve, $linha);
$linha = sprintf('exten => %s,n,Hangup()%s', $idHorario, "\n");
fwrite($escreve, $linha);
} else {
//fwrite($escreve, 'exten => ' . $idHorario . ',n,Set(CDR(userfield)=fora-do-horario)' . "\n");
fwrite($escreve, 'exten => ' . $idHorario . ',n,Set(CDR(fora_horario)=1)' . "\n");
fwrite($escreve, 'exten => ' . $idHorario . ',n,Goto(');
$dispAcao = GetOpcaoAcao($dados['opcao_nao'], $dados['acao_nao'], $tipo);
$dispAcao = sprintf('%s)%s', $dispAcao, "\n");
fwrite($escreve, $dispAcao);
}
}
//fwrite($escreve, 'exten => ' . $idHorario . ',n,Set(CDR(userfield)=fora-do-horario)' . "\n");
fwrite($escreve, 'exten => ' . $idHorario . ',n,Hangup()' . "\n");
$integraAtiva = strtoupper($opcao_ok) == "INTEGATIVA";
if ($integraAtiva) {
$dispAcao = GetOpcaoAcao($opcao_ok, $acao_ok, $tipo);
$linha = sprintf('exten => %s,n(integracao),%s%s', $idHorario, $dispAcao, "\n");
fwrite($escreve, $linha);
$linha = sprintf('exten => %s,n,Hangup()%s', $idHorario, "\n");
fwrite($escreve, $linha);
}
}
fclose($escreve);
if ($reload)
CommandAsterisk($dbcon, 'HORARIOS');
if ($reloadUra)
CommandAsterisk($dbcon, 'URA');
}
if ($tipo == 'GRUPOS') {
$arq = $caminho_producao . "extensions_grupos.conf";
$escreve = fopen($arq, 'w');
fwrite($escreve, '[ext-grupos]' . "\n");
fwrite($escreve, 'include => ext-grupos-custom' . "\n");
$query = "SELECT * FROM pbx_grupos";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
fwrite($escreve, 'exten => ' . $dados['numero'] . ',1,Set(CHANNEL(accountcode)=${TRANSFER})' . "\n");
fwrite($escreve, 'exten => ' . $dados['numero'] . ',n,Agi(pbx_complemento.php,ext-grupos)' . "\n");
if (trim($dados['anuncio']) != '') {
$music = explode('.', trim($dados['anuncio']));
fwrite($escreve, 'exten => ' . $dados['numero'] . ',n,Background(customizados/' . $music[0] . ')' . "\n");
}
if (trim($dados['tipo']) == 'sequencial') {
$query2 = "SELECT * FROM pbx_grupos_numeros where id_grupo=" . $dados['id'];
$result2 = pg_query($dbcon, $query2);
$n = 0;
while ($dados2 = pg_fetch_array($result2)) {
$n++;
if ($dados['musica_espera'] == 'S') {
if ($n == 1) {
//fwrite($escreve,'exten => '.$dados['numero'].',n(inicio),Dial(${DB(DIAL/'.$dados2['ramal'].')},'.$dados['tempo_ring'].',Ttm('.$dados['musicclass'].'))'. "\n");
fwrite($escreve, 'exten => ' . $dados['numero'] . ',n(inicio),Dial(Local/' . $dados2['ramal'] . '@ext-ramais,' . $dados['tempo_ring'] . ',Ttm(' . $dados['musicclass'] . '))' . "\n");
} else {
//fwrite($escreve,'exten => '.$dados['numero'].',n,Dial(${DB(DIAL/'.$dados2['ramal'].')},'.$dados['tempo_ring'].',Ttm('.$dados['musicclass'].'))'. "\n");
fwrite($escreve, 'exten => ' . $dados['numero'] . ',n,Dial(Local/' . $dados2['ramal'] . '@ext-ramais,' . $dados['tempo_ring'] . ',Ttm(' . $dados['musicclass'] . '))' . "\n");
}
} else {
if ($n == 1) {
//fwrite($escreve,'exten => '.$dados['numero'].',n(inicio),Dial(${DB(DIAL/'.$dados2['ramal'].')},'.$dados['tempo_ring'].',Ttr)'. "\n");
fwrite($escreve, 'exten => ' . $dados['numero'] . ',n(inicio),Dial(Local/' . $dados2['ramal'] . '@ext-ramais,' . $dados['tempo_ring'] . ',Ttr)' . "\n");
} else {
//fwrite($escreve,'exten => '.$dados['numero'].',n,Dial(${DB(DIAL/'.$dados2['ramal'].')},'.$dados['tempo_ring'].',Ttr)'. "\n");
fwrite($escreve, 'exten => ' . $dados['numero'] . ',n,Dial(Local/' . $dados2['ramal'] . '@ext-ramais,' . $dados['tempo_ring'] . ',Ttr)' . "\n");
}
}
}
} else {
$query2 = "SELECT * FROM pbx_grupos_numeros where id_grupo=" . $dados['id'];
$result2 = pg_query($dbcon, $query2);
$n = 0;
while ($dados2 = pg_fetch_array($result2)) {
$n++;
if ($n == 1) {
fwrite($escreve, 'exten => ' . $dados['numero'] . ',n(inicio),Dial(Local/' . $dados2['ramal'] . '@ext-ramais');
} else {
fwrite($escreve, '&Local/' . $dados2['ramal'] . '@ext-ramais');
}
}
if (trim($dados['musica_espera']) == 'S') {
fwrite($escreve, ',' . $dados['tempo_ring'] . ',Ttm(' . $dados['musicclass'] . '))' . "\n");
} else {
fwrite($escreve, ',' . $dados['tempo_ring'] . ',Ttr)' . "\n");
}
}
if (!empty($dados['opcao'])) {
$dispAcao = GetOpcaoAcao($dados['opcao'], $dados['acao']);
$dispAcao = sprintf('exten => %s,n,%s%s', $dados['numero'], $dispAcao, "\n");
fwrite($escreve, $dispAcao);
fwrite($escreve, 'exten => ' . $dados['numero'] . ',n,Hangup()' . "\n");
}
if (trim($dados['tentar_novamente']) == 'V') {
fwrite($escreve, 'exten => ' . $dados['numero'] . ',n,Goto(inicio)' . "\n");
}
fwrite($escreve, 'exten => ' . $dados['numero'] . ',n,Hangup()' . "\n");
}
fclose($escreve);
if ($reload)
CommandAsterisk($dbcon, 'GRUPO');
if ($reloadUra)
CommandAsterisk($dbcon, 'URA');
}
if ($tipo == "FACILIDADES") {
$arq = $caminho_producao . "extensions_facilidades.conf";
$escreve = fopen($arq, 'w');
$query2 = "SELECT * FROM pbx_facilidades limit 1";
$result2 = pg_query($dbcon, $query2);
if ($dados2 = pg_fetch_array($result2)) {
$comando = $dados2['app_identifica_ramal'];
fwrite($escreve, '[app-identifica-ramal]' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',1,NoCDR()' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(pbx_complemento.php,aplicacoes)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Playback(appsounds/ramal)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,SayDigits(${CALLERID(NUM)})' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Hangup()' . "\n");
$comando = $dados2['app_hora'];
fwrite($escreve, '[app-hora]' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',1,NoCDR()' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(pbx_complemento.php,aplicacoes)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Answer()' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,SayUnixTime(,,HMS)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Hangup()' . "\n");
$comando = $dados2['app_echo'];
fwrite($escreve, '[app-echo]' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',1,NoCDR()' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(pbx_complemento.php,aplicacoes)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Answer()' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Playback(demo-echotest)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Echo()' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Playback(demo-echodone)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Hangup()' . "\n");
$comando = $dados2['app_troca_senha_ramal'];
fwrite($escreve, '[app-troca-senha-ramal]' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',1,NoCDR()' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(pbx_complemento.php,aplicacoes)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Authenticate(${DB(SENHA/${CALLERID(NUM)})},d,)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Read(NOVASENHA,vm-newpassword,,n)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,GotoIf($["${LEN(${NOVASENHA})}" = "${LEN(${CALLERID(NUM)})}"]?confirmasenha)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Playback(invalid)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Hangup()' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n(confirmasenha),Read(CONFIRMASENHA,vm-reenterpassword,,n)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,GotoIf($["${NOVASENHA}" = "${CONFIRMASENHA}"]?final)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Playback(incorrect-password)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Hangup()' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n(final),Set(DB(SENHA/${CALLERID(NUM)})=${NOVASENHA})' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(facilidades.php,${NOVASENHA})' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Wait(1)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Playback(vm-passchanged&vm-goodbye)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Hangup()' . "\n");
$comando = $dados2['app_nao_pertube_ativa'];
fwrite($escreve, '[app-nao-pertube]' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',1,NoCDR()' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(pbx_complemento.php,aplicacoes)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Authenticate(${DB(SENHA/${CALLERID(NUM)})},d,)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Noop(Ativando função não pertube)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Set(DB(NAOPERTUBE/${CALLERID(num)})=V)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(facilidades.php)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Playback(beep&beep&activated)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Hangup()' . "\n");
$comando = $dados2['app_nao_pertube_desativa'];
fwrite($escreve, 'exten => ' . $comando . ',1,NoCDR()' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(pbx_complemento.php,aplicacoes)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Authenticate(${DB(SENHA/${CALLERID(NUM)})},d,)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Noop(Desativando função não pertube)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Set(DB(NAOPERTUBE/${CALLERID(num)})=F)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(facilidades.php)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Playback(beep&beep&de-activated)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Hangup()' . "\n");
$comando = $dados2['app_siga_me_interno_ativa'];
fwrite($escreve, '[app-siga-me]' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',1,NoCDR()' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(pbx_complemento.php,aplicacoes)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Authenticate(${DB(SENHA/${CALLERID(NUM)})},d,)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Playback(vm-enter-num-to-call&vm-then-pound)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Read(DESTINO,,,n) ' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Noop(Ativando função siga-me interno para o ramal ${DESTINO})' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Set(DB(SIGAME-INTERNO/${CALLERID(num)})=${DESTINO})' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(facilidades.php,${DESTINO})' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Playback(beep&beep&activated)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Hangup()' . "\n");
$comando = $dados2['app_siga_me_interno_desativa'];
fwrite($escreve, 'exten => ' . $comando . ',1,NoCDR()' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(pbx_complemento.php,aplicacoes)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Authenticate(${DB(SENHA/${CALLERID(NUM)})},d,)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Noop(Desativando função siga-me interno)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Set(DB(SIGAME-INTERNO/${CALLERID(num)})=F)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(facilidades.php)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Playback(beep&beep&de-activated)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Hangup()' . "\n");
$comando = $dados2['app_siga_me_externo_ativa'];
fwrite($escreve, 'exten => ' . $comando . ',1,NoCDR()' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(pbx_complemento.php,aplicacoes)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Authenticate(${DB(SENHA/${CALLERID(NUM)})},d,)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Noop(Ativando função siga-me externo para o numero ${EXTEN:5})' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Playback(vm-enter-num-to-call&vm-then-pound)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Read(DESTINO,,,n)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Set(DB(SIGAME-EXTERNO/${CALLERID(num)})=${DESTINO})' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(facilidades.php,${DESTINO})' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Playback(beep&beep&activated)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Hangup()' . "\n");
$comando = $dados2['app_siga_me_externo_desativa'];
fwrite($escreve, 'exten => ' . $comando . ',1,NoCDR()' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(pbx_complemento.php,aplicacoes)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Authenticate(${DB(SENHA/${CALLERID(NUM)})},d,)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Noop(Desativando função siga-me externo)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Set(DB(SIGAME-EXTERNO/${CALLERID(num)})=F)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(facilidades.php)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Playback(beep&beep&de-activated)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Hangup()' . "\n");
$comando = $dados2['app_siga_me_ocupado_ativa'];
fwrite($escreve, 'exten => ' . $comando . ',1,NoCDR()' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(pbx_complemento.php,aplicacoes)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Authenticate(${DB(SENHA/${CALLERID(NUM)})},d,)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Noop(Ativando função siga-me quando ocupado para o numero ${EXTEN:5})' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Playback(vm-enter-num-to-call&vm-then-pound)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Read(DESTINO,,,n)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Set(DB(SIGAME-OCUPADO/${CALLERID(num)})=${DESTINO})' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(facilidades.php,${DESTINO})' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Playback(beep&beep&activated)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Hangup()' . "\n");
$comando = $dados2['app_siga_me_ocupado_desativa'];
fwrite($escreve, 'exten => ' . $comando . ',1,NoCDR()' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(pbx_complemento.php,aplicacoes)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Authenticate(${DB(SENHA/${CALLERID(NUM)})},d,)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Noop(Desativando função siga-me ocupado)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Set(DB(SIGAME-OCUPADO/${CALLERID(num)})=F)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(facilidades.php)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Playback(beep&beep&de-activated)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Hangup()' . "\n");
$comando = $dados2['app_siga_me_nresponde_ativa'];
fwrite($escreve, 'exten => ' . $comando . ',1,NoCDR()' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(pbx_complemento.php,aplicacoes)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Authenticate(${DB(SENHA/${CALLERID(NUM)})},d,)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Noop(Ativando função siga-me externo para o numero ${EXTEN:5})' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n(inicio),Playback(vm-enter-num-to-call&vm-then-pound)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Read(DESTINO,,,n,,)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,GotoIf($["X${DESTINO}" = "X"]?invalido)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Set(DB(SIGAME-NAOATENDE/${CALLERID(num)})=${DESTINO})' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(facilidades.php,${DESTINO})' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Playback(beep&beep&activated)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Hangup()' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n(invalido),Playback(invalid)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Goto(inicio)' . "\n");
$comando = $dados2['app_siga_me_nresponde_desativa'];
fwrite($escreve, 'exten => ' . $comando . ',1,NoCDR()' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(pbx_complemento.php,aplicacoes)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Authenticate(${DB(SENHA/${CALLERID(NUM)})},d,)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Noop(Desativando função siga-me externo)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Set(DB(SIGAME-NAOATENDE/${CALLERID(num)})=F)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(facilidades.php)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Playback(beep&beep&de-activated)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Hangup()' . "\n");
fwrite($escreve, '[app-rechamada]' . "\n");
$comando = $dados2['app_rechamada_ativa'];
fwrite($escreve, 'exten => ' . $comando . ',1,NoCDR()' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(pbx_complemento.php,aplicacoes)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Set(ARQUIVO=${DB(RECHAMADA/${CALLERID(NUM)})})' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,System(/bin/rm ${ARQUIVO})' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Playback(beep&beep&activated)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(rechamada.php,${CALLERID(NUM)})' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Hangup()' . "\n");
$comando = $dados2['app_rechamada_desativa'];
fwrite($escreve, 'exten => ' . $comando . ',1,NoCDR()' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(pbx_complemento.php,aplicacoes)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Set(ARQUIVO=${DB(RECHAMADA/${CALLERID(NUM)})})' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,System(/bin/rm ${ARQUIVO})' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Set(DB(RECHAMADA/${CALLERID(NUM)})=F)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Playback(beep&beep&de-activated)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Hangup()' . "\n");
$comando = $dados2['app_cadeado_ativa'];
fwrite($escreve, '[app-cadeado]' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',1,NoCDR()' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(pbx_complemento.php,aplicacoes)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Authenticate(${DB(SENHA/${CALLERID(NUM)})},d,)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Noop(Ativando função Cadeado Eletronico)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Set(DB(CADEADO/${CALLERID(NUM)})=V)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(facilidades.php)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Playback(beep&beep&activated)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Hangup()' . "\n");
$comando = $dados2['app_cadeado_desativa'];
fwrite($escreve, 'exten => ' . $comando . ',1,NoCDR()' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(pbx_complemento.php,aplicacoes)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Authenticate(${DB(SENHA/${CALLERID(NUM)})},d,)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Noop(Desativando função Cadeado Eletronico)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Set(DB(CADEADO/${CALLERID(NUM)})=F)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(facilidades.php)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Playback(beep&beep&de-activated)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Hangup()' . "\n");
$comando = $dados2['app_chamada_espera_ativa'];
fwrite($escreve, '[app-chamada-espera]' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',1,NoCDR()' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(pbx_complemento.php,aplicacoes)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Authenticate(${DB(SENHA/${CALLERID(NUM)})},d,)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Noop(Ativando função Cadeado Eletronico)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Set(DB(CHAMADA-ESPERA/${CALLERID(NUM)})=V)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(facilidades.php)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Playback(beep&beep&activated)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Hangup()' . "\n");
$comando = $dados2['app_chamada_espera_desativa'];
fwrite($escreve, 'exten => ' . $comando . ',1,NoCDR()' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(pbx_complemento.php,aplicacoes)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Authenticate(${DB(SENHA/${CALLERID(NUM)})},d,)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Noop(Desativando função Cadeado Eletronico)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Set(DB(CHAMADA-ESPERA/${CALLERID(NUM)})=F)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(facilidades.php)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Playback(beep&beep&de-activated)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Hangup()' . "\n");
$comando = $dados2['app_identifica_vm'];
fwrite($escreve, '[app-identifica-vm]' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',1,NoCDR()' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(pbx_complemento.php,aplicacoes)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Playback(appsounds/vm-caixapostal)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Set(VM=${DB(VM/${CALLERID(NUM)})})' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,SayDigits(${VM})' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Playback(auth-thankyou)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Hangup()' . "\n");
$comando = $dados2['app_acessa_vm'];
fwrite($escreve, '[app-acessa-vm]' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',1,NoCDR()' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(pbx_complemento.php,aplicacoes)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,VoiceMailMain(${DB(VM/${CALLERID(NUM)})})' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Hangup()' . "\n");
$comando = $dados2['app_agenda_ramal_adiciona'];
fwrite($escreve, '[app-agenda-ramal]' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',1,NoCDR()' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(pbx_complemento.php,aplicacoes)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Authenticate(${DB(SENHA/${CALLERID(NUM)})},d,)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Noop(Ativando Agenda Ramal)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n(inicio),Background(speed-enterlocation&vm-then-pound,n)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Read(POSICAO-AGENDA,,,n,,30)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,GotoIf($["X${POSICAO-AGENDA}" = "X"]?invalido)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Background(speed-enternumber&vm-then-pound,n)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Read(DESTINO-AGENDA,,,n,,30)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,GotoIf($["X${DESTINO-AGENDA}" = "X"]?invalido)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Set(DB(AGENDA/${CALLERID(NUM)}/${POSICAO-AGENDA})=${DESTINO-AGENDA})' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(facilidades.php,${CALLERID(NUM)},${POSICAO-AGENDA},${DESTINO-AGENDA})' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Playback(beep&beep&activated)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Goto(inicio)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Hangup()' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n(invalido),Playback(invalid)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Goto(inicio)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Hangup()' . "\n");
$comando = $dados2['app_agenda_ramal_exclui'];
fwrite($escreve, 'exten => ' . $comando . ',1,NoCDR()' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(pbx_complemento.php,aplicacoes)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Authenticate(${DB(SENHA/${CALLERID(NUM)})},d,)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Noop(Desativando Agenda Ramal)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n(inicio),Background(speed-enterlocation&vm-then-pound,n)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Read(POSICAO-AGENDA,,,n,,30)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,GotoIf($["X${POSICAO-AGENDA}" = "X"]?invalido)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Noop(${DB_DELETE(AGENDA/${CALLERID(NUM)}/${POSICAO-AGENDA})})' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(facilidades.php,${CALLERID(NUM)},${POSICAO-AGENDA},${DESTINO-AGENDA})' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Playback(beep&beep&de-activated)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Goto(inicio)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Hangup()' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n(invalido),Playback(invalid)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Goto(inicio)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Hangup()' . "\n");
$comando = $dados2['app_agenda_publica_adiciona'];
fwrite($escreve, '[app-agenda-publica]' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',1,NoCDR()' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(pbx_complemento.php,aplicacoes)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Authenticate(${DB(SENHA/${CALLERID(NUM)})},d,)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Noop(Ativando Agenda Publica)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n(inicio),Background(speed-enterlocation&vm-then-pound,n)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Read(POSICAO-AGENDA,,,n,,30)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,GotoIf($["X${POSICAO-AGENDA}" = "X"]?invalido)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Background(speed-enternumber&vm-then-pound,n)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Read(DESTINO-AGENDA,,,n,,30)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,GotoIf($["X${DESTINO-AGENDA}" = "X"]?invalido)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Set(DB(AGENDA/${POSICAO-AGENDA})=${DESTINO-AGENDA})' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(facilidades.php,${POSICAO-AGENDA},${DESTINO-AGENDA})' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Playback(beep&beep&activated)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Goto(inicio)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Hangup()' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n(invalido),Playback(invalid)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Goto(inicio)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Hangup()' . "\n");
$comando = $dados2['app_agenda_publica_exclui'];
fwrite($escreve, 'exten => ' . $comando . ',1,NoCDR()' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(pbx_complemento.php,aplicacoes)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Authenticate(${DB(SENHA/${CALLERID(NUM)})},d,)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Noop(Desativando Agenda Publica)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n(inicio),Background(speed-enterlocation&vm-then-pound,n)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Read(POSICAO-AGENDA,,,n,,30)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,GotoIf($["X${POSICAO-AGENDA}" = "X"]?invalido)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Noop(${DB_DELETE(AGENDA/${POSICAO-AGENDA})})' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(facilidades.php,${POSICAO-AGENDA},${DESTINO-AGENDA})' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Playback(beep&beep&de-activated)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Goto(inicio)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Hangup()' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n(invalido),Playback(invalid)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Goto(inicio)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Hangup()' . "\n");
$comando = $dados2['app_ultimo_recebido'];
fwrite($escreve, '[app-ultimo-recebido]' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',1,NoCDR()' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(pbx_complemento.php,aplicacoes)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,SayDigits(${DB(ULTIMO-RECEBIDO/${CALLERID(num)})})' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Hangup()' . "\n");
/*
$comando = $dados2['app_monitoramento'];
fwrite($escreve, '[app-monitoramento]' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',1,NoCDR()' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(pbx_complemento.php,aplicacoes)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,GotoIf($["X${DB(MONITORAMENTO/${CALLERID(NUM)})}" = "X"]?negado)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n(inicio),Read(DESTINO-MONITOR,vm-enter-num-to-call,,n,,)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,GotoIf($["X${DESTINO-MONITOR}" = "X"]?invalido)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,ChanSpy(${DB(DIAL/${DESTINO-MONITOR})},bq) ' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Hangup()' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n(invalido),Playback(invalid)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Goto(inicio)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n(negado),Playback(appsounds/ramal-invalido&vm-goodbye)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Hangup()' . "\n");
$comando = $dados2['app_intercalar'];
fwrite($escreve, '[app-intercalar]' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',1,NoCDR()' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(pbx_complemento.php,aplicacoes)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,GotoIf($["X${DB(MONITORAMENTO/${CALLERID(NUM)})}" = "X"]?negado)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n(inicio),Read(DESTINO-MONITOR,vm-enter-num-to-call,,n,,)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,GotoIf($["X${DESTINO-MONITOR}" = "X"]?invalido)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,ChanSpy(${DB(DIAL/${DESTINO-MONITOR})},bqw) ' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Hangup()' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n(invalido),Playback(invalid)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Goto(inicio)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n(negado),Playback(appsounds/ramal-invalido&vm-goodbye)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Hangup()' . "\n");
*/
$comando = trim($dados2['app_discagem_agenda_ramal']);
$qtde = strlen($comando);
fwrite($escreve, '[app-discagem-agenda]' . "\n");
fwrite($escreve, 'exten => _' . $comando . '.,1,AGI(pbx_complemento.php,app-discagem-agenda)' . "\n");
fwrite($escreve, 'exten => _' . $comando . '.,n,GotoIf($["X${DB(AGENDA/${CALLERID(NUM)}/${EXTEN:' . $qtde . '})}" = "X"]?vazia)' . "\n");
fwrite($escreve, 'exten => _' . $comando . '.,n,Goto(saida-pstn,${DB(AGENDA/${CALLERID(NUM)}/${EXTEN:' . $qtde . '})},disca)' . "\n");
fwrite($escreve, 'exten => _' . $comando . '.,n,Hangup()' . "\n");
fwrite($escreve, 'exten => _' . $comando . '.,n(vazia),Playback(speed-dial-empty)' . "\n");
fwrite($escreve, 'exten => _' . $comando . '.,n,Hangup()' . "\n");
$comando = trim($dados2['app_discagem_agenda_publica']);
$qtde = strlen($comando);
fwrite($escreve, 'exten => _' . $comando . '.,1,AGI(pbx_complemento.php,app_discagem_agenda_ramal)' . "\n");
fwrite($escreve, 'exten => _' . $comando . '.,n,GotoIf($["X${DB(AGENDA/${EXTEN:' . $qtde . '})}" = "X"]?vazia)' . "\n");
fwrite($escreve, 'exten => _' . $comando . '.,n,Goto(saida-pstn,${DB(AGENDA/${EXTEN:' . $qtde . '})},disca)' . "\n");
fwrite($escreve, 'exten => _' . $comando . '.,n,Hangup()' . "\n");
fwrite($escreve, 'exten => _' . $comando . '.,n(vazia),Playback(speed-dial-empty)' . "\n");
fwrite($escreve, 'exten => _' . $comando . '.,n,Hangup()' . "\n");
$comando = $dados2['troca_senha'];
fwrite($escreve, '[troca-senha]' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',1,Answer()' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(pbx_complemento.php,aplicacoes)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Goto(troca-senha-conta,s,1)' . "\n");
$sql = "select prm_digitos_conta, prm_digitos_senha from pbx_parametros";
$result = pg_query($dbcon, $sql);
$row = pg_fetch_array($result);
$prm_digitos_conta = trim($row['prm_digitos_conta']);
$prm_digitos_conta = $prm_digitos_conta ? str_repeat('X', $prm_digitos_conta) : 'X.';
$prm_digitos_senha = trim($row['prm_digitos_senha']);
$prm_digitos_senha = $prm_digitos_senha ? str_repeat('X', $prm_digitos_senha) : 'X.';
fwrite($escreve, '[troca-senha-conta]' . "\n");
fwrite($escreve, 'exten => s,1,Answer()' . "\n");
fwrite($escreve, 'exten => s,n,Background(appsounds/codigodeacesso&beep)' . "\n");
fwrite($escreve, 'exten => s,n,WaitExten()' . "\n");
fwrite($escreve, 'exten => _' . $prm_digitos_conta . ',1,Set(__CONTA=${EXTEN})' . "\n"); // ====> A QUANTIDADE DE X DEVE SER A MESMA CONFIGURADA NO CAMPO CONTA DO SISTEMA
fwrite($escreve, 'exten => _' . $prm_digitos_conta . ',n,Goto(troca-senha-senhaatual,s,1)' . "\n");
fwrite($escreve, '[troca-senha-senhaatual]' . "\n");
fwrite($escreve, 'exten => s,1,Answer()' . "\n");
fwrite($escreve, 'exten => s,n,Background(appsounds/senhaatual&beep)' . "\n");
fwrite($escreve, 'exten => s,n,WaitExten()' . "\n");
fwrite($escreve, 'exten => _' . $prm_digitos_senha . ',1,Set(_ATUAL=${EXTEN})' . "\n"); // ====> A QUANTIDADE DE X DEVE SER A MESMA CONFIGURADA NO CAMPO SENHA DO SISTEMA
fwrite($escreve, 'exten => _' . $prm_digitos_senha . ',n,AGI(confirma_senha.php)' . "\n");
fwrite($escreve, 'exten => _' . $prm_digitos_senha . ',n,Noop(atual ? = ${ATUAL})' . "\n");
fwrite($escreve, 'exten => _' . $prm_digitos_senha . ',n,Noop(atual no banco ? = ${ATUAL_DB})' . "\n");
fwrite($escreve, 'exten => _' . $prm_digitos_senha . ',n,GotoIf($["${ATUAL}" = "${ATUAL_DB}"]?novasenha:invalida)' . "\n");
fwrite($escreve, 'exten => _' . $prm_digitos_senha . ',n(invalida),Answer()' . "\n");
fwrite($escreve, 'exten => _' . $prm_digitos_senha . ',n,Playback(appsounds/senha-invalida)' . "\n");
fwrite($escreve, 'exten => _' . $prm_digitos_senha . ',n,Hangup()' . "\n");
fwrite($escreve, 'exten => _' . $prm_digitos_senha . ',n(novasenha),Goto(troca-senha-novasenha,s,1)' . "\n");
fwrite($escreve, '[troca-senha-novasenha]' . "\n");
fwrite($escreve, 'exten => s,1,Answer()' . "\n");
fwrite($escreve, 'exten => s,n,Background(appsounds/novasenha&beep)' . "\n");
fwrite($escreve, 'exten => s,n,WaitExten()' . "\n");
fwrite($escreve, 'exten => _' . $prm_digitos_senha . ',1,Set(_NOVA=${EXTEN})' . "\n"); // ====> A QUANTIDADE DE X DEVE SER A MESMA CONFIGURADA NO CAMPO SENHA DO SISTEMA
fwrite($escreve, 'exten => _' . $prm_digitos_senha . ',n,Goto(troca-senha-confirmasenha,s,1)' . "\n");
fwrite($escreve, '[troca-senha-confirmasenha]' . "\n");
fwrite($escreve, 'exten => s,1,Answer()' . "\n");
fwrite($escreve, 'exten => s,n(confirme),Background(appsounds/confirme&beep)' . "\n");
fwrite($escreve, 'exten => s,n,WaitExten()' . "\n");
fwrite($escreve, 'exten => _' . $prm_digitos_senha . ',1,Set(_NOVA2=${EXTEN})' . "\n"); // ====> A QUANTIDADE DE X DEVE SER A MESMA CONFIGURADA NO CAMPO SENHA DO SISTEMA
fwrite($escreve, 'exten => _' . $prm_digitos_senha . ',n,GotoIf($["${NOVA}" = "${NOVA2}"]?atualiza:invalida)' . "\n");
fwrite($escreve, 'exten => _' . $prm_digitos_senha . ',n(atualiza),Set(DATA=${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)})' . "\n");
fwrite($escreve, 'exten => _' . $prm_digitos_senha . ',n,AGI(update.php)' . "\n");
fwrite($escreve, 'exten => _' . $prm_digitos_senha . ',n,Answer()' . "\n");
fwrite($escreve, 'exten => _' . $prm_digitos_senha . ',n,Playback(appsounds/alterada-sucesso)' . "\n");
fwrite($escreve, 'exten => _' . $prm_digitos_senha . ',n,Hangup()' . "\n");
fwrite($escreve, 'exten => _' . $prm_digitos_senha . ',n(invalida),Answer()' . "\n");
fwrite($escreve, 'exten => _' . $prm_digitos_senha . ',n,Playback(appsounds/senha-invalida)' . "\n");
fwrite($escreve, 'exten => _' . $prm_digitos_senha . ',n,Hangup()' . "\n");
$comando = trim($dados2['captura_chamada']);
$sql = "SELECT app_ranger_ramais FROM pbx_facilidades";
$result = pg_query($dbcon, $sql);
while ($row = pg_fetch_array($result)) {
$range = $row['app_ranger_ramais'];
}
$qtde = strlen($comando);
fwrite($escreve, '[captura-chamada]' . "\n");
fwrite($escreve, 'exten => _' . $comando . '' . $range . ',1,AGI(pbx_complemento.php,aplicacoes)' . "\n");
fwrite($escreve, 'exten => _' . $comando . '' . $range . ',n,PickUp(${EXTEN:' . $qtde . '}@PICKUPMARK)' . "\n");
fwrite($escreve, 'exten => _' . $comando . '' . $range . ',n,Hangup()' . "\n");
fwrite($escreve, '[app-ausencia-grupo]' . "\n");
$comando = $dados2['ausencia_grupo_ativa'];
fwrite($escreve, 'exten => ' . $comando . ',1,NoCDR()' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(pbx_complemento.php,aplicacoes)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Authenticate(${DB(SENHA/${CALLERID(NUM)})},d,)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Noop(Ativando funcao - AUSENCIA NO GRUPO)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,PauseQueueMember(,Local/${CALLERID(NUM)}@padrao/n)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(facilidades.php)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Playback(beep&beep&activated)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Hangup()' . "\n");
$comando = $dados2['ausencia_grupo_desativa'];
fwrite($escreve, 'exten => ' . $comando . ',1,NoCDR()' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(pbx_complemento.php,aplicacoes)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Authenticate(${DB(SENHA/${CALLERID(NUM)})},d,)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Noop(Desativando funcao - AUSENCIA NO GRUPO)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,UnPauseQueueMember(,Local/${CALLERID(NUM)}@padrao/n)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,AGI(facilidades.php)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Playback(beep&beep&de-activated)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Hangup()' . "\n");
$comando = $dados2['conferencia_dinamica'];
fwrite($escreve, '[app-conferencia-dinamica]' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',1,Macro(inicia-conferencia)' . "\n");
fwrite($escreve, 'exten => ' . $comando . ',n,Hangup()' . "\n");
if ($reload)
CommandAsterisk($dbcon, 'URA');
if ($reloadUra)
CommandAsterisk($dbcon, 'FEATURES');
}
fclose($escreve);
}
if ($tipo == "DGV") {
//GERA O ARQUIVO DE DENTRO DO EXTENSIONS_RAMAIS E HINTS
GeraExtRamais($dbcon);
if ($reloadUra)
CommandAsterisk($dbcon, 'URA');
if ($reload)
CommandAsterisk($dbcon, 'RELOAD');
}
if ($tipo == "DAHDI") {
//GERA O ARQUIVO DE DENTRO DO EXTENSIONS_RAMAIS E HINTS
GeraExtRamais($dbcon);
if ($reload)
CommandAsterisk($dbcon, 'RELOAD');
if ($reloadUra)
CommandAsterisk($dbcon, 'URA');
}
if ($tipo == "PBX") {
//GERA O ARQUIVO DE DENTRO DO EXTENSIONS_RAMAIS E HINTS
GeraExtRamais($dbcon);
if ($reloadUra)
CommandAsterisk($dbcon, 'URA');
if ($reload)
CommandAsterisk($dbcon, 'RELOAD');
}
if ($tipo == "ANUNCIOS") {
$arq = $caminho_producao . "extensions_anuncios.conf";
$escreve = fopen($arq, 'w');
fwrite($escreve, '[ext-anuncios]' . "\n");
fwrite($escreve, 'include => ext-anuncios-custom' . "\n");
fwrite($escreve, 'exten => h,1,Macro(hangup)' . "\n");
$query = "select * from pbx_anuncios ";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
$music = explode('.', $dados['musica']);
fwrite($escreve, 'exten => _a' . $dados['id'] . ',1,ExecIf($["${ISNULL(${CDR(direcao)})}" = "1"]?Set(CDR(direcao)=I))' . "\n");
fwrite($escreve, 'exten => _a' . $dados['id'] . ',n,ExecIf($["${CDR(direcao)}" != "E" && "${ISNULL(${CDR(ramal_origem)})}" = "1"]?Set(CDR(ramal_origem)=${CALLERID(num)}))' . "\n");
fwrite($escreve, 'exten => _a' . $dados['id'] . ',n,AGI(pbx_complemento.php,ext-anuncios)' . "\n");
fwrite($escreve, 'exten => _a' . $dados['id'] . ',n,Playback(customizados/' . $music[0] . ')' . "\n");
if (!empty($dados['opcao'])) {
$dispAcao = GetOpcaoAcao($dados['opcao'], $dados['acao']);
$dispAcao = sprintf('exten => _a%s,n,%s%s', $dados['id'], $dispAcao, "\n");
fwrite($escreve, $dispAcao);
}
fwrite($escreve, 'exten => _a' . $dados['id'] . ',n,Hangup()' . "\n");
}
fclose($escreve);
if ($reloadUra)
CommandAsterisk($dbcon, 'URA');
}
if ($tipo == "CONFMAIL") {
$arq = "/etc/msmtprc";
$escreve = fopen($arq, 'w');
fwrite($escreve, 'defaults' . "\n");
$query = "select * from pbx_confMail ";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
fwrite($escreve, 'account ' . $dados['conta'] . "\n");
fwrite($escreve, 'port ' . $dados['porta'] . "\n");
fwrite($escreve, 'timeout ' . $dados['timeout'] . "\n");
fwrite($escreve, 'protocol ' . $dados['protocolo'] . "\n");
fwrite($escreve, 'domain ' . $dados['dominio'] . "\n");
fwrite($escreve, 'tls ' . $dados['tsl'] . "\n");
fwrite($escreve, 'tls_trust_file ' . "\n");
fwrite($escreve, 'tls_certcheck ' . $dados['tsl_check'] . "\n");
fwrite($escreve, 'logfile ' . $dados['logfile'] . "\n");
fwrite($escreve, 'host ' . $dados['hosts'] . "\n");
fwrite($escreve, 'from ' . $dados['de'] . "\n");
fwrite($escreve, 'auth ' . $dados['auth'] . "\n");
fwrite($escreve, 'user ' . $dados['usuario'] . "\n");
fwrite($escreve, 'password ' . $dados['senha'] . "\n");
fwrite($escreve, "\n");
}
$query = "select * from pbx_confMail where padrao='S' limit 1";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
fwrite($escreve, chr(13) . chr(10) . 'account default:' . $dados['conta'] . "\n");
}
fclose($escreve);
/*
$arq="/root/.mailrc";
$escreve = fopen($arq, 'w');
fwrite($escreve,'set sendmail=/usr/bin/msmtp');
fclose($escreve);
*
*/
}
if ($tipo == "CONFERENCIA") {
$arq = $caminho_producao . "meetme_salas.conf";
$escreve = fopen($arq, 'w');
fwrite($escreve, '[rooms]' . "\n");
$query = "select * from pbx_conferencia order by id asc";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
fwrite($escreve, 'conf => ' . $dados['numero']);
if (trim($dados['senha_usuario']) != '') {
fwrite($escreve, ',' . $dados['senha_usuario']);
} else if (trim($dados['senha_admin']) != '') {
fwrite($escreve, ',');
}
if (trim($dados['senha_admin']) != '') {
fwrite($escreve, ',' . $dados['senha_admin']);
}
fwrite($escreve, chr(13) . chr(10));
}
fclose($escreve);
if ($reload)
CommandAsterisk($dbcon, 'CONFERENCIA');
$arq = $caminho_producao . "extensions_conferencia.conf";
$escreve = fopen($arq, 'w');
fwrite($escreve, '[ext-conferencia]' . "\n");
fwrite($escreve, 'include => ext-conferencia-custom' . "\n");
$query = "select * ,
(case when (encerra_sem_admin = 'S') then 'x' else '' end) AS encerra,
(case when (silencioso = 'S') then 'q' else '' end ) as silencioso,
(case when (anuncia_conta = 'S') then 'c' else '' end ) as anuncia_conta,
(case when (anuncia_entrada = 'S') then 'i' else '' end ) as anuncia_entrada,
(case when (musica_espera = 'S') then 'M' else '' end )as musica_espera,
(case when (habilita_menu = 'S') then 's' else '' end ) as habilita_menu,
(case when (grava='S') then 'r' else '' end) as grava
from pbx_conferencia
order by id asc";
// fwrite($escreve,'exten => INICIACONFERENCIA,1,MeetMe(${MEETME_ROOMNUM},${MEETME_OPTS},${PIN})'. "\n");
// fwrite($escreve,'exten => INICIACONFERENCIA,n,Hangup'. "\n");
fwrite($escreve, 'exten => h,1,Hangup()' . "\n");
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
fwrite($escreve, 'exten => ' . $dados['numero'] . ',1,ExecIf($["${ISNULL(${CDR(direcao)})}" = "1"]?Set(CDR(direcao)=I))' . "\n");
fwrite($escreve, 'exten => ' . $dados['numero'] . ',n,ExecIf($["${CDR(direcao)}" != "E" && "${ISNULL(${CDR(ramal_origem)})}" = "1"]?Set(CDR(ramal_origem)=${CALLERID(num)}))' . "\n");
fwrite($escreve, 'exten => ' . $dados['numero'] . ',n,Set(CHANNEL(accountcode)=${TRANSFER})' . "\n");
fwrite($escreve, 'exten => ' . $dados['numero'] . ',n,AGI(pbx_complemento.php,ext-conferencia)' . "\n");
fwrite($escreve, 'exten => ' . $dados['numero'] . ',n,Answer()' . "\n");
fwrite($escreve, 'exten => ' . $dados['numero'] . ',n,Set(CONFBRIDGE(user,template)=default_user_simplesip)' . "\n");
if (trim($dados['limite']) != '') {
fwrite($escreve, 'exten => ' . $dados['numero'] . ',n,Set(CONFBRIDGE(bridge,max_members)=' . $dados['limite'] . ')' . "\n");
}
if (trim($dados['grava']) != '') {
fwrite($escreve, 'exten => ' . $dados['numero'] . ',n,Macro(gravacao-conferencia,${EXTEN})' . "\n");
}
if ($dados['senha_admin'] != '') {
fwrite($escreve, 'exten => ' . $dados['numero'] . ',n,Set(CONFBRIDGE(user,pin)=' . $dados['senha_admin'] . ')' . "\n");
}
if ($dados['musica_espera'] != '') {
fwrite($escreve, 'exten => ' . $dados['numero'] . ',n,Set(CONFBRIDGE(user,music_on_hold_when_empty)=yes)' . "\n");
fwrite($escreve, 'exten => ' . $dados['numero'] . ',n,Set(CONFBRIDGE(user,music_on_hold_class)=default)' . "\n");
}
if ($dados['anuncia_conta'] != '') {
fwrite($escreve, 'exten => ' . $dados['numero'] . ',n,Set(CONFBRIDGE(user,announce_user_count)=yes)' . "\n");
}
if ($dados['anuncia_entrada'] != '') {
fwrite($escreve, 'exten => ' . $dados['numero'] . ',n,Set(CONFBRIDGE(user,announce_join_leave)=yes)' . "\n");
}
if (trim($dados['anuncio']) != '') {
$music = explode('.', trim($dados['anuncio']));
fwrite($escreve, 'exten => ' . $dados['numero'] . ',n,Playback(customizados/' . $music[0] . ')' . "\n");
}
fwrite($escreve, 'exten => ' . $dados['numero'] . ',n,ConfBridge(${EXTEN})' . "\n");
fwrite($escreve, 'exten => ' . $dados['numero'] . ',n,Hangup()' . "\n");
}
fclose($escreve);
if ($reloadUra)
CommandAsterisk($dbcon, 'URA');
}
if ($tipo == "ROTA_ENTRADA") {
$arq = $caminho_producao . "extensions_rotas_entrada.conf";
$escreve = fopen($arq, 'w');
//retirar as rotas de entrada digivoice (select id, tipo || '/' || username as nome_canal, nome, max_ligacoes from pbx_troncos)
$query = "select distinct a.*,troncos.context
FROM pbx_rotas_entrada a, pbx_rotas_entrada_troncos b,pbx_troncos as troncos
where a.id = b.id_rota
and b.id_tronco = troncos.id
and b.tipo = troncos.tipo
order by troncos.context, modelos asc";
$result = pg_query($dbcon, $query);
$contexto = '';
while ($dados = pg_fetch_array($result)) {
if ($contexto != $dados['context']) {
fwrite($escreve, '[' . $dados['context'] . ']' . chr(10));
fwrite($escreve, 'include => ' . $dados['context'] . '-custom' . chr(10));
}
$contexto = $dados['context'];
$idRota = $dados['id'];
$modelos = explode('|', $dados['modelos']);
$ativarDdr = $dados['ativar_ddr'];
$identificador = $dados['identificador'];
$limite_ligacao = $dados['limite_ligacao'];
foreach ($modelos as $modelo) {
$value = @split(';', $modelo);
$modelo = $value[0];
$bloq = $value[1];
/* Alan Pablo 2001-01-16
* O parametro do lista negra foi colocado antes do pbx_complemento para não bagunçar os relatorios
*/
$modelo = (trim($modelo) == 's') ? trim($modelo) : '_' . trim($modelo);
$servId = trim($dados['serv_id']);
$exten = explode(':', $modelo);
if (isset($exten[1]) && $exten[1]) {
$modelo = $exten[0];
}
if ($servId) {
fwrite($escreve, sprintf("exten => %s,1,AGI(pbx_servicos.php,\${UNIQUEID},%s)\n", $modelo, $dados['serv_id']));
}
fwrite($escreve, sprintf('exten => %s,%s,Set(CDR(direcao)=E)' . chr(10), $modelo, ($servId ? 'n' : '1')));
fwrite($escreve, 'exten => ' . $modelo . ',n,AGI(lista_negra.php,${CALLERID(NUM)},' . $idRota . ')' . chr(10));
fwrite($escreve, 'exten => ' . $modelo . ',n,Set(__TIPO=EXTERNA)' . chr(10));
fwrite($escreve, 'exten => ' . $modelo . ',n,AGI(pbx_complemento.php,' . $dados['context'] . ')' . chr(10));
if ($bloq)
fwrite($escreve, 'exten => ' . $modelo . ',n,Macro(chamada-a-cobrar)' . chr(10));
if ($limite_ligacao) {
$opcaoRota = GetAcaoOpcaoRotas($dados['limite_ligacao_pos_opcao'], $dados['limite_ligacao_pos_acao']);
fwrite($escreve, 'exten => ' . $modelo . ",n,Macro(limite-ligacao-entrante,$idRota,$limite_ligacao,$opcaoRota)" . chr(10));
}
if ($identificador)
fwrite($escreve, 'exten => ' . $modelo . ',n,Set(CALLERID(name)=' . $identificador . ')' . chr(10));
if (trim($dados['anuncio'] != '')) {
$music = explode('.', trim($dados['anuncio']));
fwrite($escreve, 'exten => ' . $modelo . ',n,Playback(customizados/' . $music[0] . ')' . chr(10));
}
if (($ativarDdr == 'V')) {
if ($exten[1]) {
fwrite($escreve, 'exten => ' . $modelo . ',n,Goto(ext-ramais,${EXTEN:-' . $exten[1] . '},1)' . chr(10));
} else {
fwrite($escreve, 'exten => ' . $modelo . ',n,Goto(ext-ramais,${EXTEN},1)' . chr(10));
}
} else {
$dispAcao = GetOpcaoAcao($dados['opcao'], $dados['acao'], '', $modelo);
$dispAcao = sprintf('exten => %s,n,%s%s', $modelo, $dispAcao, "\n");
// $dispAcao = GetOpcaoAcao($dados['opcao'], $dados['acao']);
// $dispAcao = sprintf('exten => %s,n,Goto(%s)%s', $modelo, $dispAcao, "\n");
fwrite($escreve, $dispAcao);
}
fwrite($escreve, 'exten => ' . $modelo . ',n,Hangup()' . chr(10));
}
}
fclose($escreve);
if ($reloadUra)
CommandAsterisk($dbcon, 'URA');
}
if ($tipo == "CALLBACK") {
$arq = $caminho_producao . "extensions_callback.conf";
$escreve = fopen($arq, 'w');
$query = "select id, descricao, opcao, acao, opcao1, acao1, ramal_saida, tempo_desligamento from pbx_callback";
$result = pg_query($dbcon, $query);
fwrite($escreve, '[ext-callback-externo]' . "\n");
fwrite($escreve, 'include => ext-callback-externo-custom' . "\n");
while ($dados = pg_fetch_array($result)) {
$opcao = $dados["opcao"];
$acao = $dados["acao"];
$opcao1 = trim($dados["opcao1"]);
$acao1 = $dados["acao1"];
$ramalSaida = $dados["ramal_saida"];
$id = $dados["id"];
$tempoDesligamento = $dados['tempo_desligamento'];
if (trim($opcao) == 'ura') {
$acao = explode('-', $acao);
$dest = GetAcao($opcao) . $acao[0]; // . ',s';
$acao = 's';
}
if ((trim($opcao) == 'rotaInterna') && (soTexto($acao) != '')) {
$dest = GetAcao($opcao);
$acao = '${EXTEN}';
} else {
$dest = GetAcao($opcao);
$acao = (trim($opcao) == 'voice') ? str_replace('/', '"\\\',\\\'"', $acao) : $acao;
$acao = (strtolower($opcao) == "anuncios") ? 'a' . $acao : $acao;
}
fwrite($escreve, "exten => _$id,1,Answer()" . "\n");
fwrite($escreve, "exten => _$id,n,ExecIf($[\"\${ISNULL(\${CDR(direcao)})}\" = \"1\"]?Set(CDR(direcao)=I))" . "\n");
fwrite($escreve, "exten => _$id,n,ExecIf($[\"\${CDR(direcao)}\" != \"E\" && \"\${ISNULL(\${CDR(ramal_origem)})}\" = \"1\"]?Set(CDR(ramal_origem)=\${CALLERID(num)}))" . "\n");
fwrite($escreve, "exten => _$id,n,Agi(pbx_complemento.php,ext-callback-externo)" . "\n");
fwrite($escreve, "exten => _$id,n,Agi(callback.php,\${CALLERID(NUM):-13})" . "\n");
fwrite($escreve, "exten => _$id,n,Set(ORIGEM=\${CALLERID(NUM):-13})" . "\n");
fwrite($escreve, "exten => _$id,n,Set(CONTEXTO-DESTINO=$dest)" . "\n");
fwrite($escreve, "exten => _$id,n,Set(EXTEN-DESTINO=$acao)" . "\n");
fwrite($escreve, "exten => _$id,n,Set(RAMAL-DISCAGEM=$ramalSaida)" . "\n"); // Ramal destino
fwrite($escreve, "exten => _$id,n,System(/var/lib/asterisk/scripts/callback-externo.sh \${ORIGEM} \${CONTEXTO-DESTINO} \${EXTEN-DESTINO} \${RAMAL-DISCAGEM} \${CALLERID(name)}&)" . "\n");
fwrite($escreve, "exten => _$id,n,Busy($tempoDesligamento)" . "\n");
fwrite($escreve, "exten => _$id,n,Hangup()" . "\n");
if (trim($opcao1) == 'ura') {
$ac = explode('-', $acao1);
$displayOpcao = GetAcao($opcao1) . $ac[0] . ',s';
$acao1 = "";
}
if ((trim($opcao1) == 'rotaInterna') && (soTexto($acao1) != '')) {
$displayOpcao = GetAcao($opcao1);
$acao1 = '${EXTEN}';
} else {
$displayOpcao = GetAcao($opcao1) . "," . (( strtolower($opcao1) == "anuncios") ? "a" : "" );
$acao1 = str_replace('/', ',', $acao1);
}
if ((trim($opcao1) == 'voice')) {
fwrite($escreve, "exten => _$id,n(destino),Goto($displayOpcao$acao1)" . "\n");
} else if ($opcao1) {
fwrite($escreve, "exten => _$id,n(destino),Goto($displayOpcao$acao1,1)" . "\n");
}
fwrite($escreve, sprintf("exten => _%s,n%s,Hangup()", $id, $opcao1 ? '' : '(destino)' ) . "\n");
}
fclose($escreve);
if ($reloadUra)
CommandAsterisk($dbcon, 'URA');
}
if ($tipo == "ROTAS_SAIDA") {
$arq = $caminho_producao . "extensions_rotas_saida.conf";
$escreve = fopen($arq, 'w');
fwrite($escreve, '[saida-pstn]' . "\n");
fwrite($escreve, 'include => saida-pstn-custom' . "\n");
$query = "select * FROM pbx_rotas_saida where tipo='E' and portabilidade = 0 order by id asc";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
$portabilidade = $dados['portabilidade'];
$query2 = "select * FROM pbx_rotas_saida_modelos where id_rota=" . $dados['id'] . " order by length(modelo), modelo asc";
$result2 = pg_query($dbcon, $query2);
while ($dados2 = pg_fetch_array($result2)) {
fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',1,Set(CDR(direcao)=S)' . "\n");
fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',n,ExecIf($["${CDR(direcao)}" != "E" && "${ISNULL(${CDR(ramal_origem)})}" = "1"]?Set(CDR(ramal_origem)=${CALLERID(num)}))' . "\n");
fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',n,AGI(lista_negra.php,${EXTEN},' . $dados['id'] . ')' . "\n");
fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',n,Set(_TIPO=EXTERNO)' . "\n");
fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',n,AGI(pbx_complemento.php,saida-pstn)' . "\n");
fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',n,Macro(verifica-rota,${CALLERID(NUM)},${EXTEN})' . "\n");
fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',n,Gosub(rota-${ID_ROTA},${EXTEN},1)' . "\n");
$query3 = "select *
from (select id, tipo || '/' || username as nome_canal, nome, max_ligacoes from pbx_troncos) as troncos, pbx_rotas_saida_canais b
where troncos.nome = b.canal and b.id_rota=" . $dados['id'] . " order by b.id asc";
$result3 = pg_query($dbcon, $query3);
fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',n,Hangup()' . "\n");
fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',n(containvalida),Playback(appsounds/conta-invalida)' . "\n");
fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',n,Hangup()' . "\n");
fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',n(alterasenha),Playback(appsounds/altere-senha)' . "\n");
fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',n,Hangup()' . "\n");
fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',n(sempermissao),Playback(appsounds/nao-tem-permissao)' . "\n");
fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',n,Hangup()' . "\n");
fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',n(limite),Playback(appsounds/linhas_ocupadas)' . "\n");
fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',n,Hangup()' . "\n");
fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',n(senha),Playback(appsounds/utilize_senha)' . "\n");
fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',n,Hangup()' . "\n" . "\n");
}
}
fclose($escreve);
//Inicio do Rotas
$arq = $caminho_producao . "extensions_rotas.conf";
$escreve = fopen($arq, 'w');
$query = "select * FROM pbx_rotas_saida where tipo='E' and portabilidade = 0 order by id asc";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
$portabilidade = $dados['portabilidade'];
fwrite($escreve, '[rota-' . $dados['id'] . ']' . "\n");
//fwrite($escreve, 'exten => h,1,ExecIf($["${DIALSTATUS}" = "ANSWER"]?Set(CDR_PROP(disable)=1))' . "\n");
fwrite($escreve, 'exten => h,1,Macro(hangup)' . "\n");
$query2 = "select * FROM pbx_rotas_saida_modelos where id_rota=" . $dados['id'] . " order by length(modelo), modelo asc";
$result2 = pg_query($dbcon, $query2);
while ($dados2 = pg_fetch_array($result2)) {
//fwrite($escreve, sprintf('exten => _%s,1,GotoIf($["X${TRANSFER}" = "X"]?inicio)%s', $dados2['modelo'], "\n"));
fwrite($escreve, sprintf('exten => _%s,1,AGI(pbx_complemento.php,saida-pstn)%s', $dados2['modelo'], "\n"));
fwrite($escreve, sprintf('exten => _%s,n,AGI(lista_negra.php,${EXTEN},%s)%s', $dados2['modelo'], $dados['id'], "\n"));
fwrite($escreve, sprintf('exten => _%s,n,Set(_TIPO=EXTERNO)%s', $dados2['modelo'], "\n"));
//fwrite($escreve, sprintf('exten => _%s,n,Set(CHANNEL(accountcode)=${TRANSFER})%s', $dados2['modelo'], "\n"));
fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',n(inicio),Macro(gravacao,OUT,${CALLERID(NUM)})' . "\n");
if ($portabilidade) {
fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',n,AGI(portabilidade.php,${EXTEN:-11})' . "\n");
}
$query3 = "select troncos.id_tronco, troncos.nome_canal, troncos.nome, troncos.max_ligacoes, troncos.callerid, troncos.tipo as tipo_tronco, b.id, b.id_rota, b.canal,
troncos.callerid_tronco, b.recorta, b.acrescenta
from (select id as id_tronco, tipo || '/' || username as nome_canal, nome, max_ligacoes, callerid, tipo, callerid_tronco from pbx_troncos) as troncos,
pbx_rotas_saida_canais b
where troncos.nome = b.canal and b.id_rota=" . $dados['id'] . " order by b.id asc";
$result3 = pg_query($dbcon, $query3);
while ($dados3 = pg_fetch_array($result3)) {
if ($dados3['callerid_tronco'] && ($dados3['tipo_tronco'] != 'KHOMP')) {
fwrite($escreve, sprintf('exten => _%s,n,Set(CALLERID_TRONCO=%s)%s', $dados2['modelo'], $dados3['callerid_tronco'], "\n"));
}
$recorte = (!trim($dados['recorte']) ? '' : ':' . $dados['recorte']);
$acrescenta = (trim($dados['acrescenta']) === '' ? '' : $dados['acrescenta']);
$recortetronco = trim($dados3['recorta']);
$acrescentatronco = trim($dados3['acrescenta']);
if (!$recortetronco) {
$recortetronco = '';
}
if ($acrescentatronco === '') {
$acrescentatronco = '';
}
fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',n,Set(RECORTA_TRONCO=' . $recortetronco . ')' . "\n");
fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',n,Set(ACRECENTA_TRONCO=' . $acrescentatronco . ')' . "\n");
fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',n,Macro(dial-saida-pstn,' . $dados3['nome_canal'] . '/' . $acrescenta . '${EXTEN' . $recorte . '}' . ( (($dados3['tipo_tronco'] == 'KHOMP') && $dados3['callerid']) ? ('/orig=' . $dados3['callerid']) : '' ) . ',r,' . $dados3['id_tronco'] . ',' . $dados3['max_ligacoes'] . ',' . sprintf('tarifa,%s,%s,${UNIQUEID},${CALLERID(NUM)},%s${EXTEN%s},${TIPO_ACESSO},${CONTA},${SENHA},${RECORTA_TRONCO},${ACRECENTA_TRONCO}', $dados3['id_tronco'], $dados['id'], $acrescenta, $recorte) . ')' . "\n");
}
fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',n,GotoIf($["${LIMITE}" = "OK"]?limite)' . "\n");
fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',n,GotoIf($["${FRANQUIA}" = "OK"]?franquia)' . "\n");
//fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',n,ExecIf($["${DIALSTATUS}" = "ANSWER"]?Set(CDR_PROP(disable)=1))' . "\n");
fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',n,Return()' . "\n");
if ($portabilidade) {
fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',n(portabilidade),Macro(dial-saida-pstn,${TRONCO}/' . $acrescenta . '${DESTINO},r,${ID_TRONCO}, ${MAX_LIG},' . sprintf('tarifa,${ID_TRONCO},%s,${UNIQUEID},${CALLERID(NUM)},' . $acrescenta . '${DESTINO},${TIPO_ACESSO},${CONTA},${SENHA}', $dados['id']) . ')' . "\n");
$result3 = pg_query($dbcon, $query3);
while ($dados3 = pg_fetch_array($result3)) {
// $recorte = $dados3['recorta'] ? ':' . $dados3['recorta'] : (!soNumero($dados['recorte']) ? '' : ':' . $dados['recorte']);
//$acrescenta = $dados3['acrescenta'] ? $dados3['acrescenta'] : (!soNumero($dados['acrescenta']) ? '' : $dados['acrescenta']);
$recorte = !trim($dados['recorte']) ? '' : (':' . trim($dados['recorte']));
$acrescenta = trim($dados['acrescenta']) !== '' ? '' : trim($dados['acrescenta']);
fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',n,Macro(dial-saida-pstn,' . $dados3['nome_canal'] . '/' . $acrescenta . '${EXTEN' . $recorte . '}' . ( (($dados3['tipo_tronco'] == 'KHOMP') && $dados3['callerid']) ? ('/orig=' . $dados3['callerid']) : '' ) . ',r,' . $dados3['id_tronco'] . ',' . $dados3['max_ligacoes'] . ',' . sprintf('tarifa,%s,%s,${UNIQUEID},${CALLERID(NUM)},%s${EXTEN%s},${TIPO_ACESSO},${CONTA},${SENHA}', $dados3['id_tronco'], $dados['id'], $acrescenta, $recorte) . ')' . "\n");
}
fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',n,GotoIf($["${LIMITE}" = "OK"]?limite)' . "\n");
fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',n,GotoIf($["${FRANQUIA}" = "OK"]?franquia)' . "\n");
fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',n,Return()' . "\n");
}
fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',n(limite),Playback(appsounds/linhas_ocupadas)' . "\n");
fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',n,Return()' . "\n");
fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',n(franquia),Playback(appsounds/franquia_excedida)' . "\n");
fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',n,Return()' . "\n");
}
}
fclose($escreve);
$arq = $caminho_producao . "extensions_rotas_interno.conf";
$escreve = fopen($arq, 'w');
fwrite($escreve, '[ext-rotasinternas]' . "\n");
fwrite($escreve, 'include => ext-rotasinternas-custom' . "\n");
//fwrite($escreve,'exten => h,1,Macro(hangup)'. "\n");
$query = "select * FROM pbx_rotas_saida where tipo='I' and portabilidade = 0 order by id asc";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
$acrescentaRota = soNumero($dados['acrescenta']);
$query2 = "select * FROM pbx_rotas_saida_modelos where id_rota=" . $dados['id'] . " order by length(modelo), modelo asc";
$result2 = pg_query($dbcon, $query2);
while ($dados2 = pg_fetch_array($result2)) {
fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',1,ExecIf($["${ISNULL(${CDR(direcao)})}" = "1"]?Set(CDR(direcao)=I))' . "\n");
fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',n,ExecIf($["${CDR(direcao)}" != "E" && "${ISNULL(${CDR(ramal_origem)})}" = "1"]?Set(CDR(ramal_origem)=${CALLERID(num)}))' . "\n");
fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',n,Set(CHANNEL(accountcode)=${TRANSFER})' . "\n");
fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',n,Set(_TIPO=INTERNO)' . "\n");
fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',n,AGI(pbx_complemento.php,ext-rotasinternas,interna)' . "\n");
/* Alan Pablo 2001-01-16
* Alterado o parametro de: select id,'IAX2/'||username para: select id,'IAX2/'||nome
* Devido a alteração no cadastro de troncos IAX
*/
$query3 = "select *
from (select id as id_tronco, tipo as tipo_tronco, callerid, tipo || '/' || username as nome_canal, nome, max_ligacoes, callerid_tronco from pbx_troncos) as troncos, pbx_rotas_saida_canais b
where troncos.nome = b.canal
and b.id_rota=" . $dados['id'] . "
order by b.id asc";
$result3 = pg_query($dbcon, $query3);
fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',n,Macro(gravacao,OUT,${CALLERID(NUM)})' . "\n");
while ($dados3 = pg_fetch_array($result3)) {
$acrescentaCanal = soNumero($dados3['acrescenta']);
if ($dados3['callerid_tronco'] && ($dados3['tipo_tronco'] != 'KHOMP')) {
fwrite($escreve, sprintf('exten => _%s,n,Set(CALLERID_TRONCO=%s)%s', $dados2['modelo'], $dados3['callerid_tronco'], "\n"));
}
$recorte = $dados3['recorta'] ? (':' . $dados3['recorta']) : (!soNumero($dados['recorte']) ? '' : ':' . $dados['recorte']);
$acrescenta = $acrescentaCanal !== '' ? $acrescentaCanal : (($acrescentaRota !== '') ? '' : $dados['acrescenta']);
$complKhomp = (($dados3['tipo_tronco'] == 'KHOMP') && $dados3['callerid']) ? ('/orig=' . $dados3['callerid']) : '';
$complTronco = sprintf(",%s,%s", $dados3['id_tronco'], $dados3['max_ligacoes']);
fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',n,Macro(dial-saida-pstn,' . $dados3['nome_canal'] . '/' . $acrescenta . '${EXTEN' . $recorte . '}' . $complKhomp . ',r' . $complTronco . ')' . "\n");
}
fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',n,GotoIf($["${LIMITE}" = "OK"]?limite)' . "\n");
fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',n,Hangup()' . "\n");
fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',n(limite),Playback(appsounds/linhas_ocupadas)' . "\n");
fwrite($escreve, 'exten => _' . $dados2['modelo'] . ',n,Hangup()' . "\n" . "\n");
}
}
fclose($escreve);
if ($reload || $reloadUra)
CommandAsterisk($dbcon, 'URA');
}
if ($tipo == "CONTEXTOS") {
$arq = $caminho_producao . "extensions_contextos.conf";
$escreve = fopen($arq, 'w');
/*
* Tratamento para warning contexto custom.
*/
$arqCustom = $caminho_producao . "extensions_contextos_custom.conf";
$escreveCustom = fopen($arqCustom, 'w');
$query = "select * FROM pbx_contextos order by id asc";
$result = @pg_query($dbcon, $query);
while ($dados = @pg_fetch_array($result)) {
/*
* Inicializa variaveis com informa��es do contexto corrente
*/
$nomeContexto = $dados['nome'];
$idContexto = $dados['id'];
/*
* Atualiza arquivo extensions_contextos_custom.conf.
*/
fwrite($escreveCustom, sprintf("[%s_custom]\n", $nomeContexto));
/*
* Inicio da gravação do contexto
*/
$linha = "[$nomeContexto]\n";
fwrite($escreve, $linha);
/* Alan Pablo 2001-01-16
* Incluido o parametro include => $nomeContexto"."_custom
*/
$linha = "include => $nomeContexto" . "_custom\n";
fwrite($escreve, $linha);
fwrite($escreve, "include => aplicacoes" . "\n");
fwrite($escreve, "exten => h,1,Macro(hangup)" . "\n");
if ($dados['inclui_padrao'] == 'S') {
$linha = "include => padrao\n";
fwrite($escreve, $linha);
}
/*
* Grava��o dos modelos relacionado ao contexto corrente
*/
$query = "select id, id_contexto, modelo, recorte, acrescenta, portabilidade from pbx_contextos_modelos where id_contexto = '$idContexto'";
$result2 = @pg_query($dbcon, $query);
while ($dadosModelo = @pg_fetch_array($result2)) {
$modelo = $dadosModelo["modelo"];
$idModelo = $dadosModelo["id"];
$recorte = trim($dadosModelo['recorte']);
$portabilidade = $dadosModelo["portabilidade"];
if (!$recorte) {
$recorte = '';
} else {
$recorte = ':' . $dadosModelo['recorte'];
}
if (trim($dadosModelo['acrescenta']) == '') {
$acrescenta = '';
} else {
$acrescenta = trim($dadosModelo['acrescenta']);
}
/*
* Linhas referentes ao modelo associado ao contexto
*/
fwrite($escreve, "exten => _$modelo,1,ExecIf($[\"\${ISNULL(\${CDR(direcao)})}\" = \"1\"]?Set(CDR(direcao)=I))" . "\n");
fwrite($escreve, "exten => _$modelo,n,ExecIf($[\"\${CDR(direcao)}\" != \"E\" && \"\${ISNULL(\${CDR(ramal_origem)})}\" = \"1\"]?Set(CDR(ramal_origem)=\${CALLERID(num)}))" . "\n");
$linha = "exten => _$modelo,n,Set(CHANNEL(accountcode)=\${TRANSFER})\n";
fwrite($escreve, $linha);
/*
* Grava Trocos ou Acoes conforme cofigurado pelo usu�rio
*/
$query = "select id, id_contexto, id_modelo, canal from pbx_contextos_canais where id_modelo = '$idModelo'";
$result3 = @pg_query($dbcon, $query);
$existeTronco = 0;
while ($dadosCanais = @pg_fetch_array($result3)) {
if (!$existeTronco) {
$linha = "exten => _$modelo,n,AGI(lista_negra.php,\${EXTEN})\n";
fwrite($escreve, $linha);
$linha = "exten => _$modelo,n,AGI(pbx_complemento.php,$nomeContexto)\n";
fwrite($escreve, $linha);
$linha = "exten => _$modelo,n,Set(_TIPO=INTERNO)\n";
fwrite($escreve, $linha);
$linha = sprintf('exten => _%s,n,Macro(gravacao,OUT,${CALLERID(NUM)})%s', $modelo, "\n");
fwrite($escreve, $linha);
if ($portabilidade) {
$linha = sprintf('exten => _%s,n,AGI(portabilidade.php,${EXTEN:-11})%s', $modelo, "\n");
fwrite($escreve, $linha);
}
}
$existeTronco++;
$canal = $dadosCanais["canal"];
/*
* � necesario buscar informacoes sbre o tronco selecionado
*/
$query = "select id, tipo, username, max_ligacoes, callerid, callerid_tronco from pbx_troncos where nome = '$canal' ";
$result4 = @pg_query($dbcon, $query);
$dadosTronco = @pg_fetch_array($result4);
if ($dadosTronco['callerid_tronco'] && ($dadosTronco['tipo'] != 'KHOMP')) {
fwrite($escreve, sprintf('exten => _%s,n,Set(CALLERID_TRONCO=%s)%s', $modelo, $dadosTronco['callerid_tronco'], "\n"));
}
$idTronco = $dadosTronco["id"];
$maxLigacoes = $dadosTronco["max_ligacoes"];
$tipoTronco = $dadosTronco["tipo"] . "/" . $dadosTronco["username"];
$linha = sprintf('exten => _%s,n,Macro(dial-saida-pstn,%s/%s${EXTEN%s}%s,r,%s,%s)%s', $modelo, $tipoTronco, $acrescenta, $recorte, ( (($dadosTronco['tipo'] == 'KHOMP') && $dadosTronco['callerid']) ? ('/orig=' . $dadosTronco['callerid']) : ''), $idTronco, $maxLigacoes, "\n");
fwrite($escreve, $linha);
}
if ($existeTronco) {
$linha = sprintf('exten => _%s,n,GotoIf($["${LIMITE}" = "OK"]?limite)%s', $modelo, "\n");
fwrite($escreve, $linha);
$linha = "exten => _$modelo,n,Hangup()\n";
fwrite($escreve, $linha);
$linha = "exten => _$modelo,n(limite),Playback(appsounds/linhas_ocupadas)\n";
fwrite($escreve, $linha);
$linha = "exten => _$modelo,n,Hangup()\n";
fwrite($escreve, $linha);
if ($portabilidade) {
$linha = "exten => _$modelo,n(portabilidade),Macro(dial-saida-pstn,\${TRONCO}/\${DESTINO},r,\${ID_TRONCO},\${MAX_LIG})\n";
fwrite($escreve, $linha);
}
$linha = sprintf('exten => _%s,n,GotoIf($["${LIMITE}" = "OK"]?limite)%s', $modelo, "\n");
fwrite($escreve, $linha);
$linha = "exten => _$modelo,n,Hangup()\n";
fwrite($escreve, $linha);
}
/*
* Se o modelo n�o tem troncos associados grava uma a�ao
*/
if (!$existeTronco) {
$linha = "exten => _$modelo,n,AGI(lista_negra.php,\${CALLERID(NUM):-10})\n";
fwrite($escreve, $linha);
$query = "select opcao, acao from pbx_contextos_opcoes where id_modelo = '$idModelo' ";
$result5 = @pg_query($dbcon, $query);
$dadosAcao = @pg_fetch_array($result5);
$opcao = $dadosAcao["opcao"];
$acao = $dadosAcao["acao"];
if (trim($opcao) == 'ura') {
$acao = explode('-', $acao);
$dispAcao = GetAcao($opcao);
$acao = $acao[0] . ',s,1';
} else if ((trim($opcao) == 'voice')) {
$dispAcao = GetAcao($opcao) . ",";
$acao = str_replace('/', ',', $acao);
} else if ((trim($opcao) == 'rotaInterna') && (soTexto($acao) != '')) {
$dispAcao = GetAcao($opcao) . ',${EXTEN},1';
$acao = '';
} else {
$dispAcao = GetAcao($opcao) . "," . (( strtolower($opcao) == "anuncios") ? "a" : "" );
$acao = str_replace('/', ',', $acao);
$acao .= ',1';
}
/* Alan Pablo 2001-01-16
* O parametro do lista negra foi colocado antes do pbx_complemento para não bagunçar os relatorios
*/
$linha = "exten => _$modelo,n,AGI(pbx_complemento.php,$nomeContexto)\n";
fwrite($escreve, $linha);
$linha = "exten => _$modelo,n,Goto($dispAcao$acao)\n";
fwrite($escreve, $linha);
$linha = "exten => _$modelo,n,Hangup()\n";
fwrite($escreve, $linha);
$linha = '';
}
}
}
fclose($escreveCustom);
fclose($escreve);
if ($reloadUra)
CommandAsterisk($dbcon, 'URA');
}
//fim gera arquivo
}
function grava_log() {
$arq = $caminho_producao . "log_sistema.txt";
$escreve = fopen($arq, 'w');
}
function GetAcao($opcao) {
if (trim($opcao) == 'ura') {
return 'ura-';
} else if (trim($opcao) == 'grupo') {
return 'ext-grupos';
} else if (trim($opcao) == 'filas') {
return 'ext-fila';
} else if (trim($opcao) == 'voice') {
return 'ext-voicemail';
} else if (trim($opcao) == 'ramal') {
return 'ext-ramais';
} else if (trim($opcao) == 'horarios') {
return 'ext-horarios';
} else if (trim($opcao) == 'disa') {
return 'ext-disa';
} else if (trim($opcao) == 'anuncios') {
return 'ext-anuncios';
} else if (trim($opcao) == 'conferencia') {
return 'ext-conferencia';
} else if (trim($opcao) == "callback") {
return 'ext-callback-externo';
} else if (trim($opcao) == "rotaInterna") {
return 'ext-rotasinternas';
}
return '';
}
function GetOpcaoAcao($opcao, $acao, $tipo = '', $modelo = '') {
// A variável $tipo foi criadada para tratar retorno não padrao
// atualmente usado apenas na cofiguração dos horários.
$opcao = trim($opcao);
$acao = trim($acao);
$tipo = strtolower($tipo);
$acaoText = GetAcao($opcao);
$useGoto = ($tipo != 'horarios') && (strtolower($opcao) != 'integativa');
if (strtolower($opcao) == 'ura') {
$var = explode('-', $acao);
$ret = sprintf('%s%s,s,1', $acaoText, $var[0]);
} else if (strtolower($opcao) == 'voice') {
$voice = explode('/', $acao);
$ret = sprintf('%s,%s,%s', $acaoText, $voice[0], $voice[1]);
} else if (strtolower($opcao) == 'anuncios') {
$ret = sprintf('%s,a%s,1', $acaoText, $acao);
} else if (strtolower($opcao) == 'integativa') {
//$ret = sprintf('AGI(${INTEGRACAO}|%s|${CALLERID(NUM):-11}|${UNIQUEID}|${IDORIGEM}|${URA})', $acao);
$ret = sprintf('AGI(${INTEGRACAO},%s,${IF($[ "X${CALLERID(NUM)}" = "X" ]? "-" : ${CALLERID(NUM):-11})},${UNIQUEID},${IDORIGEM},${URA})', $acao);
} else if (($opcao == 'rotaInterna') && (soTexto($acao) != '')) {
$ret = sprintf('%s,${EXTEN},1', $acaoText);
} else {
$ret = sprintf('%s,%s,1', $acaoText, $acao);
}
if ($useGoto) {
$ret = sprintf('Goto(%s)', $ret);
}
return $ret;
}
function GetAcaoOpcaoRotas($opcao, $acao){
// A variável $tipo foi criadada para tratar retorno não padrao
// atualmente usado apenas na cofiguração dos horários.
$opcao = trim($opcao);
$acao = trim($acao);
$tipo = strtolower($tipo);
$acaoText = GetAcao($opcao);
if (strtolower($opcao) == 'ura') {
$var = explode('-', $acao);
$ret = sprintf('%s%s,s,1', $acaoText,$var[0]);
} else if (strtolower($opcao) == 'voice') {
$voice = explode('/', $acao);
$ret = sprintf('%s,%s,%s', $acaoText, $voice[0], $voice[1]);
} else if (strtolower($opcao) == 'anuncios') {
$ret = sprintf('%s,a%s,1', $acaoText, $acao);
} else if (($opcao == 'rotaInterna') && (soTexto($acao) != '')) {
$ret = sprintf('%s,${EXTEN},1', $acaoText);
} else {
$ret = sprintf('%s,%s,1', $acaoText, $acao);
}
return $ret;
}
function GetMascara() {
return '<option value="">MODELOS</option>
<option value="[2-5]XXXXXXX">FIXO LOCAL</option>
<option value="9XXXXXXXX">MOVEL LOCAL</option>
<option value="1XX">UTILIDADE P&Uacute;BLIXA</option>
<option value="10XXX">OPERADORAS</option>
<option value="0300X.">0300</option>
<option value="0303X.">0303</option>
<option value="0500X.">0500</option>
<option value="0800X.">0800</option>
<option value="0900X.">0900</option>
<option value="400N.">400N</option>
<option value="0ZZZZ[2-5]XXXXXXX">INTERURBANO FIXO (0+OPERADORA+DDD+NUMERO)</option>
<option value="0ZZ[2-5]XXXXXXX">INTERURBANO FIXO 2 (0+DDD+NUMERO)</option>
<option value="ZZ[2-5]XXXXXXX">INTERURBANO FIXO 3 (DDD+NUMERO)</option>
<option value="0ZZZZ9XXXXXXXX">INTERURBANO M&Oacute;VEL (0+OPERADORA+DDD+NUMERO)</option>
<option value="0ZZ9XXXXXXXX">INTERURBANO M&Oacute;VEL 2 (0+DDD+NUMERO)</option>
<option value="ZZ9XXXXXXXX">INTERURBANO M&Oacute;VEL 3 (DDD+NUMERO)</option>
<option value="00XXXXXXXXXX.">INTERNACIONAL</option>';
}
function ApagaUrl($dbcon, $ramal) {
CommandAsterisk2($dbcon, 'DEL ESPERA', $ramal, ''); //executa inser��o na base interna do asterisk
CommandAsterisk2($dbcon, 'DEL SIGAME-INTERNO', $ramal, ''); //executa inser��o na base interna do asterisk
CommandAsterisk2($dbcon, 'DEL SIGAME-EXTERNO', $ramal, ''); //executa inser��o na base interna do asterisk
CommandAsterisk2($dbcon, 'DEL SIGAME-OCUPADO', $ramal, ''); //executa inser��o na base interna do asterisk
CommandAsterisk2($dbcon, 'DEL SIGAME-NAOATENDE', $ramal, ''); //executa inser��o na base interna do asterisk
CommandAsterisk2($dbcon, 'DEL GRAVACAO', $ramal, ''); //executa inser��o na base interna do asterisk
CommandAsterisk2($dbcon, 'DEL GRAVACAO-OUT', $ramal, ''); //executa inser��o na base interna do asterisk
CommandAsterisk2($dbcon, 'DEL MUSICA', $ramal, ''); //executa inser��o na base interna do asterisk
CommandAsterisk2($dbcon, 'DEL CADEADO', $ramal, ''); //executa inser��o na base interna do asterisk
CommandAsterisk2($dbcon, 'DEL NAOPERTUBE', $ramal, ''); //executa inser��o na base interna do asterisk
CommandAsterisk2($dbcon, 'DEL SENHA', $ramal, ''); //executa inser��o na base interna do asterisk
CommandAsterisk2($dbcon, 'DEL DISPOSITIVO', $ramal, ''); //executa inser��o na base interna do asterisk
CommandAsterisk2($dbcon, 'DEL VOICE2', $ramal, '');
CommandAsterisk2($dbcon, 'DEL BINA-NOME', $ramal, '');
CommandAsterisk2($dbcon, 'DEL BINA-EXTERNO', $ramal, '');
CommandAsterisk2($dbcon, 'DEL TEMPO-RING-RAMAL', $ramal, '');
}
function GetIdGrupoUser($dbcon, $idUser) {
$query = "select gp_id from pbx_grupo_usuario where user_id = '$idUser' limit 1";
$result = pg_query($dbcon, $query);
$row = pg_fetch_row($result);
return $row[0];
}
function GeraExtRamais($dbcon) {
try {
$conf = GetConfPadrao($dbcon);
if (empty($conf))
throw new Exception('Não foi possível obter as configurações!');
$caminho_producao = $conf["caminho_producao"];
$arq = $caminho_producao . "extensions_ramais.conf";
$escreve = fopen($arq, 'w');
if (!$escreve)
throw new Exception('Não foi abrir o arquivo \"extensions_ramais.conf\"!');
//GERA O ARQUIVO DE DENTRO DO HINTS
$arq1 = $caminho_producao . "hints.conf";
$escreveHint = fopen($arq1, 'w');
if (!$escreveHint)
throw new Exception('Não foi abrir o arquivo \"hints.conf\"!');
fwrite($escreve, '[ext-ramais]' . "\n");
fwrite($escreve, 'include => ext-ramais-custom' . "\n");
fwrite($escreveHint, '[hints]' . "\n");
$query = "select * from pbx_ramais order by nome asc";
$result = pg_query($dbcon, $query);
if (!$result)
throw new Exception('Erro ao consultar \"Banco de Dados\"!');
while ($dados = pg_fetch_array($result)) {
fwrite($escreve, 'exten => _' . $dados['nome'] . ',1,ExecIf($["${ISNULL(${CDR(direcao)})}" = "1"]?Set(CDR(direcao)=I))' . "\n");
fwrite($escreve, 'exten => _' . $dados['nome'] . ',n,ExecIf($["${CDR(direcao)}" != "E" && "${ISNULL(${CDR(ramal_origem)})}" = "1"]?Set(CDR(ramal_origem)=${CALLERID(num)}))' . "\n");
fwrite($escreve, 'exten => _' . $dados['nome'] . ',n,Set(CHANNEL(accountcode)=${TRANSFER})' . "\n");
fwrite($escreve, 'exten => _' . $dados['nome'] . ',n,AGI(chefe-secretaria.php,${EXTEN},${CALLERID(num)})' . "\n");
fwrite($escreve, 'exten => _' . $dados['nome'] . ',n,GotoIf($["${TIPO}" = "EXTERNA"]?externa:interna)' . "\n");
fwrite($escreve, 'exten => _' . $dados['nome'] . ',n(interna),AGI(pbx_complemento.php,ext-ramais,interna)' . "\n");
fwrite($escreve, 'exten => _' . $dados['nome'] . ',n,Macro(dial-interno,${EXTEN})' . "\n");
fwrite($escreve, 'exten => _' . $dados['nome'] . ',n,Hangup()' . "\n");
fwrite($escreve, 'exten => _' . $dados['nome'] . ',n(externa),AGI(pbx_complemento.php,ext-ramais)' . "\n");
fwrite($escreve, 'exten => _' . $dados['nome'] . ',n,Macro(dial-externo,${EXTEN})' . "\n");
fwrite($escreve, 'exten => _' . $dados['nome'] . ',n,Hangup()' . "\n");
fwrite($escreveHint, 'exten => ' . $dados['nome'] . ',hint,' . $dados['dispositivo'] . "\n");
}
if (!fclose($escreve))
throw new Exception('Não foi possível salvar o arquivo \"extensions_ramais.conf\"!');
if (!fclose($escreveHint))
throw new Exception('Não foi possível salvar o arquivo \"hints.conf\"!');
return true;
} catch (Exception $e) {
return false;
}
}
function GeraException($source, $message, $silent = 0) {
if (!$source) {
if ($silent)
return $message;
throw new Exception($message);
}
}
function WriteFile($handle, $string, $silent = 0) {
$result = fwrite($handle, $string);
GeraException($result, "Não foi possível \"Gravar o Arquivo\"!", $silent);
}
function GeraCallback($dbcon, $reloadUra = true, $silent = 0) {
$conf = GetConfPadrao($dbcon);
$caminho_producao = $conf["caminho_producao"];
$arq = $caminho_producao . "extensions_callback.conf";
$escreve = fopen($arq, 'w');
$query = "select id, descricao, opcao, acao, opcao1, acao1 from pbx_callback";
$result = pg_query($dbcon, $query);
GeraException($result, "Não foi possível \"Selecionar os Registros\"!");
WriteFile($escreve, "[ext-callback-externo]\n", $silent);
WriteFile($escreve, "include => ext-callback-externo-custom\n", $silent);
while ($dados = pg_fetch_array($result)) {
$opcao = $dados["opcao"];
$acao = $dados["acao"];
$opcao1 = $dados["opcao1"];
$acao1 = $dados["acao1"];
$id = $dados["id"];
if (trim($opcao) == 'ura') {
$acao = explode('-', $acao);
$dest = GetAcao($opcao) . $acao[0]; // . ',s';
$acao = 's';
} else {
$dest = GetAcao($opcao);
$acao = (trim($opcao) == 'voice') ? str_replace('/', '"\\\',\\\'"', $acao) : $acao;
$acao = (strtolower($opcao) == "anuncios") ? 'a' . $acao : $acao;
}
WriteFile($escreve, "exten => _$id,1,Answer()\n", $silent);
fwrite($escreve, "exten => _$id,n,ExecIf($[\"\${ISNULL(\${CDR(direcao)})}\" = \"1\"]?Set(CDR(direcao)=I))" . "\n");
fwrite($escreve, "exten => _$id,n,ExecIf($[\"\${CDR(direcao)}\" != \"E\" && \"\${ISNULL(\${CDR(ramal_origem)})}\" = \"1\"]?Set(CDR(ramal_origem)=\${CALLERID(num)}))" . "\n");
WriteFile($escreve, "exten => _$id,n,Agi(pbx_complemento.php,ext-callback-externo)\n", $silent);
WriteFile($escreve, "exten => _$id,n,Agi(callback.php,\${CALLERID(NUM):-10})\n", $silent);
WriteFile($escreve, "exten => _$id,n,Set(ORIGEM=\${CALLERID(NUM):-10})\n", $silent);
WriteFile($escreve, "exten => _$id,n,Set(CONTEXTO-DESTINO=$dest)\n", $silent);
WriteFile($escreve, "exten => _$id,n,Set(EXTEN-DESTINO=$acao)\n", $silent);
WriteFile($escreve, "exten => _$id,n,System(/var/lib/asterisk/scripts/callback-externo.sh \${ORIGEM} \${CONTEXTO-DESTINO} \${EXTEN-DESTINO} &)\n", $silent);
WriteFile($escreve, "exten => _$id,n,Busy(15)\n", $silent);
WriteFile($escreve, "exten => _$id,n,Hangup()\n", $silent);
if (trim($opcao1) == 'ura') {
$ac = explode('-', $acao1);
$displayOpcao = GetAcao($opcao1) . $ac[0] . ',s';
$acao1 = "";
} else {
$displayOpcao = GetAcao($opcao1) . "," . (( strtolower($opcao1) == "anuncios") ? "a" : "" );
$acao1 = str_replace('/', ',', $acao1);
}
if ((trim($opcao1) == 'voice'))
WriteFile($escreve, "exten => _$id,n(destino),Goto($displayOpcao$acao1)\n", $silent);
else
WriteFile($escreve, "exten => _$id,n(destino),Goto($displayOpcao$acao1,1)\n", $silent);
WriteFile($escreve, "exten => _$id,n,Hangup()\n", $silent);
}
fclose($escreve);
if ($reloadUra)
CommandAsterisk($dbcon, 'URA');
}
function GeraDisa($dbcon, $reload = true, $silent = 0) {
$conf = GetConfPadrao($dbcon);
$caminho_producao = $conf["caminho_producao"];
$arq = $caminho_producao . "extensions_disa.conf";
$escreve = fopen($arq, "w");
WriteFile($escreve, "[ext-disa]\n", $silent);
WriteFile($escreve, "include => ext-disa-custom\n", $silent);
$query = "SELECT * FROM pbx_disa";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
$x++;
WriteFile($escreve, "exten => _" . $dados["numero"] . ",1,Answer()\n", $silent);
WriteFile($escreve, "exten => _" . $dados["numero"] . ",n,Set(CHANNEL(accountcode)=\${TRANSFER})\n", $silent);
WriteFile($escreve, "exten => _" . $dados["numero"] . ",n,Agi(pbx_complemento.php,ext-disa)\n", $silent);
$sql_conta = pg_query("SELECT * FROM pbx_disa_numeros where id_disa=" . $dados["id"] . " order by id asc");
$quantreg = pg_num_rows($sql_conta);
if ($quantreg > 0) {
WriteFile($escreve, "exten => _" . $dados["numero"] . ",n,Agi(disa.php,\${CALLERID(NUM):-10})\n", $silent);
}
WriteFile($escreve, "exten => _" . $dados["numero"] . ",n,Set(TIMEOUT(digit)=" . $dados["tempo_timeout"] . ")\n", $silent);
WriteFile($escreve, "exten => _" . $dados["numero"] . ",n,Set(TIMEOUT(response)=" . $dados["timeout"] . ")\n", $silent);
if (trim($dados["senha"]) != "") {
WriteFile($escreve, "exten => _" . $dados["numero"] . ",n,Authenticate(" . $dados["senha"] . ")\n", $silent);
}
if ($dados["ligacao_externa"])
WriteFile($escreve, "exten => _" . $dados["numero"] . ",n,Set(__PERMISSAO=OK)\n", $silent);
WriteFile($escreve, "exten => _" . $dados["numero"] . ",n,DISA(no-password,disa)\n", $silent);
WriteFile($escreve, "exten => _" . $dados["numero"] . ",n,Hangup()\n", $silent);
if (!empty($dados["opcao"])) {
$dispAcao = GetOpcaoAcao($dados["opcao"], $dados["acao"]);
$dispAcao = sprintf("exten => _%s,n(destino),%s%s", $dados["numero"], $dispAcao, "\n");
WriteFile($escreve, $dispAcao, $silent);
WriteFile($escreve, "exten => _" . $dados["numero"] . ",n,Hangup()\n", $silent);
}
}
fclose($escreve);
if ($reload) {
//GeraException(CommandAsterisk($dbcon,"DISA"), "Não foi possível recarregar o \"Disa na Central\"!", $silent);
GeraException(CommandAsterisk($dbcon, "URA"), "Não foi possível recarregar a \"Ura na Central\"!", $silent);
}
}
function GeraSip($dbcon, $reload) {
$conf = GetConfPadrao($dbcon);
$caminho_producao = $conf["caminho_producao"];
$arq = $caminho_producao . "sip_ramais.conf";
$escreve = fopen($arq, 'w');
$query = "SELECT nome,type,secret,callerid,qualify,port,nat,host,dtmfmode,context,canreinvite,disallow,allow,\"call-limit\",videosupport,fromdomain,t38pt_udptl,mailbox,pickupgroup,callgroup,insecure,accountcode, extranet
FROM pbx_sip_ramais order by id asc";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
for ($i = 0; pg_num_fields($result) > $i; $i++) {
if (pg_field_name($result, $i) == "nome") {
fwrite($escreve, "[" . $dados[pg_field_name($result, $i)] . "]" . "\n");
} else if (pg_field_name($result, $i) == "extranet") {
$extranet = trim($dados['extranet']);
if (!$extranet) {
fwrite($escreve, "deny=0.0.0.0/0\n");
/*
* Escreve as redes permitidas para autenticação dos ramais.
*/
$redes = $extranet;
$redes = preg_split('/[\\\ | - ; , \n]/', $redes, -1, PREG_SPLIT_NO_EMPTY);
foreach ($redes as $rede) {
$rede = trim($rede);
if ($rede !== '') {
fwrite($escreve, "permit=$rede\n");
}
}
}
} else {
if (trim($dados[pg_field_name($result, $i)]) != '') {
if (pg_field_name($result, $i) == 'callerid') {
fwrite($escreve, pg_field_name($result, $i) . '=' . $dados["nome"] . "\n");
} else {
fwrite($escreve, pg_field_name($result, $i) . '=' . $dados[pg_field_name($result, $i)] . "\n");
}
}
}
}
fwrite($escreve, "\n");
}
//GERA OS TRONCOS SIP DENTRO DO ARQUIVO DE RAMAIS
$query = "SELECT nome, username, secret, type, context, callerid, host,
case when(coalesce(fromuser, '0')::int > 0)then username else '' end as fromuser, permit as fromdomain, port, deny, permit, qualify,
case when nat = 'yes' then 'force_rport,comedia' else nat end as nat, canreinvite, disallow, allow, dtmfmode, 'port,invite' as insecure
FROM pbx_troncos_sip order by id asc";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
for ($i = 0; pg_num_fields($result) > $i; $i++) {
if (pg_field_name($result, $i) == "nome") {
fwrite($escreve, "[" . $dados[pg_field_name($result, $i)] . "]" . "\n");
} else {
if (trim($dados[pg_field_name($result, $i)]) != '') {
if (trim(pg_field_name($result, $i)) == 'permit') {
fwrite($escreve, pg_field_name($result, $i) . '=' . $dados[pg_field_name($result, $i)] . '/255.255.255.255' . "\n");
} else {
fwrite($escreve, pg_field_name($result, $i) . '=' . $dados[pg_field_name($result, $i)] . "\n");
}
}
}
}
fwrite($escreve, "\n");
}
fclose($escreve);
/*
* GERA O EXTENSION DOS RAMAIS
*/
GeraExtRamais($dbcon);
/*
* GERA OS REGISTROS DO SIP
*/
$arq = $caminho_producao . "sip_register.conf";
$escreve = fopen($arq, 'w');
$query = "select * from pbx_troncos_sip";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
if (($dados['pedido_registro'] == 'yes') && (!empty($dados['registro']))) {
fwrite($escreve, sprintf("register => %s\n", trim($dados['registro'])));
}
}
if ($reload) {
/*
* EXECUTA O RELOAD DO SIP
*/
CommandAsterisk($dbcon, 'SIP');
/*
* EXECUTA O RELOAD DO EXTENSIONS
*/
CommandAsterisk($dbcon, 'URA');
}
}
function GeraIax($dbcon, $reload) {
$conf = GetConfPadrao($dbcon);
$caminho_producao = $conf["caminho_producao"];
$arq = $caminho_producao . "iax_ramais.conf";
$escreve = fopen($arq, 'w');
$query = "SELECT nome, \"type\", host, secret, identificador as callerid, context, disallow, allow,
deny, permit, 'no' as requirecalltoken, inkeys, outkeys,callgroup,pickupgroup, case when(conta_senha = 'V')then 'yes' else 'no' end as qualify
FROM pbx_iax_pbx order by id asc";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
for ($i = 0; pg_num_fields($result) > $i; $i++) {
/* Alan Pablo - 2011-01-16
* Alterado username para nome => if (pg_field_name($result,$i)=="nome")
*/
$fieldName = pg_field_name($result, $i);
if ($fieldName == "nome") {
fwrite($escreve, "[" . $dados[$fieldName] . "]" . "\n");
} else {
if ($dados[$fieldName] != '') {
if ($fieldName == "callerid") {
fwrite($escreve, $fieldName . '=' . $dados["nome"] . "\n");
} else {
fwrite($escreve, $fieldName . '=' . $dados[$fieldName] . "\n");
}
}
}
}
fwrite($escreve, chr(13) . chr(10));
}
/*
* GERA TRONCOS IAX DENTRO DO ARQUIVO DE RAMAIS IAX
*/
$query = "SELECT nome, username, secret, type, context, callerid, host,
port, deny, permit, qualify, trunk, disallow, allow,
fromuser, fromdomain, 'no' as requirecalltoken
FROM pbx_troncos_iax order by id asc";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
for ($i = 0; pg_num_fields($result) > $i; $i++) {
if (pg_field_name($result, $i) == "nome") {
fwrite($escreve, "[" . $dados[pg_field_name($result, $i)] . "]" . "\n");
} else {
if (trim($dados[pg_field_name($result, $i)]) != '') {
if (pg_field_name($result, $i) == "permit") {
fwrite($escreve, pg_field_name($result, $i) . '=' . $dados[pg_field_name($result, $i)] . '/255.255.255.255' . "\n");
} else {
fwrite($escreve, pg_field_name($result, $i) . '=' . $dados[pg_field_name($result, $i)] . "\n");
}
}
}
}
fwrite($escreve, chr(13) . chr(10));
}
fclose($escreve);
/*
* Gera o Arquivo extensions
*/
GeraExtRamais($dbcon);
/*
* GERA OS REGISTROS DE IAX
*/
$arq = $caminho_producao . "iax_register.conf";
$escreve = fopen($arq, 'w');
$query = "select * from pbx_troncos_iax";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
if (($dados['pedido_registro'] == 'yes') && (!empty($dados['registro']))) {
fwrite($escreve, 'register => ' . trim($dados['registro']) . "\n");
}
}
/*
* EXECUTA O RELOADO DO IAX2
*/
if ($reload) {
CommandAsterisk($dbcon, 'IAX');
CommandAsterisk($dbcon, 'URA');
}
}
function GeraDgv($dbcon, $reload) {
GeraExtRamais($dbcon);
if ($reload) {
CommandAsterisk($dbcon, 'URA');
CommandAsterisk($dbcon, 'RELOAD');
}
}
function GeraPBX($dbcon, $reload) {
$conf = GetConfPadrao($dbcon);
$caminho_producao = $conf["caminho_producao"];
GeraExtRamais($dbcon);
$arq = $caminho_producao . "extensions_ramais.conf";
if ($reload) {
CommandAsterisk($dbcon, 'URA');
CommandAsterisk($dbcon, 'RELOAD');
}
}
function GeraDahdi($dbcon, $reload) {
$conf = GetConfPadrao($dbcon);
$caminho_producao = $conf["caminho_producao"];
/*
* Gera o arquivo de extensions.
*/
GeraExtRamais($dbcon);
$arq = $caminho_producao . "chan_dahdi_ramais.conf";
$escreve = fopen($arq, 'w');
$query = "select numero as callerid, contexto as context, dispositivo as channel, capturar as pickupgroup, grupo as callgroup from pbx_dahdi order by numero";
$result = pg_query($dbcon, $query);
$start = 0;
while ($dados = pg_fetch_array($result)) {
$callerid = $dados['callerid'];
$context = $dados['context'];
$channel = str_replace("DAHDI/", '', $dados['channel']);
$pickupgroup = $dados['pickupgroup'];
$callgroup = $dados['callgroup'];
if ($start)
fwrite($escreve, "\n");
fwrite($escreve, "signalling=fxo_ks\n");
fwrite($escreve, "callerid=$callerid\n");
fwrite($escreve, "context=$context\n");
fwrite($escreve, "callgroup=$callgroup\n");
fwrite($escreve, "pickupgroup=$pickupgroup\n");
fwrite($escreve, "channel=$channel\n");
$start++;
}
fclose($escreve);
/*
* Escreve os Dispositivos Dahdi.
*/
//$file = $caminho_producao."dahdi_system.conf";
$file = "/etc/dahdi/system.conf";
GravaDispositivoDahdi($dbcon, $file);
/*
* Escreve os troncos dahdi. a.callerid,
*/
$arqChanDahdi = $caminho_producao . "chan_dahdi_troncos.conf";
$escChanDahdi = fopen($arqChanDahdi, 'w');
$query = " select a.id,a.nome,a.interface,a.max_ligacoes,a.canal_dahdi,a.framing,a.signalling,a.mfcr2_variant,a.timing,a.lbo,
a.spannum,a.coding,a.crc4,a.mfcr2_get_ani_first,a.mfcr2_max_ani,a.mfcr2_max_dnis,a.mfcr2_category,a.mfcr2_allow_collect_calls,
a.mfcr2_double_answer,a.echocancel,a.echocancelwhenbridged,a.echotraining,a.echocanceller,a.context,a.channel,a.cas,a.dchan,
sonumero(a.\"group\") as group,a.txgain,a.rxgain,a.loadzone,a.defaultzone,a.switchtype,a.pridialplan, a.pridialplan as prilocaldialplan,a.overlapdial,a.bchan,a.alaw,
a.dynamic_rede,a.dynamic_mac,a.dynamic_span,a.dynamic_canais,a.dynamic_cascata,a.busydetect,a.busycount,a.fxsks,
a.cidsignalling,a.cidstart,a.echocanceller_canais,a.contrato,a.param_opc,a.tipo_cadastro,a.fxoks,a.sinalizacao_tipo,a.dispositivo
from pbx_troncos_dahdi a, pbx_troncos_dahdi b
where b.id = a.dispositivo
and a.tipo_cadastro = 'T'
order by a.channel_1, a.channel_2, interface";
$result = pg_query($dbcon, $query);
$start = 0;
while ($dados = pg_fetch_array($result)) {
$interface = strtolower($dados['interface']);
$nome = sprintf(";Nome: %s Interface: %s\n", $dados["nome"], $interface);
fwrite($escChanDahdi, $nome);
$arDefault = GetDahdiDefault($interface, false);
foreach ($arDefault as $key => $value) {
if ($key == 'param_opc') {
/*
* Parametros opcionais
*/
$param = trim($dados['param_opc']);
if ($param) {
$value = '';
$param = explode(';', $param);
foreach ($param as $value) {
$value = trim($value);
if ($value != "")
fwrite($escChanDahdi, sprintf("%s\n", $value));
}
}
}
else {
if (array_key_exists($key, $dados)) {
$value = $dados[$key] ? $dados[$key] : GetDahdiDefaultValue($interface, $key, false);
}
$value = trim($value);
/*
* somente escreve variáveis que esteja setadas.
*/
if ($value != "") {
fwrite($escChanDahdi, sprintf("%s=%s\n", $key, $value));
}
}
}
fwrite($escChanDahdi, "\n");
$start++;
}
fclose($escChanDahdi);
if ($reload) {
CommandAsterisk($dbcon, 'URA');
CommandAsterisk($dbcon, 'CHAN_DAHDI');
//CommandAsterisk($dbcon,'CHAN_DAHDI_RESTART');
}
}
function GravaDispositivoDahdi($dbcon, $file) {
$arqSystemDahdi = $file;
$escSystemDahdi = fopen($arqSystemDahdi, 'w');
$query = "select *,
case (lower(interface))when 'plc' then 0 when 'ethmf' then 1 when 'eth' then 2 end as ordem,
case when(lower(interface) = 'eth')then (case when(dynamic_cascata = '0')then '1' else '0' end) else case when(lower(interface) = 'ethmf')then dynamic_span else spannum end end as ordem1
from pbx_troncos_dahdi where tipo_cadastro = 'D' order by ordem, ordem1, dynamic_mac ";
$result = pg_query($dbcon, $query);
$start = 0;
while ($dados = pg_fetch_array($result)) {
$interface = strtolower($dados['interface']);
$sinalizacao = strtolower($dados['sinalizacao_tipo']);
$nome = sprintf("#Nome: %s Interface: %s Sinalização: %s\n", $dados["nome"], $interface, $sinalizacao);
fwrite($escSystemDahdi, "$nome");
//foreach($dados as $key => $value) $GLOBALS[$key] = $value;
/*
* Grava arquivo system.
*/
$field = '';
if (($interface == 'plc') && ($sinalizacao == 'r2'))
$field = 'r2';
else if (($interface == 'plc') && ($sinalizacao == 'isdn'))
$field = 'isdn';
else if (($interface == 'eth'))
$field = 'eth';
else if (($interface == 'ethmf'))
$field = 'ethmf';
$value = GetValueSystemDahdi($dados, $field);
if ($value != "") {
fwrite($escSystemDahdi, sprintf("%s\n", $value));
//fwrite($escSystemDahdi, "\n");
}
if (($interface == 'eth') && ($sinalizacao == 'fxs')) {
$value = trim($dados['fxoks']);
if ($value != "") {
fwrite($escSystemDahdi, sprintf("%s=%s\n", 'fxoks', $value));
//fwrite($escSystemDahdi, "\n");
}
$value = trim($dados['fxsks']);
if ($value != "") {
fwrite($escSystemDahdi, sprintf("%s=%s\n", 'fxsks', $value));
//fwrite($escSystemDahdi, "\n");
}
}
if (($interface == 'plc') && ($sinalizacao == 'fxo')) {
$value = trim($dados['fxsks']);
if ($value != "") {
fwrite($escSystemDahdi, sprintf("%s=%s\n", 'fxsks', $value));
//fwrite($escSystemDahdi, "\n");
}
}
if (($interface == 'eth') && ($sinalizacao == 'r2')) {
$value = trim($dados['channel']);
if ($value != "") {
fwrite($escSystemDahdi, sprintf("%s=%s:1101\n", 'cas', $value));
//fwrite($escSystemDahdi, "\n");
}
$value = trim($dados['dchan']);
if ($value != "") {
fwrite($escSystemDahdi, sprintf("%s=%s\n", 'dchan', $value));
//fwrite($escSystemDahdi, "\n");
}
}
if (($interface == 'plc') && ($sinalizacao == 'r2')) {
$value = trim($dados['channel']);
if ($value != "") {
fwrite($escSystemDahdi, sprintf("%s=%s:1101\n", 'cas', $value));
//fwrite($escSystemDahdi, "\n");
}
$value = trim($dados['dchan']);
if ($value != "") {
fwrite($escSystemDahdi, sprintf("%s=%s\n", 'dchan', $value));
//fwrite($escSystemDahdi, "\n");
}
}
if (($interface == 'plc') && ($sinalizacao == 'isdn')) {
$value = trim($dados['channel']);
if ($value != "") {
fwrite($escSystemDahdi, sprintf("%s=%s\n", 'bchan', $value));
//fwrite($escSystemDahdi, "\n");
}
$value = trim($dados['dchan']);
if ($value != "") {
fwrite($escSystemDahdi, sprintf("%s=%s\n", 'dchan', $value));
//fwrite($escSystemDahdi, "\n");
}
$value = trim($dados['alaw']);
if ($value != "") {
fwrite($escSystemDahdi, sprintf("%s=%s\n", 'alaw', $value));
//fwrite($escSystemDahdi, "\n");
}
}
if (($interface == 'ethmf') && ($sinalizacao == 'r2')) {
$value = trim($dados['channel']);
if ($value != "") {
fwrite($escSystemDahdi, sprintf("%s=%s:1101\n", 'cas', $value));
//fwrite($escSystemDahdi, "\n");
}
$value = trim($dados['dchan']);
if ($value != "") {
fwrite($escSystemDahdi, sprintf("%s=%s\n", 'dchan', $value));
//fwrite($escSystemDahdi, "\n");
}
$value = trim($dados['alaw']);
if ($value != "") {
fwrite($escSystemDahdi, sprintf("%s=%s\n", 'alaw', $value));
//fwrite($escSystemDahdi, "\n");
}
}
if (($interface == 'ethmf') && ($sinalizacao == 'isdn')) {
$value = trim($dados['channel']);
if ($value != "") {
fwrite($escSystemDahdi, sprintf("%s=%s\n", 'bchan', $value));
//fwrite($escSystemDahdi, "\n");
}
$value = trim($dados['dchan']);
if ($value != "") {
fwrite($escSystemDahdi, sprintf("%s=%s\n", 'dchan', $value));
//fwrite($escSystemDahdi, "\n");
}
$value = trim($dados['alaw']);
if ($value != "") {
fwrite($escSystemDahdi, sprintf("%s=%s\n", 'alaw', $value));
//fwrite($escSystemDahdi, "\n");
}
}
$value = trim($dados['echocanceller']);
if ($value != "") {
$chan = trim($dados['channel']);
$chan = $chan ? ",$chan" : "";
fwrite($escSystemDahdi, sprintf("%s=%s%s\n", 'echocanceller', $value, $chan));
//fwrite($escSystemDahdi, "\n");
}
fwrite($escSystemDahdi, "\n");
$start++;
}
fwrite($escSystemDahdi, sprintf("%s\n", 'loadzone=br'));
fwrite($escSystemDahdi, sprintf("%s\n", 'defaultzone=br'));
fclose($escSystemDahdi);
}
function GetDahdiDefault($interface, $dispo = true) {
if ($dispo) {
if ($interface == "r2")
return array("language" => "br", "usecallerid" => "yes", "callwaiting" => "yes", "usecallingpres" => "yes",
"callwaitingcallerid" => "yes", "threewaycalling" => "yes", "transfer" => "yes", "canpark" => "yes", "cancallforward" => "yes",
"callreturn" => "yes", "signalling" => "mfcr2", "mfcr2_variant" => "br", "echocancel" => "yes", "echocancelwhenbridged" => "no",
"echotraining" => "no", "mfcr2_get_ani_first" => "yes", "mfcr2_max_ani" => "20", "mfcr2_max_dnis" => "4", "mfcr2_category" => "national_subscriber",
"mfcr2_allow_collect_calls" => "yes", "mfcr2_double_answer" => "no", "rxgain" => "1,0%", "txgain" => "1,0%", "context" => "padrao", "group" => "1",
"channel" => "", "timing" => "0", "coding" => "hdb3");
if ($interface == "isdn")
return array("switchtype" => "national", "signalling" => "pri_net", "pridialplan" => "euroisdn", "prilocaldialplan" => "euroisdn", "overlapdial" => "yes", "echocancel" => "yes", "echocancelwhenbridged" => "no", "echotraining" => "no", "context" => "", "channel" => "", "group" => "", "txgain" => "-1,0%", "rxgain" => "-1,0%", "coding" => "hdb3");
if ($interface == "anl")
return array('busycount' => '4', 'busydetect' => 'yes', 'callerid' => '', 'channel' => '', 'cidsignalling' => 'dtmf',
'cidstart' => 'ring', 'context' => '', 'echocancel' => 'yes', 'echocancelwhenbridged' => 'no', 'echotraining' => 'no', 'group' => '1',
'rxgain' => '-1,0%', 'txgain' => '-1,0%',);
}
else {
if ($interface == "r2")
return array('signalling' => 'mfcr2', 'mfcr2_variant' => 'br', 'echocancel' => 'yes', 'echocancelwhenbridged' => 'yes', 'echotraining' => 'yes', 'mfcr2_allow_collect_calls' => 'yes', 'mfcr2_category' => 'national_subscriber', 'mfcr2_double_answer' => 'no', 'mfcr2_get_ani_first' => 'yes', 'mfcr2_max_ani' => '20', 'mfcr2_max_dnis' => '4', 'rxgain' => '', 'txgain' => '', 'param_opc' => '', 'context' => 'entrada-pstn', 'group' => '', 'channel' => '');
if ($interface == "isdn")
return array('switchtype' => 'national', 'signalling' => 'pri_net', 'pridialplan' => 'national', 'prilocaldialplan' => '', 'overlapdial' => 'yes', 'echocancel' => 'yes', 'echocancelwhenbridged' => 'yes', 'echotraining' => 'yes', 'rxgain' => '-1,0%', 'txgain' => '0', 'param_opc' => '', 'context' => 'entrada-pstn', 'group' => '', 'channel' => '');
if ($interface == "anl")
return array('signalling' => 'fxs_ks', 'busycount' => '4', 'busydetect' => 'yes', 'callerid' => 'asreceived', 'cidsignalling' => 'dtmf', 'cidstart' => 'ring', 'echocancel' => '512', 'echocancelwhenbridged' => 'yes', 'echotraining' => 'yes', 'rxgain' => '4', 'txgain' => '4', 'param_opc' => '', 'context' => 'entrada-pstn', 'group' => '', 'channel' => '');
}
return array();
}
function GetDahdiDefaultValue($interface, $field, $dispo = true) {
$ar = GetDahdiDefault($interface, $dispo);
return isset($ar[$field]) ? $ar[$field] : "";
}
function GetValueSystemDahdi($dados, $field) {
if (($field == 'r2') || ($field == 'isdn')) {
$crc4 = trim($dados["crc4"]);
$crc4 = $crc4 != 'no' ? ",$crc4" : "";
$spannum = $dados["spannum"] != '' ? $dados["spannum"] : GetDahdiDefaultValue($field, "spannum");
$timing = $dados["timing"] != '' ? $dados["timing"] : GetDahdiDefaultValue($field, "timing");
$lbo = $dados["lbo"] != '' ? $dados["lbo"] : GetDahdiDefaultValue($field, "lbo");
$framing = ($field == 'r2') ? "cas" : "ccs";
$coding = $dados["coding"] != '' ? $dados["coding"] : GetDahdiDefaultValue($field, "coding");
return sprintf("span=%s,%s,%s,%s,%s%s", $spannum, $timing, $lbo, $framing, $coding, $crc4);
//Exemplo: span=1,1,0,cas,hdb3 span=2,0,0,cas,hdb3
} else if (($field == 'ethmf') || ($field == 'eth')) {
if ($field == 'ethmf') {
return sprintf("dynamic=ethmf,%s/%s/%s,%s,%s", $dados["dynamic_rede"], $dados["dynamic_mac"], $dados["dynamic_span"], $dados["dynamic_canais"], $dados["timing"]);
/* 'dynamic_mac', 'dynamic_span', 'dynamic_canais', 'dynamic_cascata'
ethmf = Modulo dahdi utilizado pelo redfone
em2 ou eth2 = Interface de rede conectada ao gateway redfone
00:50:c2:65:e1:48 = Endereço MAC do Redfone
/0 => Define o span igual na placa
31 => Define a quantidade de canais de comunicação
0 ou 1 => Em caso de mais de um equipamento define o Master (1) ou Slave (0)
#Redfone
dynamic=ethmf,em2/00:50:c2:65:e1:48/0,31,0
dynamic=ethmf,em2/00:50:c2:65:e1:48/1,31,1
*/
} else if ($field == 'eth') {
return sprintf("dynamic=eth,%s/%s,%s,%s", $dados["dynamic_rede"], $dados["dynamic_mac"], $dados["dynamic_canais"], $dados["dynamic_cascata"]);
/*
eth = Modulo dahdi utilizado pelo redfone
em2 ou eth2 = Interface de rede conectada ao gateway redfone
00:50:c2:65:e1:48 = Endereço MAC do Redfone
36 => Define a quantidade de canais de comunicação
0 ou 1 => Em caso de mais de um equipamento define o Master (1) ou Slave (0)
#Cianet
dynamic=eth,eth1/00:19:46:0A:02:93,36,1
dynamic=eth,eth1/00:19:46:01:86:97,36,0
dynamic=eth,eth1/00:19:46:0A:02:92,36,0
dynamic=eth,eth1/00:19:46:0A:02:9A,36,0
*/
}
return "";
}
}
function GeraKhomp($dbcon, $reload) {
$conf = GetConfPadrao($dbcon);
$caminho_producao = $conf["caminho_producao"];
/*
* Gera o arquivo de extensions.
*/
GeraExtRamais($dbcon);
$query = "select numero as callerid, contexto as context, dispositivo as channel, capturar as pickupgroup, grupo as callgroup, numero_serie, numero_khomp, volume_input, volume_output, imediate from pbx_khomp where numero <> '0' order by numero_khomp::int";
$result = pg_query($dbcon, $query);
$start = 0;
$branches = array();
$ramais = '';
$hotlines = '';
while ($dados = pg_fetch_array($result)) {
$callerid = $dados['callerid'];
$context = $dados['context'];
$pickupgroup = !$dados['pickupgroup'] ? 0 : $dados['pickupgroup'];
$callgroup = !$dados['callgroup'] ? 0 : $dados['callgroup'];
$numero_serie = $dados['numero_serie'];
$numero_khomp = $dados['numero_khomp'];
$volume_input = !$dados['volume_input'] ? 0 : $dados['volume_input'];
$volume_output = !$dados['volume_output'] ? 0 : $dados['volume_output'];
$hotline = trim($dados['imediate']);
if (array_search($numero_serie, $branches) === false)
$branches[] = $numero_serie;
$ramais .= sprintf("%s = callgroup:%s | pickupgroup:%s | context:%s | input-volume:%s | output-volume:%s | calleridnum:%s\n", $numero_khomp, $callgroup, $pickupgroup, $context, $volume_input, $volume_output, $callerid);
if ($hotline)
$hotlines .= sprintf("%s = %s\n", $hotline);
$start++;
}
$fxs_branches = '';
if (count($branches)) {
$branches = implode(",", $branches);
$fxs_branches = sprintf("1 = %s\n", $branches);
}
/*
* Cria os troncos
*/
$query = "select grupo, porta, contexto from pbx_troncos_khomp order by id";
$result = pg_query($dbcon, $query);
$grupos = '';
while ($dados = pg_fetch_array($result)) {
$grupo = soNumero($dados['grupo']);
$porta = $dados['porta'];
$contexto = $dados['contexto'];
$grupos .= sprintf("%s=%s:%s\n", $grupo, $porta, $contexto);
}
$arq = $caminho_producao . "khomp.tpl";
$tpl = fopen($arq, 'rb');
if ($tpl) {
$arq = $caminho_producao . "khomp.conf";
$escreve = fopen($arq, 'wb');
$tpl_khomp = '';
$start = 0;
while (!feof($tpl)) {
$linha = fgets($tpl);
$linha = trim($linha);
$ch = substr($linha, 0, 1);
if (($ch != ';') && ($linha)) {
if (strpos($linha, '{SERIES}') !== false) {
$tpl_khomp = $fxs_branches;
} else if (strpos($linha, '{HOTLINES}') !== false) {
$tpl_khomp = $hotlines;
} else if (strpos($linha, '{RAMAIS}') !== false) {
$tpl_khomp = $ramais;
} else if (strpos($linha, '{GRUPOS}') !== false) {
$tpl_khomp = $grupos;
} else {
if ($start && (strpos($linha, '[') !== false))
$tpl_khomp = "\n" . $linha;
else
$tpl_khomp = $linha;
}
$start++;
fwrite($escreve, $tpl_khomp . "\n");
}
}
fclose($escreve);
fclose($tpl);
}
if ($reload) {
CommandAsterisk($dbcon, 'URA');
CommandAsterisk($dbcon, 'CHAN_KHOMP');
}
}
function GeraVoicemail($dbcon, $reload) {
$conf = GetConfPadrao($dbcon);
$caminho_producao = $conf["caminho_producao"];
$arq = $caminho_producao . "voicemail.conf";
$escreve = fopen($arq, 'w');
$query = "SELECT attach, format, charset, \"delete\", emailsubject, emailbody, serveremail,
fromstring, mailcmd, forcegreetings, forcename,
maxmsg, maxmessage, minmessage, maxgreet, maxsilence, silencethreshold,
maxlogins, skipms, saycid, emaildateformat, zonemessages
FROM pbx_voicemail_general";
$result = pg_query($dbcon, $query);
fwrite($escreve, '[general]' . "\n");
while ($dados = pg_fetch_array($result)) {
$x++;
for ($i = 0; pg_num_fields($result) > $i; $i++) {
if ($dados[pg_field_name($result, $i)] != '') {
if (pg_field_name($result, $i) == 'zonemessages') {
fwrite($escreve, '[zonemessages]' . "\n");
}
fwrite($escreve, pg_field_name($result, $i) . '=' . $dados[pg_field_name($result, $i)] . "\n");
}
}
}
fwrite($escreve, chr(13) . chr(10));
fwrite($escreve, '[default]' . "\n");
$query = "SELECT * FROM pbx_voicemail_usuarios order by id asc";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
fwrite($escreve, $dados['caixa_postal'] . '=>' . $dados['senha'] . ',' . $dados['nome'] . ',' . $dados['email'] . ',' . 'attach=' . $dados['attach'] . ',saycid=' . $dados['saycid'] . ',envelope=' . $dados['envelope'] . ',delete=' . $dados['delete'] . "\n");
}
fwrite($escreve, chr(13) . chr(10));
fclose($escreve);
if ($reload)
CommandAsterisk($dbcon, 'VOICE');
}
function GeraDigivoice($dbcon, $reload) {
$conf = GetConfPadrao($dbcon);
$caminho_producao = $conf["caminho_producao"];
$arq = $caminho_producao . "digivoice.conf";
$escreve = fopen($arq, 'w');
fwrite($escreve, '[general]' . "\n");
$query = "SELECT * FROM pbx_digivoice_general";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
$x++;
for ($i = 0; pg_num_fields($result) > $i; $i++) {
fwrite($escreve, pg_field_name($result, $i) . '=' . $dados[pg_field_name($result, $i)] . "\n");
}
}
fwrite($escreve, chr(13) . chr(10) . '[allportsconfig]' . "\n");
$query = "SELECT * FROM pbx_digivoice_allportsconfig";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
$x++;
for ($i = 0; pg_num_fields($result) > $i; $i++) {
fwrite($escreve, pg_field_name($result, $i) . '=' . $dados[pg_field_name($result, $i)] . "\n");
}
}
fwrite($escreve, chr(13) . chr(10) . '[groups]' . "\n");
$query = "SELECT * FROM pbx_digivoice_grupos_ order by numero";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
if (!empty($dados['numero']))
fwrite($escreve, 'group=' . $dados['numero'] . "\n");
if (!empty($dados['portas']))
fwrite($escreve, 'ports=>' . $dados['portas'] . "\n");
}
fwrite($escreve, chr(13) . chr(10) . "\n" . '[port_config]' . "\n");
$query = "SELECT \"group\", signalling, context, \"language\", accountcode,
musiconhold, tx_gain, rx_gain, echocan, echotraining, callprogress,
silence_threshold, callgroup, pickupgroup, relaxdtmf, gen_dtmf, gen_ringback, gen_busy,
dtmf_to_asterisk, polarity, faxdetection, drop_tx_samples_factor, r2_country,
immediate, min_digits as min_digits_rx, max_digits_rx, cid_pos, category, pin_number, group_b_value, port_id, b_subscriber_hangup,
wait_dialtone, ccb_pass_through, ring_type, flash_min_time, flash_max_time, interdigit_timeout, hide_number, cid_type, customcascfg, dialtone_timeout, second_call_digits, ports
FROM pbx_digivoice_grupos order by ports_1, ports_2 ";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
$x++;
for ($i = 0; pg_num_fields($result) > $i; $i++) {
if (pg_field_name($result, $i) != "group") {
if (pg_field_name($result, $i) == "ports") {
if (trim($dados[pg_field_name($result, $i)]) != "")
fwrite($escreve, 'ports=>' . $dados[pg_field_name($result, $i)] . "\n" . "\n");
}
else {
if (trim($dados[pg_field_name($result, $i)]) != "")
fwrite($escreve, pg_field_name($result, $i) . '=' . $dados[pg_field_name($result, $i)] . "\n");
}
}
}
fwrite($escreve, chr(13) . chr(10));
$query2 = "select coalesce(contexto,'default') as contexto,identificador,voicemail,immediate,grupo,capturar,musica_espera,accountcode,dispositivo, numero from pbx_digivoice_ramais_fxs a, pbx_dgv b
where cast(a.ramal as integer) = cast(b.numero as integer) and a.id_grupo=" . $dados['group'];
$result2 = pg_query($dbcon, $query2);
while ($dados2 = pg_fetch_array($result2)) {
if (trim($dados2['contexto']) == '') {
$contexto = "padrao";
} else {
$contexto = $dados2['contexto'];
}
fwrite($escreve, 'context=' . $contexto . chr(13) . chr(10));
if (!empty($dados2['numero']))
fwrite($escreve, 'port_id=' . $dados2['numero'] . "\n");
if (!empty($dados2['voicemail']))
fwrite($escreve, 'mailbox=' . $dados2['voicemail'] . "\n");
if (!empty($dados2['immediate']))
fwrite($escreve, 'immediate=' . $dados2['immediate'] . "\n");
if (!empty($dados2['grupo']))
fwrite($escreve, 'callgroup=' . $dados2['grupo'] . "\n");
if (!empty($dados2['capturar']))
fwrite($escreve, 'pickupgroup=' . $dados2['capturar'] . "\n");
if (!empty($dados2['musica_espera']))
fwrite($escreve, 'musiconhold=' . $dados2['musica_espera'] . "\n");
if (!empty($dados2['accountcode']))
fwrite($escreve, 'accountcode=' . $dados2['accountcode'] . "\n");
if (!empty($dados2['dispositivo'])) {
$var = explode('/', $dados2['dispositivo']);
fwrite($escreve, 'ports=>' . $var[1] . "\n" . "\n");
}
}
}
fwrite($escreve, chr(13) . chr(10) . '[e1_config]' . "\n");
$query = "SELECT e1_sync, use_crc4, span, span2,cards FROM pbx_digivoice_e1config";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
fwrite($escreve, 'e1_sync=' . $dados['e1_sync'] . "\n");
fwrite($escreve, 'use_crc4=' . $dados['use_crc4'] . "\n");
if (!empty($dados['span']))
fwrite($escreve, 'span=' . $dados['span'] . "\n");
if (!empty($dados['span2']))
fwrite($escreve, 'span=' . $dados['span2'] . "\n");
fwrite($escreve, 'cards=>' . $dados['cards'] . "\n");
fwrite($escreve, chr(13) . chr(10));
}
fwrite($escreve, chr(13) . chr(10));
fclose($escreve);
if ($reload) {
CommandAsterisk($dbcon, 'RELOAD');
CommandAsterisk($dbcon, 'URA');
}
}
function GetConfPadrao($dbcon) {
$query = "SELECT * FROM pbx_conf_padrao";
$result = pg_query($dbcon, $query);
$dados = pg_fetch_array($result);
return $dados;
$caminho_back = $dados['caminho_backup'];
$caminho_producao = $dados['caminho_producao'];
$caminho_musicas = $dados['caminho_musicas'];
$url_musicas = $dados['url_musicas'];
$url_asterisk = $dados['url_asterisk'];
}
function aupdArq($texto, $qtd) {
$a = 0;
foreach ($texto as $key => $value) {
if ($a < $qtd) {
$param .= $value;
}
$a++;
}
return $param;
}
function GetSequencias($nomeTable) {
$existeTable = 0;
$result = @pg_query('begin');
$query = "select id from pbx_sequencia where name_table = '$nomeTable'";
if ($result)
$result = @pg_query($query);
if ($result)
$existeTable = pg_num_rows($result);
if ($result && $existeTable) {
$dados = pg_fetch_array($result);
$seq = $dados['id'] + 1;
} else if ($result) {
$query = "insert into pbx_sequencia(name_table, id)values('$nomeTable', 0)";
$result = $result && @pg_query($query);
$seq = 1;
}
$query = "update pbx_sequencia set id = $seq where name_table = '$nomeTable'";
$result = $result && @pg_query($query);
$result = $result && @pg_query('commit');
return $seq;
}
function VerDependenciaTronco($id) {
try {
$query = "select count(*) from pbx_rotas_saida_canais where canal = (select nome from pbx_troncos_sip where id = '$id')";
$result = pg_query($query);
$row = pg_fetch_row($result);
if ($row[0]) {
GeraExcept("Este tronco não pode ser excluido, verifique sua associação as \"Rotas de Saída!\"");
}
$query = "select count(*) from pbx_rotas_entrada_troncos where id_tronco = '$id'";
$result = pg_query($query);
$row = pg_fetch_row($result);
if ($row[0]) {
GeraExcept("Este tronco não pode ser excluido, verifique sua associação as \"Rotas de Entrada!\"");
}
$query = "select count(*) from pbx_contextos_canais where canal = (select nome from pbx_troncos_sip where id = '$id')";
$result = pg_query($query);
$row = pg_fetch_row($result);
if ($row[0]) {
GeraExcept("Este tronco não pode ser excluido, verifique sua associação aos \"Contextos!\"");
}
return false;
} catch (Exception $ex) {
return $ex->getMessage();
}
}
function GetDependenciaTronco($id) {
try {
$query = "select 'Rota de Saída' as dep, c.id, c.nome from pbx_rotas_saida_canais a, pbx_troncos b, pbx_rotas_saida c where a.canal = b.nome and a.id_rota = c.id and b.id = '$id'
union
select 'Rota de Entrada' as dep, b.id, b.nome from pbx_rotas_entrada_troncos a, pbx_rotas_entrada b where b.id = a.id_rota and a.id_tronco = '$id'
union
select 'Contextos' as dep, c.id, c.nome from pbx_contextos_canais a, pbx_troncos b, pbx_contextos c where a.canal = b.nome and a.id_contexto = c.id and b.id = '$id'";
$result = pg_query($query);
if (!$result || !pg_num_rows($result)) {
return false;
}
$str = "<strong>Dependência(s):</strong>";
while ($dados = pg_fetch_array($result, null, PGSQL_ASSOC)) {
$str .= sprintf("<br/>%s: %s - %s ", $dados['dep'], $dados['id'], $dados['nome']);
}
return $str;
} catch (Exception $ex) {
return false;
}
}
function GetSetUra($db, $id) {
$query = sprintf("select '' from pbx_ura_destino where id_ura = %s and trim(tipo) = 'integativa' and trim(numero) = '_X.'", QuotedStr($id));
$result = pg_query($db, $query);
return pg_num_rows($result) ? true : false;
}
?>