Spaces:
No application file
No application file
| namespace Mautic\PluginBundle\Model; | |
| use Doctrine\DBAL\Schema\Schema; | |
| use Doctrine\ORM\EntityManager; | |
| use Mautic\CoreBundle\Helper\BundleHelper; | |
| use Mautic\CoreBundle\Helper\CoreParametersHelper; | |
| use Mautic\CoreBundle\Helper\UserHelper; | |
| use Mautic\CoreBundle\Model\FormModel; | |
| use Mautic\CoreBundle\Security\Permissions\CorePermissions; | |
| use Mautic\CoreBundle\Translation\Translator; | |
| use Mautic\LeadBundle\Field\FieldList; | |
| use Mautic\LeadBundle\Model\FieldModel; | |
| use Mautic\PluginBundle\Entity\Plugin; | |
| use Psr\Log\LoggerInterface; | |
| use Symfony\Component\EventDispatcher\EventDispatcherInterface; | |
| use Symfony\Component\Routing\Generator\UrlGeneratorInterface; | |
| /** | |
| * @extends FormModel<Plugin> | |
| */ | |
| class PluginModel extends FormModel | |
| { | |
| public function __construct( | |
| protected FieldModel $leadFieldModel, | |
| private FieldList $fieldList, | |
| CoreParametersHelper $coreParametersHelper, | |
| private BundleHelper $bundleHelper, | |
| EntityManager $em, | |
| CorePermissions $security, | |
| EventDispatcherInterface $dispatcher, | |
| UrlGeneratorInterface $router, | |
| Translator $translator, | |
| UserHelper $userHelper, | |
| LoggerInterface $mauticLogger | |
| ) { | |
| parent::__construct($em, $security, $dispatcher, $router, $translator, $userHelper, $mauticLogger, $coreParametersHelper); | |
| } | |
| /** | |
| * @return \Mautic\PluginBundle\Entity\PluginRepository | |
| */ | |
| public function getRepository() | |
| { | |
| return $this->em->getRepository(Plugin::class); | |
| } | |
| public function getIntegrationEntityRepository() | |
| { | |
| return $this->em->getRepository(\Mautic\PluginBundle\Entity\IntegrationEntity::class); | |
| } | |
| public function getPermissionBase(): string | |
| { | |
| return 'plugin:plugins'; | |
| } | |
| /** | |
| * Get lead fields used in selects/matching. | |
| * | |
| * @return mixed[] | |
| */ | |
| public function getLeadFields(): array | |
| { | |
| return $this->fieldList->getFieldList(); | |
| } | |
| /** | |
| * Get Company fields. | |
| * | |
| * @return mixed[] | |
| */ | |
| public function getCompanyFields(): array | |
| { | |
| return $this->fieldList->getFieldList(true, true, ['isPublished' => true, 'object' => 'company']); | |
| } | |
| public function saveFeatureSettings($entity): void | |
| { | |
| $this->em->persist($entity); | |
| $this->em->flush(); | |
| } | |
| /** | |
| * Loads config.php arrays for all plugins. | |
| * | |
| * @return array | |
| */ | |
| public function getAllPluginsConfig() | |
| { | |
| return $this->bundleHelper->getPluginBundles(); | |
| } | |
| /** | |
| * Loads all installed Plugin entities from database. | |
| * | |
| * @return array | |
| */ | |
| public function getInstalledPlugins() | |
| { | |
| return $this->getEntities( | |
| [ | |
| 'index' => 'bundle', | |
| ] | |
| ); | |
| } | |
| /** | |
| * Returns metadata for all plugins. | |
| */ | |
| public function getPluginsMetadata(): array | |
| { | |
| $allMetadata = $this->em->getMetadataFactory()->getAllMetadata(); | |
| $pluginsMetadata = []; | |
| foreach ($allMetadata as $meta) { | |
| $namespace = $meta->namespace; | |
| if (str_contains($namespace, 'MauticPlugin')) { | |
| $bundleName = preg_replace('/\\\Entity$/', '', $namespace); | |
| if (!isset($pluginsMetadata[$bundleName])) { | |
| $pluginsMetadata[$bundleName] = []; | |
| } | |
| $pluginsMetadata[$bundleName][$meta->getName()] = $meta; | |
| } | |
| } | |
| return $pluginsMetadata; | |
| } | |
| /** | |
| * Returns all tables of installed plugins. | |
| */ | |
| public function getInstalledPluginTables(array $pluginsMetadata): array | |
| { | |
| $currentSchema = $this->em->getConnection()->createSchemaManager()->introspectSchema(); | |
| $installedPluginsTables = []; | |
| foreach ($pluginsMetadata as $bundleName => $pluginMetadata) { | |
| foreach ($pluginMetadata as $meta) { | |
| $table = $meta->getTableName(); | |
| if (!isset($installedPluginsTables[$bundleName])) { | |
| $installedPluginsTables[$bundleName] = []; | |
| } | |
| if ($currentSchema->hasTable($table)) { | |
| $installedPluginsTables[$bundleName][] = $currentSchema->getTable($table); | |
| } | |
| } | |
| } | |
| return $installedPluginsTables; | |
| } | |
| /** | |
| * Generates new Schema objects for all installed plugins. | |
| */ | |
| public function createPluginSchemas(array $installedPluginsTables): array | |
| { | |
| $installedPluginsSchemas = []; | |
| foreach ($installedPluginsTables as $bundleName => $tables) { | |
| $installedPluginsSchemas[$bundleName] = new Schema($tables); | |
| } | |
| return $installedPluginsSchemas; | |
| } | |
| } | |