Loading src/Plugin/UiPatterns/Source/ExtraFieldSource.php 0 → 100644 +81 −0 Original line number Diff line number Diff line <?php namespace Drupal\ui_patterns\Plugin\UiPatterns\Source; use Drupal\Component\Plugin\Exception\PluginException; use Drupal\Core\Entity\EntityFieldManager; use Drupal\Core\Plugin\ContainerFactoryPluginInterface; use Drupal\ui_patterns\Plugin\PatternSourceBase; use Symfony\Component\DependencyInjection\ContainerInterface; /** * Defines Fields API pattern source plugin. * * @UiPatternsSource( * id = "extra_fields", * label = @Translation("Extra fields"), * provider = "core", * tags = { * "entity_display" * } * ) */ class ExtraFieldSource extends PatternSourceBase implements ContainerFactoryPluginInterface { /** * Entity field manager service. * * @var \Drupal\Core\Entity\EntityFieldManager */ protected $entityFieldManager; /** * {@inheritdoc} */ public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityFieldManager $entity_field_manager) { parent::__construct($configuration, $plugin_id, $plugin_definition); $this->entityFieldManager = $entity_field_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_field.manager') ); } /** * {@inheritdoc} */ public function getSourceFields() { $sources = []; $entity_type_id = $this->getContextProperty('entity_type'); $bundle = $this->getContextProperty('entity_bundle'); $extra_fields = $this->entityFieldManager->getExtraFields($entity_type_id, $bundle); if (!isset($extra_fields['display'])) { return $sources; } try { $limit = $this->getContextProperty('limit'); } catch (PluginException $e) { $limit = array_keys($extra_fields['display']); } foreach ($extra_fields['display'] as $extra_field_name => $field) { if (in_array($extra_field_name, $limit)) { $sources[] = $this->getSourceField($extra_field_name, $field['label']); } } return $sources; } } tests/src/Kernel/UiPatternsExtraFieldSourceTest.php 0 → 100644 +52 −0 Original line number Diff line number Diff line <?php namespace Drupal\Tests\ui_patterns\Kernel; use Drupal\KernelTests\KernelTestBase; use Drupal\ui_patterns\UiPatterns; /** * @coversDefaultClass \Drupal\ui_patterns\Plugin\UiPatterns\Source\ExtraFieldSource * * @group ui_patterns */ class UiPatternsExtraFieldSourceTest extends KernelTestBase { /** * {@inheritdoc} */ protected static $modules = [ 'entity_test', 'ui_patterns', 'user', ]; /** * {@inheritdoc} */ protected function setUp() : void { parent::setUp(); $this->installEntitySchema('entity_test'); } /** * Test getSourceFields. * * @covers ::getSourceFields */ public function testGetSourceFields() { /** @var \Drupal\ui_patterns\UiPatternsSourceManager $manager */ $manager = UiPatterns::getSourceManager(); /** @var \Drupal\ui_patterns\Plugin\UiPatterns\Source\ExtraFieldSource $source */ $fields = $manager->getFieldsByTag('entity_display', [ 'entity_type' => 'entity_test', 'entity_bundle' => 'bundle_with_extra_fields', ]); $this->assertArrayHasKey('extra_fields:display_extra_field', $fields); $this->assertArrayHasKey('extra_fields:display_extra_field_hidden', $fields); } } Loading
src/Plugin/UiPatterns/Source/ExtraFieldSource.php 0 → 100644 +81 −0 Original line number Diff line number Diff line <?php namespace Drupal\ui_patterns\Plugin\UiPatterns\Source; use Drupal\Component\Plugin\Exception\PluginException; use Drupal\Core\Entity\EntityFieldManager; use Drupal\Core\Plugin\ContainerFactoryPluginInterface; use Drupal\ui_patterns\Plugin\PatternSourceBase; use Symfony\Component\DependencyInjection\ContainerInterface; /** * Defines Fields API pattern source plugin. * * @UiPatternsSource( * id = "extra_fields", * label = @Translation("Extra fields"), * provider = "core", * tags = { * "entity_display" * } * ) */ class ExtraFieldSource extends PatternSourceBase implements ContainerFactoryPluginInterface { /** * Entity field manager service. * * @var \Drupal\Core\Entity\EntityFieldManager */ protected $entityFieldManager; /** * {@inheritdoc} */ public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityFieldManager $entity_field_manager) { parent::__construct($configuration, $plugin_id, $plugin_definition); $this->entityFieldManager = $entity_field_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_field.manager') ); } /** * {@inheritdoc} */ public function getSourceFields() { $sources = []; $entity_type_id = $this->getContextProperty('entity_type'); $bundle = $this->getContextProperty('entity_bundle'); $extra_fields = $this->entityFieldManager->getExtraFields($entity_type_id, $bundle); if (!isset($extra_fields['display'])) { return $sources; } try { $limit = $this->getContextProperty('limit'); } catch (PluginException $e) { $limit = array_keys($extra_fields['display']); } foreach ($extra_fields['display'] as $extra_field_name => $field) { if (in_array($extra_field_name, $limit)) { $sources[] = $this->getSourceField($extra_field_name, $field['label']); } } return $sources; } }
tests/src/Kernel/UiPatternsExtraFieldSourceTest.php 0 → 100644 +52 −0 Original line number Diff line number Diff line <?php namespace Drupal\Tests\ui_patterns\Kernel; use Drupal\KernelTests\KernelTestBase; use Drupal\ui_patterns\UiPatterns; /** * @coversDefaultClass \Drupal\ui_patterns\Plugin\UiPatterns\Source\ExtraFieldSource * * @group ui_patterns */ class UiPatternsExtraFieldSourceTest extends KernelTestBase { /** * {@inheritdoc} */ protected static $modules = [ 'entity_test', 'ui_patterns', 'user', ]; /** * {@inheritdoc} */ protected function setUp() : void { parent::setUp(); $this->installEntitySchema('entity_test'); } /** * Test getSourceFields. * * @covers ::getSourceFields */ public function testGetSourceFields() { /** @var \Drupal\ui_patterns\UiPatternsSourceManager $manager */ $manager = UiPatterns::getSourceManager(); /** @var \Drupal\ui_patterns\Plugin\UiPatterns\Source\ExtraFieldSource $source */ $fields = $manager->getFieldsByTag('entity_display', [ 'entity_type' => 'entity_test', 'entity_bundle' => 'bundle_with_extra_fields', ]); $this->assertArrayHasKey('extra_fields:display_extra_field', $fields); $this->assertArrayHasKey('extra_fields:display_extra_field_hidden', $fields); } }