SimpleSourceTrait.php 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. <?php
  2. namespace Drupal\reinstall\Plugin\migrate\source;
  3. trait SimpleSourceTrait {
  4. /**
  5. * @var \Drupal\Core\Entity\EntityTypeBundleInfoInterface
  6. */
  7. protected $sstEntityTypeBundleInfo;
  8. /**
  9. * @var \Drupal\Core\Entity\EntityFieldManagerInterface
  10. */
  11. protected $sstEntityFieldManager;
  12. /**
  13. * @var string
  14. */
  15. protected $sstEntityType;
  16. /**
  17. * @var \Drupal\Core\Entity\EntityTypeManagerInterface
  18. */
  19. protected $sstEntityTypeManager;
  20. /**
  21. * {@inheritdoc}
  22. */
  23. public function fields() {
  24. $bundles = $this->getEntityTypeBundleInfo()
  25. ->getBundleInfo($typeName = $this->getEntityType());
  26. $rows = [];
  27. foreach ($bundles as $bundleName => $bundle) {
  28. $fieldDefinitions = $this->getEntityFieldManager()
  29. ->getFieldDefinitions($typeName, $bundleName);
  30. foreach ($fieldDefinitions as $fieldName => $fieldDefinition) {
  31. $rows[$fieldName][$bundleName] = $fieldDefinition->getLabel();
  32. }
  33. }
  34. $fields = [];
  35. $singleBundle = count($bundles) === 1;
  36. foreach ($rows as $fieldName => $labels) {
  37. if ($singleBundle) {
  38. $fields[$fieldName] = reset($labels);
  39. continue;
  40. }
  41. if (count(array_unique($labels)) === 1) {
  42. $fields[$fieldName] = reset($labels);
  43. continue;
  44. }
  45. $ret = [];
  46. ksort($labels);
  47. foreach ($labels as $ct => $label) {
  48. $ret[] = $this->t('@ct: @label', ['@ct' => $ct, '@label' => $label]);
  49. }
  50. $fields[$fieldName] = implode(', ', $ret);
  51. }
  52. ksort($fields);
  53. return $fields;
  54. }
  55. protected function getEntityTypeBundleInfo() {
  56. if (!isset($this->sstEntityTypeBundleInfo)) {
  57. $this->sstEntityTypeBundleInfo = \Drupal::service('entity_type.bundle.info');
  58. }
  59. return $this->sstEntityTypeBundleInfo;
  60. }
  61. protected function getEntityFieldManager() {
  62. if (!isset($this->sstEntityFieldManager)) {
  63. $this->sstEntityFieldManager = \Drupal::service('entity_field.manager');
  64. }
  65. return $this->sstEntityFieldManager;
  66. }
  67. protected function getEntityType() {
  68. assert(isset($this->sstEntityType));
  69. return $this->sstEntityType;
  70. }
  71. protected function getEntityTypeManager() {
  72. if (!isset($this->sstEntityTypeManager)) {
  73. $this->sstEntityTypeManager = \Drupal::service('entity_type.manager');
  74. }
  75. return $this->sstEntityTypeManager;
  76. }
  77. /**
  78. * {@inheritdoc}
  79. */
  80. public function getIds() {
  81. $typeName = $this->getEntityType();
  82. $typeDefinition = $this->getEntityTypeManager()->getDefinition($typeName);
  83. $idName = $typeDefinition->getKey('id');
  84. assert(!empty($idName));
  85. $definitions = $this->getEntityFieldManager()->getBaseFieldDefinitions($typeName);
  86. assert(isset($definitions[$idName]));
  87. $idDefinition = $definitions[$idName];
  88. $idType = $idDefinition->getType();
  89. $ids = [
  90. $idName => [
  91. 'type' => $idType,
  92. ],
  93. ];
  94. return $ids;
  95. }
  96. }