createFormBuilder() ->add('arquivo', 'file', array('label' => 'Arquivo', 'attr' => array( 'accept' => '.zip' ))) ->getForm(); $form->handleRequest( $request ); if ( $form->isValid() ) { { // grava no diretório src/Cacic/CommonBundle/Resources/data //$dirMigracao = realpath( dirname(__FILE__) .'/../Resources/data/' ); //$fileName = 'importacao'.'.zip'; //$form['arquivo']->getData()->move($dirMigracao, $fileName); // Eduardo: 13/01/2014 // Altera a função de migração $result = $this->importaPostgreSQL($form['arquivo']->getData()); if ( $result ) { $this->get('session')->getFlashBag()->add('success', 'Envio realizado com sucesso!'); } else { $this->get('session')->getFlashBag()->add('error', 'Migração inválida! Ocorreu uma falha ao importar os arquivos'); } } //return $this->redirect( $this->generateUrl( 'cacic_migracao_importador') ); } return $this->render( 'CacicCommonBundle:Cacic26:migracao.html.twig', array( 'form' => $form->createView() ) ); } /* * Função que importa os dadospara o banco de dados PostgreSQL * @param $arquivo Arquivo .zip contendo dados gerados pelo extrator */ public function importaPostgreSQL($arquivo) { $tmpdir = sys_get_temp_dir(); $logger = $this->get('logger'); $importacao = $tmpdir.'/importacao'; // Tabelas $lista_tabelas = array( //"acao", "servidor_autenticacao", "local", "rede", //"acao_excecao", //"acao_rede", "so", //"acao_so", "aplicativo", "aplicativo_rede", "aquisicao", "tipo_licenca", "software", "aquisicao_item", "computador", "descricao_coluna_computador", "grupo_usuario", "insucesso_instalacao", "usuario", "local_secundario", "log", "unid_organizacional_nivel1", "unid_organizacional_nivel1a", "unid_organizacional_nivel2", "patrimonio", "patrimonio_config_interface", "rede_grupo_ftp", "rede_versao_modulo", "software_estacao", "srcacic_chat", "srcacic_conexao", "srcacic_sessao", "srcacic_transf", "teste", "tipo_software", "tipo_uorg", "uorg", "usb_vendor", "usb_device", "usb_log" ); // Sequências $lista_sequencias = array( "aplicativo" => array( "id_aplicativo", "aplicativo_id_aplicativo_seq" ), "aquisicao" => array( "id_aquisicao", "aquisicao_id_aquisicao_seq" ), "computador" => array( "id_computador", "computador_id_computador_seq" ), "grupo_usuario" => array( "id_grupo_usuario", "grupo_usuario_id_grupo_usuario_seq" ), "insucesso_instalacao" => array( "id_insucesso_instalacao", "insucesso_instalacao_id_insucesso_instalacao_seq" ), "local" => array( "id_local", "local_id_local_seq" ), "log" => array( "id_log", "log_id_log_seq" ), "patrimonio" => array( "id_patrimonio", "patrimonio_id_patrimonio_seq" ), "rede_grupo_ftp" => array( "id_ftp", "rede_grupo_ftp_id_ftp_seq" ), "rede" => array( "id_rede", "rede_id_rede_seq" ), "rede_versao_modulo" => array( "id_rede_versao_modulo", "rede_versao_modulo_id_rede_versao_modulo_seq" ), "servidor_autenticacao" => array( "id_servidor_autenticacao", "servidor_autenticacao_id_servidor_autenticacao_seq" ), "so" => array( "id_so", "so_id_so_seq" ), "software" => array( "id_software", "software_id_software_seq" ), "srcacic_action" => array( "id_srcacic_action", "srcacic_action_id_srcacic_action_seq" ), "srcacic_chat" => array( "id_srcacic_chat", "srcacic_chat_id_srcacic_chat_seq" ), "srcacic_conexao" => array( "id_srcacic_conexao", "srcacic_conexao_id_srcacic_conexao_seq" ), "srcacic_sessao" => array( "id_srcacic_sessao", "srcacic_sessao_id_srcacic_sessao_seq" ), "srcacic_transf" => array( "id_srcacic_transf", "srcacic_transf_id_srcacic_transf_seq" ), "teste" => array( "id_transacao", "teste_id_transacao_seq" ), "tipo_licenca" => array( "id_tipo_licenca", "tipo_licenca_id_tipo_licenca_seq" ), "tipo_software" => array( "id_tipo_software", "tipo_software_id_tipo_software_seq" ), "tipo_uorg" => array( "id_tipo_uorg", "tipo_uorg_id_tipo_uorg_seq" ), "unid_organizacional_nivel1" => array( "id_unid_organizacional_nivel1", "unid_organizacional_nivel1_id_unid_organizacional_nivel1_seq" ), "unid_organizacional_nivel1a" => array( "id_unid_organizacional_nivel1a", "unid_organizacional_nivel1a_id_unid_organizacional_nivel1a_seq" ), "unid_organizacional_nivel2" => array( "id_unid_organizacional_nivel2", "unid_organizacional_nivel2_id_unid_organizacional_nivel2_seq" ), "uorg" => array( "id_uorg", "uorg_id_uorg_seq" ), "usb_log" => array( "id_usb_log", "usb_log_id_usb_log_seq" ), "usuario" => array( "id_usuario", "usuario_id_usuario_seq" ) ); // Cria um diretório temporário com todos os dados extraídos $zip = new ZipArchive(); $x = $zip->open($arquivo); $logger->info("Extraindo arquivo de importação no diretorio {$importacao}"); if ($x === TRUE) { $zip->extractTo($importacao); $zip->close(); $logger->info('Arquivo.zip extraído com sucesso'); } else { $logger->error("Erro na extração do arquivo {$x}"); return false; } // Carrega configurações do banco de dados $dbhost = $this->container->getParameter('database_host'); $db = $this->container->getParameter('database_name'); $port = $this->container->getParameter('database_port'); $user = $this->container->getParameter('database_user'); $pass = $this->container->getParameter('database_password'); if ($dbhost) { $dbcon = new PDOConnection("pgsql:host={$dbhost};dbname={$db};port={$port}", $user, $pass); } else { $dbcon = new PDOConnection("pgsql:dbname={$db};port={$port}", $user, $pass); } // Ou funciona tudo ou não funciona nada $dbcon->beginTransaction(); // Primeiro apaga os dados por tabela $excluir = array('configuracao_local'); $excluir = array_reverse(array_merge($lista_tabelas, $excluir)); foreach ($excluir as $tabela) { $logger->info("Apagando a tabela {$tabela}"); try { // Apaga a tabela e carrega os dados do arquivo CSV $dbcon->exec("DELETE FROM {$tabela} CASCADE"); } catch (Exception $e) { // Falha, dá um rollback e retorna falso $logger->error("Erro na exclusão \n" . $e->getMessage()); $dbcon->rollBack(); return false; } } // Agora carrega os dados foreach ($lista_tabelas as $tabela) { if (file_exists("{$importacao}/{$tabela}.csv")) { $logger->info("Importando a tabela {$tabela}"); try { // Apaga a tabela e carrega os dados do arquivo CSV $dbcon->exec("COPY {$tabela} FROM '{$tmpdir}/importacao/{$tabela}.csv' DELIMITER ';' NULL E'\\\N' CSV ESCAPE '\"'"); } catch (Exception $e) { // Falha, dá um rollback e retorna falso $logger->error("Erro na importação \n" . $e->getMessage()); $dbcon->rollBack(); return false; } } } // Se tudo funcionou bem, é prciso ajustar o valor das sequências foreach ($lista_sequencias as $tabela => $value) { // Atualiza as sequencias de auto-increment $logger->info("Carregando a sequência para a tabela {$tabela} ...."); foreach ($dbcon->query("SELECT MAX({$value[0]}) AS $value[0] FROM {$tabela}") as $row) { $result = $row["{$value[0]}"]; } if ($result) { $logger->info("Ajustando a sequência {$value[1]} para o valor máximo {$result} ..."); $dbcon->exec("SELECT setval('{$value[1]}', {$result})"); } else { $logger->error("Valor máximo não encontrado para a tabela {$tabela}, ID {$value[0]} e sequência {$value[1]}"); } } // Finaliza a transação $dbcon->commit(); // Armazena as senhas para todos os usuários criados $arrUsuarios = $this->getDoctrine()->getRepository( 'CacicCommonBundle:Usuario' )->findAll(); foreach ($arrUsuarios as $usuario) { $logger->info("Corrige a senha do usuario {$usuario->getNmUsuarioCompleto()} ....."); $encoder = $this->container ->get('security.encoder_factory') ->getEncoder($usuario) ; // Guarda a senha criptografada $usuario->setTeSenha($encoder->encodePassword($usuario->getTeSenha(), $usuario->getSalt())); $this->getDoctrine()->getManager()->persist($usuario); $this->getDoctrine()->getManager()->flush(); } // Finaliza a importação e apaga os arquivos $fs = new Filesystem(); $fs->remove($importacao); return true; } public function importarscriptAction(){ function getconfig() { // fixme: do it the synfony way $yfile = "../app/config/parameters.yml"; $parameters = file_get_contents($yfile); $linhas = explode("\n", $parameters); foreach ($linhas as $linha) { $dado = explode(": ", $linha); $config[] = $dado[1]; } return $config; } // Conexão com o banco $config = @getconfig(); $server = $config[2]; $port = $config[3]; $db = $config[4]; $user = $config[5]; $pass = $config[6]; error_log("11111111111111111111111111111111" . $config . " | " . $server . " | " . $db . " | " . $user . " | " . $pass); if ($server != 'null') { $dbcon = new PDOConnection("pgsql:host={$server};dbname={$db};port={$port}", $user, $pass); } else { $dbcon = new PDOConnection("pgsql:dbname={$db};port={$port}", $user, $pass); } function importar($dbcon, $tmpdir) { // Cria a query padrão de inclusão de dados $lista_tabelas = array( "acao", "servidor_autenticacao", "local", "rede", "acao_excecao", "acao_rede", "so", "acao_so", "aplicativo", "aplicativo_rede", "aquisicao", "tipo_licenca", "software", "aquisicao_item", "computador", "descricao_coluna_computador", "grupo_usuario", "insucesso_instalacao", "usuario", "local_secundario", "log", "unid_organizacional_nivel1", "unid_organizacional_nivel1a", "unid_organizacional_nivel2", "patrimonio", "patrimonio_config_interface", "rede_grupo_ftp", "rede_versao_modulo", "software_estacao", "srcacic_chat", "srcacic_conexao", "srcacic_sessao", "srcacic_transf", "teste", "tipo_software", "tipo_uorg", "uorg", "usb_vendor", "usb_device", "usb_log" ); echo "Limpando dados anteriores... "; foreach ($lista_tabelas as $tabela) { // Limpa as tabelas antes $dbcon -> exec("truncate {$tabela} cascade"); } echo "feito.
"; foreach ($lista_tabelas as $tabela){ if (file_exists("{$tmpdir}/importacao/{$tabela}.csv")) { echo "Importando ".$tabela."..."; // Copia do arquivo para a base $dbcon -> exec("COPY {$tabela} FROM '{$tmpdir}/importacao/{$tabela}.csv' WITH DELIMITER AS ';' NULL AS '\N' ESCAPE '\"' ENCODING 'ISO-8859-1' CSV"); echo " feito.
"; } } } function atualizar_seq($dbcon){ $lista_sequencias = array( "aplicativo_id_aplicativo_seq", "aquisicao_id_aquisicao_seq", "class_property_id_class_property_seq", "class_property_type_id_class_property_type_seq", "classe_id_class_seq", "collect_def_class_id_collect_def_class_seq", "computador_coleta_historico_id_computador_coleta_historico_seq", "computador_coleta_id_computador_coleta_seq", "computador_id_computador_seq", "grupo_usuario_id_grupo_usuario_seq", "insucesso_instalacao_id_insucesso_instalacao_seq", "local_id_local_seq", "log_id_log_seq", "patrimonio_id_patrimonio_seq", "rede_grupo_ftp_id_ftp_seq", "rede_id_rede_seq", "rede_versao_modulo_id_rede_versao_modulo_seq", "servidor_autenticacao_id_servidor_autenticacao_seq", "so_id_so_seq", "software_id_software_seq", "srcacic_action_id_srcacic_action_seq", "srcacic_chat_id_srcacic_chat_seq", "srcacic_conexao_id_srcacic_conexao_seq", "srcacic_sessao_id_srcacic_sessao_seq", "srcacic_transf_id_srcacic_transf_seq", "teste_id_transacao_seq", "tipo_licenca_id_tipo_licenca_seq", "tipo_software_id_tipo_software_seq", "tipo_uorg_id_tipo_uorg_seq", "unid_organizacional_nivel1_id_unid_organizacional_nivel1_seq", "unid_organizacional_nivel1a_id_unid_organizacional_nivel1a_seq", "unid_organizacional_nivel2_id_unid_organizacional_nivel2_seq", "uorg_id_uorg_seq", "usb_log_id_usb_log_seq", "usuario_id_usuario_seq" ); foreach ($lista_sequencias as $tabela) { // Atualiza as sequencias de auto-increment $dbcon->exec("SELECT nextval('{$tabela}')"); } } // Execuções echo "Iniciando importação...
"; $zipfile = "../src/Cacic/CommonBundle/Resources/data/importacao.zip"; $tmpdir = sys_get_temp_dir(); // Extrai os arquivos necessarios para a importação $zip = new ZipArchive(); $x = $zip->open($zipfile); echo "extraindo arquivo..."; if ($x === TRUE) { $zip->extractTo($tmpdir.'/importacao'); $zip->close(); echo " feito.
"; } else { die("
Erro na extração do arquivo: {$x}"); } // Importa os dados para o postgres $dbcon->exec("begin"); importar($dbcon, $tmpdir); $dbcon->exec("end"); atualizar_seq($dbcon); // Deleta os arquivos foreach (glob($tmpdir.'/importacao/*') as $filename) { unlink($filename); } rmdir($tmpdir."/importacao"); // Fecha conexão com o banco $dbcon = null; return $this->redirect( $this->generateUrl( 'cacic_migracao_cacic26') ); } }