FieldGroup.php 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. <?php
  2. namespace Drupal\field_group_migrate\Plugin\migrate\source\d6;
  3. use Drupal\migrate\Row;
  4. use Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase;
  5. /**
  6. * Drupal 6 field_group source.
  7. *
  8. * @MigrateSource(
  9. * id = "d6_field_group"
  10. * )
  11. */
  12. class FieldGroup extends DrupalSqlBase {
  13. /**
  14. * {@inheritdoc}
  15. */
  16. public function query() {
  17. $query = $this->select('content_group', 'g')
  18. ->fields('g', [
  19. 'group_type',
  20. 'type_name',
  21. 'group_name',
  22. 'label',
  23. 'settings',
  24. 'weight',
  25. ]);
  26. return $query;
  27. }
  28. /**
  29. * {@inheritdoc}
  30. */
  31. public function prepareRow(Row $row) {
  32. $query = $this->select('content_group_fields', 'f');
  33. $query->fields('f', ['field_name'])
  34. ->condition('type_name', $row->getSourceProperty('type_name'))
  35. ->condition('group_name', $row->getSourceProperty('group_name'));
  36. $fields = $query->execute()->fetchCol();
  37. $row->setSourceProperty('children', $fields);
  38. $row->setSourceProperty('settings', unserialize($row->getSourceProperty('settings')));
  39. switch ($row->getSourceProperty('constants/mode')) {
  40. case 'entity_form_display':
  41. $this->transformEntityFormDisplaySettings($row);
  42. break;
  43. case 'entity_view_display':
  44. $this->transformEntityViewDisplaySettings($row);
  45. break;
  46. }
  47. return parent::prepareRow($row);
  48. }
  49. protected function transformEntityFormDisplaySettings(Row $row) {
  50. $row->setSourceProperty('extracted_settings', $row->getSourceProperty('settings/form'));
  51. $source_settings = $row->getSourceProperty('extracted_settings');
  52. $settings = [
  53. 'format_type' => 'details',
  54. 'format_settings' => [],
  55. ];
  56. switch ($source_settings['style']) {
  57. case 'no_style':
  58. $settings['format_type'] = 'no_style';
  59. break;
  60. case 'simple':
  61. $settings['format_type'] = 'html_element';
  62. $settings['format_settings']['element'] = 'div';
  63. $settings['format_settings']['label_element'] = 'h2';
  64. break;
  65. case 'fieldset':
  66. $settings['format_type'] = 'fieldset';
  67. break;
  68. case 'fieldset_collapsible':
  69. $settings['format_type'] = 'details';
  70. $settings['format_settings']['open'] = TRUE;
  71. break;
  72. case 'fieldset_collapsed':
  73. $settings['format_type'] = 'details';
  74. $settings['format_settings']['open'] = FALSE;
  75. break;
  76. case 'hidden':
  77. $settings['format_type'] = 'hidden';
  78. break;
  79. }
  80. $row->setSourceProperty('converted_settings', $settings);
  81. }
  82. protected function transformEntityViewDisplaySettings(Row $row) {
  83. $row->setSourceProperty('extracted_settings', $row->getSourceProperty('settings/display'));
  84. $view_modes = array_diff(array_keys($row->getSourceProperty('extracted_settings')), ['label', 'description', 'weight']);
  85. $view_modes = array_filter($view_modes, function ($value) {
  86. return !is_numeric($value);
  87. });
  88. $row->setSourceProperty('view_mode_keys', $view_modes);
  89. $view_modes = [];
  90. foreach ($row->getSourceProperty('view_mode_keys') as $view_mode) {
  91. $source_settings = $row->getSourceProperty('extracted_settings/' . $view_mode);
  92. $row->setSourceProperty('view_modes', []);
  93. $settings = [
  94. 'format_type' => 'details',
  95. 'format_settings' => [],
  96. ];
  97. switch ($source_settings['format']) {
  98. case 'no_style':
  99. $settings['format_type'] = 'no_style';
  100. break;
  101. case 'simple':
  102. $settings['format_type'] = 'html_element';
  103. $settings['format_settings']['element'] = 'div';
  104. $settings['format_settings']['label_element'] = 'h2';
  105. break;
  106. case 'fieldset':
  107. $settings['format_type'] = 'fieldset';
  108. break;
  109. case 'fieldset_collapsible':
  110. $settings['format_type'] = 'details';
  111. $settings['format_settings']['open'] = TRUE;
  112. break;
  113. case 'fieldset_collapsed':
  114. $settings['format_type'] = 'details';
  115. $settings['format_settings']['open'] = FALSE;
  116. break;
  117. case 'hidden':
  118. $settings['format_type'] = 'hidden';
  119. break;
  120. }
  121. /**
  122. * @todo: ?
  123. */
  124. if ($view_mode == 'full') {
  125. $view_mode = 'default';
  126. }
  127. // $row->setSourceProperty('view_modes/' . $view_mode, $settings);
  128. $view_modes[$view_mode] = $settings;
  129. }
  130. $row->setSourceProperty('view_modes', $view_modes);
  131. }
  132. /**
  133. * {@inheritdoc}
  134. */
  135. public function getIds() {
  136. $ids['type_name']['type'] = 'string';
  137. $ids['type_name']['alias'] = 'g';
  138. $ids['group_name']['type'] = 'string';
  139. $ids['group_name']['alias'] = 'g';
  140. return $ids;
  141. }
  142. /**
  143. * {@inheritdoc}
  144. */
  145. public function fields() {
  146. $fields = [
  147. 'group_type',
  148. 'type_name',
  149. 'group_name',
  150. 'label',
  151. 'settings',
  152. 'weight'
  153. ];
  154. return array_combine($fields, $fields);
  155. }
  156. }