Versions Compared

Key

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

...

Code Block
languagephp
themeConfluence
titlePezzo della risposta json di Bandi
linenumberstrue
collapsetrue
	
 $jayParsedAry = [
   "Bandi" => [
         [
            "titolo" => "Avviso pubblico per la formazione di un elenco di soggetti idonei per il conferimento di incarichi professionali per servizi di ingegneria e architettura di importo inferiore a 100.000,00 EURO", 
            "dipartimento_bando" => "", 
            "descrizione" => "<p>L’elenco di soggetti idonei <strong>è attivo e risulta costantemente aperto a nuove candidature di soggetti interessati a farne parte</strong>, come riportato nella <a href="https://www.uniss.it/sites/default/files/bando/elprof_avviso_08-07-2019.pdf">nota relativa all’avviso pubblico emanata in data 8 luglio 2019</a>.</p>
", 
            "pubblication_date" => "2019-07-08 00:00:00", 
            "end_publication_date" => "<span class="date-display-single" property="dc:date" datatype="xsd:dateTime" content="2022-12-31T00:2019-08-08 00:00+01:00">Sabato, 31 Dicembre, 2022</span>", 
            "orario" => null, 
            "id termine" => "54", 
            "name" => "Altri bandi", 
            "vocabulary" => "categoria_bando", 
            "bando_espletato" => "0", 
            "pubblicato" => "Sì", 
            "percorso" => "/bandi/avviso-pubblico-la-formazione-di-un-elenco-di-soggetti-idonei-il-conferimento-di-incarichi-professionali-servizi-di-ingegneria-e-architettura-di", 
            "file_id" => "27152", 
            "filename" => "elprof_avviso_08-07-2019.pdf", 
            "filepath" => "http://default.uniss.d7cl2.pp.private.cineca.it/sites/default/files/bando/elprof_avviso_08-07-2019.pdf", 
            "filelabel" => "Avviso pubblico 2019", 
            "nid" => "3372", 
            "paragrph" => "<div class="item-list"><ul><li class="first"><div  about="" class="ds-1col entity entity-paragraphs-item paragraphs-item-documento  view-mode-full clearfix"><br />
<br />
  <br />
  <div id="paragraphs-item-documento-full-group-innercontent" class="inner-content"><ul><li class="odd first last"><span class="icon_file"><a href="http://default.uniss.d7cl2.pp.private.cineca.it/sites/default/files/bando/002-avviso_pubblico.pdf" type="application/pdf; length=1513700" class="application-pdf" onclick="window.open(this.href, 'a');return false" title="002-avviso_pubblico.pdf (1478.22kb) - Il documento si apre in una nuova finestra">Avviso pubblico 2016</a></span></li></ul></div></div></li><li><div  about="" class="ds-1col entity entity-paragraphs-item paragraphs-item-documento  view-mode-full clearfix"><br />
<br />
  <br />
  <h3 class="titolo-par uppercase bottom20">Allegati</h3><div id="paragraphs-item-documento-full-group-innercontent--2" class="inner-content"><ul><li class="odd first"><span class="icon_file"><a href="http://default.uniss.d7cl2.pp.private.cineca.it/sites/default/files/bando/allegato_a_3.doc" type="application/msword; length=47104" class="x-office-document" onclick="window.open(this.href, 'a');return false" title="allegato_a.doc (46kb) - Il documento si apre in una nuova finestra">Allegato A</a></span></li><li class="even last"><span class="icon_file"><a href="http://default.uniss.d7cl2.pp.private.cineca.it/sites/default/files/bando/allegato_b.xlsx" type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; length=11586" class="x-office-spreadsheet" onclick="window.open(this.href, 'a');return false" title="allegato_b.xlsx (11.31kb) - Il documento si apre in una nuova finestra">Allegato B</a></span></li></ul></div></div></li><li class="last"><div  about="" class="ds-1col entity entity-paragraphs-item paragraphs-item-correlazioni  view-mode-full  clearfix"><br />
<br />
  <br />
  <h3 class="titolo-par uppercase bottom20">Elenco di soggetti idonei per il conferimento di incarichi professionali per servizi di ingegneria e architettura di importo inferiore a 100.000,00 euro</h3><div id="paragraphs-item-correlazioni-full-group-innercontent" class="group-innercontent field-group-div"><ul class="link-list"><li class="odd first last"><a href="https://www.uniss.it/ateneo/amministrazione-trasparente/opere-pubbliche-2/atti-di-programmazione-delle-opere-pubbliche#elencoprofessionisti">Elenco di soggetti idonei</a></li></ul></div></div></li></ul></div>" 
         ] 
      ] 
]; 
 

