...
Code Block | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
$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 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
# # 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 | ||||
---|---|---|---|---|
|
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.