| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- <?php
- // Migreeri D7 filedepot kaustade hierarhia D11-sse.
- //
- // D7: filedepot_categories (cid, pid, nid, name) — puu struktuur.
- // pid osutab ülemkausta cid-le; nid on filedepot_folder node.
- // D11: filedepot_folder node'il oli vaid desc + file väljad, hierarhia kadus.
- //
- // See skript:
- // 1. Loob field_folder_parent entity_reference välja (node -> filedepot_folder).
- // 2. Täidab selle D7 filedepot_categories.pid järgi (child nid -> parent nid).
- //
- // NB! Eeldab, et D7 nid == D11 nid (migratsioon säilitas nid-d).
- use Drupal\field\Entity\FieldStorageConfig;
- use Drupal\field\Entity\FieldConfig;
- use Drupal\Core\Database\Database;
- use Drupal\node\Entity\Node;
- $src = Database::getConnection('default', 'migrate');
- // 1. Väli.
- $storage = FieldStorageConfig::loadByName('node', 'field_folder_parent');
- if (!$storage) {
- $storage = FieldStorageConfig::create([
- 'field_name' => 'field_folder_parent',
- 'entity_type' => 'node',
- 'type' => 'entity_reference',
- 'settings' => ['target_type' => 'node'],
- 'module' => 'core',
- 'cardinality' => 1,
- 'translatable' => FALSE,
- ]);
- $storage->save();
- echo "STORAGE_CREATED\n";
- } else {
- echo "STORAGE_EXISTS\n";
- }
- $field = FieldConfig::loadByName('node', 'filedepot_folder', 'field_folder_parent');
- if (!$field) {
- $field = FieldConfig::create([
- 'field_storage' => $storage,
- 'bundle' => 'filedepot_folder',
- 'label' => 'Ülemkaust',
- 'required' => FALSE,
- 'settings' => [
- 'handler' => 'default:node',
- 'handler_settings' => [
- 'target_bundles' => ['filedepot_folder' => 'filedepot_folder'],
- 'sort' => ['field' => 'title', 'direction' => 'ASC'],
- 'auto_create' => FALSE,
- ],
- ],
- ]);
- $field->save();
- echo "FIELD_CREATED\n";
- } else {
- echo "FIELD_EXISTS\n";
- }
- // 2. Ehita pid -> nid kaart ja määra vanemad.
- $cid_nid = [];
- foreach ($src->query("SELECT cid, nid FROM {filedepot_categories}") as $r) {
- $cid_nid[(int) $r->cid] = (int) $r->nid;
- }
- $map = []; // child nid -> parent nid
- foreach ($src->query("SELECT cid, pid, nid FROM {filedepot_categories} WHERE pid <> 0") as $r) {
- $parent_nid = $cid_nid[(int) $r->pid] ?? NULL;
- if ($parent_nid) {
- $map[(int) $r->nid] = $parent_nid;
- }
- }
- $ok = 0;
- $fail = 0;
- foreach ($map as $child => $parent) {
- $node = Node::load($child);
- if (!$node) {
- echo "MISSING NODE $child\n";
- $fail++;
- continue;
- }
- $node->set('field_folder_parent', ['target_id' => $parent]);
- $node->save();
- $ok++;
- }
- echo "POPULATED: $ok, FAILED: $fail\n";
- echo "done\n";
|