...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
drush en services
drush en rest_server
drush en services_views
drush en views_datasource
drush en services_basic_auth |
Abbiamo creato due viste che espongono dei services,
...
Code Block | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
$view = new view(); $view->name = 'bandi_rest_terms'; $view->description = 'Termini di tassonomia usati nei bandi in rest per migrazione in Drupal 9'; $view->tag = 'default'; $view->base_table = 'taxonomy_term_data'; $view->human_name = 'bandi rest terms'; $view->core = 7; $view->api_version = '3.0'; $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */ /* Display: Master */ $handler = $view->new_display('default', 'Master', 'default'); $handler->display->display_options['use_more_always'] = FALSE; $handler->display->display_options['access']['type'] = 'perm'; $handler->display->display_options['cache']['type'] = 'none'; $handler->display->display_options['query']['type'] = 'views_query'; $handler->display->display_options['exposed_form']['type'] = 'basic'; $handler->display->display_options['exposed_form']['options']['reset_button_label'] = 'Ripristina'; $handler->display->display_options['pager']['type'] = 'full'; $handler->display->display_options['pager']['options']['tags']['first'] = '« prima'; $handler->display->display_options['pager']['options']['tags']['previous'] = '‹ precedente'; $handler->display->display_options['pager']['options']['tags']['next'] = 'seguente ›'; $handler->display->display_options['pager']['options']['tags']['last'] = 'ultima »'; $handler->display->display_options['style_plugin'] = 'default'; $handler->display->display_options['row_plugin'] = 'fields'; /* Campo: Termine della tassonomia: ID Termine */ $handler->display->display_options['fields']['tid']['id'] = 'tid'; $handler->display->display_options['fields']['tid']['table'] = 'taxonomy_term_data'; $handler->display->display_options['fields']['tid']['field'] = 'tid'; $handler->display->display_options['fields']['tid']['label'] = 'term_id'; $handler->display->display_options['fields']['tid']['element_label_colon'] = FALSE; $handler->display->display_options['fields']['tid']['separator'] = ''; /* Campo: Termine della tassonomia: Nome */ $handler->display->display_options['fields']['name']['id'] = 'name'; $handler->display->display_options['fields']['name']['table'] = 'taxonomy_term_data'; $handler->display->display_options['fields']['name']['field'] = 'name'; $handler->display->display_options['fields']['name']['label'] = 'name'; $handler->display->display_options['fields']['name']['alter']['word_boundary'] = FALSE; $handler->display->display_options['fields']['name']['alter']['ellipsis'] = FALSE; $handler->display->display_options['fields']['name']['element_label_colon'] = FALSE; /* Campo: Vocabolario della tassonomia: Nome ad uso interno */ $handler->display->display_options['fields']['machine_name']['id'] = 'machine_name'; $handler->display->display_options['fields']['machine_name']['table'] = 'taxonomy_vocabulary'; $handler->display->display_options['fields']['machine_name']['field'] = 'machine_name'; $handler->display->display_options['fields']['machine_name']['label'] = 'vocabulary'; $handler->display->display_options['fields']['machine_name']['element_label_colon'] = FALSE; /* Filter criterion: Termine della tassonomia: Vocabolario */ $handler->display->display_options['filters']['vid']['id'] = 'vid'; $handler->display->display_options['filters']['vid']['table'] = 'taxonomy_term_data'; $handler->display->display_options['filters']['vid']['field'] = 'vid'; $handler->display->display_options['filters']['vid']['value'] = array( 10 => '10', 11 => '11', 12 => '12', 13 => '13', 14 => '14', 15 => '15', ); /* Display: TaxonomyTerms */ $handler = $view->new_display('services', 'TaxonomyTerms', 'tax_terms'); $handler->display->display_options['defaults']['pager'] = FALSE; $handler->display->display_options['pager']['type'] = 'none'; $handler->display->display_options['pager']['options']['offset'] = '0'; $handler->display->display_options['path'] = 'tax-terms'; $translatables['bandi_rest_terms'] = array( t('Master'), t('more'), t('Apply'), t('Ripristina'), t('Sort by'), t('Asc'), t('Desc'), t('Items per page'), t('- All -'), t('Offset'), t('« prima'), t('‹ precedente'), t('seguente ›'), t('ultima »'), t('term_id'), t('.'), t('name'), t('vocabulary'), t('TaxonomyTerms'), ); |
Indirizzi url :
cineca_migrate_announcements:
- https://www.uniss.it/api/v1/views/bandi_rest_api?display_id=bandi
- https://www.uniss.it/api/v1/views/bandi_rest_api?display_id=count_bandi
- https://www.uniss.it/api/v1/views/bandi_rest_api?display_id=bando_file
- https://www.uniss.it/api/v1/views/bandi_rest_api?display_id=bando_file_counter
- https://www.uniss.it/api/v1/views/bandi_rest_api?display_id=paragraph_files
- https://www.uniss.it/api/v1/views/bandi_rest_api?display_id=paragraph_files_counter
cineca_migrate_taxonomies:
...
Code Block | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
# 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
|
Code Block | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
#
# psf_destination_filename
# plugin: basename di src_filepath (public://filename.pdf diventa filename.pdf)
# psf_destination_full_path
# plugin: concat di psf_destination_filename con DRUPAL_FILE_DIRECTORY (diventa public://bandi/filename.pdf)
# plugin: urlencode (ritorna una stringa dove tutti i caratteri non alfanumerici sono sostituiti con (%) )
# plugin: skip_on_empty salta l'importazione se non trova il file nel file system locale (public://bandi/filename.pdf)
# field_media_document/target_id
# plugin: migration_lookup [cerca in migration_map di bandi_file source_id = src_file_id] ed associa la ID di DB:file_managed
# field_media_document/description:
# plugin: migration_lookup [cerca in migration_map di bandi_file source_id = src_file_id] ed associa la ID di DB:file_managed
#
# Per importare l'ordine sarebbe :
# - bandi_file
# - bandi_file_media
#
# Per rollback l'ordine è inverso:
# - bandi_file_media
# - bandi_file
#
#
id: bandi_file_media
label: "Bando (Media) from d7, json source"
migration_group: bandi_group
source:
constants:
DRUPAL_FILE_DIRECTORY: 'public://bandi/'
USER: '1'
plugin: url
data_fetcher_plugin: file
data_parser_plugin: json
urls:
- sites/default/files/migrations/bandi.json
item_selector: '/Bandi'
fields:
-
name: src_file_id
label: 'Photo ID'
selector: file_id
-
name: src_filename
label: 'filename'
selector: filename
-
name: src_filelabel
label: 'File label'
selector: filelabel
ids:
src_file_id:
type: string
process:
# in questo caso, visto che il file l'ho già importato nel nostro file system con bandi_file migration, controllo che sia presente nel nostro file system
# quindi qui creo un pseudo campo con l'uri completo per il file nel nostro file system
_document:
-
plugin: concat
source:
- constants/DRUPAL_FILE_DIRECTORY
- src_filename
-
plugin: urlencode
# importo il name
name: src_filename
# imposto il target_id del media document in base a quello assegnato al file (fid:file_managed)
field_media_document/target_id:
-
plugin: skip_on_404
method: row
source: '@_document'
-
plugin: migration_lookup
migration: bandi_file
source: src_file_id
no_stub: true
# importo la descri
field_media_document/description: src_filelabel
uid: constants/USER
destination:
plugin: 'entity:media'
default_bundle: document
migration_dependencies:
required:
- bandi_file
dependencies:
enforced:
module:
- cineca_migrate_announcements |
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
|
...