Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

scopo di migrate_skip_on_404 = non controlla se la riga della sorgente contiene l'url verso il file o meno, ma controlla se effettivamente il file esista per essere importato o meno.

Per lo scopo, si utilizzerà \Drupal::httpClient()->request che si preocupa a conumare i json esposti dal sito d7 di uniss e scaricare i file json localmente nel sito di d9.

Descrizione di cineca_migrate_announcements

Il modulo in installazione crea un file json con i campi necessari per la migrazione. Serve perché le migrazioni danno errore se non trovano il file o anche le singole voci da importare.

Di seguito, tramite  lUna volta ottenuti i json, che vengono chiamati tramite l'evento MigrateEvents::PRE_IMPORT , viene utilizzato per l'importazione dei importato il file json , contenente i dati necessari per le migrazioni.la migrazione.

Analisi dei singoli file di migrazione

Code Block
languageyml
themeConfluence
titlebandi_file
linenumberstrue
collapsetrue
# id deve essere identico all'ultima parte del nome del file (migrate_plus.migration.bandi_file.yml)
# Per la migrazione dei file sono necessari 3 campi 
# - filename che serve per poterlo manipolare insieme ad un path di nostra scelta (l'ho messo nelle costanti) per salvarlo nel nostro file system
# - filepath (url preferibilmente absolute) della posizione del file fisico che vogliamo importare
# - file_id (occorre averlo sempre, perché migration lo mappa insieme al nuovo id che li darà una volta importato)
# utile per poterlo usare in altre migrazioni con il plugin migration_lookup, per i rollback, etc.
id: bandi_file
label: "Bando (File) from d7, json source"
migration_group: bandi_group
# La migrazione viene divisa in 3 parti (source, process, destination)
# ognuna di queste ha delle particolarità
source:
  # possono essere usate delle costanti, qui il modo per poterle dichiarare
  constants:
    DRUPAL_FILE_DIRECTORY: 'public://bandi/'
  plugin: url
  data_fetcher_plugin: file
  data_parser_plugin: json
  urls:
    - sites/default/files/migrations/bandi.json
  # serve per distinguere i livelli
  item_selector: '/Bandi'
  # in fields viene definita la mappatura del campo trovato in sorgente, con come lo si voglia usare qui
  # selector la chiave trovata nel file json
  # name il nome con il quale intendiamo usarlo qui.
  fields:
    - 
      name: src_file_id
      label: 'Photo ID'
      selector: file_id
    - 
      name: src_filename
      label: 'filename'
      selector: filename
    - 
      name: src_filepath
      label: 'File path'
      selector: filepath
  ids:
	# obbligatorio, questo il modulo migration lo utilizza per la tabella che crea (migration_map_bandi_file) per popolare la colonna sourceId1
    src_file_id:
      type: string
process:
  # pseudo field, qui creiamo il filepath completo (vogliamo che finisca nel nostro file system es. public://bandi/filename.pdf)
  psf_destination_full_path:
    - 
      plugin: concat
      source:
        - constants/DRUPAL_FILE_DIRECTORY
        - src_filename
    - 
      plugin: urlencode
  # la vera copia
  uri:
	# questo plugin fa si che non venga interotta la migrazione se filepath del file sorgente è vuota
    - 
      plugin: skip_on_empty
      source: src_filepath
      method: row
      message: 'Cannot import empty document.'
	# questo plugin controlla se il filepath dato corrisponde veramente ad un file, altrimenti non blocca la migrazione, salta solo questo file
    - 
      plugin: skip_on_404
      source: src_filepath
      method: row
	# infine la vera copia dal url della sorgente al nostro file system grazie al pseudo campo (psf_destination_full_path [nome arbitrario]) 
    - 
      plugin: file_copy
      source:
        - src_filepath
        - '@psf_destination_full_path'
      file_exists: 'replace'
# la destinazione è la entity:file, viene salvato nel file system, registrato in DB nel table file_managed, mostrato in backend in content > files
destination:
  plugin: 'entity:file'
migration_dependencies: {}
dependencies:
  enforced:
    module:
      - cineca_migrate_announcements