示例#1
0
 /**
  * Remove idSoftware
  *
  * @param \Cacic\CommonBundle\Entity\Software $idSoftware
  */
 public function removeIdSoftware(Software $idSoftware)
 {
     $idSoftware->removeAquisico($this);
     $this->idSoftware->removeElement($idSoftware);
 }
 public function setSoftwareElement($software, $valor, $computador, $classObject)
 {
     $logger = $this->get('logger');
     $em = $this->getDoctrine()->getManager();
     if (empty($software)) {
         $logger->error("COLETA: Erro na coleta de software. Elemento nulo {$software}");
         return false;
     }
     try {
         // FIX: alteração para igualar os campos nome do software e descrição
         $idSoftware = $software;
         if (array_key_exists('description', $valor)) {
             $software = $valor['description'];
         }
         // Recupera classProperty para o software
         $classProperty = $em->getRepository('CacicCommonBundle:ClassProperty')->findOneBy(array('idClass' => $classObject, 'nmPropertyName' => $idSoftware));
         if (empty($classProperty)) {
             $classProperty = new ClassProperty();
             $classProperty->setTePropertyDescription("Software detectado: {$software}");
             $classProperty->setNmPropertyName($idSoftware);
             $classProperty->setIdClass($classObject);
             $classProperty->setAtivo(true);
             // Se não der o flush aqui, as consultas de baixo não encontram o objeto
             $em->persist($classProperty);
             $em->flush();
         }
         $ativo = $classProperty->getAtivo();
         //$logger->debug("11111111111111111111111111111111111111111: |$ativo| |$propriedade|");
         if ($ativo === false) {
             // Só vou gravar o software se a propriedade estiver ativa
             $logger->debug("COLETA: Pulando software inativo: {$software}");
             return false;
         }
         // Eduardo: 2015-08-06
         // A propriedade passa a ser um identificador para o Software
         $softwareObject = $em->getRepository('CacicCommonBundle:Software')->getByNameOrProperty($software, $classProperty->getIdClassProperty());
         if (empty($softwareObject)) {
             // Se nao existir, cria
             $logger->info("COLETA: Cadastrando software não encontrado {$software}");
             $softwareObject = new Software();
             $softwareObject->setNmSoftware($software);
             $softwareObject->setIdClassProperty($classProperty);
             // Se não der o flush aqui, as consultas de baixo não encontram o objeto
             $em->persist($softwareObject);
             $em->flush();
         }
         // Adiciona software ao computador
         $propSoftware = $em->getRepository('CacicCommonBundle:PropriedadeSoftware')->findOneBy(array('classProperty' => $classProperty, 'computador' => $computador, 'software' => $softwareObject));
         if (empty($propSoftware)) {
             $propSoftware = new PropriedadeSoftware();
             $propSoftware->setComputador($computador);
             $propSoftware->setSoftware($softwareObject);
             $propSoftware->setClassProperty($classProperty);
         }
         // Garante que o software deve estar ativo
         $propSoftware->setAtivo(true);
         $propSoftware->setDataExclusao(null);
         // Encontra coleta já feita para o Computador
         $computadorColeta = $em->getRepository('CacicCommonBundle:ComputadorColeta')->findOneBy(array('computador' => $computador, 'classProperty' => $classProperty));
         if (empty($computadorColeta)) {
             //$logger->debug("COLETA: Registrando nova coleta para o software $software no computador ".$computador->getIdComputador());
             // Armazena no banco o objeto
             $computadorColeta = new ComputadorColeta();
             $computadorColeta->setComputador($computador);
             $computadorColeta->setClassProperty($classProperty);
             $computadorColeta->setTeClassPropertyValue($software);
             $computadorColeta->setIdClass($classObject);
             $computadorColeta->setDtHrInclusao(new \DateTime());
             $computadorColeta->setAtivo(true);
             $computadorColeta->setDtHrExclusao(null);
             $em->persist($computadorColeta);
             // Pega novo computador gerado no computador coleta
             $computador = $computadorColeta->getComputador();
             // Gravo um histórico
             $computadorColetaHistorico = new ComputadorColetaHistorico();
             $computadorColetaHistorico->setComputadorColeta($computadorColeta);
             $computadorColetaHistorico->setComputador($computador);
             $computadorColetaHistorico->setClassProperty($classProperty);
             $computadorColetaHistorico->setTeClassPropertyValue($software);
             $computadorColetaHistorico->setDtHrInclusao(new \DateTime());
             $em->persist($computadorColetaHistorico);
         } elseif ($computadorColeta->getTeClassPropertyValue() != $software) {
             // Armazena no banco o objeto
             $computadorColeta->setComputador($computador);
             $computadorColeta->setClassProperty($classProperty);
             $computadorColeta->setTeClassPropertyValue($software);
             $computadorColeta->setIdClass($classObject);
             $computadorColeta->setDtHrInclusao(new \DateTime());
             $computadorColeta->setAtivo(true);
             $computadorColeta->setDtHrExclusao(null);
             $em->persist($computadorColeta);
             // Pega novo computador gerado no computador coleta
             $computador = $computadorColeta->getComputador();
             // Aqui é necessário uma entrada no histórico
             $computadorColetaHistorico = new ComputadorColetaHistorico();
             $computadorColetaHistorico->setComputadorColeta($computadorColeta);
             $computadorColetaHistorico->setComputador($computador);
             $computadorColetaHistorico->setClassProperty($classProperty);
             $computadorColetaHistorico->setTeClassPropertyValue($software);
             $computadorColetaHistorico->setDtHrInclusao(new \DateTime());
             $em->persist($computadorColetaHistorico);
         }
         // Atualiza valores do Software
         // $softwareObject->setNmSoftware($software);
         if (array_key_exists('description', $valor)) {
             $softwareObject->setTeDescricaoSoftware($valor['description']);
             $propSoftware->setDisplayName($valor['description']);
             $classProperty->setPrettyName($valor['description']);
         }
         /*
         if (array_key_exists('name', $valor)) {
             $classProperty->setNmPropertyName($valor['name']);
         }
         */
         if (array_key_exists('url', $valor)) {
             $propSoftware->setUrlInfoAbout($valor['url']);
         }
         if (array_key_exists('version', $valor)) {
             $propSoftware->setDisplayVersion($valor['version']);
         }
         if (array_key_exists('publisher', $valor)) {
             $propSoftware->setPublisher($valor['publisher']);
         }
         // Persiste os objetos
         $em->persist($propSoftware);
         // Tem que adicionar isso aqui ou o Doctrine vai duplicar o software
         $em->flush();
     } catch (ORMException $e) {
         // Reopen Entity Manager
         if (!$em->isOpen()) {
             // reset the EM and all alias
             $container = $this->container;
             $container->set('doctrine.orm.entity_manager', null);
             $container->set('doctrine.orm.default_entity_manager', null);
         }
         $logger->error("COLETA: Erro na inserçao de dados do software {$software}.");
         $logger->debug($e);
         return false;
     } catch (DBALException $e) {
         // Reopen Entity Manager
         if (!$em->isOpen()) {
             // reset the EM and all alias
             $container = $this->container;
             $container->set('doctrine.orm.entity_manager', null);
             $container->set('doctrine.orm.default_entity_manager', null);
         }
         $logger->error("COLETA: Erro impossível de software repetido para {$software}.");
         $logger->debug($e);
         return false;
     }
     return true;
 }
