| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- <?php
- // Migreeri D7 filedepot failid D11-sse.
- // 1. file_managed kirjed private://filedepot/...
- // 2. seo filedepot_files -> 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";
|