public function activateAction() { $console = $this->getServiceLocator()->get('console'); // Make sure that we are running in a console and the user has not tricked our // application into running this action from a public web server. $request = $this->getRequest(); if (!$request instanceof ConsoleRequest) { throw new RuntimeException('You can only use this action from a console.'); } $fieldName = $this->params()->fromRoute('field'); $entityName = $this->params()->fromRoute('entity'); $comment = $this->params()->fromRoute('comment'); $queryBuilder = $this->getAuditObjectManager()->createQueryBuilder(); $queryBuilder->select('field')->from('ZF\\Doctrine\\Audit\\Entity\\Field', 'field')->innerJoin('field.targetEntity', 'targetEntity')->andWhere('field.name = :fieldName')->andWhere('targetEntity.name = :entityName')->setParameter('entityName', $entityName)->setParameter('fieldName', $fieldName); $field = $queryBuilder->getQuery()->getOneOrNullResult(); if (!$field) { $console->write("Field was not found\n", Color::RED); return; } $fieldStatus = $this->getAuditObjectManager()->getRepository('ZF\\Doctrine\\Audit\\Entity\\FieldStatus')->findOneBy(['name' => 'active']); $revision = new Entity\Revision(); $revision->setCreatedAt(new DateTime()); $revision->setComment($comment ?? 'Activated field from console command'); $this->getAuditObjectManager()->persist($revision); $fieldRevision = new Entity\FieldRevision(); $fieldRevision->setFieldStatus($fieldStatus); $fieldRevision->setField($field); $fieldRevision->setRevision($revision); $this->getAuditObjectManager()->persist($fieldRevision); $this->getAuditObjectManager()->flush(); $console->write("Field has been activated\n", Color::GREEN); }
public function load(ObjectManager $auditObjectManager) { $config = $this->getServiceLocator()->get('Config')['zf-doctrine-audit']; $objectManager = $this->getServiceLocator()->get($config['target_object_manager']); $fieldStatusActive = $auditObjectManager->getRepository('ZF\\Doctrine\\Audit\\Entity\\FieldStatus')->findOneBy(['name' => 'active']); // Create a revision to associate with field revision $revision = new Entity\Revision(); $revision->setCreatedAt(new DateTime()); $revision->setComment('Data Fixture Import'); $auditObjectManager->persist($revision); foreach ($config['entities'] as $className => $route) { $targetEntity = $auditObjectManager->getRepository('ZF\\Doctrine\\Audit\\Entity\\TargetEntity')->findOneBy(['name' => $className]); if (!$targetEntity) { $auditEntityClassName = $auditObjectManager->getRepository('ZF\\Doctrine\\Audit\\Entity\\AuditEntity')->generateClassName($className); $auditEntity = new Entity\AuditEntity(); $auditEntity->setName($auditEntityClassName); $auditEntity->setTableName($auditObjectManager->getClassMetadata($auditEntityClassName)->getTableName()); $targetEntity = new Entity\TargetEntity(); $targetEntity->setAuditEntity($auditEntity); $targetEntity->setName($className); $targetEntity->setTableName($objectManager->getClassMetadata($className)->getTableName()); $identifiers = $objectManager->getClassMetadata($className)->getIdentifierFieldNames(); foreach ($identifiers as $fieldName) { $identifier = new Entity\Identifier(); $identifier->setTargetEntity($targetEntity); $identifier->setFieldName($fieldName); $identifier->setColumnName($objectManager->getClassMetadata($className)->getColumnName($fieldName)); $auditObjectManager->persist($identifier); } // Add Fields $fields = $objectManager->getClassMetadata($className)->getFieldNames(); foreach ($fields as $fieldName) { $field = new Entity\Field(); $field->setTargetEntity($targetEntity); $field->setName($fieldName); $field->setColumnName($objectManager->getClassMetadata($className)->getColumnName($fieldName)); $fieldRevision = new Entity\FieldRevision(); $fieldRevision->setFieldStatus($fieldStatusActive); $fieldRevision->setField($field); $fieldRevision->setRevision($revision); $auditObjectManager->persist($field); $auditObjectManager->persist($fieldRevision); } // Add Associations to Fields $associations = $objectManager->getClassMetadata($className)->getAssociationNames(); foreach ($associations as $fieldName) { $associationMapping = $objectManager->getClassMetadata($className)->getAssociationMapping($fieldName); if (!isset($associationMapping['joinColumns'])) { continue; } if (sizeof($associationMapping['joinColumns']) != 1) { throw new Exception('Unable to handle > 1 join column per association'); } $field = new Entity\Field(); $field->setTargetEntity($targetEntity); $field->setName($fieldName); $field->setColumnName(array_shift($associationMapping['joinColumns'])['name']); $fieldRevision = new Entity\FieldRevision(); $fieldRevision->setFieldStatus($fieldStatusActive); $fieldRevision->setField($field); $fieldRevision->setRevision($revision); $auditObjectManager->persist($field); $auditObjectManager->persist($fieldRevision); } $auditObjectManager->persist($auditEntity); $auditObjectManager->persist($targetEntity); } } $auditObjectManager->flush(); }