ield. if ($parent && $rootEntityFound) { $this->inheritIdGeneratorMapping($class, $parent); } else { $this->completeIdGeneratorMapping($class); } if (!$class->isMappedSuperclass) { foreach ($class->embeddedClasses as $property => $embeddableClass) { if (isset($embeddableClass['inherited'])) { continue; } if (!(isset($embeddableClass['class']) && $embeddableClass['class'])) { throw MappingException::missingEmbeddedClass($property); } if (isset($this->embeddablesActiveNesting[$embeddableClass['class']])) { throw MappingException::infiniteEmbeddableNesting($class->name, $property); } $this->embeddablesActiveNesting[$class->name] = \true; $embeddableMetadata = $this->getMetadataFor($embeddableClass['class']); if ($embeddableMetadata->isEmbeddedClass) { $this->addNestedEmbeddedClasses($embeddableMetadata, $class, $property); } $identifier = $embeddableMetadata->getIdentifier(); if (!empty($identifier)) { $this->inheritIdGeneratorMapping($class, $embeddableMetadata); } $class->inlineEmbeddable($property, $embeddableMetadata); unset($this->embeddablesActiveNesting[$class->name]); } } if ($parent) { if ($parent->isInheritanceTypeSingleTable()) { $class->setPrimaryTable($parent->table); } $this->addInheritedIndexes($class, $parent); if ($parent->cache) { $class->cache = $parent->cache; } if ($parent->containsForeignIdentifier) { $class->containsForeignIdentifier = \true; } if ($parent->containsEnumIdentifier) { $class->containsEnumIdentifier = \true; } if (!empty($parent->namedQueries)) { $this->addInheritedNamedQueries($class, $parent); } if (!empty($parent->namedNativeQueries)) { $this->addInheritedNamedNativeQueries($class, $parent); } if (!empty($parent->sqlResultSetMappings)) { $this->addInheritedSqlResultSetMappings($class, $parent); } if (!empty($parent->entityListeners) && empty($class->entityListeners)) { $class->entityListeners = $parent->entityListeners; } } $class->setParentClasses($nonSuperclassParents); if ($class->isRootEntity() && !$class->isInheritanceTypeNone() && !$class->discriminatorMap) { $this->addDefaultDiscriminatorMap($class); } // During the following event, there may also be updates to the discriminator map as per GH-1257/GH-8402. // So, we must not discover the missing subclasses before that. if ($this->evm->hasListeners(Events::loadClassMetadata)) { $eventArgs = new LoadClassMetadataEventArgs($class, $this->em); $this->evm->dispatchEvent(Events::loadClassMetadata, $eventArgs); } $this->findAbstractEntityClassesNotListedInDiscriminatorMap($class); if ($class->changeTrackingPolicy === ClassMetadata::CHANGETRACKING_NOTIFY) { Deprecation::trigger('doctrine/orm', 'https://github.com/doctrine/orm/issues/8383', 'NOTIFY Change Tracking policy used in "%s" is deprecated, use deferred explicit instead.', $class->name); } $this->validateRuntimeMetadata($class, $parent); } protected function validateRuntimeMetadata($class, $parent) { if (!$class->reflClass) { // only validate if there is a reflection class instance return; } $class->validateIdentifier(); $class->validateAssociations(); $class->validateLifecycleCallbacks($this->getReflectionService()); // verify inheritance if (!$class->isMappedSuperclass && !$class->isInheritanceTypeNone()) { if (!$parent) { if (count($class->discriminatorMap) === 0) { throw MappingException::missingDiscriminatorMap($class->name); } if (!$class->discriminatorColumn) { throw MappingException::missingDiscriminatorColumn($class->name); } foreach ($class->subClasses as $subClass) { if ((new ReflectionClass($subClass))->name !== $subClass) { throw MappingException::invalidClassInDiscriminatorMap($subClass, $class->name); } } } else { assert($parent instanceof ClassMetadataInfo); // https://github.com/doctrine/orm/issues/8746 if (!$class->reflClass->isAbstract() && !in_array($class->name, $class->discriminatorMap, \true)) { throw MappingException::mappedClassNotPartOfDiscriminatorMap($class->name, $class->rootEntityName); } } } elseif ($class->isMappedSuperclass && $class->name === $class->rootEntityName && (count($class->discriminatorMap) || $class->discriminatorColumn)) { // second condition is necessary for mapped superclasses in the middle of an inheritance hierarchy throw MappingException::noInheritanceOnMappedSuperClass($class->name); } } protected function newClassMetadataInstance($className) { return new ClassMetadata($className, $this->em->getConfiguration()->getNamingStrategy(), $this->em->getConfiguration()->getTypedFieldMapper()); } private function addDefaultDiscriminatorMap(ClassMetadata $class) : void { $allClasses = $this->driver->getAllClassNames(); $fqcn = $class->getName(); $map = [$this->getShortName($class->name) => $fqcn]; $duplicates = []; foreach ($allClasses as $subClassCandidate) { if (is_subclass_of($subClassCandidate, $fqcn)) { $shortName = $this->getShortName($subClassCandidate); if (isset($map[$shortName])) { $duplicates[] = $shortName; } $map[$shortName] = $subClassCandidate; } } if ($duplicates) { throw MappingException::duplicateDiscriminatorEntry($class->name, $duplicates, $map); } $class->setDiscriminatorMap($map); } private function findAbstractEntityClassesNotListedInDiscriminatorMap(ClassMetadata $rootEntityClass) : void { // Only root classes in inheritance hierarchies need contain a discriminator map, // so skip for other classes. if (!$rootEntityClass->isRootEntity() || $rootEntityClass->isInheritanceTypeNone()) { return; } $processedClasses = [$rootEntityClass->name => \true]; foreach ($rootEntityClass->subClasses as $knownSubClass) { $processedClasses[$knownSubClass] = \true; } foreach ($rootEntityClass->discriminatorMap as $declaredClassName) { // This fetches non-transient parent classes only $parentClasses = $this->getParentClasses($declaredClassName); foreach ($parentClasses as $parentClass) { if (isset($processedClasses[$parentClass])) { continue; } $processedClasses[$parentClass] = \true; // All non-abstract entity classes must be listed in the discriminator map, and // this will be validated/enforced at runtime (possibly at a later time, when the // subclass is loaded, but anyways). Also, subclasses is about entity classes only. // That means we can ignore non-abstract classes here. The (expensive) driver // check for mapped superclasses need only be run for abstract candidate classes. if (!(new ReflectionClass($parentClass))->isAbstract() || $this->peekIfIsMappedSuperclass($parentClass)) { continue; } // We have found a non-transient, non-mapped-superclass = an entity class (possibly abstract, but that does not matter) $rootEntityClass->addSubClass($parentClass); } } } private function peekIfIsMappedSuperclass(string $className) : bool { $reflService = $this->getReflectionService(); $class = $this->newClassMetadataInstance($className); $this->initializeReflection($class, $reflService); $this->driver->loadMetadataForClass($className, $class); return $class->isMappedSuperclass; } private function getShortName(string $className) : string { if (!str_contains($className, '\\')) { return strtolower($className); } $parts = explode('\\', $className); return strtolower(end($parts)); } private function addInheritedFields(ClassMetadata $subClass, ClassMetadata $parentClass) : void { foreach ($parentClass->fieldMappings as $mapping) { if (!isset($mapping['inherited']) && !$parentClass->isMappedSuperclass) { $mapping['inherited'] = $parentClass->name; } if (!isset($mapping['declared'])) { $mapping['declared'] = $parentClass->name; } $subClass->addInheritedFieldMapping($mapping); } foreach ($parentClass->reflFields as $name => $field) { $subClass->reflFields[$name] = $field; } } private function addInheritedRelations(ClassMetadata $subClass, ClassMetadata $parentClass) : void { foreach ($parentClass->associationMappings as $field => $mapping) { if (!isset($mapping['inherited']) && !$parentClass->isMappedSuperclass) { $mapping['inherited'] = $parentClass->name; } if (!isset($mapping['declared'])) { $mapping['declared'] = $parentClass->name; } // When the class inheriting the relation ($subClass) is the first entity class since the // relation has been defined in a mapped superclass (or in a chain // of mapped superclasses) above, then declare this current entity class as the source of // the relationship. // According to the definitions given in https://github.com/doctrine/orm/pull/10396/, // this is the case <=> ! isset($mapping['inherited']). if (!isset($mapping['inherited'])) { if ($mapping['type'] & ClassMetadata::TO_MANY && !$mapping['isOwningSide']) { throw MappingException::illegalToManyAssociationOnMappedSuperclass($parentClass->name, $field); } $mapping['sourceEntity'] = $subClass->name; } $subClass->addInheritedAssociationMapping($mapping); } } private function addInheritedEmbeddedClasses(ClassMetadata $subClass, ClassMetadata $parentClass) : void { foreach ($parentClass->embeddedClasses as $field => $embeddedClass) { if (!isset($embeddedClass['inherited']) && !$parentClass->isMappedSuperclass) { $embeddedClass['inherited'] = $parentClass->name; } if (!isset($embeddedClass['declared'])) { $embeddedClass['declared'] = $parentClass->name; } $subClass->embeddedClasses[$field] = $embeddedClass; } } private function addNestedEmbeddedClasses(ClassMetadata $subClass, ClassMetadata $parentClass, string $prefix) : void { foreach ($subClass->embeddedClasses as $property => $embeddableClass) { if (isset($embeddableClass['inherited'])) { continue; } $embeddableMetadata = $this->getMetadataFor($embeddableClass['class']); $parentClass->mapEmbedded(['fieldName' => $prefix . '.' . $property, 'class' => $embeddableMetadata->name, 'columnPrefix' => $embeddableClass['columnPrefix'], 'declaredField' => $embeddableClass['declaredField'] ? $prefix . '.' . $embeddableClass['declaredField'] : $prefix, 'originalField' => $embeddableClass['originalField'] ?: $property]); } } private function addInheritedIndexes(ClassMetadata $subClass, ClassMetadata $parentClass) : void { if (!$parentClass->isMappedSuperclass) { return; } foreach (['uniqueConstraints', 'indexes'] as $indexType) { if (isset($parentClass->table[$indexType])) { foreach ($parentClass->table[$indexType] as $indexName => $index) { if (isset($subClass->table[$indexType][$indexName])) { continue; // Let the inheriting table override indices } $subClass->table[$indexType][$indexName] = $index; } } } } private function addInheritedNamedQueries(ClassMetadata $subClass, ClassMetadata $parentClass) : void { foreach ($parentClass->namedQueries as $name => $query) { if (!isset($subClass->namedQueries[$name])) { $subClass->addNamedQuery(['name' => $query['name'], 'query' => $query['query']]); } } } private function addInheritedNamedNativeQueries(ClassMetadata $subClass, ClassMetadata $parentClass) : void { foreach ($parentClass->namedNativeQueries as $name => $query) { if (!isset($subClass->namedNativeQueries[$name])) { $subClass->addNamedNativeQuery(['name' => $query['name'], 'query' => $query['query'], 'isSelfClass' => $query['isSelfClass'], 'resultSetMapping' => $query['resultSetMapping'], 'resultClass' => $query['isSelfClass'] ? $subClass->name : $query['resultClass']]); } } } private function addInheritedSqlResultSetMappings(ClassMetadata $subClass, ClassMetadata $parentClass) : void { foreach ($parentClass->sqlResultSetMappings as $name => $mapping) { if (!isset($subClass->sqlResultSetMappings[$name])) { $entities = []; foreach ($mapping['entities'] as $entity) { $entities[] = ['fields' => $entity['fields'], 'isSelfClass' => $entity['isSelfClass'], 'discriminatorColumn' => $entity['discriminatorColumn'], 'entityClass' => $entity['isSelfClass'] ? $subClass->name : $entity['entityClass']]; } $subClass->addSqlResultSetMapping(['name' => $mapping['name'], 'columns' => $mapping['columns'], 'entities' => $entities]); } } } private function completeIdGeneratorMapping(ClassMetadataInfo $class) : void { $idGenType = $class->generatorType; if ($idGenType === ClassMetadata::GENERATOR_TYPE_AUTO) { $class->setIdGeneratorType($this->determineIdGeneratorStrategy($this->getTargetPlatform())); } // Create & assign an appropriate ID generator instance switch ($class->generatorType) { case ClassMetadata::GENERATOR_TYPE_IDENTITY: $sequenceName = null; $fieldName = $class->identifier ? $class->getSingleIdentifierFieldName() : null; // Platforms that do not have native IDENTITY support need a sequence to emulate this behaviour. if ($this->getTargetPlatform()->usesSequenceEmulatedIdentityColumns()) { Deprecation::trigger('doctrine/orm', 'https://github.com/doctrine/orm/issues/8850', <<<'DEPRECATION' Context: Loading metadata for class %s Problem: Using the IDENTITY generator strategy with platform "%s" is deprecated and will not be possible in Doctrine ORM 3.0. Solution: Use the SEQUENCE generator strategy instead. DEPRECATION , $class->name, get_class($this->getTargetPlatform())); $columnName = $class->getSingleIdentifierColumnName(); $quoted = isset($class->fieldMappings[$fieldName]['quoted']) || isset($class->table['quoted']); $sequencePrefix = $class->getSequencePrefix($this->getTargetPlatform()); $sequenceName = $this->getTargetPlatform()->getIdentitySequenceName($sequencePrefix, $columnName); $definition = ['sequenceName' => $this->truncateSequenceName($sequenceName)]; if ($quoted) { $definition['quoted'] = \true; } $sequenceName = $this->em->getConfiguration()->getQuoteStrategy()->getSequenceName($definition, $class, $this->getTargetPlatform()); } $generator = $fieldName && $class->fieldMappings[$fieldName]['type'] === 'bigint' ? new BigIntegerIdentityGenerator($sequenceName) : new IdentityGenerator($sequenceName); $class->setIdGenerator($generator); break; case ClassMetadata::GENERATOR_TYPE_SEQUENCE: // If there is no sequence definition yet, create a default definition $definition = $class->sequenceGeneratorDefinition; if (!$definition) { $fieldName = $class->getSingleIdentifierFieldName(); $sequenceName = $class->getSequenceName($this->getTargetPlatform()); $quoted = isset($class->fieldMappings[$fieldName]['quoted']) || isset($class->table['quoted']); $definition = ['sequenceName' => $this->truncateSequenceName($sequenceName), 'allocationSize' => 1, 'initialValue' => 1]; if ($quoted) { $definition['quoted'] = \true; } $class->setSequenceGeneratorDefinition($definition); } $sequenceGenerator = new SequenceGenerator($this->em->getConfiguration()->getQuoteStrategy()->getSequenceName($definition, $class, $this->getTargetPlatform()), (int) $definition['allocationSize']); $class->setIdGenerator($sequenceGenerator); break; case ClassMetadata::GENERATOR_TYPE_NONE: $class->setIdGenerator(new AssignedGenerator()); break; case ClassMetadata::GENERATOR_TYPE_UUID: Deprecation::trigger('doctrine/orm', 'https://github.com/doctrine/orm/issues/7312', 'Mapping for %s: the "UUID" id generator strategy is deprecated with no replacement', $class->name); $class->setIdGenerator(new UuidGenerator()); break; case ClassMetadata::GENERATOR_TYPE_CUSTOM: $definition = $class->customGeneratorDefinition; if ($definition === null) { throw InvalidCustomGenerator::onClassNotConfigured(); } if (!class_exists($definition['class'])) { throw InvalidCustomGenerator::onMissingClass($definition); } $class->setIdGenerator(new $definition['class']()); break; default: throw UnknownGeneratorType::create($class->generatorType); } } private function determineIdGeneratorStrategy(AbstractPlatform $platform) : int { if ($platform instanceof Platforms\OraclePlatform || $platform instanceof Platforms\PostgreSQLPlatform) { return ClassMetadata::GENERATOR_TYPE_SEQUENCE; } if ($platform->supportsIdentityColumns()) { return ClassMetadata::GENERATOR_TYPE_IDENTITY; } if ($platform->supportsSequences()) { return ClassMetadata::GENERATOR_TYPE_SEQUENCE; } throw CannotGenerateIds::withPlatform($platform); } private function truncateSequenceName(string $schemaElementName) : string { $platform = $this->getTargetPlatform(); if (!$platform instanceof Platforms\OraclePlatform && !$platform instanceof Platforms\SQLAnywherePlatform) { return $schemaElementName; } $maxIdentifierLength = $platform->getMaxIdentifierLength(); if (strlen($schemaElementName) > $maxIdentifierLength) { return substr($schemaElementName, 0, $maxIdentifierLength); } return $schemaElementName; } private function inheritIdGeneratorMapping(ClassMetadataInfo $class, ClassMetadataInfo $parent) : void { if ($parent->isIdGeneratorSequence()) { $class->setSequenceGeneratorDefinition($parent->sequenceGeneratorDefinition); } if ($parent->generatorType) { $class->setIdGeneratorType($parent->generatorType); } if ($parent->idGenerator) { $class->setIdGenerator($parent->idGenerator); } } protected function wakeupReflection(ClassMetadataInterface $class, ReflectionService $reflService) { assert($class instanceof ClassMetadata); $class->wakeupReflection($reflService); } protected function initializeReflection(ClassMetadataInterface $class, ReflectionService $reflService) { assert($class instanceof ClassMetadata); $class->initializeReflection($reflService); } protected function getFqcnFromAlias($namespaceAlias, $simpleClassName) { return $this->em->getConfiguration()->getEntityNamespace($namespaceAlias) . '\\' . $simpleClassName; } protected function getDriver() { return $this->driver; } protected function isEntity(ClassMetadataInterface $class) { return !$class->isMappedSuperclass; } private function getTargetPlatform() : Platforms\AbstractPlatform { if (!$this->targetPlatform) { $this->targetPlatform = $this->em->getConnection()->getDatabasePlatform(); } return $this->targetPlatform; } }
Fatal error: Uncaught Error: Class "MailPoetVendor\Doctrine\ORM\Mapping\ClassMetadataFactory" not found in /htdocs/wp-content/plugins/mailpoet/lib/Doctrine/TablePrefixMetadataFactory.php:16 Stack trace: #0 /htdocs/wp-content/plugins/all-in-one-seo-pack/vendor/composer/ClassLoader.php(576): include() #1 /htdocs/wp-content/plugins/all-in-one-seo-pack/vendor/composer/ClassLoader.php(427): Composer\Autoload\{closure}('/htdocs/wp-cont...') #2 /htdocs/wp-content/plugins/mailpoet/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/EntityManager.php(67): Composer\Autoload\ClassLoader->loadClass('MailPoet\\Doctri...') #3 /htdocs/wp-content/plugins/mailpoet/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/EntityManager.php(445): MailPoetVendor\Doctrine\ORM\EntityManager->__construct(Object(MailPoet\Doctrine\SerializableConnection), Object(MailPoetVendor\Doctrine\ORM\Configuration)) #4 /htdocs/wp-content/plugins/mailpoet/lib/Doctrine/EntityManagerFactory.php(67): MailPoetVendor\Doctrine\ORM\EntityManager::create(Object(MailPoet\Doctrine\SerializableConnection), Object(MailPoetVendor\Doctrine\ORM\Configuration)) #5 /htdocs/wp-content/plugins/mailpoet/generated/FreeCachedContainer.php(646): MailPoet\Doctrine\EntityManagerFactory->createEntityManager() #6 /htdocs/wp-content/plugins/mailpoet/generated/FreeCachedContainer.php(4908): MailPoetGenerated\FreeCachedContainer->getEntityManagerService() #7 /htdocs/wp-content/plugins/mailpoet/generated/FreeCachedContainer.php(4898): MailPoetGenerated\FreeCachedContainer->getSettingsRepositoryService() #8 /htdocs/wp-content/plugins/mailpoet/generated/FreeCachedContainer.php(2633): MailPoetGenerated\FreeCachedContainer->getSettingsController2Service() #9 /htdocs/wp-content/plugins/mailpoet/vendor-prefixed/symfony/dependency-injection/Container.php(122): MailPoetGenerated\FreeCachedContainer->getInitializerService() #10 /htdocs/wp-content/plugins/mailpoet/vendor-prefixed/symfony/dependency-injection/Container.php(110): MailPoetVendor\Symfony\Component\DependencyInjection\Container->make('MailPoet\\Config...', 1) #11 /htdocs/wp-content/plugins/mailpoet/lib/DI/ContainerWrapper.php(39): MailPoetVendor\Symfony\Component\DependencyInjection\Container->get('MailPoet\\Config...') #12 /htdocs/wp-content/plugins/mailpoet/mailpoet_initializer.php(89): MailPoet\DI\ContainerWrapper->get('MailPoet\\Config...') #13 /htdocs/wp-content/plugins/mailpoet/mailpoet.php(194): require_once('/htdocs/wp-cont...') #14 /htdocs/wp-settings.php(526): include_once('/htdocs/wp-cont...') #15 /htdocs/wp-config.php(85): require_once('/htdocs/wp-sett...') #16 /htdocs/wp-load.php(50): require_once('/htdocs/wp-conf...') #17 /htdocs/wp-blog-header.php(13): require_once('/htdocs/wp-load...') #18 /htdocs/index.php(17): require('/htdocs/wp-blog...') #19 {main} thrown in /htdocs/wp-content/plugins/mailpoet/lib/Doctrine/TablePrefixMetadataFactory.php on line 16