Commit 3184cd06 authored by Dave Reid's avatar Dave Reid
Browse files

Issue #3260833 by huzooka, Dave Reid: Fixed...

Issue #3260833 by huzooka, Dave Reid: Fixed FieldFormatterEntityEmbedDisplayBase constructor triggers strpos deprecation on PHP 8.1.
parent cc96740e
Loading
Loading
Loading
Loading
+23 −37
Original line number Diff line number Diff line
@@ -48,44 +48,14 @@ abstract class FieldFormatterEntityEmbedDisplayBase extends EntityEmbedDisplayBa
   */
  protected $fieldFormatter;

  /**
   * Constructs a FieldFormatterEntityEmbedDisplayBase object.
   *
   * @param array $configuration
   *   A configuration array containing information about the plugin instance.
   * @param string $plugin_id
   *   The plugin_id for the plugin instance.
   * @param mixed $plugin_definition
   *   The plugin implementation definition.
   * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
   *   The entity type manager service.
   * @param \Drupal\Core\Field\FormatterPluginManager $formatter_plugin_manager
   *   The field formatter plugin manager.
   * @param \Drupal\Core\TypedData\TypedDataManager $typed_data_manager
   *   The typed data manager.
   * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
   *   The language manager.
   */
  public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager, FormatterPluginManager $formatter_plugin_manager, TypedDataManager $typed_data_manager, LanguageManagerInterface $language_manager) {
    $this->formatterPluginManager = $formatter_plugin_manager;
    $this->setConfiguration($configuration);
    $this->typedDataManager = $typed_data_manager;
    parent::__construct($configuration, $plugin_id, $plugin_definition, $entity_type_manager, $language_manager);
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
    return new static(
      $configuration,
      $plugin_id,
      $plugin_definition,
      $container->get('entity_type.manager'),
      $container->get('plugin.manager.field.formatter'),
      $container->get('typed_data_manager'),
      $container->get('language_manager')
    );
    $instance = parent::create($container, $configuration, $plugin_id, $plugin_definition);
    $instance->formatterPluginManager = $container->get('plugin.manager.field.formatter');
    $instance->typedDataManager = $container->get('typed_data_manager');
    return $instance;
  }

  /**
@@ -130,7 +100,7 @@ abstract class FieldFormatterEntityEmbedDisplayBase extends EntityEmbedDisplayBa
   *   Returns the access result.
   */
  protected function isApplicableFieldFormatter() {
    $definition = $this->formatterPluginManager->getDefinition($this->getFieldFormatterId());
    $definition = $this->formatterPluginManager()->getDefinition($this->getFieldFormatterId());
    return AccessResult::allowedIf($definition['class']::isApplicable($this->getFieldDefinition()));
  }

