migrate_filedepot_hierarchy.php 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <?php
  2. // Migreeri D7 filedepot kaustade hierarhia D11-sse.
  3. //
  4. // D7: filedepot_categories (cid, pid, nid, name) — puu struktuur.
  5. // pid osutab ülemkausta cid-le; nid on filedepot_folder node.
  6. // D11: filedepot_folder node'il oli vaid desc + file väljad, hierarhia kadus.
  7. //
  8. // See skript:
  9. // 1. Loob field_folder_parent entity_reference välja (node -> filedepot_folder).
  10. // 2. Täidab selle D7 filedepot_categories.pid järgi (child nid -> parent nid).
  11. //
  12. // NB! Eeldab, et D7 nid == D11 nid (migratsioon säilitas nid-d).
  13. use Drupal\field\Entity\FieldStorageConfig;
  14. use Drupal\field\Entity\FieldConfig;
  15. use Drupal\Core\Database\Database;
  16. use Drupal\node\Entity\Node;
  17. $src = Database::getConnection('default', 'migrate');
  18. // 1. Väli.
  19. $storage = FieldStorageConfig::loadByName('node', 'field_folder_parent');
  20. if (!$storage) {
  21. $storage = FieldStorageConfig::create([
  22. 'field_name' => 'field_folder_parent',
  23. 'entity_type' => 'node',
  24. 'type' => 'entity_reference',
  25. 'settings' => ['target_type' => 'node'],
  26. 'module' => 'core',
  27. 'cardinality' => 1,
  28. 'translatable' => FALSE,
  29. ]);
  30. $storage->save();
  31. echo "STORAGE_CREATED\n";
  32. } else {
  33. echo "STORAGE_EXISTS\n";
  34. }
  35. $field = FieldConfig::loadByName('node', 'filedepot_folder', 'field_folder_parent');
  36. if (!$field) {
  37. $field = FieldConfig::create([
  38. 'field_storage' => $storage,
  39. 'bundle' => 'filedepot_folder',
  40. 'label' => 'Ülemkaust',
  41. 'required' => FALSE,
  42. 'settings' => [
  43. 'handler' => 'default:node',
  44. 'handler_settings' => [
  45. 'target_bundles' => ['filedepot_folder' => 'filedepot_folder'],
  46. 'sort' => ['field' => 'title', 'direction' => 'ASC'],
  47. 'auto_create' => FALSE,
  48. ],
  49. ],
  50. ]);
  51. $field->save();
  52. echo "FIELD_CREATED\n";
  53. } else {
  54. echo "FIELD_EXISTS\n";
  55. }
  56. // 2. Ehita pid -> nid kaart ja määra vanemad.
  57. $cid_nid = [];
  58. foreach ($src->query("SELECT cid, nid FROM {filedepot_categories}") as $r) {
  59. $cid_nid[(int) $r->cid] = (int) $r->nid;
  60. }
  61. $map = []; // child nid -> parent nid
  62. foreach ($src->query("SELECT cid, pid, nid FROM {filedepot_categories} WHERE pid <> 0") as $r) {
  63. $parent_nid = $cid_nid[(int) $r->pid] ?? NULL;
  64. if ($parent_nid) {
  65. $map[(int) $r->nid] = $parent_nid;
  66. }
  67. }
  68. $ok = 0;
  69. $fail = 0;
  70. foreach ($map as $child => $parent) {
  71. $node = Node::load($child);
  72. if (!$node) {
  73. echo "MISSING NODE $child\n";
  74. $fail++;
  75. continue;
  76. }
  77. $node->set('field_folder_parent', ['target_id' => $parent]);
  78. $node->save();
  79. $ok++;
  80. }
  81. echo "POPULATED: $ok, FAILED: $fail\n";
  82. echo "done\n";