render( 'CacicCommonBundle:Rede:index.html.twig', array( 'rede' => $this->getDoctrine()->getRepository( 'CacicCommonBundle:Rede' )->paginar( $this->get( 'knp_paginator' ), $page ), 'uorgs' => $this->getDoctrine()->getRepository( 'CacicCommonBundle:Uorg' )->vincular() )); } public function cadastrarAction(Request $request) { $logger = $this->get('logger'); $rede = new Rede(); $form = $this->createForm( new RedeType(), $rede ); if ( $request->isMethod('POST') ) { $form->bind( $request ); if ( $form->isValid() ) { $this->getDoctrine()->getManager()->persist( $rede ); $this->getDoctrine()->getManager()->flush(); //Persiste os dados do Usuário // Marca todas as ações para a rede $habilitar = $form['habilitar']->getData(); $nmRede = $rede->getNmRede(); if ($habilitar) { $logger->debug("Habilitando todas as ações para a rede $nmRede ..."); $this->getDoctrine()->getRepository( 'CacicCommonBundle:AcaoRede' )->atualizarPorRede( array( $rede ) ); } // Grava os dados da tabela rede versão módulo $logger->debug("Realizando o update de subredes para a rede $nmRede ..."); // Grava os dados da tabela rede versão módulo $this->updateSubredes($rede); $this->get('session')->getFlashBag()->add('success', 'Dados salvos com sucesso!'); return $this->redirect( $this->generateUrl( 'cacic_subrede_index') ); } } return $this->render( 'CacicCommonBundle:Rede:cadastrar.html.twig', array( 'form' => $form->createView() ) ); } /** * Página de editar dados do subrede * @param int $idRede */ public function editarAction( $idRede, Request $request ) { $logger = $this->get('logger'); $rede = $this->getDoctrine()->getRepository('CacicCommonBundle:Rede')->find( $idRede ); if ( ! $rede ) throw $this->createNotFoundException( 'Subrede não encontrado' ); $form = $this->createForm( new RedeType(), $rede ); if ( $request->isMethod('POST') ) { $form->bind( $request ); if ( $form->isValid() ) { $this->getDoctrine()->getManager()->persist( $rede ); $this->getDoctrine()->getManager()->flush();// Efetuar a edição do ServidorAutenticacao // Marca todas as ações para a rede $habilitar = $form['habilitar']->getData(); $nmRede = $rede->getNmRede(); if ($habilitar) { $logger->debug("Habilitando todas as ações para a rede $nmRede ..."); $this->getDoctrine()->getRepository( 'CacicCommonBundle:AcaoRede' )->atualizarPorRede( array( $rede ) ); } // Grava os dados da tabela rede versão módulo $logger->debug("Realizando o update de subredes para a rede $nmRede ..."); $this->updateSubredes($rede); $this->get('session')->getFlashBag()->add('success', 'Dados salvos com sucesso!'); return $this->redirect($this->generateUrl('cacic_subrede_editar', array( 'idRede'=>$rede->getIdRede() ) ) ); } } return $this->render( 'CacicCommonBundle:Rede:cadastrar.html.twig', array( 'form' => $form->createView() ) ); } /** * * [AJAX] Exclusão de Rede já cadastrado * @param integer $idRede */ public function excluirAction( Request $request ) { if ( ! $request->isXmlHttpRequest() ) throw $this->createNotFoundException( 'Página não encontrada' ); $rede = $this->getDoctrine()->getRepository('CacicCommonBundle:Rede')->find( $request->get('id') ); if ( ! $rede ) throw $this->createNotFoundException( 'Subrede não encontrado' ); $em = $this->getDoctrine()->getManager(); $em->remove( $rede ); $em->flush(); $response = new Response( json_encode( array('status' => 'ok') ) ); $response->headers->set('Content-Type', 'application/json'); return $response; } /** * * Tela de importação de arquivo CSV com registros de Redes/Subredes */ public function importarcsvAction( Request $request ) { $form = $this->createFormBuilder() ->add('arquivocsv', 'file', array('label' => 'Arquivo', 'attr' => array( 'accept' => '.csv' ))) ->getForm(); if ( $request->isMethod('POST') ) { $form->bindRequest( $request ); if ( $form['arquivocsv']->getData() instanceof \Symfony\Component\HttpFoundation\File\UploadedFile ) { // Executa a importação do arquivo - grava no diretório web/upload/migracao $dirMigracao = realpath( dirname(__FILE__) .'/../../../../web/upload/migracao/' ); $fileName = 'Subredes_U'.$this->getUser()->getIdUsuario().'T'.time().'.csv'; $form['arquivocsv']->getData()->move( $dirMigracao, $fileName ); $em = $this->getDoctrine()->getManager(); // Abre o arquivo salvo e começa a rotina de importação dos dados do CSV $csv = file( $dirMigracao.'/'.$fileName ); foreach( $csv as $k => $v ) { // Valida a linha $v = explode( ';', trim( str_replace( '"', '', $v ) ) ); if ( count( $v ) != 8 ) continue; $local = $this->getDoctrine()->getRepository('CacicCommonBundle:Local')->find( (int) $v[0] ); $servAut = $this->getDoctrine()->getRepository('CacicCommonBundle:ServidorAutenticacao')->find( (int) $v[1] ); $rede = new Rede(); if ( $local ) $rede->setIdLocal( $local ); if ( $servAut ) $rede->setIdServidorAutenticacao( $servAut ); $rede->setTeIpRede( $v[2] ); $rede->setNmRede( $v[3] ); $rede->setTeServCacic( $v[4] ); $rede->setTeServUpdates( $v[5] ); $rede->setNuLimiteFtp( (int) $v[6] ); $rede->setCsPermitirDesativarSrcacic( $v[7] ); $em->persist( $rede ); } $em->flush(); // Persiste os dados das Redes $this->get('session')->getFlashBag()->add('success', 'Importação realizada com sucesso!'); } else $this->get('session')->getFlashBag()->add('error', 'Arquivo CSV inválido!'); return $this->redirect( $this->generateUrl( 'cacic_migracao_subrede') ); } return $this->render( 'CacicCommonBundle:Rede:importarcsv.html.twig', array( 'form' => $form->createView() ) ); } public function manutencaoAction(Request $request) { $logger = $this->get('logger'); // Primeiro carrega lista dos módulos $modulos = $this->modulosArray(); if ( $request->isMethod('POST') ) { if ( count( $request->get('subrede') ) ) { foreach ( $request->get('subrede') as $resultado ) { $logger->debug("Atualizando a subrede {$resultado} ..."); // Junta os módulos windows e linux para enviar para o update de subredes $atualizaWindows = $request->get('windows'); $atualizaLinux = $request->get('linux'); // FIXME: Na requisição só vem o nome dos módulos. Precisa carregar as outras informações. // Evita Warning do array merge se um dos dois for vazio if (empty($atualizaLinux)) { $atualiza = $atualizaWindows; } elseif (empty($atualizaWindows)) { $atualiza = $atualizaLinux; } else { $atualiza = array_merge($atualizaWindows, $atualizaLinux); } // Passa a rede como parâmetro $redeAtualizar = $this->getDoctrine()->getManager()->find('CacicCommonBundle:Rede', $resultado); // Executa a atualização de todos os módulos marcados para a subrede marcada $this->updateSubredes($redeAtualizar, $atualiza); } $this->get('session')->getFlashBag()->add('success', 'Dados salvos com sucesso!'); } } // Lista de subredes e módulos $subredesOrig = $this->getDoctrine()->getRepository('CacicCommonBundle:Rede')->comLocal(); // Varro todas as subredes para cada módulo $subredes = array(); $windows = array(); $linux = array(); foreach ($subredesOrig as $redeItem) { // Busca o módulo em cada uma das redes $codigos = array(); foreach ($modulos as $key => $value) { $idRede = $redeItem['idRede']; // Verifico se o módulo existe na subrede $rede = $this->getDoctrine()->getRepository('CacicCommonBundle:RedeVersaoModulo')->subrede($idRede, $key); if (empty($rede)) { // O módulo não foi encontrado. Adiciona o código 1 array_push($codigos, 0); //$rede = $redeItem[0]; } else { if ($value['hash'] == $rede[0]['teHash']) { // Se o hash for igual, adiciona o código 2 array_push($codigos, 2); } else { // Se o hash for diferente, adiciona o código 1 array_push($codigos, 1); } } // Cria um array para Windows e outro para Linux if ($value['tipoSo'] == 'windows') { $windows[$key] = $value; } else { $linux[$key] = $value; } } // Define o elemento HTML para os módulos if (in_array(0, $codigos)) { // Se o código 0 for encontrato, marcamos o módulo como inexistente if (empty($rede)) { $rede[0] = $redeItem; } $subredes["$idRede"]['teIpRede'] = $rede[0]['teIpRede']; $subredes["$idRede"]['nmRede'] = $rede[0]['nmRede']; $subredes["$idRede"]['teServUpdates'] = $rede[0]['teServUpdates']; $subredes["$idRede"]['tePathServUpdates'] = $rede[0]['tePathServUpdates']; $subredes["$idRede"]['nmLocal'] = $rede[0]['nmLocal']; $subredes["$idRede"]['codigo'] = "Módulos inexistentes"; } elseif (in_array(1, $codigos)) { // Se o código 1 for encontrado, alguns módulos estão desatualizados $subredes["$idRede"]['teIpRede'] = $rede[0]['teIpRede']; $subredes["$idRede"]['nmRede'] = $rede[0]['nmRede']; $subredes["$idRede"]['teServUpdates'] = $rede[0]['teServUpdates']; $subredes["$idRede"]['tePathServUpdates'] = $rede[0]['tePathServUpdates']; $subredes["$idRede"]['nmLocal'] = $rede[0]['nmLocal']; $subredes["$idRede"]['codigo'] = "Módulos desatualizados"; } else { // Se não existe nenhum módulo inexistente ou desatualizado, está tudo 100% atualizado $subredes["$idRede"]['teIpRede'] = $rede[0]['teIpRede']; $subredes["$idRede"]['nmRede'] = $rede[0]['nmRede']; $subredes["$idRede"]['teServUpdates'] = $rede[0]['teServUpdates']; $subredes["$idRede"]['tePathServUpdates'] = $rede[0]['tePathServUpdates']; $subredes["$idRede"]['nmLocal'] = $rede[0]['nmLocal']; $subredes["$idRede"]['codigo'] = "Módulos atualizados"; } } return $this->render( 'CacicCommonBundle:Rede:manutencao.html.twig', array( 'windows'=> $windows, 'linux' => $linux, 'subredes' => $subredes ) ); } /* * Função que retorna um array multidimensional com o nome dos executáveis, * o hash e versão constantes do arquivo versions_and_hashes.ini * * @param nmModulo Nome do módulo para trazer informações * * @return Array multidimensional com os dados */ public function modulosArray($nmModulos = null) { $logger = $this->get('logger'); // Abre e faz o parsing do arquivo $cacic_helper = new Helper\OldCacicHelper($this->container->get('kernel')); $iniFile = $cacic_helper->iniFile(); $itemArray = parse_ini_file($iniFile); $teste = parse_ini_file($iniFile, true); // Gera um array com todos os múdlos $modulos = array(); $intLoopVersionsIni = 0; foreach ($teste["ItemsDefinitions"] as &$arrItemDefinitions) { $intLoopVersionsIni ++; $arrItemDefinitions = explode(',',$itemArray['Item_' . $intLoopVersionsIni]); // Cria um array multidimensional com os atributos if ($arrItemDefinitions[0] <> '') { $arquivo = Helper\OldCacicHelper::getOnlyFileName(trim($arrItemDefinitions[0])); // Verifica se o arquivo deve ser carregado if ($nmModulos != null) { if (in_array($arquivo, $nmModulos)) { $logger->debug("Módulo {$arquivo} encontrado ..."); // Se for vazio ou o nome for fornecido, carrega preg_match('/\.[^\.]+$/i',$arquivo,$ext); if ($ext[0] == '.exe') { $tipoSo = 'windows'; } else { $tipoSo = 'linux'; } $modulos[$arquivo]['versao'] = $itemArray[$arquivo . '_VER']; $modulos[$arquivo]['hash'] = $itemArray[$arquivo . '_HASH']; $modulos[$arquivo]['tipoSo'] = $tipoSo; } } else { // Se for vazio ou o nome for fornecido, carrega preg_match('/\.[^\.]+$/i',$arquivo,$ext); if ($ext[0] == '.exe') { $tipoSo = 'windows'; } else { $tipoSo = 'linux'; } $modulos[$arquivo]['versao'] = $itemArray[$arquivo . '_VER']; $modulos[$arquivo]['hash'] = $itemArray[$arquivo . '_HASH']; $modulos[$arquivo]['tipoSo'] = $tipoSo; } } } // Retorna o array com todos os resultados return $modulos; } /** * -------------------------------------------------------------------------------------- * Função usada para fazer updates de subredes... * Recebe como parâmetro o objeto da rede *-------------------------------------------------------------------------------------- */ public function updateSubredes($rede, $modulos = null) { $logger = $this->get('logger'); $pIntIdRede = $rede->getIdRede(); $cacic_helper = new Helper\OldCacicHelper($this->container->get('kernel')); $iniFile = $cacic_helper->iniFile(); $itemArray = parse_ini_file($iniFile); $teste = parse_ini_file($iniFile, true); $intLoopSEL = 1; $intLoopVersionsIni = 0; $sessStrTripaItensEnviados = ''; // Carrega todos os metadados dos módulos fornecidos ou de todos os módulos $modulos = $this->modulosArray($modulos); foreach ($teste["ItemsDefinitions"] as &$arrItemDefinitions) { $intLoopVersionsIni ++; $arrItemDefinitions = explode(',',$itemArray['Item_' . $intLoopVersionsIni]); // Nome do módulo sendo carregado $pStrNmItem = Helper\OldCacicHelper::getOnlyFileName(trim($arrItemDefinitions[0])); $logger->debug("Nome do módulo: $pStrNmItem"); if ($modulos[$pStrNmItem]) { $logger->debug("Carregando módulo $pStrNmItem"); // Carrega dados da rede $em = $this->getDoctrine()->getManager(); //$arrDadosRede = array( 'rede' => $em->getRepository( 'CacicCommonBundle:Rede' )->listar() ); //Debug::dump($arrDadosRede['rede'][0][0]); //$arrDadosRede = $arrDadosRede['rede'][0]; $arrDadosRede = array( 'teServUpdates' => $rede->getTeServUpdates(), 'tePathServUpdates' => $rede->getTePathServUpdates(), 'nmUsuarioLoginServUpdatesGerente' => $rede->getNmUsuarioLoginServUpdatesGerente(), 'teSenhaLoginServUpdatesGerente' => $rede->getTeSenhaLoginServUpdatesGerente(), 'nuPortaServUpdates' => $rede->getNuPortaServUpdates(), ); // Caso o servidor de updates ainda não tenha sido trabalhado... if(!(Helper\OldCacicHelper::stripos2($sessStrTripaItensEnviados,$arrDadosRede['teServUpdates'].'_'.$arrDadosRede['tePathServUpdates'].'_'.$pStrNmItem.'_',false))) { $sessStrTripaItensEnviados .= $arrDadosRede['teServUpdates'].'_'.$arrDadosRede['tePathServUpdates'].'_'.$pStrNmItem . '_'; $strResult = $this->checkAndSend($pStrNmItem, $cacic_helper->getRootDir() . $cacic_helper::CACIC_PATH_RELATIVO_DOWNLOADS . ($pStrNmItem), $arrDadosRede['teServUpdates'], $arrDadosRede['tePathServUpdates'], $arrDadosRede['nmUsuarioLoginServUpdatesGerente'], $arrDadosRede['teSenhaLoginServUpdatesGerente'], $arrDadosRede['nuPortaServUpdates'] ); } else $strResult = 'Ja Enviado ao Servidor!_=_Ok!_=_Resended'; $arrResult = explode('_=_',$strResult); if ($arrResult[1] == 'Ok!') { // Consertar CRUD no Symfony $redeVersaoModulo = $em->getRepository('CacicCommonBundle:RedeVersaoModulo')->findBy( array( 'idRede' => $pIntIdRede, 'nmModulo' => $pStrNmItem ) ); // Se não existir, instancia o objeto if (!$redeVersaoModulo) { $redeVersaoModulo = new RedeVersaoModulo(null, null, null, null, null, $rede); } else { // Carrego o objeto encontrado $redeVersaoModulo = $redeVersaoModulo[0]; } // Adicione o restante dos atributos $redeVersaoModulo->setNmModulo($pStrNmItem); $redeVersaoModulo->setTeVersaoModulo($itemArray[$pStrNmItem . '_VER']); $redeVersaoModulo->setDtAtualizacao(new \DateTime('NOW')); $redeVersaoModulo->setCsTipoSo( $pStrNmItem,'.exe',false ? 'MS-Windows' : 'GNU/LINUX'); $redeVersaoModulo->setTeHash($itemArray[$pStrNmItem . '_HASH']); $em->persist($redeVersaoModulo); $em->flush(); } else { $logger->error("Erro no envio do módulo via FTP \n".$arrResult[1]); } //echo $_GET['pIntIdRede'] . '_=_' . $_GET['pStrNmItem'] . '_=_' . $strResult; #FIXME: Inserir hash do módulo pyCacyc. Atualmente dá erro mas não trava } $intLoopSEL++; } return; } /* * Função que permite a execução do FTP e faz o download dos executáveis * para a estação do Agente * * @param $pStrNmItem * @param $pStrFullItemName * @param $pStrTeServer * @param $pStrTePathServer * @param $pStrNmUsuarioLogin * @param $pStrTeSenhaLogin * @param $pStrNuPortaServer * */ public function checkAndSend($pStrNmItem, $pStrFullItemName, $pStrTeServer, $pStrTePathServer, $pStrNmUsuarioLogin, $pStrTeSenhaLogin, $pStrNuPortaServer) { $logger = $this->get('logger'); // Pega objetos do FTP $ftp = $this->container->get('ijanki_ftp'); $strSendProcess = 'Nao Enviado!'; $strProcessStatus = ''; $strProcessCode = ''; try { $logger->debug("Enviando módulo $pStrFullItemName para o servidor $pStrTeServer na pasta $pStrTePathServer"); $conn = $ftp->connect($pStrTeServer, $pStrNuPortaServer); // Retorno esperado....: 230 => FTP_USER_LOGGED_IN // Retorno NÃO esperado: 530 => FTP_USER_NOT_LOGGED_IN # TODO: Acrescentar verificação de sucesso em cada operação $result = $ftp->login($pStrNmUsuarioLogin,$pStrTeSenhaLogin); // Retorno esperado: 250 => FTP_FILE_ACTION_OK // Retorno NÃO esperado: 550 => FTP_PERMISSION_DENIED (ou a pasta não existe!) $result = $ftp->chdir($pStrTePathServer); $result = $ftp->put($pStrNmItem, $pStrFullItemName, FTP_BINARY); $strSendProcess = 'Enviado com Sucesso!'; $strProcessStatus = 'Ok!'; } catch (FTPException $e) { $strSendProcess = 'Falha no envio!'; $strProcessStatus = 'ERRO: Problema durante a conexao! (' . $e->getMessage() . ')'; } return $strSendProcess . '_=_' . $strProcessStatus . '_=_' . $strProcessCode; } public function vincularAction(Request $request) { if ( ! $request->isXmlHttpRequest() ) // Verifica se se trata de uma requisição AJAX throw $this->createNotFoundException( 'Página não encontrada' ); foreach($request->get('uorg') as $idUorg){ /* $uorgs = implode(',', $request->get('uorg')); // 1- pega rede $rede = $this->getDoctrine()->getRepository('CacicCommonBundle:Rede')->find($request->get('id')); // 2- Add uorg na rede $rede ->addUorg( $this->getDoctrine()->getRepository('CacicCommonBundle:Uorg')->find($uorgs) );*/ //1- Pego Uorg $uorg = $this->getDoctrine()->getRepository('CacicCommonBundle:Uorg')->find($idUorg); //2- Add a rede na uorg $uorg ->setRede( $this->getDoctrine()->getRepository('CacicCommonBundle:Rede')->find($request->get('id')) ); $em = $this->getDoctrine()->getManager(); $em->persist( $uorg ); $em->flush(); } $response = new Response( json_encode( array('status' => 'ok') ) ); $response->headers->set('Content-Type', 'application/json'); return $response; } public function coletarAction() { $subredesOrig = $this->getDoctrine()->getRepository('CacicCommonBundle:Rede')->comLocal(); $subredes = array(); foreach ($subredesOrig as $redeItem) { $idRede = $redeItem['idRede']; $subredes["$idRede"]['teIpRede'] = $redeItem['teIpRede']; $subredes["$idRede"]['nmRede'] = $redeItem['nmRede']; $subredes["$idRede"]['nmLocal'] = $redeItem['nmLocal']; } return $this->render( 'CacicCommonBundle:Rede:coletar.html.twig', array( 'subredes' => $subredes )); } public function submitAction(Request $request) { $subredes = $request->get('subrede'); foreach ($subredes as $subrede){ $computadores = $this->getDoctrine()->getRepository('CacicCommonBundle:Computador')->listarPorSubrede($subrede); foreach($computadores as $computador){ $computador->setForcaColeta('S'); $this->getDoctrine()->getManager()->persist( $computador ); } } $this->getDoctrine()->getManager()->flush(); $this->get('session')->getFlashBag()->add('success', 'Dados salvos com sucesso!'); return $this->redirect($this->generateUrl('cacic_rede_coletar') ); } public function computadoresAction(Request $request) { $em = $this->getDoctrine()->getManager(); $computadores = $em->getRepository('CacicCommonBundle:Rede')->computadoresSubredes(); if ($request->isMethod('POST')) { // Processa subrede foreach($request->request->get('subrede') as $elm) { $out = explode('#',$elm); $id_subrede = $out[0]; $id_computador = $out[1]; $this->get('logger')->error("Atualizando subrede = $id_subrede para o computador = $id_computador"); // Atualiza subrede para o computador $computador = $em->find('CacicCommonBundle:Computador', $id_computador); $subrede = $em->find('CacicCommonBundle:Rede', $id_subrede); $computador->setIdRede($subrede); $em->persist($computador); } $em->flush(); $this->get('session')->getFlashBag()->add('success', 'Computadores atualizados com sucesso!'); } return $this->render('CacicCommonBundle:Rede:computadores.html.twig', array( 'computadores' => $computadores ) ); } /** * Função nova para atualização das subredes * * @param Request $request * @return Response */ public function manutencaoNeoAction(Request $request) { $logger = $this->get('logger'); // Primeiro carrega lista dos módulos $modulos = $this->modulosNeoArray($request); if ( $request->isMethod('POST') ) { if ( count( $request->get('subrede') ) ) { $retorno = true; foreach ( $request->get('subrede') as $resultado ) { $logger->debug("Atualizando a subrede {$resultado} ..."); // Junta os módulos windows e linux para enviar para o update de subredes $atualizaWindows = $request->get('windows'); $atualizaLinux = $request->get('linux'); // FIXME: Na requisição só vem o nome dos módulos. Precisa carregar as outras informações. // Evita Warning do array merge se um dos dois for vazio if (empty($atualizaLinux)) { $atualiza = $atualizaWindows; } elseif (empty($atualizaWindows)) { $atualiza = $atualizaLinux; } else { $atualiza = array_merge($atualizaWindows, $atualizaLinux); } // Passa a rede como parâmetro $redeAtualizar = $this->getDoctrine()->getManager()->find('CacicCommonBundle:Rede', $resultado); // Executa a atualização de todos os módulos marcados para a subrede marcada $result = $this->updateSubredesNeo($request, $redeAtualizar, $atualiza); if (!$result) { $retorno = $result; } } if ($retorno) { $this->get('session')->getFlashBag()->add('success', 'Dados salvos com sucesso!'); } else { $this->get('session')->getFlashBag()->add('error', 'Erro na atualização das subredes'); } } } // Lista de subredes e módulos $subredesOrig = $this->getDoctrine()->getRepository('CacicCommonBundle:Rede')->comLocal(); // Varro todas as subredes para cada módulo $subredes = array(); $saida = array(); foreach ($subredesOrig as $redeItem) { // Busca o tipo de SO $codigos = array(); foreach($modulos as $tipo_so => $file) { // Busca o módulo em cada uma das redes foreach ($file as $key => $value) { $idRede = $redeItem['idRede']; // Verifico se o módulo existe na subrede $rede = $this->getDoctrine()->getRepository('CacicCommonBundle:RedeVersaoModulo')->subredeFilePath($idRede, $value['filename']); if (empty($rede)) { // O módulo não foi encontrado. Adiciona o código 1 array_push($codigos, 0); //$rede = $redeItem[0]; } else { if ($value['hash'] == $rede[0]['teHash']) { // Se o hash for igual, adiciona o código 2 array_push($codigos, 2); } else { // Se o hash for diferente, adiciona o código 1 array_push($codigos, 1); } } // Array de saída $saida[$tipo_so][$value['name']] = $value; } } // Define o elemento HTML para os módulos if (in_array(0, $codigos)) { // Se o código 0 for encontrato, marcamos o módulo como inexistente if (empty($rede)) { $rede[0] = $redeItem; } $subredes["$idRede"]['teIpRede'] = $rede[0]['teIpRede']; $subredes["$idRede"]['nmRede'] = $rede[0]['nmRede']; $subredes["$idRede"]['teServUpdates'] = $rede[0]['teServUpdates']; $subredes["$idRede"]['tePathServUpdates'] = $rede[0]['tePathServUpdates']; $subredes["$idRede"]['nmLocal'] = $rede[0]['nmLocal']; $subredes["$idRede"]['codigo'] = "Módulos inexistentes"; } elseif (in_array(1, $codigos)) { // Se o código 1 for encontrado, alguns módulos estão desatualizados $subredes["$idRede"]['teIpRede'] = $rede[0]['teIpRede']; $subredes["$idRede"]['nmRede'] = $rede[0]['nmRede']; $subredes["$idRede"]['teServUpdates'] = $rede[0]['teServUpdates']; $subredes["$idRede"]['tePathServUpdates'] = $rede[0]['tePathServUpdates']; $subredes["$idRede"]['nmLocal'] = $rede[0]['nmLocal']; $subredes["$idRede"]['codigo'] = "Módulos desatualizados"; } else { // Se não existe nenhum módulo inexistente ou desatualizado, está tudo 100% atualizado $subredes["$idRede"]['teIpRede'] = $rede[0]['teIpRede']; $subredes["$idRede"]['nmRede'] = $rede[0]['nmRede']; $subredes["$idRede"]['teServUpdates'] = $rede[0]['teServUpdates']; $subredes["$idRede"]['tePathServUpdates'] = $rede[0]['tePathServUpdates']; $subredes["$idRede"]['nmLocal'] = $rede[0]['nmLocal']; $subredes["$idRede"]['codigo'] = "Módulos atualizados"; } } //$logger->debug("111111111111111111111111111111111111111 \n".print_r($saida, true)); return $this->render( 'CacicCommonBundle:Rede:manutencaoNeo.html.twig', array( 'saida'=> $saida, 'subredes' => $subredes ) ); } /* * Função que retorna um array multidimensional com o nome dos executáveis, * o hash e versão constantes do arquivo versions_and_hashes.ini * * @param nmModulo Nome do módulo para trazer informações * * @return Array multidimensional com os dados */ public function modulosNeoArray(Request $request, $nmModulos = null) { $logger = $this->get('logger'); // Abre e faz o parsing do arquivo $cacic_helper = new Helper\OldCacicHelper($this->container->get('kernel')); $iniFile = $cacic_helper->iniFile(); //$itemArray = parse_ini_file($iniFile); //$teste = parse_ini_file($iniFile, true); // Varre o diretório em busca dos módulos $rootDir = $this->container->get('kernel')->getRootDir(); $webDir = $rootDir . "/../web/"; $downloadsDir = $webDir . "downloads/"; $cacicDir = $downloadsDir . "cacic/"; $linuxDir = $cacicDir . "linux/"; $windowsDir = $cacicDir . "windows/"; $outrosDir = $downloadsDir . "outros/"; // Constrói array de arquivos e hashes $saida = array(); $base_url = $request->getBaseUrl(); $base_url = preg_replace('/\/app.*.php/', "", $base_url); // Primeiro tratamos agentes Linux // A regra é que o agente mais atual estará na pasta current $current = basename(readlink($cacicDir."current")); $finder = new Finder(); $finder->depth('== 0'); $finder->directories()->in($cacicDir); foreach($finder as $version) { if ($version->getFileName() == 'current') { $tipos = new Finder(); $tipos->depth('== 0'); $tipos->directories()->in($version->getRealPath()); foreach($tipos as $tipo_so) { // Aqui considera somente a última versão $agentes = new Finder(); $agentes->depth('== 0'); $agentes->files()->in($tipo_so->getRealPath()); foreach ($agentes as $file) { $filename = 'cacic/' . $version->getFileName() . '/' . $tipo_so->getFileName() . "/" . $file->getFileName(); if (!empty($nmModulos)) { // Filtra por nome de módulo if (!in_array($filename, $nmModulos)) { continue; } } $saida[$tipo_so->getFileName()][$file->getFileName()] = array( 'name' => $file->getFileName(), 'download_url' => $base_url . '/downloads/cacic/' . $version->getFileName() . '/' . $tipo_so->getFileName() . "/" . $file->getFileName(), 'hash' => md5_file($file->getRealPath()), 'size' => $file->getSize(), 'filename' => $filename, 'versao' => $current, 'tipoSo' => $tipo_so->getFileName() ); } } } else { continue; } } // Retorna o array com todos os resultados return $saida; } public function updateSubredesNeo(Request $request, $rede, $modulos = null) { $logger = $this->get('logger'); $pIntIdRede = $rede->getIdRede(); // Varre o diretório em busca dos módulos $rootDir = $this->container->get('kernel')->getRootDir(); $webDir = $rootDir . "/../web/"; $downloadsDir = $webDir . "downloads/"; $cacicDir = $downloadsDir . "cacic/"; $linuxDir = $cacicDir . "linux/"; $windowsDir = $cacicDir . "windows/"; $outrosDir = $downloadsDir . "outros/"; // Carrega todos os metadados dos módulos fornecidos ou de todos os módulos $modulos = $this->modulosNeoArray($request, $modulos); //$logger->debug("6666666666666666666666666666666666666 ".print_r($modulos, true)); foreach($modulos as $tipo => $modulo) { foreach ($modulo as $key => $value) { $logger->debug("Nome do módulo: ".$value['filename']); // Carrega dados da rede $em = $this->getDoctrine()->getManager(); //$arrDadosRede = array( 'rede' => $em->getRepository( 'CacicCommonBundle:Rede' )->listar() ); //Debug::dump($arrDadosRede['rede'][0][0]); //$arrDadosRede = $arrDadosRede['rede'][0]; $arrDadosRede = array( 'teServUpdates' => $rede->getTeServUpdates(), 'tePathServUpdates' => $rede->getTePathServUpdates(), 'nmUsuarioLoginServUpdatesGerente' => $rede->getNmUsuarioLoginServUpdatesGerente(), 'teSenhaLoginServUpdatesGerente' => $rede->getTeSenhaLoginServUpdatesGerente(), 'nuPortaServUpdates' => $rede->getNuPortaServUpdates(), ); if ($rede->getDownloadMethod() == 'ftp') { $strResult = $this->checkAndSend( $value['name'], $downloadsDir . $value['filename'], $arrDadosRede['teServUpdates'], $arrDadosRede['tePathServUpdates'], $arrDadosRede['nmUsuarioLoginServUpdatesGerente'], $arrDadosRede['teSenhaLoginServUpdatesGerente'], $arrDadosRede['nuPortaServUpdates'] ); $arrResult = explode('_=_',$strResult); } else { $arrResult[1] = 'Ok!'; } if ($arrResult[1] == 'Ok!') { // Consertar CRUD no Symfony $redeVersaoModulo = $em->getRepository('CacicCommonBundle:RedeVersaoModulo')->findOneBy( array( 'idRede' => $pIntIdRede, 'nmModulo' => $value['name'], 'filepath' => $value['filename'] ) ); // Se não existir, instancia o objeto if (empty($redeVersaoModulo)) { $redeVersaoModulo = new RedeVersaoModulo(null, null, null, null, null, $rede); } $tipo_so = $em->getRepository('CacicCommonBundle:TipoSo')->findOneBy(array( 'tipo' => $tipo )); // Adicione o restante dos atributos $redeVersaoModulo->setNmModulo($value['name']); $redeVersaoModulo->setTeVersaoModulo($value['versao']); $redeVersaoModulo->setDtAtualizacao(new \DateTime('NOW')); $redeVersaoModulo->setCsTipoSo( $value['tipoSo'] ); $redeVersaoModulo->setTeHash($value['hash']); $redeVersaoModulo->setTipoSo($tipo_so); $redeVersaoModulo->setFilepath($value['filename']); $redeVersaoModulo->setTipo('cacic'); $em->persist($redeVersaoModulo); $em->flush(); } else { $logger->error("Erro no envio dos módulos!\n".$arrResult[1]); return false; } } } return true; } }