Spaces:
No application file
No application file
namespace MauticPlugin\MauticCrmBundle; | |
use Doctrine\ORM\EntityManager; | |
use Mautic\CoreBundle\Factory\MauticFactory; | |
use Mautic\PluginBundle\Bundle\PluginBundleBase; | |
use Mautic\PluginBundle\Entity\Plugin; | |
class MauticCrmBundle extends PluginBundleBase | |
{ | |
public static function onPluginInstall(Plugin $plugin, MauticFactory $factory, $metadata = null, $installedSchema = null): void | |
{ | |
if (null === $metadata) { | |
$metadata = self::getMetadata($factory->getEntityManager()); | |
} | |
if (null !== $metadata) { | |
parent::onPluginInstall($plugin, $factory, $metadata, $installedSchema); | |
} | |
} | |
/** | |
* Fix: plugin installer doesn't find metadata entities for the plugin | |
* PluginBundle/Controller/PluginController:410. | |
* | |
* @return array|null | |
*/ | |
private static function getMetadata(EntityManager $em) | |
{ | |
$allMetadata = $em->getMetadataFactory()->getAllMetadata(); | |
$currentSchema = $em->getConnection()->createSchemaManager()->introspectSchema(); | |
$classes = []; | |
/** @var \Doctrine\ORM\Mapping\ClassMetadata $meta */ | |
foreach ($allMetadata as $meta) { | |
if (!str_contains($meta->namespace, 'MauticPlugin\\MauticCrmBundle')) { | |
continue; | |
} | |
$table = $meta->getTableName(); | |
if ($currentSchema->hasTable($table)) { | |
continue; | |
} | |
$classes[] = $meta; | |
} | |
return $classes ?: null; | |
} | |
} | |