@@ -180,7 +150,7 @@ abstract class FieldFormatterEntityEmbedDisplayBase extends EntityEmbedDisplayBa
   * {@inheritdoc}
   */
  public function defaultConfiguration() {
    return $this->formatterPluginManager->getDefaultSettings($this->getFieldFormatterId());
    return $this->formatterPluginManager()->getDefaultSettings($this->getFieldFormatterId());
  }

  /**
@@ -240,11 +210,27 @@ abstract class FieldFormatterEntityEmbedDisplayBase extends EntityEmbedDisplayBa
  public function calculateDependencies() {
    $this->addDependencies(parent::calculateDependencies());

    $definition = $this->formatterPluginManager->getDefinition($this->getFieldFormatterId());
    $definition = $this->formatterPluginManager()->getDefinition($this->getFieldFormatterId());
    $this->addDependency('module', $definition['provider']);
    // @todo Investigate why this does not work currently.
    // $this->calculatePluginDependencies($this->getFieldFormatter());
    return $this->dependencies;
  }

  /**
   * Gets the field formatter plugin manager.
   *
   * This is needed for the defaultConfiguration() method since that gets
   * invoked via the constructor, and our services are injected after the
   * constructor are called.
   *
   * @return \Drupal\Core\Field\FormatterPluginManager
   */
  public function formatterPluginManager() {
    if (!isset($this->formatterPluginManager)) {
      $this->formatterPluginManager = \Drupal::service('plugin.manager.field.formatter');
    }
    return $this->formatterPluginManager;
  }

}
+3 −36
Original line number Diff line number Diff line
@@ -35,46 +35,13 @@ class EntityReferenceFieldFormatter extends FieldFormatterEntityEmbedDisplayBase
   */
  protected $configFactory;

  /**
   * Constructs a new EntityReferenceFieldFormatter.
   *
   * @param array $configuration
   *   A configuration array containing information about the plugin instance.
   * @param string $plugin_id
   *   The plugin_id for the plugin instance.
   * @param mixed $plugin_definition
   *   The plugin implementation definition.
   * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
   *   The entity type manager service.
   * @param \Drupal\Core\Field\FormatterPluginManager $formatter_plugin_manager
   *   The field formatter plugin manager.
   * @param \Drupal\Core\TypedData\TypedDataManager $typed_data_manager
   *   The typed data manager.
   * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
   *   The language manager.
   * @param \Drupal\Core\Config\ConfigFactoryInterface|null $config_factory
   *   The configuration factory, or null to get from global container for
   *   backwards compatibility.
   */
  public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager, FormatterPluginManager $formatter_plugin_manager, TypedDataManager $typed_data_manager, LanguageManagerInterface $language_manager, ConfigFactoryInterface $config_factory = NULL) {
    parent::__construct($configuration, $plugin_id, $plugin_definition, $entity_type_manager, $formatter_plugin_manager, $typed_data_manager, $language_manager);
    $this->configFactory = $config_factory instanceof ConfigFactoryInterface ? $config_factory : \Drupal::configFactory();
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
    return new static(
      $configuration,
      $plugin_id,
      $plugin_definition,
      $container->get('entity_type.manager'),
      $container->get('plugin.manager.field.formatter'),
      $container->get('typed_data_manager'),
      $container->get('language_manager'),
      $container->get('config.factory')
    );
    $instance = parent::create($container, $configuration, $plugin_id, $plugin_definition);
    $instance->configFactory = $container->get('config.factory');
    return $instance;
  }

  /**
+4 −39
Original line number Diff line number Diff line
@@ -43,49 +43,14 @@ class ImageFieldFormatter extends FileFieldFormatter {
   */
  protected $messenger;

  /**
   * Constructs an ImageFieldFormatter object.
   *
   * @param array $configuration
   *   A configuration array containing information about the plugin instance.
   * @param string $plugin_id
   *   The plugin_id for the plugin instance.
   * @param mixed $plugin_definition
   *   The plugin implementation definition.
   * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
   *   The entity manager service.
   * @param \Drupal\Core\Field\FormatterPluginManager $formatter_plugin_manager
   *   The field formatter plugin manager.
   * @param \Drupal\Core\TypedData\TypedDataManager $typed_data_manager
   *   The typed data manager.
   * @param \Drupal\Core\Image\ImageFactory $image_factory
   *   The image factory.
   * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
   *   The language manager.
   * @param \Drupal\Core\Messenger\MessengerInterface $messenger
   *   The messenger.
   */
  public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager, FormatterPluginManager $formatter_plugin_manager, TypedDataManager $typed_data_manager, ImageFactory $image_factory, LanguageManagerInterface $language_manager, MessengerInterface $messenger) {
    parent::__construct($configuration, $plugin_id, $plugin_definition, $entity_type_manager, $formatter_plugin_manager, $typed_data_manager, $language_manager);
    $this->imageFactory = $image_factory;
    $this->messenger = $messenger;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
    return new static(
      $configuration,
      $plugin_id,
      $plugin_definition,
      $container->get('entity_type.manager'),
      $container->get('plugin.manager.field.formatter'),
      $container->get('typed_data_manager'),
      $container->get('image.factory'),
      $container->get('language_manager'),
      $container->get('messenger')
    );
    $instance = parent::create($container, $configuration, $plugin_id, $plugin_definition);
    $instance->imageFactory = $container->get('image.factory');
    $instance->messenger = $container->get('messenger');
    return $instance;
  }

  /**
+1 −4
Original line number Diff line number Diff line
@@ -82,10 +82,7 @@ class EntityEmbedDisplayManagerTest extends BrowserTestBase {
    $this->imageButton->save();

    // Create a sample image to embed.
    $entity_embed_path = $this->container->get('module_handler')
      ->getModule('entity_embed')
      ->getPath();
    \Drupal::service('file_system')->copy($entity_embed_path . '/js/plugins/drupalentity/entity.png', 'public://example1.png');
    \Drupal::service('file_system')->copy('core/tests/fixtures/files/image-1.png', 'public://example1.png');

    // Resize the test image so that it will be scaled down during token
    // replacement.