...

Code Block
languageyml
themeConfluence
titlebandi
linenumberstrue
collapsetrue
#
# Il file di migrazione principale, migrazione di Bandi (CT) da Json.
# Questa migrazione ha una serie di sottoprocessi che vanno eseguiti prima
# che venga eseguita questa. 
# - bandi_file
# - bandi_file_media
# - 
#
#
#
id: bandi
label: "Bandi d7, json source"
migration_group: bandi_group
source:
  constants:
    DRUPAL_FILE_DIRECTORY: 'public://bandi/'
  plugin: url
  data_fetcher_plugin: file
  data_parser_plugin: json
  urls:
    - sites/default/files/migrations/bandi.json
  item_selector: '/Bandi'
  fields:
    - 
      name: src_nid
      label: 'Node Id'
      selector: nid
    -
      name: src_title
      label: 'Titolo'
      selector: titolo
    -
      name: src_body
      label: 'Body'
      selector: descrizione
    -
      name: src_alias
      label: 'Path alias'
      selector: percorso
    - 
      name: src_status
      label: 'Pubblicato'
      selector: pubblicato
    -
      name: src_pub_date
      label: 'Data di pubblicazione'
      selector: pubblication_date
    - 
      name: src_end_pub_date
      label: 'Data di scadenza'
      selector: end_publication_date
    - 
      name: src_orario
      label: 'Orario'
      selector: orario
    -
      name: src_espletato
      label: 'Bando espletato'
      selector: bando_espletato
    -
      name: src_paragraph_txt
      label: 'Paragrafi in testo'
      selector: paragrph
    - 
      name: src_dipartimento_bando
      label: 'dipartimento bando'
      selector: dipartimento_bando
    -
      name : src_tax_categoria_bando_term
      selector: tax_categoria_bando_term
    -
      name : src_tax_doc_e_ricerc_term
      selector: tax_doc_e_ricerc_term
    -
      name: src_tax_bandi_pta_term
      selector: tax_bandi_pta_term
    -
      name: src_tax_bandi_di_gara_term
      selector: tax_bandi_di_gara_term
    -
      name: src_tax_bandi_per_studenti_term
      selector: tax_bandi_per_studenti_term
    -
      name: src_tax_altri_bandi_term
      selector: tax_altri_bandi_term
    - 
      name: src_fid
      label: 'File ID'
      selector: file_id
    - 
      name: src_filename
      label: 'File name'
      selector: filename
    - 
      name: src_fileparh
      label: 'File path'
      selector: filepath
    - 
      name: src_filelabel
      label: 'File label'
      selector: filelabel
    -
      name: src_paragraphs_text
      selector: paragrph
  ids:
    src_nid:
      type: string
destination:
  plugin: 'entity:node'
  default_bundle: bando
