Bladeren bron

mustikas11: migreeri D7 filedepot failid D11-sse

- settings.php: file_private_path = sites/default/files/private
- kopeeri D7 private filedepot failid (590M, 2146 faili) D11 private kausta
- migreeri file_managed kirjed (1815 private://filedepot/...)
- seo filedepot_files -> filedepot_folder node filedepot_folder_file väli
  (1780 kirjet) + file_usage (allalaadimisõiguse jaoks)
- filedepot_folder_file uri_scheme temporary -> private
- view display: kuva failid (file_default) + kirjeldus

Tulemus: /docs + /node/<nid> kuvavad faile, allalaadimine töötab
ardo 1 dag geleden
bovenliggende
commit
9044186623
2 gewijzigde bestanden met toevoegingen van 156 en 0 verwijderingen
  1. 28 0
      third/drupal/mustikas11/fix_filedepot_view.php
  2. 128 0
      third/drupal/mustikas11/migrate_filedepot.php

+ 28 - 0
third/drupal/mustikas11/fix_filedepot_view.php

@@ -0,0 +1,28 @@
+<?php
+// Kuva filedepot_folder failid ja kirjeldus node view-s.
+use Drupal\Core\Entity\Entity\EntityViewDisplay;
+
+$display = EntityViewDisplay::load('node.filedepot_folder.default');
+
+// filedepot_folder_file: failide tabel.
+$display->setComponent('filedepot_folder_file', [
+  'type' => 'file_default',
+  'label' => 'hidden',
+  'weight' => 0,
+  'settings' => ['use_description_as_link_text' => false],
+  'third_party_settings' => [],
+]);
+echo "filedepot_folder_file kuvatud\n";
+
+// filedepot_folder_desc: kirjeldus.
+$display->setComponent('filedepot_folder_desc', [
+  'type' => 'string',
+  'label' => 'hidden',
+  'weight' => -5,
+  'settings' => [],
+  'third_party_settings' => [],
+]);
+echo "filedepot_folder_desc kuvatud\n";
+
+$display->save();
+echo "done\n";

+ 128 - 0
third/drupal/mustikas11/migrate_filedepot.php

@@ -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";