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 ""; } else { echo ""; } } } //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, ispbx_tronco FROM pbx_sip_ramais order by id asc"; $result = pg_query($dbcon, $query); while ($dados = pg_fetch_array($result)) { // // Se o ramal for marcado como PBX não escreve a linha no sip_ramais.conf // $ispbxTroncos = trim($dados['ispbx_tronco']); if($ispbxTroncos){ continue; } 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 = explode(';', $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 ' '; } 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; $pathFileDahdi = dirname($arqSystemDahdi); if(!file_exists($pathFileDahdi)){ mkdir($pathFileDahdi,0777,true); } $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 = "Dependência(s):"; while ($dados = pg_fetch_array($result, null, PGSQL_ASSOC)) { $str .= sprintf("
%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; } ?>