示例#3
0
 /**
  * Processa parâmetros da coleta de software
  *
  * @param $strNewClassValues
  * @param $arrCollectsDefClasses
  * @param $strCollectType
  * @param $strClassName
  */
 public function coletaSoftware($strNewClassValues, $arrCollectsDefClasses, $strCollectType, $strClassName, $computador)
 {
     $logger = $this->get('logger');
     // Primeiro preciso pegar todas as tags que forem software
     $arrSoftware = TagValueHelper::getSoftwareTags($strNewClassValues);
     // Agora insere cada registro de software individualmente
     foreach ($arrSoftware as $software) {
         // Armazeno todas as propriedades dessa classe enviadas pela requisição
         $arrTags = TagValueHelper::getTagsFromValues($software);
         // Crio um array multidimensional com as tags e os valores
         foreach ($arrTags as $tagNames) {
             // Essa função garante que só serão retornados caracteres com UTF8 Válido
             $texto = TagValueHelper::UTF8Sanitize(TagValueHelper::getValueFromTags($tagNames, $software));
             $arrTagsNames[$tagNames] = $texto;
         }
         // Para software, cada identificador será uma propriedade
         $softwareName = $arrTagsNames['IDSoftware'];
         // Remove o IDSoftware do array
         unset($arrTagsNames['IDSoftware']);
         // Armazeno o IDSoftware como Propriedade
         $idClassProperty = $arrCollectsDefClasses[$strCollectType][$strClassName][$softwareName]['idClassProperty'];
         // Se o IDSoftware não existir, cria
         if (empty($idClassProperty)) {
             $logger->debug("Software {$softwareName} não encontrado. Adicionando um novo software");
             // Pega o Id da classe
             $idClass = $this->getDoctrine()->getRepository('CacicCommonBundle:Classe')->findOneBy(array('nmClassName' => $strClassName));
             $property = new ClassProperty();
             $property->setNmPropertyName($softwareName);
             $property->setTePropertyDescription($arrTagsNames['DisplayName']);
             // Referência à classe
             $property->setIdClass($idClass);
             // Grava a propriedade nova
             $this->getDoctrine()->getManager()->persist($property);
             $this->getDoctrine()->getManager()->flush();
             // Retorna o novo ID
             $idClassProperty = $property->getIdClassProperty();
         }
         // Chama função que grava a propriedade
         $this->gerColsSetProperty('IDSoftware', $software, $idClassProperty, $computador);
         // Agora gravo todas as propriedades para o software na tabela propriedade_software
         $propriedadeSoftware = $this->getDoctrine()->getRepository('CacicCommonBundle:PropriedadeSoftware')->findOneBy(array('classProperty' => $idClassProperty, 'computador' => $computador));
         $classPropertyObject = $this->getDoctrine()->getRepository('CacicCommonBundle:ClassProperty')->findOneBy(array('idClassProperty' => $idClassProperty));
         if (empty($propriedadeSoftware)) {
             // Se não tiver nome coloco o ID Software no nome
             if (empty($arrTagsNames['DisplayName'])) {
                 $nmSoftware = $softwareName;
             } else {
                 $nmSoftware = $arrTagsNames['DisplayName'];
             }
             $softwareObject = $this->getDoctrine()->getRepository('CacicCommonBundle:Software')->findOneBy(array('nmSoftware' => $nmSoftware));
             if (empty($softwareObject)) {
                 $softwareObject = new Software();
                 // Se não tiver nome coloco o ID Software no nome
                 if (empty($arrTagsNames['DisplayName'])) {
                     $softwareObject->setNmSoftware($softwareName);
                 } else {
                     $softwareObject->setNmSoftware($arrTagsNames['DisplayName']);
                 }
                 // Grava software recém inserido
                 $this->getDoctrine()->getManager()->persist($softwareObject);
                 $this->getDoctrine()->getManager()->flush();
             }
             // Depois adiciono as propriedades
             $propriedadeSoftware = new PropriedadeSoftware();
             $propriedadeSoftware->setClassProperty($classPropertyObject);
             $propriedadeSoftware->setComputador($computador);
             // Ajusta valores coletados
             $propriedadeSoftware->setDisplayName($arrTagsNames['DisplayName']);
             $propriedadeSoftware->setDisplayVersion($arrTagsNames['DisplayVersion']);
             $propriedadeSoftware->setURLInfoAbout($arrTagsNames['URLInfoAbout']);
             $propriedadeSoftware->setSoftware($softwareObject);
             // Grava no banco de dados
             $this->getDoctrine()->getManager()->persist($propriedadeSoftware);
             $this->getDoctrine()->getManager()->flush();
         } else {
             // Se não tiver nome coloco o ID Software no nome
             if (empty($arrTagsNames['DisplayName'])) {
                 $nmSoftware = $softwareName;
             } else {
                 $nmSoftware = $arrTagsNames['DisplayName'];
             }
             // Adiciona referência à tabela de softwares
             $softwareObject = $this->getDoctrine()->getRepository('CacicCommonBundle:Software')->findOneBy(array('nmSoftware' => $nmSoftware));
             if (empty($softwareObject)) {
                 $softwareObject = new Software();
                 // Se não tiver nome coloco o ID Software no nome
                 if (empty($arrTagsNames['DisplayName'])) {
                     $softwareObject->setNmSoftware($softwareName);
                 } else {
                     $softwareObject->setNmSoftware($arrTagsNames['DisplayName']);
                 }
                 // Grava software recém inserido
                 $this->getDoctrine()->getManager()->persist($softwareObject);
                 $this->getDoctrine()->getManager()->flush();
             }
             // Ajusta valores coletados
             $propriedadeSoftware->setDisplayName($arrTagsNames['DisplayName']);
             $propriedadeSoftware->setDisplayVersion($arrTagsNames['DisplayVersion']);
             $propriedadeSoftware->setURLInfoAbout($arrTagsNames['URLInfoAbout']);
             $propriedadeSoftware->setSoftware($softwareObject);
             // Salva valor da coleta
             $this->getDoctrine()->getManager()->persist($propriedadeSoftware);
             $this->getDoctrine()->getManager()->flush();
         }
     }
 }