filedepot_folder node filedepot_folder_file välja // 3. uri_scheme temporary -> private use Drupal\Core\Database\Database; use Drupal\field\Entity\FieldStorageConfig; $src = Database::getConnection('default', 'migrate'); $dst = Database::getConnection(); // 1. file_managed: migreeri private://filedepot/... kirjed. // D7 fid -> D11 uus fid (migratsioon ei toonud private faile üle). $src_files = $src->query( "SELECT fid, uid, filename, uri, filemime, filesize, status, timestamp FROM {file_managed} WHERE uri LIKE 'private://filedepot/%'" )->fetchAllAssoc('fid'); $fid_map = []; // D7 fid -> D11 fid $dst->query('START TRANSACTION'); try { foreach ($src_files as $fid => $f) { // Kontrolli, kas sama uri juba olemas. $existing = $dst->select('file_managed', 'fm') ->fields('fm', ['fid']) ->condition('uri', $f->uri) ->execute()->fetchField(); if ($existing) { $fid_map[$fid] = $existing; continue; } $new_fid = $dst->insert('file_managed') ->fields([ 'uuid' => \Drupal::service('uuid')->generate(), 'langcode' => 'und', 'uid' => $f->uid ?: 1, 'filename' => $f->filename, 'uri' => $f->uri, 'filemime' => $f->filemime, 'filesize' => $f->filesize, 'status' => $f->status, 'created' => $f->timestamp, 'changed' => $f->timestamp, ]) ->execute(); $fid_map[$fid] = $new_fid; } $dst->query('COMMIT'); echo "file_managed: " . count($fid_map) . " kirjet\n"; } catch (\Exception $e) { $dst->query('ROLLBACK'); echo "ERROR: " . $e->getMessage() . "\n"; return; } // 3. uri_scheme temporary -> private (TEE ENNE inserti, muidu save() taastab tabeli). $storage = FieldStorageConfig::loadByName('node', 'filedepot_folder_file'); if ($storage) { $storage->setSetting('uri_scheme', 'private'); $storage->save(); echo "uri_scheme -> private\n"; } // 2. filedepot_files -> filedepot_folder node (cid -> nid -> node). // cid kaudu: filedepot_categories.cid -> nid = filedepot_folder node. $cat_nid = []; foreach ($src->query("SELECT cid, nid FROM {filedepot_categories}") as $r) { $cat_nid[$r->cid] = $r->nid; } $src_fd = $src->query( "SELECT fid, cid, drupal_fid, fname, title, description, fileorder FROM {filedepot_files} WHERE status = 1" ); $count = 0; $delta_map = []; // nid -> järgmine delta foreach ($src_fd as $f) { $cid = (int) $f->cid; if (!isset($cat_nid[$cid])) continue; $nid = $cat_nid[$cid]; $drupal_fid = (int) $f->drupal_fid; if (!isset($fid_map[$drupal_fid])) continue; $new_fid = $fid_map[$drupal_fid]; // delta: monotoonne loendur node kohta (fileorder võib korduda). if (!isset($delta_map[$nid])) $delta_map[$nid] = 0; $delta = $delta_map[$nid]++; $dst->insert('node__filedepot_folder_file') ->fields([ 'bundle' => 'filedepot_folder', 'deleted' => 0, 'entity_id' => $nid, 'revision_id' => $nid, 'langcode' => 'und', 'delta' => $delta, 'filedepot_folder_file_target_id' => $new_fid, 'filedepot_folder_file_display' => 1, 'filedepot_folder_file_description' => (string) $f->description, ]) ->execute(); // file_usage kirje (FileReferenceResolver vajab seda allalaadimisõiguseks). $exists = $dst->select('file_usage', 'fu') ->fields('fu', ['fid']) ->condition('fid', $new_fid) ->condition('module', 'file') ->condition('type', 'node') ->condition('id', $nid) ->execute()->fetchField(); if (!$exists) { $dst->insert('file_usage') ->fields([ 'fid' => $new_fid, 'module' => 'file', 'type' => 'node', 'id' => (string) $nid, 'count' => 1, ]) ->execute(); } $count++; } echo "filedepot_folder_file: $count kirjet\n"; echo "done\n";