Updates to the IIIF Collection Manifest Template to change to use the metadata exposed endpoint Route to generate URL instead of entity node canonical, so aliases don't break the links for children objects
Changes need to be applied:
[x] to corresponding metadata display entity config file
[x] to JSON-encoded version of the template
Per @DiegoPino:
{#
Updated 06/13/2024 for 1.4.0
Uses metadata exposed endpoint Route to generate URL so Aliases don't break it
This Template generates IIIF 3.0 API Manifest for Collections using a Drupal Views
JSON to be used by a Drupal Views (REST) to generate a simpler to parse/join listing of Canvases
For a Collection Manifest Manifest
Structures passed from Archipelago are
- node
The full Node entity
- data
The Full JSON Structure converted in an Array
- iiif_server
The publicly available IIIF Server (Global Setting)
Since JSON was decoded into the 'data' values are valid PHP but could not
be valid JSON when outputting. So We use data.description|json_encode|raw
Without Double quotes.
#}
{% set Webserverurl = url('<front>')|render|replace({':8001/':''}) ~ ':8183/iiif/2/' %}
{% set IIIFserverurl = iiif_server ? iiif_server ~ '/': Webserverurl %}
{% set currenturl = url('<current>')|render %}
{% set nodeid = 1 %}
{% if node.id %}
{# this is needed to the View Argument can conform to the format even when no node exists when saving the template #}
{% set nodeid = node.id %}
{% set nodeurl = url('entity.node.canonical', {'node': node.id}, {'absolute': true}) %}
{% else %}
{% set nodeid = 1 %}
{% set nodeurl = currenturl %}
{% endif%}
{% set len = language.getId() ? language.getId() : "en" %}
{% set computed_rights = "http://rightsstatements.org/vocab/InC-EDU/1.0/" %}
{% if data.rights|length > 0 or data.rights_statements|length > 0 %}
{% if data.rights|length > 0 %}
{% set computed_rights = data.rights %}
{% endif %}
{% elseif data.rights_statements|length > 0 %}
{% if data.rights_statements in ['In Copyright'] %}
{% set computed_rights = "http://rightsstatements.org/vocab/InC/1.0/" %}
{% endif %}
{% if data.rights_statements in ['In Copyright - EU Orphan Work'] %}
{% set computed_rights = "http://rightsstatements.org/vocab/InC-OW-EU/1.0/" %}
{% endif %}
{% if data.rights_statements in ['In Copyright - Educational Use Permitted'] %}
{% set computed_rights = "http://rightsstatements.org/vocab/InC-EDU/1.0/" %}
{% endif %}
{% if data.rights_statements in ['In Copyright - Non-Commercial Use Permitted'] %}
{% set computed_rights = "http://rightsstatements.org/vocab/InC-NC/1.0/" %}
{% endif %}
{% if data.rights_statements in ['In Copyright - Rights-holder(s) Unlocatable or Unidentifiable'] %}
{% set computed_rights = "http://rightsstatements.org/vocab/InC-RUU/1.0/" %}
{% endif %}
{% if data.rights_statements in ['No Copyright - Contractual Restrictions'] %}
{% set computed_rights = "http://rightsstatements.org/vocab/NoC-CR/1.0/" %}
{% endif %}
{% if data.rights_statements in ['No Copyright - Non-Commercial Use Only'] %}
{% set computed_rights = "http://rightsstatements.org/vocab/NoC-NC/1.0/" %}
{% endif %}
{% if data.rights_statements in ['No Copyright - Other Known Legal Restrictions'] %}
{% set computed_rights = "http://rightsstatements.org/vocab/NoC-OKLR/1.0/" %}
{% endif %}
{% if data.rights_statements in ['No Copyright - United States'] %}
{% set computed_rights = "http://rightsstatements.org/vocab/NoC-US/1.0/" %}
{% endif %}
{% if data.rights_statements in ['Copyright Not Evaluated'] %}
{% set computed_rights = "http://rightsstatements.org/vocab/CNE/1.0/" %}
{% endif %}
{% if data.rights_statements in ['Copyright Undetermined'] %}
{% set computed_rights = "http://rightsstatements.org/vocab/UND/1.0/" %}
{% endif %}
{% if data.rights_statements in ['No Known Copyright'] %}
{% set computed_rights = "http://rightsstatements.org/vocab/NKC/1.0/" %}
{% endif %}
{% endif %}
{
{# Top Object Metadata #}
"@context": [
"http://www.w3.org/ns/anno.jsonld",
"http://iiif.io/api/presentation/3/context.json"
],
"type": "Collection",
"id": "{{ currenturl }}",
"label": {
"{{ len }}": [
{{ node.label|json_encode|raw }}
]
},
"requiredStatement": {
"label": { "en": [ "Attribution" ] },
"value": { "en": [ "Provided by Archipelago Deployment" ] }
},
"rights": {{ computed_rights|json_encode|raw }},
"metadata": [
{% for agent in attribute(data, 'edm_agent') %}
{
"label": {
"{{ len }}": [
{{ agent.role_label|json_encode|raw }}
]
},
"value": {
"{{ len }}": [
{{ agent.name_label|json_encode|raw }}
]
}
},
{% endfor %}
{
"label": {
"{{ len }}": [
"description"
]
},
"value": {
"{{ len }}": [
{{ data.description|json_encode|raw }}
]
}
},
{
"label": {
"{{ len }}": [
"navDate"
]
},
"value": {
"{{ len }}": [
"{{ node.getChangedTime|date("F jS \\a\\t g:ia") }}"
]
}
},
{
"label": {
"{{ len }}": [
"license"
]
},
"value": {
"{{ len }}": [
{{ computed_rights|json_encode|raw }}
]
}
}
],
{% if attribute(data, 'memberof') %}
{% set currentnode = 'node/' ~ data.memberof %}
"within": "{{ url(currentnode) }}",
{% else %}
{% set currentnode = '<current>' %}
{% endif %}
{# fetch all children using a View and attach them as Items #}
"items": [
{% set collection_view = drupal_view('data_collection_manifest','children_ismemberof_manifest_rest', nodeid)|render %}
{% set collection_items = collection_view|sbf_json_decode %}
{% for items in collection_items %}
{# canvas|json_encode #}
{
{% if 'CreativeWorkSeries' in items['ado_type']|split(',') %}
"id": "{{ url('format_strawberryfield.metadatadisplay_caster', {'node': items['uuid'],'metadataexposeconfig_entity':'iiifmanifest3cws',
'format':'default.jsonld'}, {'absolute': true, 'alias': true}) }}",
"type": "Manifest",
{% elseif 'Collection' in items['ado_type']|split(',') %}
"id": "{{ url('format_strawberryfield.metadatadisplay_caster', {'node': items['uuid'], 'metadataexposeconfig_entity':'iiifmanifest3collection',
'format':'default.jsonld'}, {'absolute': true, 'alias': true}) }}",
"type": "Collection",
{% else %}
"id": "{{ url('format_strawberryfield.metadatadisplay_caster', {'node': items['uuid'], 'metadataexposeconfig_entity':'iiifmanifest',
'format':'default.jsonld'}, {'absolute': true, 'alias': true}) }}",
"type": "Manifest",
{% endif %}
"label": { "{{len}}": [ "{{ items['label'] }}" ] },
{{ items['thumbnail']|raw }}
}
{{ not loop.last ? ',' : '' }}
{% endfor %}
]
}
What's needed?
Changes need to be applied:
Per @DiegoPino: