Se passado um numero retorna concatenado com ddd padrao, se nao retorna somente o ddd. * - GetSpid($numero) -> Faz pesquisa no banco de dadodos da portabilidade e retorna o sipid da operadora relacionada. * - GetTipoChamada($destino, $dddPadao) -> verifica se a chamada e para fixo, movel, local ou interurbano pela analise do destino informado. * Retorna um array contendo tipo dispositivo, tipo da chamada, numero da operadora. */ //Funcao verifica operadora - Amarildo Pereira 37 99669 7131 function GetSpid(&$numero) { $flInter = substr($numero, 0, 2); if (($flInter != '00') && (substr($numero, 0, 1) == '0')) $numero = substr($numero, 1); $tam = strlen($numero); if (($tam == 8) || (($tam == 9) && (substr($numero, 0, 1) == '9'))) { $numeroBusca = $numero; $numeroBusca = GetDddPadrao($numeroBusca); $tam = strlen($numeroBusca); $prefixo = substr($numeroBusca, 0, ($tam - 4)); $sufixo = substr($numeroBusca, -4); return GetSpidBd($numeroBusca, $prefixo, $sufixo); } else { /* * Tenta achar o numero com 10 ou 11 digitos validos. */ $prefixo = substr($numero, 0, ($tam - 4)); $sufixo = substr($numero, -4); $ret = GetSpidBd($numero, $prefixo, $sufixo); if ($ret) return $ret; /* * Numero fornecido com 11 digitros mas apenas os 10 ultimos seo validos. */ $numero = substr($numero, 1); $tam = strlen($numero); $prefixo = substr($numero, 0, ($tam - 4)); $sufixo = substr($numero, -4); return GetSpidBd($numero, $prefixo, $sufixo); } } function GetSpidBd($numero, $prefixo, $sufixo) { $nonoDigito = (strlen($numero) == 11); $numeroConsulta = $numero; $numero_Consulta = $numero; $ddd_ini = substr($numero, 0, 1); if ($nonoDigito) { $numeroConsulta = substr($numero, 0, 2) . substr($numero, 3, 8); } if ((strlen($numero) == 10) && (($ddd_ini != '4' ) || ($ddd_ini != '5' ))) { $numero_Consulta = substr($numero, 0, 2) . '9' . substr($numero, 2, 8); } $query = "select spid from portabilidade where (tel_doadora = '$numeroConsulta' or tel_doadora = '$numero_Consulta' or tel_doadora = '$numero')"; $result = pg_query($query); if (!$result || !pg_num_rows($result)) { $oper = GetOperNumero($numero); return $oper ? $oper : false; } $dados = pg_fetch_row($result); return !pg_num_rows($result) ? false : $dados[0]; } function GetOperadoraRelacionada($operadora) { /* * funcao busca por operadoras que se relacionam, ou seja, se a operadora * passada estiver relacionada a outra e porque deve sair pelo tronco dessa, * ex.: Em algumas localidades a TNL->331 dever sair pelo tronco OI->314. * Este relacionamento deve ser configurado na aplicacao web menu: * Ferramentas->Tarifacao/Portabilidade->Operadoras. */ $query = "select oper_spid from pbx_operadora_rel where oper_spid_rel = '$operadora'"; $result = pg_query($query); $dados = pg_fetch_row($result); /* * Se nao encontrar uma operadora relacionada, retorna a mesma passada. */ return !pg_num_rows($result) ? $operadora : $dados[0]; } function GetTipoChamada($destino, $dddPadrao = '0') { /* * ddd -> 65 * operadodra -> 021 * 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 * | | | | | | | | | | | | | | | | | | * 9 2 8 9 3 9 1 3 -> Movel Local 08 digitos iniciado em ['6','7','8','9']. * 9 9 2 8 9 3 9 1 3 -> Movel Local 09 digitos. * 6 5 9 9 2 8 9 3 9 1 3 -> Movel Local 11 digitos (ddd = padrao). * 6 5 9 2 8 9 3 9 1 3 -> Movel Local 10 digitos (ddd = padrao) + numero iniciado em ['6','7','8','9']. * 6 7 9 2 8 9 3 9 1 3 -> Movel Interurbano 10 digitos (ddd != padrao) + numero iniciado em ['6','7','8','9']. * 0 2 1 6 7 9 2 8 9 3 9 1 3 -> Movel Interurbano 13 digitos operadora + (ddd != padrao) + numero iniciado em ['6','7','8','9']. * 0 2 1 6 7 9 9 2 8 9 3 9 1 3 -> Movel Interurbano 14 digitos operadora + (ddd != padrao) + numero iniciado em ['6','7','8','9']. * 6 7 9 9 2 8 9 3 9 1 3 -> Movel Interurbano 11 digitos (ddd != padrao). * 3 6 1 4 3 9 1 3 -> Fixo Local 08 digitos iniciado em ['2','3','4','5']. * 6 5 3 6 1 4 3 9 1 3 -> Fixo Local 10 digitos (ddd = padrao) + numero, iniciado em ['2','3','4','5']. * 6 7 3 6 1 4 3 9 1 3 -> Fixo Interurbano 10 digitos (ddd != padrao) + numero, iniciado em ['2','3','4','5']. * 0 2 1 6 7 3 6 1 4 3 9 1 3 -> Fixo Interurbano 13 digitos operadora + (ddd != padrao) + numero, iniciado em ['2','3','4','5']. */ $destino = trim($destino); /* * Chamadas iniciadas com "00" indicam uma ligacao internacional. */ $flInter = substr($destino, 0, 2); /* * Nao sendo uma chamada internacional, remove o "0" zero a esquerda. */ if (($flInter != '00') && (substr($destino, 0, 1) == '0')) { $destino = substr($destino, 1); } $tam = strlen($destino); $arMovel = array('6', '7', '8', '9'); $arEmergencia = array('100', '128', '190', '191', '192', '193', '194', '197', '198', '199'); if ($tam == 8) { $ch = substr($destino, 0, 1); return array('fixo', 'local', '0'); } else if (($tam > 8) && ($flInter == '00')) { $oper = substr($destino, 2, 2); return array('fixo', 'ddi', $oper); } else if ($tam == 9) { $ch = substr($destino, 0, 1); if ($ch == '9') { return array('movel', 'local'); } return array('fixo', 'local', '0'); } else if ($tam == 10) { $dddNum = substr($destino, 0, 2); $ch = substr($destino, 2, 1); if (($dddNum == $dddPadrao) && (array_search($ch, $arMovel))) return array('movel', 'local', '0'); if (($dddNum != $dddPadrao) && (array_search($ch, $arMovel))) return array('movel', 'inter', '0'); if ($dddNum == $dddPadrao) return array('fixo', 'local', '0'); else return array('fixo', 'inter', '0'); } else if ($tam == 11) { $dddNum = substr($destino, 0, 2); $ch = substr($destino, -9, 1); if ($dddNum == $dddPadrao) { if ($ch == '9') { return array('movel', 'local', '0'); } return array('fixo', 'local', '0'); } else { if ($ch == '9') { return array('movel', 'inter', '0'); } return array('fixo', 'inter', '0'); } } else if ($tam == 13) { $oper = substr($destino, 0, 2); $dddNum = substr($destino, 2, 2); $ch = substr($destino, 4, 1); if (($dddNum == $dddPadrao) && (array_search($ch, $arMovel))) return array('movel', 'local', $oper); if (($dddNum != $dddPadrao) && (array_search($ch, $arMovel))) return array('movel', 'inter', $oper); if ($dddNum == $dddPadrao) return array('fixo', 'local', '0'); else return array('fixo', 'inter', $oper); } else if ($tam == 14) { $oper = substr($destino, 0, 3); $dddNum = substr($destino, 3, 2); if ($dddNum == $dddPadrao) return array('movel', 'local', $oper); else return array('movel', 'inter', $oper); } else { if ((substr($destino, 0, 4) == '0800') || (array_search($destino, $arEmergencia)) || ($tam < 8)) return array('fixo', 'local', '0'); $dddNum = substr(substr($destino, -10), 0, 2); $ch = substr(substr($destino, -8), 0, 1); if (($dddNum == $dddPadrao) && (array_search($ch, $arMovel))) return array('movel', 'local', '0'); if (($dddNum != $dddPadrao) && (array_search($ch, $arMovel))) return array('movel', 'inter', '0'); if ($dddNum == $dddPadrao) return array('fixo', 'local', '0'); else return array('fixo', 'inter', '0'); } } function Ver0800($destino) { $destino = trim($destino); $str = substr($destino, -11); return substr($str, 0, 4) == '0800' ? $str : $destino; } function GravaLogApl($mensagem, $nome_file = '', $login = '') { $data = date('dmY'); if (!$nome_file) { $nome_file = 'log_apl'; } $file = sprintf("/var/log/asterisk/%s.log", $nome_file); $arq = fopen($file, 'a'); if ($arq) { $start = ''; foreach ($mensagem as $linha) { $linha = trim($linha); if (!$start) { $start++; fwrite($arq, sprintf("Inicio: %s%s\n", date('d/m/Y H:i:s'), ($login ? sprintf(" Login: %s", $login) : ''))); } fwrite($arq, $linha . "\n"); } fwrite($arq, "Final: $start\n\n"); fclose($arq); } } function GetInfoTarifa($troncoId, $numOper, $destino, $dispositivo) { global $log; /* * Informacoes do contrato relacionado ao tronco tronco */ $query = "select a.id, a.nome, b.contr_id, b.oper_id, c.oper_numero, b.contr_dia_fechamento, b.contr_bloq_franquia from pbx_troncos a, pbx_tarif_contrato b, pbx_operadoras c where b.contr_id = a.contrato and c.oper_id = b.oper_id and a.id = '$troncoId'"; $log[] = "GetInfoTarifa[\n."; $log[] = "Query Contrato: $query"; $result = pg_query($query); if (!pg_num_rows($result)) { $info['oper_numero'] = (!$numOper) ? '0' : $numOper; $info['contr_id'] = 0; $info['oper_id'] = 0; $info['trr_tipo_opera'] = 0; $info['oper_numero_dest'] = $info['oper_numero']; $info['trr_tarifa_zero'] = 0; $info['oper_id_dest'] = 0; $info['contr_id_dest'] = 0; $info['contr_dia_fechamento'] = 0; $info['contr_bloq_franquia'] = 0; $info['prc_id'] = 0; $info['trr_preco_tipo'] = 0; $info['trr_vc1'] = 0; $info['trr_vc2'] = 0; $info['trr_vc3'] = 0; $info['trr_vc4'] = 0; $info['trr_vc5'] = 0; $info['trr_vc6'] = 0; $info['trr_vc1_cad'] = 0; $info['trr_vc2_cad'] = 0; $info['trr_vc3_cad'] = 0; $info['trr_vc4_cad'] = 0; $info['trr_vc5_cad'] = 0; $info['trr_vc6_cad'] = 0; $info['trr_vc1_ext'] = 0; $info['trr_vc2_ext'] = 0; $info['trr_vc3_ext'] = 0; $info['trr_vc4_ext'] = 0; $info['trr_vc5_ext'] = 0; $info['trr_vc6_ext'] = 0; $info['prc_franquia'] = 0; } else { $dados = pg_fetch_array($result); $info = array(); $contrId = $dados['contr_id']; $numOperContrato = $dados['oper_numero']; $info['oper_numero'] = $dados['oper_numero']; $info['contr_id'] = $dados['contr_id']; $info['oper_id'] = $dados['oper_id']; $tipoOpera = (!$numOper) || ($numOper == $numOperContrato) ? 0 : 1; $info['trr_tipo_opera'] = $tipoOpera; $info['oper_numero_dest'] = $tipoOpera ? $numOper : $dados['oper_numero']; $info['contr_dia_fechamento'] = $dados['contr_dia_fechamento']; $info['contr_bloq_franquia'] = $dados['contr_bloq_franquia']; $query = "select count(*) from pbx_tarif_contrato_tarifa_zero where contr_id = '$contrId' and trz_numero = '$destino'"; $result = pg_query($query); $dados = pg_fetch_row($result); $info['trr_tarifa_zero'] = $dados[0]; $queryPrec = "select prc_id, prc_tipo, prc_franquia, prc_franquia_movel, prc_franquia_preco, prc_preco_vc1, prc_preco_vc2, prc_preco_vc3,prc_preco_vc4, prc_preco_vc5, prc_preco_vc6, a.prc_preco_vc1_cad, a.prc_preco_vc2_cad, a.prc_preco_vc3_cad, a.prc_preco_vc4_cad, a.prc_preco_vc5_cad,a.prc_preco_vc6_cad, a.prc_preco_vc1_ext, a.prc_preco_vc2_ext, a.prc_preco_vc3_ext, a.prc_preco_vc4_ext, a.prc_preco_vc5_ext,a.prc_preco_vc6_ext, b.oper_id, b.contr_id from pbx_tarif_contrato_preco a, pbx_tarif_contrato b where b.contr_id = a.contr_id and a.prc_id = ( select max(prc_id) as prc_id from pbx_tarif_contrato_preco where contr_id = %s and prc_vigencia <= now()::date )"; if ($tipoOpera) { $queryCompl = sprintf('select b.contr_id from pbx_operadoras a, pbx_tarif_contrato b where b.oper_id = a.oper_id and b.contr_tipo = %s and a.oper_numero = %s', QuotedStr($dispositivo), QuotedStr($numOper)); $query = sprintf($queryPrec, "($queryCompl)"); $log[] = "Query preco: $query"; $result = pg_query($query); $dados = pg_fetch_array($result); } if ((!$tipoOpera) || (($tipoOpera) && (!pg_num_rows($result)))) { $query = sprintf($queryPrec, QuotedStr($contrId)); $log[] = "Query preco: $query"; $result = pg_query($query); $dados = pg_fetch_array($result); } if (!$result) { $erro = error_get_last(); $log[] = "Erro: " . $erro['message'] . " Cmd: $query"; } $info['oper_id_dest'] = $dados['oper_id']; $info['contr_id_dest'] = $dados['contr_id']; $info['prc_id'] = $dados['prc_id']; $info['trr_preco_tipo'] = trim($dados['prc_tipo']); $info['trr_vc1'] = $dados['prc_preco_vc1']; $info['trr_vc2'] = $dados['prc_preco_vc2']; $info['trr_vc3'] = $dados['prc_preco_vc3']; $info['trr_vc4'] = $dados['prc_preco_vc4']; $info['trr_vc5'] = $dados['prc_preco_vc5']; $info['trr_vc6'] = $dados['prc_preco_vc6']; $info['trr_vc1_cad'] = $dados['prc_preco_vc1_cad']; $info['trr_vc2_cad'] = $dados['prc_preco_vc2_cad']; $info['trr_vc3_cad'] = $dados['prc_preco_vc3_cad']; $info['trr_vc4_cad'] = $dados['prc_preco_vc4_cad']; $info['trr_vc5_cad'] = $dados['prc_preco_vc5_cad']; $info['trr_vc6_cad'] = $dados['prc_preco_vc6_cad']; $info['trr_vc1_ext'] = $dados['prc_preco_vc1_ext']; $info['trr_vc2_ext'] = $dados['prc_preco_vc2_ext']; $info['trr_vc3_ext'] = $dados['prc_preco_vc3_ext']; $info['trr_vc4_ext'] = $dados['prc_preco_vc4_ext']; $info['trr_vc5_ext'] = $dados['prc_preco_vc5_ext']; $info['trr_vc6_ext'] = $dados['prc_preco_vc6_ext']; $info['prc_franquia'] = $dados['prc_franquia']; } return $info; } function GetTempoPrepago($db, $contaSenha, $origem, $destino, $tronco) { /* * Esta funcao havalia se a origem esta incluida no sistema de prepago. * Retorna o tempo disponivel para conversacao conforme o destino. * Retorna -1 se nao estiver habilitado, se nao existir. * Retorna -2 se estiver incluido no tarifa 0. * Retorna -3 se retornar erro. */ $query = "select habilita_prepago, saldo_prepago, (select prm_prepago from pbx_parametros limit 1) as pre_pago from pbx_prepago where tipo = '$contaSenha' and id = '$origem'"; $result = pg_query($db, $query); /* * Numero inexistente ou erro na consulta. */ if (!$result) return -3; if (!pg_num_rows($result)) return -1; $dados = pg_fetch_array($result); /* * Nao esta habilitado nos parametros ou a origem nao esta habilitada. */ if (!$dados['pre_pago'] || !$dados['habilita_prepago']) return -1; /* * Nao tem saldo. */ $saldoPrepago = $dados['saldo_prepago']; if (!$saldoPrepago) return 0; $dddPadrao = GetDddPadrao(); $tpChamada = GetTipoChamada($destino, $dddPadrao); $dispositivo = $tpChamada[0]; $tipoChamada = $tpChamada[1]; $numOper = $tpChamada[2]; /* * Esta funcao retorna informacoes sobre o contrato e precos */ $infoContrato = GetInfoTarifa($tronco, $numOper, $origem, $dispositivo); if (($dispositivo == 'fixo') && ($tipoChamada == 'local')) { $info['trr_vc_cad'] = $infoContrato['trr_vc1_cad']; $info['trr_vc_ext'] = $infoContrato['trr_vc1_ext']; $info['trr_vc'] = 'vc1'; $info['trr_preco'] = $infoContrato['trr_vc1']; } if (($dispositivo == 'fixo') && ($tipoChamada == 'inter')) { $info['trr_vc_cad'] = $infoContrato['trr_vc2_cad']; $info['trr_vc_ext'] = $infoContrato['trr_vc2_ext']; $info['trr_vc'] = 'vc2'; $info['trr_preco'] = $infoContrato['trr_vc2']; } if (($dispositivo == 'fixo') && ($tipoChamada == 'ddi')) { $info['trr_vc_cad'] = $infoContrato['trr_vc5_cad']; $info['trr_vc_ext'] = $infoContrato['trr_vc5_ext']; $info['trr_vc'] = 'vc5'; $info['trr_preco'] = $infoContrato['trr_vc5']; } if (($dispositivo == 'movel') && ($tipoChamada == 'local')) { $info['trr_vc_cad'] = $infoContrato['trr_vc3_cad']; $info['trr_vc_ext'] = $infoContrato['trr_vc3_ext']; $info['trr_vc'] = 'vc3'; $info['trr_preco'] = $infoContrato['trr_vc3']; } if (($dispositivo == 'movel') && ($tipoChamada == 'inter')) { $info['trr_vc_cad'] = $infoContrato['trr_vc4_cad']; $info['trr_vc_ext'] = $infoContrato['trr_vc4_ext']; $info['trr_vc'] = 'vc4'; $info['trr_preco'] = $infoContrato['trr_vc4']; } if (($dispositivo == 'movel') && ($tipoChamada == 'ddi')) { $info['trr_vc_cad'] = $infoContrato['trr_vc6_cad']; $info['trr_vc_ext'] = $infoContrato['trr_vc6_ext']; $info['trr_vc'] = 'vc6'; $info['trr_preco'] = $infoContrato['trr_vc6']; } //$log[] = print_r($infoContrato, true); //@GravaLogApl($log, 'pre_pago_log'); /* * Verifica se o destino esta incluido no tarifa 0. */ if ($infoContrato['trr_tarifa_zero']) { return -2; } /* * Tarifacao(trr_preco_tipo) 1 por minuto tipo, 2 por chamada. * O preco esta indicado em trr_preco. */ $tipoPreco = (int) $infoContrato['trr_preco_tipo']; $tipoMinuto = ($tipoPreco == 1); $preco = $info['trr_preco']; if ($tipoMinuto) { $precoMinuto = $info['trr_preco']; $cadencia = (int) $info['trr_vc']; if (($cadencia < 60) && ($saldoPrepago < ($precoMinuto / 2.0))) return 0; if (($cadencia >= 60) && ($saldoPrepago < ($precoMinuto))) return 0; return ((int) (($saldoPrepago / $precoMinuto) * 60)) * 1000; } else { return (int) ($saldoPrepago > $preco ? 99999999 : 0); } } function logStr($msg, $metodo = "", $script = "", $pathLog = "", $logErro = false) { $data = date("Y-m-d H:i:s"); /* * Se o path do arquivo de log nao for fornecido em $pathLog e indicado o local padrao * com o nome do script que esta executando. */ $script = $script ? $script : $argv[0]; $pathLog = !$pathLog ? sprintf("/var/log/asterisk/%s.log", basename($script, '.php')) : $pathLog; /* * Indica o tipo de mensagem que deva ser gravada no arquivo de log. */ $nivelLog = isset($GLOBALS["_nivelLog"]) ? $GLOBALS["_nivelLog"] : _LOG_MSG_ERROR; /* * Se o nome do metodo nao for informado tenta recuperalo a partir do array de mensagens. */ $msgs = $metodo ? $metodo : explode("#", $msg); $metodo = $msgs[5]; $erroSys = sprintf("Type:%s File: %s Line: %s \nMsgSys: %s", $msgs[1], $msgs[3], $msgs[4], $msgs[2]); /* * Captura informacoes sobre erros no sistema */ $str = sprintf("Scrp: [%s] Funcao: [%s] Data: [%s] \nMsg: %s \nSys: %s\n\n", $script, $metodo, $data, $msgs[0], $erroSys); /* * Mostra as mensagens de log */ if ($nivelLog == _LOG_MSG_DISPLAY) { echo $str . "\n"; } /* * Grava o log */ if ($logErro || ($nivelLog <> _LOG_MSG_ERROR)) { GravaLog($str, $pathLog); } } function GravaLog($log, $path) { $arq = fopen($path, 'a'); fwrite($arq, $log); fclose($arq); } function Excpt($msg, $metodo = "", $erro = '') { //$erroSys = error_get_last(); //$msg = sprintf("%s#%s#%s#%s#%s#%s",$msg, $erroSys['type'], $erroSys['message'], $erroSys['file'], $erroSys['line'], $metodo); $msg = sprintf("%s -> %s <- %s", (!empty($metodo)) ? "Motodo [{$metodo}] " : '', $msg, (!empty($erro)) ? "Erro: $erro" : ""); logBkp($msg); throw new Exception($msg); } function logBkp($msg, $logDate = true, $echo = true) { $log = $msg; if ($logDate) { $log = date('d/m/Y H:i:s') . ': ' . $msg . "\n"; if ($echo) { echo $log; } } GravaLog($log, BackupConfig::$logFile); } function KeyCrypt($key = '') { return $key ? $key : "A32589Ba83F3aA5a8b1737339604B609"; } function Encrypt($text, $key = '') { $ivSize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC); $keySize = mcrypt_get_key_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC); $iv = mcrypt_create_iv($ivSize, MCRYPT_DEV_URANDOM); $key = substr(hash('sha256', KeyCrypt($key)), 0, $keySize); $encryptedData = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_CBC, $iv); return base64_encode($iv . $encryptedData); } function Decrypt($text, $key = '') { $ivSize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC); $keySize = mcrypt_get_key_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC); $data = base64_decode($text, true); $key = substr(hash('sha256', KeyCrypt($key)), 0, $keySize); $iv = substr($data, 0, $ivSize); $data = substr($data, $ivSize); $data = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $data, MCRYPT_MODE_CBC, $iv); return rtrim($data, "\0"); } function ErrorGetLast($type = "message") { $erro = error_get_last(); return $erro[$type]; } function GetAtualizacoes($db, $cliId) { /* * Esta consulta traz todos os arquivos que o cliente ainda nao atualizou na portabilidade. */ $query = "select idarquivo from atualizacoes a where erro = 0 and idarquivo > coalesce((select max(idarquivo) from clientes a, clientes_atualizacoes b where b.cli_id = a.cli_id and cli_idexterno = '$cliId'), 0)"; $result = pg_query($db, $query); if (!$result) throw new Exception(GetExcept("Erro ao buscar atualizacoes no servidor remoto!")); if (!pg_num_rows($result)) { return false; } $dados = array(); while ($row = pg_fetch_row($result)) { $dados[] = $row[0]; } return $dados; } function GetAtualizacoesDados($db, $idAtualiza, $limit, $offset) { /* * Esta consulta retorna todos o comandos que devem ser executados para atualizar a base * da portabilidade no cliente. */ global $debug; $query = "select comando from atualizacoes_itens where idarquivo = '$idAtualiza' limit $limit offset $offset"; if ($debug) echo "Selecionando: $query\n"; $result = pg_query($db, $query); /* * Sinaliza que ocorreu algum erro ao consultar o banco de dados. */ if (!$result) throw new Exception(GetExcept("Erro ao buscar dados de atualizacoes no servidor remoto!")); /* * Indica que nao exitem atualizacoes disponiveis. */ if (!pg_num_rows($result)) return false; $dados = array(); while ($row = pg_fetch_row($result)) { $dados[] = $row[0]; } return $dados; } function GetNumRegAtaulizacao($dbRemoto, $idAtualiza) { $query = "select count(*) as numero from atualizacoes_itens where idarquivo = '$idAtualiza'"; $result = pg_query($dbRemoto, $query); if (!$result) throw new Exception(GetExcept("Erro ao buscar numero de atualizacoes no servidor remoto! Id: $idAtualiza")); if (!pg_num_rows($result)) return 0; $dados = array(); $row = pg_fetch_row($result); return $row[0]; } function VerificaStatus($dbRemoto, $cliId) { /* * Verifica o status do cliente para executar a acao adequada. * -1 -> Desativado ou excluido * 1 -> Normal * 2 -> Aguardando instalacao. */ $query = "select clie_status from clientes where cli_idexterno = '$cliId'"; $result = pg_query($dbRemoto, $query); if (!$result) throw new Exception(GetExcept("Nao foi possivel verificar o status do cliente!")); $row = pg_fetch_row($result); return $row[0]; return true; } function GetCliIdPorta($dbPorta, $idExt) { $query = "select cli_id from clientes where cli_idexterno = '$idExt'"; $result = pg_query($dbPorta, $query); /* * Erro na consulta. */ if (!$result) { return -1; } /* * Nao encontrou o cliente. */ if (!pg_num_rows($result)) { return 0; } /* * Retorna o id do cliente cadastrado. */ $row = pg_fetch_array($result); return $row[0]; } function PortabAtualizando($db = null) { if (!$db) { $db = GetAlernativeDB($dbHost = '', $dbPort = '', $dbName = 'portabilidade', $dbUser = '', $dbPass = ''); } try { $query = "select '' as reg from atualizacoes_registro where atr_data = now()::date and atr_fim is null"; $result = @pg_query($db, $query); if (!$result) throw new Exception(GetExcept("IniciaAtualizacao: Nao foi possivel verifica se ha uma atualizacao em andamento!")); return pg_num_rows($result) ? true : false; } catch (Exception $ex) { return false; } } function PortabSolicitaConexao($db, $cliIdExterno) { define("MAX_CONN_CLIENTE_PORTAB", 3); if (!$db) { $db = GetAlernativeDB($dbHost = '', $dbPort = '', $dbName = 'portabilidade', $dbUser = '', $dbPass = ''); } try { $query = "select count(*) as reg from controle_conexao where ctrc_data = now()::date and ctrc_fim is null"; $result = @pg_query($db, $query); if (!$result) throw new Exception(GetExcept("PortabSolicitaConexao: Nao foi possivel verifica se ha conexoes ativas!")); $row = pg_fetch_row($result); $connecta = MAX_CONN_CLIENTE_PORTAB > $row[0]; if ($connecta) { $query = "insert into controle_conexao( ctrc_data, cli_id, ctrc_inicio)values(now()::date, '$cliIdExterno', now())"; $result = pg_query($db, $query); if (!$result || !pg_affected_rows($result)) { throw new Exception(GetExcept("PortabSolicitaConexao: Nao foi possivel registrar a conexao!")); } return true; } return false; } catch (Exception $ex) { return false; } } function GetExcept($msg) { $ex = error_get_last(); return sprintf("%s\nErro: %s\n", trim($msg), trim($ex['message'])); } function GetTipoChamadaCod($destino, $dddPadrao, $tipo) { /* * fixo movel local inter ddi * -- 1 -> Interna; * -- 2 -> Entrada, * 21 -> Entrada Fixo Local, * 22 -> Entrada Fixo Interurbano, * 23 -> Entrada Movel Local, * 24 -> Entrada Movel Interurbano * 25 -> Entrada Internacional; * -- 3 -> Saida, * 31 -> Saida Fixo Local, * 32 -> Saida Fixo Interurbano, * 33 -> Saida Movel local, * 34 -> Saida Movel Interurbano, * 35 -> Saida Internacional; * -- 4 -> Emergencia; * -- 5 -> Zero oitocentos * -- delete from pbx_tipo_ligacao -- select * from pbx_tipo_ligacao -- create table pbx_tipo_ligacao(tplg_codigo int not null primary key, tplg_descricao varchar(64) not null, tplg_tipo int not null); insert into pbx_tipo_ligacao values( 1, 'Interna', 1); insert into pbx_tipo_ligacao values( 2, 'Entrada', 2); insert into pbx_tipo_ligacao values(21, 'Entrada Fixo Local', 2); insert into pbx_tipo_ligacao values(22, 'Entrada Fixo Interurbano', 2); insert into pbx_tipo_ligacao values(23, 'Entrada Movel Local', 2); insert into pbx_tipo_ligacao values(24, 'Entrada Movel Interurbano', 2); insert into pbx_tipo_ligacao values(25, 'Entrada Internacional', 2); insert into pbx_tipo_ligacao values( 3, 'Saida', 3); insert into pbx_tipo_ligacao values(31, 'Saida Fixo Local', 3); insert into pbx_tipo_ligacao values(32, 'Saida Fixo Interurbano', 3); insert into pbx_tipo_ligacao values(33, 'Saida Movel local', 3); insert into pbx_tipo_ligacao values(34, 'Saida Movel Interurbano', 3); insert into pbx_tipo_ligacao values(35, 'Saida Internacional', 3); insert into pbx_tipo_ligacao values( 4, 'Emergencia', 4); insert into pbx_tipo_ligacao values( 5, 'Zero Oitocentos', 5); */ /* * $direcao -> I = Interna, E = Entrada, S = Saida. */ $direcao = strtoupper(trim($tipo)); if ($direcao === 'I') { return 1; } /* * Verifica chamadas de emergencia, nao tratadas adequadamente pela funcao GetTipoChamada. */ $arEmergencia = array('100', '128', '190', '191', '192', '193', '194', '197', '198', '199'); if (array_search($destino, $arEmergencia) !== false) { return 4; } /* * Verifica chamadas 0800, nao tratadas adequadamente pela funcao GetTipoChamada. */ if (substr($destino, 0, 4) == '0800') { return 5; } /* * Funcao analisa o tipo de chamada */ list($tpFone, $tpChamada) = GetTipoChamada($destino, $dddPadrao); if ($direcao === 'E') { if (($tpFone === 'fixo') && ($tpChamada === 'local')) { return 21; } else if (($tpFone === 'fixo') && ($tpChamada === 'inter')) { return 22; } else if (($tpFone === 'movel') && ($tpChamada === 'local')) { return 23; } else if (($tpFone === 'movel') && ($tpChamada === 'inter')) { return 24; } else if (($tpFone === 'fixo') && ($tpChamada === 'ddi')) { return 25; } } if ($direcao === 'S') { if (($tpFone === 'fixo') && ($tpChamada === 'local')) { return 31; } else if (($tpFone === 'fixo') && ($tpChamada === 'inter')) { return 32; } else if (($tpFone === 'movel') && ($tpChamada === 'local')) { return 33; } else if (($tpFone === 'movel') && ($tpChamada === 'inter')) { return 34; } else if (($tpFone === 'fixo') && ($tpChamada === 'ddi')) { return 35; } } return 0; } function GetTipoChamadaDesc($cod) { /* * fixo movel local inter ddi * -- 1 -> Interna; * -- 2 -> Entrada, * 21 -> Entrada Fixo Local, * 22 -> Entrada Fixo Interurbano, * 23 -> Entrada Movel Local, * 24 -> Entrada Movel Interurbano * 25 -> Entrada Internacional; * -- 3 -> Saida, * 31 -> Saida Fixo Local, * 32 -> Saida Fixo Interurbano, * 33 -> Saida Movel local, * 34 -> Saida Movel Interurbano, * 35 -> Saida Internacional; * -- 4 -> Emergencia; * -- 5 -> Zero oitocentos */ switch ($cod) { case 1: return 'Interna'; case 4: return 'Emergencia'; case 5: return 'Gratuita'; case 21: return 'Local Fixo'; case 22: return 'Interurbano Fixo'; case 23: return 'Local Movel'; case 24: return 'Interurbano Movel'; case 25: return 'Internacional'; case 31: return 'Local Fixo'; case 32: return 'Interurbano Fixo'; case 33: return 'Local Movel'; case 34: return 'Interurbano Movel'; case 35: return 'Internacional'; default: return 'NI'; } } function ChamadaFila($uid, $temp = 1) { $query = sprintf("select strtoint(param2, 0) as billsec from %s where uid2 = %s and evento in('COMPLETACALLER', 'COMPLETAAGENT', 'TRANSFERORIG', 'COMPLETECALLER', 'COMPLETEAGENT', 'TRANSFER','COMPLETECALLERRAMAL')", ($temp ? 'ast_eventos_dacs' : 'pbx_eventos_dacs'), QuotedStr($uid)); $result = pg_query($query); if (!pg_num_rows($result)) return 0; $row = pg_fetch_row($result); return $row[0]; } function GetIdMunicipio($tipo, $dddPadrao, $destino, $useBanco = true) { $tamPrefixo = 6; $movel = ($tipo == 23) || ($tipo == 24) || ($tipo == 33) || ($tipo == 34); /* * ligacao Interna,Eemergencia, Gratuita(0800) e internacional nao tem municipio associado. */ if (($tipo == 1) || ($tipo == 4) || ($tipo == 5) || ($tipo == 25) || ($tipo == 35)) { return '0'; } /* * */ if ($movel) { if (strlen($destino) == 9) { $dddCel = $dddPadrao; } else { $dddCel = substr(substr($destino, -11), 0, 2); } /* * Procura o municipio em um array global previamente alimentado. */ if (!$useBanco) { return GetIdMunicipioMovel($dddCel); } $query = sprintf("select id from (select min(id) as id, codigo_ddd, uf from pbx_municipios group by codigo_ddd, uf) a where codigo_ddd = %s", StrToIntDef($dddCel)); } else { if (strlen($destino) == 8) $destino = $dddPadrao . $destino; $destino = soNumero(substr($destino, -10)); $prefixo = StrToIntDef(substr($destino, 0, 6)); $numero = StrToIntDef(substr($destino, -4)); /* * Procura o municipio em um array global previamente alimentado. */ if (!$useBanco) { return GetIdMunicipioFixo($prefixo, $numero); } $query = sprintf("select id from pbx_municipios where prefixo = '%s' and '%s' >= faixa_inicial and '%s' <= faixa_final", $prefixo, $numero, $numero); } $result = pg_query($query); if (!$result || !pg_num_rows($result)) { $codMun = -1; } else { $dados = pg_fetch_row($result); $codMun = $dados[0]; } return $codMun; } function PreparaConsltaMunicipio() { global $arPrefixo, $arDddMunicipio; $query = "select distinct prefixo, faixa_inicial, faixa_final, id, codigo_ddd from pbx_municipios"; $result = pg_query($query); if (!$result || !pg_num_rows($result)) { return; } $dddOld = ''; $prefixoAtual = ''; while ($dados = pg_fetch_array($result, null, PGSQL_ASSOC)) { /* * Separa os dados por prefixo para facilitar a consulta de * prefixo por faixa. */ $prefixo = $dados["prefixo"]; if (($prefixo != $prefixoAtual) && $prefixoAtual) { $arPrefixo[$prefixoAtual] = $dadosPrefixo; $dadosPrefixo = array(); } $dadosPrefixo[] = $dados; $prefixoAtual = $prefixo; /* * Inclui um municipio por ddd para ser usado na * consulta de uf para movel. */ $dddAtual = $dados["codigo_ddd"]; if (!$dddOld || ($dddOld != $dddAtual)) { $arDddMunicipio[$dddAtual] = $dados[id]; $dddOld = $dddAtual; } } if (count($dadosPrefixo)) { $arPrefixo[$prefixo] = $dadosPrefixo; } } function GetIdMunicipioMovel($ddd) { global $arDddMunicipio; return $arDddMunicipio[$ddd] ? $arDddMunicipio[$ddd] : '-1'; } function GetIdMunicipioFixo($prefixo, $sufixo) { global $arPrefixo; $arPesquisa = $arPrefixo[$prefixo]; if (!count($arPesquisa)) { return '-1'; } foreach ($arPesquisa as $dados) { $faixaInicial = $dados['faixa_inicial']; $faixaFinal = $dados['faixa_final']; $id = $dados['id']; if (($sufixo >= $faixaInicial) && ($sufixo <= $faixaFinal)) { return $id ? $id : '-1'; } } return -1; } function TrataEntrada($numero) { $num = trim($numero); /* * Trata ligacoes entrantes vindas de operadoras voip, para que * nao sejam confundidas com ligacoes internacionais. * */ if (substr($num, 0, 2) == '00') { return substr($num, 2); } return $num; } /* commnad lines * $rows = intval(`tput lines`); $cols = intval(`tput cols`); $colors = intval(`tput colors`); echo "monitor $rows x $cols with $colors colors\n"; */ ?>