process:
  title: src_title
  # in questo caso la migrazione porta la stringa html con links assoluti, quindi utilizzo i plugin dom, dom_str_replace per renderli relativi
  body/value:
    -
      plugin: dom
      method: import
      source: src_body
    - 
      plugin: dom_str_replace
      mode: attribute
      xpath: '//a'
      attribute_options:
        name: href
      search: 'http://default.uniss.d7cl2.pp.private.cineca.it/'
      replace: '/'
    - 
      plugin: dom_str_replace
      mode: attribute
      xpath: '//a'
      attribute_options:
        name: href
      search: 'https://www.uniss.it/'
      replace: '/'
    -
      plugin: dom
      method: export
  body/format:
    plugin: default_value
    default_value: full_html
  # nonnostante la data sorgente e solo data, ma services quando espone il Json lo espone sempre con tempo 00:00:00, occhio all'attributo from_format
  field_publish_date/value:
    plugin: format_date
    source: src_pub_date
    from_format: 'Y-m-d H:i:s'
    to_format: 'Y-m-d'
  field_deadline_date/value:
    plugin: format_date
    source: src_end_pub_date
    from_format: 'Y-m-d H:i:s'
    to_format: 'Y-m-d'
  field_orario: src_orario
  # campo list(integer), cardinalità multipla. Il dato lo ricevo come stringa (A,B,C). Qui prima uso i plugin explode,single_value,multiple_values per importare correttamente.
  field_dipartimento_bando:
    - 
      plugin: explode
      source: src_dipartimento_bando
      delimiter: ','
    - plugin: single_value
    - plugin: multiple_values
  # Per le tassonomie, fa leva alla migrazione di queste grazie al modulo cineca_migrate_taxonomies, così le importa correttamente
  field_tr_altri_bandi:
    plugin: migration_lookup
    migration: tax_altri_bandi_term
    source: src_tax_altri_bandi_term
  field_bandi_di_gara:
    plugin: migration_lookup
    migration: tax_bandi_di_gara_term
    source: src_tax_bandi_di_gara_term
  field_tr_bandi_per_docenti:
    plugin: migration_lookup
    migration: tax_doc_e_ricerc_term
    source: src_tax_doc_e_ricerc_term
  field_tr_bandi_personale:
    plugin: migration_lookup
    migration: tax_bandi_pta_term
    source: src_tax_bandi_pta_term
  field_tr_bandi_per_studenti:
    plugin: migration_lookup
    migration: tax_bandi_per_studenti_term
    source: src_tax_bandi_per_studenti_term
  field_categoria_bando:
    plugin: migration_lookup
    migration: tax_categoria_bando_term
    source: src_tax_categoria_bando_term
  field_bando_archiviato: src_espletato
  _document:
    - 
      plugin: concat
      source:
        - constants/DRUPAL_FILE_DIRECTORY
        - src_filename
    - 
      plugin: urlencode
  field_file_bando/target_id:
    -
      plugin: skip_on_404
      method: row
      source: '@_document'
    -
      plugin: migration_lookup
      migration: bandi_file_media
      source: src_fid
      no_stub: true
  field_paragrafi_importati/value:
    -
      plugin: dom
      method: import
      source: src_paragraphs_text
    - 
      plugin: dom_str_replace
      mode: attribute
      xpath: '//a'
      attribute_options:
        name: href
      search: 'http://default.uniss.d7cl2.pp.private.cineca.it/'
      replace: '/'
    - 
      plugin: dom_str_replace
      mode: attribute
      xpath: '//a'
      attribute_options:
        name: href
      search: 'https://www.uniss.it/'
      replace: '/'
    -
      plugin: dom
      method: export
  field_paragrafi_importati/format:
    plugin: default_value
    default_value: full_html
  status:
    plugin: str_replace
    search: 'Sì'
    replace: '1'
    source: src_status
  path/alias: src_alias
  path/pathauto:
    plugin: default_value
    default_value: false
migration_dependencies:
  required:
    - bandi_file_media
dependencies:
  enforced:
    module:
      - cineca_migrate_announcements



View file
namecineca_migrate_announcements.zip
height250


Tips & Tricks

  • Inanzitutto, non c'è una scapatoia, non è possibile evitare di creare la migrazione dei file prima di quella dei media, prima di quella di collegamento (riferimento) al nodo. Ogni cosa va creata a posta; sempre.
  • Finchè possiamo modelare  le fonti  a nostro piacimento (tipo un nostro sito da migrare, non fonte IRIS etc) meglio preparare il dato il più vicino possibile a quello che ci serve, così ci fa risparmiare lavoro al modulo di migrazione lato d9.
  • Quando cominciamo a lavorare su un modulo di migrazione, bisogna fare passo per passo e testare, quindi per esempio non creare la migrazione di tutti i campi dei bandi, ma uno alla volta, così risolviamo passo passo problematiche con i plugin che vogliamo usare.