|
|
@@ -0,0 +1,128 @@
|
|
|
+<?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";
|