|
|
|
|
#!/usr/bin/php -q
|
|
|
|
|
<?php
|
|
|
|
|
error_reporting(E_ERROR);
|
|
|
|
|
ini_set('display_errors', "Off");
|
|
|
|
|
define("DIRETORIO_DOWNLOAD_CLIENTE", "/import/download/");
|
|
|
|
|
|
|
|
|
|
include 'configCliente.php';
|
|
|
|
|
//include 'funcoes.php';
|
|
|
|
|
//include('util/util.php');
|
|
|
|
|
//include 'funcoes/shared.php';
|
|
|
|
|
|
|
|
|
|
$query = '';
|
|
|
|
|
|
|
|
|
|
$cliId = 0;
|
|
|
|
|
$inTran = 0;
|
|
|
|
|
$idAtualiza = 0;
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
/*
|
|
|
|
|
* Verifica se existe o diretorio para download, se n<EFBFBD>o existir tenta cria-lo!
|
|
|
|
|
*/
|
|
|
|
|
if (!VerificaDirDownload(DIRETORIO_DOWNLOAD_CLIENTE)) {
|
|
|
|
|
throw new Exception(GetExcept("N<EFBFBD>o foi possivel acessar o diret<EFBFBD>rio de download!\n"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Verificando informacoes do cliente na portabilidade, e obtendo informacoes
|
|
|
|
|
* sobre a atualizacao.
|
|
|
|
|
*/
|
|
|
|
|
IniciaInstalacao();
|
|
|
|
|
$filePorta = DIRETORIO_DOWNLOAD_CLIENTE . "/portabilidade.tar.gz";
|
|
|
|
|
|
|
|
|
|
if (!file_exists($filePorta)) {
|
|
|
|
|
echo "Baixando o arquivo!\n";
|
|
|
|
|
$url = "http://$serverApi/integracao/index.php?method=GetArquivoPortabilidade&cliid=$cliIdExterno&login=$loginApi&senha=$senhaApi&SIPID=0&tipoRetorno=XML";
|
|
|
|
|
|
|
|
|
|
if (!downloadFile($url, $filePorta))
|
|
|
|
|
throw new Exception(GetExcept("N<EFBFBD>o foi poss<EFBFBD>vel copiar o arquivo remoto!"));
|
|
|
|
|
}
|
|
|
|
|
echo "Descompactando o arquivo!\n";
|
|
|
|
|
$destino = DIRETORIO_DOWNLOAD_CLIENTE;
|
|
|
|
|
if (!Desconpacta($filePorta, $destino)) {
|
|
|
|
|
unlink($filePorta);
|
|
|
|
|
throw new Exception(GetExcept("N<EFBFBD>o foi poss<EFBFBD>vel descompactar o arquivo remoto!"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CarregaArquivos($pg_local);
|
|
|
|
|
|
|
|
|
|
FinalizaInstalacao();
|
|
|
|
|
} catch (Exception $ex) {
|
|
|
|
|
echo $ex->getMessage();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function Desconpacta($origem, $destino, $type = "gz") {
|
|
|
|
|
switch ($type) {
|
|
|
|
|
case "gz" : $cmd = "xzvf";
|
|
|
|
|
break;
|
|
|
|
|
case "bz2": $cmd = "xjvf";
|
|
|
|
|
break;
|
|
|
|
|
default: $cmd = "xzvf";
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
$result = true;
|
|
|
|
|
$cmd = sprintf("tar -%s %s -C %s 2>/dev/null", $cmd, $origem, $destino);
|
|
|
|
|
|
|
|
|
|
system($cmd, $result);
|
|
|
|
|
$arquivoPorta = "portabilidade.csv";
|
|
|
|
|
return file_exists($destino . $arquivoPorta);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function CarregaArquivos($pgLocal) {
|
|
|
|
|
$db = dbConnect($pgLocal);
|
|
|
|
|
@pg_query($db, 'begin');
|
|
|
|
|
/*
|
|
|
|
|
* Deleta a tabela de dados atuais.
|
|
|
|
|
*/
|
|
|
|
|
echo "Apagando a tabela de portabilidade!\n";
|
|
|
|
|
$query = "truncate table portabilidade;";
|
|
|
|
|
$result = @pg_query($db, $query);
|
|
|
|
|
if (!$result)
|
|
|
|
|
throw new Exception(GetExcept("N<EFBFBD>o foi possivel apagar a tabela portabilidade!"));
|
|
|
|
|
|
|
|
|
|
$query = 'DROP INDEX "idxPortabilidadeTel"';
|
|
|
|
|
$result = @pg_query($db, $query);
|
|
|
|
|
if (!$result)
|
|
|
|
|
throw new Exception(GetExcept("N<EFBFBD>o foi possivel apagar idxtelDoadora!"));
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Importando a tabela portabilidade.
|
|
|
|
|
*/
|
|
|
|
|
echo "Importando a tabela de portabilidade!\n";
|
|
|
|
|
$file = DIRETORIO_DOWNLOAD_CLIENTE . "portabilidade.csv";
|
|
|
|
|
|
|
|
|
|
system("chown postgres:postgres $file");
|
|
|
|
|
$query = "COPY portabilidade FROM '$file' WITH DELIMITER AS ',' QUOTE '\"' CSV\n";
|
|
|
|
|
$result = @pg_query($db, $query);
|
|
|
|
|
if (!$result)
|
|
|
|
|
throw new Exception(GetExcept("N<EFBFBD>o foi possivel importar tabela portabilidade!"));
|
|
|
|
|
|
|
|
|
|
$query = 'CREATE INDEX "idxPortabilidadeTel" ON portabilidade USING btree (tel_doadora);';
|
|
|
|
|
$result = @pg_query($db, $query);
|
|
|
|
|
if (!$result)
|
|
|
|
|
throw new Exception(GetExcept("N<EFBFBD>o foi possivel criar indice idxtelDoadora!"));
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Importando a tabela prefixos.
|
|
|
|
|
*/
|
|
|
|
|
$file = DIRETORIO_DOWNLOAD_CLIENTE . "prefixos.csv";
|
|
|
|
|
if (file_exists($file)) {
|
|
|
|
|
echo "Apagando a tabela de prefixos!\n";
|
|
|
|
|
$query = "truncate table prefixos;";
|
|
|
|
|
$result = @pg_query($db, $query);
|
|
|
|
|
if (!$result)
|
|
|
|
|
throw new Exception(GetExcept("N<EFBFBD>o foi possivel apagar a tabela prefixos!"));
|
|
|
|
|
|
|
|
|
|
echo "Importando a tabela de prefixos!\n";
|
|
|
|
|
$query = "COPY prefixos FROM '$file' WITH DELIMITER AS ',' QUOTE '\"' CSV\n";
|
|
|
|
|
$result = @pg_query($db, $query);
|
|
|
|
|
if (!$result)
|
|
|
|
|
throw new Exception(GetExcept("N<EFBFBD>o foi possivel importar tabela prefixos!"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Importando a tabela municipio ; "operadoras.csv"; .
|
|
|
|
|
*/
|
|
|
|
|
$file = DIRETORIO_DOWNLOAD_CLIENTE . "municipios.csv";
|
|
|
|
|
if (file_exists($file)) {
|
|
|
|
|
echo "Apagando a tabela de municipios!\n";
|
|
|
|
|
$query = "truncate table pbx_municipios;";
|
|
|
|
|
$result = @pg_query($db, $query);
|
|
|
|
|
if (!$result)
|
|
|
|
|
throw new Exception(GetExcept("N<EFBFBD>o foi possivel apagar a tabela municipios!"));
|
|
|
|
|
|
|
|
|
|
echo "Importando a tabela de municipios!\n";
|
|
|
|
|
$query = "COPY pbx_municipios FROM '$file' WITH DELIMITER AS ',' QUOTE '\"' CSV\n";
|
|
|
|
|
$result = @pg_query($db, $query);
|
|
|
|
|
if (!$result)
|
|
|
|
|
throw new Exception(GetExcept("N<EFBFBD>o foi possivel importar tabela municipios!"));
|
|
|
|
|
|
|
|
|
|
echo "Apagando a tabela de pbx_consulta_ddd!\n";
|
|
|
|
|
$query = "truncate table pbx_consulta_ddd;";
|
|
|
|
|
$result = @pg_query($db, $query);
|
|
|
|
|
if (!$result)
|
|
|
|
|
throw new Exception(GetExcept("N<EFBFBD>o foi possivel apagar a tabela pbx_consulta_ddd!"));
|
|
|
|
|
|
|
|
|
|
echo "Importando a tabela de pbx_consulta_ddd!\n";
|
|
|
|
|
$query = "insert
|
|
|
|
|
into pbx_consulta_ddd
|
|
|
|
|
(id, codigo_ddd, nome_municipio, uf, prefixo, inicial, final)
|
|
|
|
|
select id, codigo_ddd, nome_municipio, uf, prefixo, faixa_inicial, faixa_final
|
|
|
|
|
from pbx_municipios;";
|
|
|
|
|
$result = @pg_query($db, $query);
|
|
|
|
|
if (!$result)
|
|
|
|
|
throw new Exception(GetExcept("N<EFBFBD>o foi possivel atualizar a tabela pbx_consulta_ddd!"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Importando a tabela operadoras.
|
|
|
|
|
*/
|
|
|
|
|
$file = DIRETORIO_DOWNLOAD_CLIENTE . "operadoras.csv";
|
|
|
|
|
if (file_exists($file)) {
|
|
|
|
|
echo "Carregando registros de operadoras existentes!\n";
|
|
|
|
|
|
|
|
|
|
$query = "drop table if exists operadoras";
|
|
|
|
|
$result = @pg_query($db, $query);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Salvando as operadoras atuais.
|
|
|
|
|
*/
|
|
|
|
|
$query = "select * into operadoras from pbx_operadoras where 1=2";
|
|
|
|
|
$result = @pg_query($db, $query);
|
|
|
|
|
if (!$result)
|
|
|
|
|
throw new Exception(GetExcept("N<EFBFBD>o foi possivel importar tabela operadoras atual!"));
|
|
|
|
|
|
|
|
|
|
echo "Importando a tabela de operadoras!\n";
|
|
|
|
|
$query = "COPY operadoras FROM '$file' WITH DELIMITER AS ',' QUOTE '\"' CSV\n";
|
|
|
|
|
$result = @pg_query($db, $query);
|
|
|
|
|
if (!$result)
|
|
|
|
|
throw new Exception(GetExcept("N<EFBFBD>o foi possivel importar tabela operadoras!"));
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Recuperando as modificacoes locais.
|
|
|
|
|
*/
|
|
|
|
|
//$query = "update pbx_operadoras set oper_numero_saida = operadoras.oper_numero_saida from operadoras where operadoras.oper_id = pbx_operadoras.oper_id and operadoras.oper_dono = 'R'";
|
|
|
|
|
//$query = "insert into pbx_operadoras select * from operadoras where oper_spid not in(select oper_spid from pbx_operadoras)";
|
|
|
|
|
$query = "insert
|
|
|
|
|
into pbx_operadoras(
|
|
|
|
|
oper_nome, oper_spid, oper_licensa, oper_numero, oper_numero_saida, oper_dono
|
|
|
|
|
)
|
|
|
|
|
select oper_nome, oper_spid, oper_licensa, oper_numero, oper_numero_saida, oper_dono
|
|
|
|
|
from operadoras
|
|
|
|
|
where oper_spid not in(select oper_spid from pbx_operadoras)";
|
|
|
|
|
|
|
|
|
|
$result = @pg_query($db, $query);
|
|
|
|
|
if (!$result)
|
|
|
|
|
throw new Exception(GetExcept("N<EFBFBD>o foi possivel atualizar as informacoes locais!"));
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Atualiza o id.
|
|
|
|
|
*/
|
|
|
|
|
$query = "SELECT setval('public.pbx_operadoras_oper_id_seq', (select max(oper_id) from pbx_operadoras), true)";
|
|
|
|
|
$result = @pg_query($db, $query);
|
|
|
|
|
if (!$result)
|
|
|
|
|
throw new Exception(GetExcept("N<EFBFBD>o foi possivel atualizar o id da tabela de operadoras!"));
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Apaga operadoras remotas
|
|
|
|
|
|
|
|
|
|
$query = "delete from pbx_operadoras where oper_dono = 'R'";
|
|
|
|
|
$result = @pg_query($db, $query);
|
|
|
|
|
if(!$result) throw new Exception (GetExcept("N<EFBFBD>o foi possivel apagar operadoras existentes!"));
|
|
|
|
|
*/
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@pg_query($db, 'commit');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function IniciaInstalacao() {
|
|
|
|
|
global $cliIdExterno, $cliId, $idAtualiza, $serverApi, $loginApi, $senhaApi;
|
|
|
|
|
echo "Obtendo informacoes sobre atualizacoes.\n";
|
|
|
|
|
$url = "http://$serverApi/integracao?method=PortabInstall&cliIdExterno=$cliIdExterno&login=$loginApi&senha=$senhaApi&SIPID=0&tipoRetorno=XML";
|
|
|
|
|
$xml = simplexml_load_string(file_get_contents($url));
|
|
|
|
|
$statusTran = trim($xml->status);
|
|
|
|
|
if ($statusTran != 'OK')
|
|
|
|
|
throw new Exception(GetExcept($xml->message));
|
|
|
|
|
|
|
|
|
|
$idAtualiza = $xml->idarquivo;
|
|
|
|
|
$cliId = $xml->cli_id;
|
|
|
|
|
$cliStatus = $xml->clie_status;
|
|
|
|
|
if ($cliStatus != 2)
|
|
|
|
|
throw new Exception(GetExcept("O cliente nao esta habilitado para instalacao!\n"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function FinalizaInstalacao() {
|
|
|
|
|
global $idAtualiza, $cliId, $serverApi, $loginApi, $senhaApi, $filePorta;
|
|
|
|
|
echo "Registrando a instalacao no servidor de portabilidade";
|
|
|
|
|
$url = "http://$serverApi/integracao?method=PortabInstallReg&cliId=$cliId&idArquivo=$idAtualiza&login=$loginApi&senha=$senhaApi&SIPID=0&tipoRetorno=XML";
|
|
|
|
|
$xml = simplexml_load_string(file_get_contents($url));
|
|
|
|
|
$statusTran = trim($xml->status);
|
|
|
|
|
if ($statusTran != 'OK')
|
|
|
|
|
throw new Exception(GetExcept($xml->message));
|
|
|
|
|
unlink($filePorta);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Funcoes dever<EFBFBD>o ser removidas em outra versao,
|
|
|
|
|
* todas existem na unit util ou shared; foram
|
|
|
|
|
* introduzidas aqui apenas para garantir que
|
|
|
|
|
* funcionem em qualque vers<EFBFBD>o.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
function ExecStart($fileExec) {
|
|
|
|
|
return true;
|
|
|
|
|
if (file_exists($fileExec)) {
|
|
|
|
|
exit;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Cria o arquivo caso ele n<EFBFBD>o exista.
|
|
|
|
|
*/
|
|
|
|
|
$arq = fopen($fileExec, 'w');
|
|
|
|
|
fclose($arq);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function ExecEnd($fileExec) {
|
|
|
|
|
return true;
|
|
|
|
|
unlink($fileExec);
|
|
|
|
|
exit;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function DisplayDebub($msg) {
|
|
|
|
|
global $debug;
|
|
|
|
|
|
|
|
|
|
if ($debug) {
|
|
|
|
|
echo $msg;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function GravaLogPorta($txt, $aux = '') {
|
|
|
|
|
$txt = trim($txt);
|
|
|
|
|
$txt .= trim($aux);
|
|
|
|
|
$txt .= (stripos($txt, "Fim") !== false) ? "\n\n" : "\n";
|
|
|
|
|
$file = "/var/log/asterisk/portabilidade.log";
|
|
|
|
|
$handle = fopen($file, 'a');
|
|
|
|
|
fwrite($handle, $txt);
|
|
|
|
|
fclose($handle);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function microtime_float() {
|
|
|
|
|
list($usec, $sec) = explode(" ", microtime());
|
|
|
|
|
return ((float) $usec + (float) $sec);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function dbConnect($pg) {
|
|
|
|
|
$conStr = sprintf("host='%s' port='%s' dbname='%s' user='%s' password='%s'", $pg["host"], $pg["port"], $pg["dbname"], $pg["user"], $pg["password"]);
|
|
|
|
|
return @pg_connect($conStr);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function VerificaDirDownload($dir) {
|
|
|
|
|
if (!file_exists($dir)) {
|
|
|
|
|
system("mkdir -p $dir");
|
|
|
|
|
system("chmod 777 -R $dir");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return file_exists($dir);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function downloadFile($url, $path) {
|
|
|
|
|
$newfname = $path;
|
|
|
|
|
$file = fopen($url, "rb");
|
|
|
|
|
$contents = stream_get_contents($file);
|
|
|
|
|
fclose($file);
|
|
|
|
|
|
|
|
|
|
$newf = fopen($newfname, "wb");
|
|
|
|
|
fwrite($newf, $contents);
|
|
|
|
|
fclose($newf);
|
|
|
|
|
|
|
|
|
|
if (file_exists($newfname)) {
|
|
|
|
|
if (filesize($newfname) > 100) {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$newfname = $path;
|
|
|
|
|
$file = fopen($url, "rb");
|
|
|
|
|
if ($file) {
|
|
|
|
|
$newf = fopen($newfname, "wb");
|
|
|
|
|
|
|
|
|
|
if ($newf)
|
|
|
|
|
while (!feof($file)) {
|
|
|
|
|
fwrite($newf, fread($file, 1024 * 8), 1024 * 8);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($file) {
|
|
|
|
|
fclose($file);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($newf) {
|
|
|
|
|
fclose($newf);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (file_exists($newfname)) {
|
|
|
|
|
if (filesize($newfname) > 100) {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function UcompressFile($origem, $arqDestino, $destino = './') {
|
|
|
|
|
$result = true;
|
|
|
|
|
$cmd = sprintf("tar -xzvf %s -C %s", $origem, $destino);
|
|
|
|
|
//$cmd = sprintf("tar -xzf %s -C %s 2>/dev/null", $origem, $destino);
|
|
|
|
|
system($cmd, $result);
|
|
|
|
|
|
|
|
|
|
return file_exists($arqDestino);
|
|
|
|
|
/*
|
|
|
|
|
* Certifica que o arquivo foi criado com sucesso.
|
|
|
|
|
*/
|
|
|
|
|
//return file_exists(destino);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function GetExcept($msg) {
|
|
|
|
|
$ex = error_get_last();
|
|
|
|
|
return sprintf("%s\nErro: %s\n", trim($msg), trim($ex['message']));
|
|
|
|
|
}
|
|
|
|
|
?>
|