From 9d9fecfef701ac8d9bee99d9e4d836edf7e592af Mon Sep 17 00:00:00 2001
From: Thorge Petersen <petersen@rz.uni-kiel.de>
Date: Tue, 24 Sep 2024 15:08:48 +0200
Subject: [PATCH] Add package custom fields

---
 .../snippets/package_metadata_fields.html     |  6 +++
 .../snippets/custom_form_fields.html          | 46 +++++++++++++++++++
 2 files changed, 52 insertions(+)
 create mode 100644 ckanext/odsh/templates/snippets/custom_form_fields.html

diff --git a/ckanext/odsh/templates/package/snippets/package_metadata_fields.html b/ckanext/odsh/templates/package/snippets/package_metadata_fields.html
index 9662b44..8805af0 100644
--- a/ckanext/odsh/templates/package/snippets/package_metadata_fields.html
+++ b/ckanext/odsh/templates/package/snippets/package_metadata_fields.html
@@ -15,4 +15,10 @@
   {{ form.input(field, label=_('Is replaced by'), placeholder=_('https://'), value=value, error=error,
   classes=['control-full']) }}
 
+  {% block package_metadata_fields_custom %}
+    {% block custom_fields %}
+      {% snippet 'snippets/custom_form_fields.html', extras=data.extras, errors=errors, limit=3 %}
+    {% endblock %}
+  {% endblock %}
+  
 {% endblock %}
\ No newline at end of file
diff --git a/ckanext/odsh/templates/snippets/custom_form_fields.html b/ckanext/odsh/templates/snippets/custom_form_fields.html
new file mode 100644
index 0000000..e9983ec
--- /dev/null
+++ b/ckanext/odsh/templates/snippets/custom_form_fields.html
@@ -0,0 +1,46 @@
+{#
+Adds a block of custom form fields.
+
+extras - The fields to add.
+errors - A dict of errors for the fields.
+limit  - The total number of fields that should be output.
+Example:
+
+  {% snippet 'snippets/custom_form_fields.html', extras=data.extras, errors=errors, limit=3 %}
+
+#}
+{% import "macros/form.html" as form %}
+
+<div data-module="custom-fields">
+  {% set custom_extras = ['licenseAttributionByText', 'temporal_start', 'temporal_end', 'issued', 'spatial_uri', 'groups'] %}
+  {% for extra in extras %}
+    {% if extra.key not in custom_extras %}
+      {% set prefix = 'extras__%d__' % (loop.index0 + (custom_extras|count)) %}
+      {{ form.custom(
+        names=(prefix ~ 'key', prefix ~ 'value', prefix ~ 'deleted'),
+        id='field-extras-%d' % loop.index0,
+        label=_('Custom Field'),
+        values=(extra.key, extra.value, extra.deleted),
+        error=errors[prefix ~ 'key'] or errors[prefix ~ 'value']
+      ) }}
+    {% endif %}
+  {% endfor %}
+
+  {# Add a max of 3 empty columns #}
+  {% set total_extras = data.extras|count %}
+  {% if total_extras <= (custom_extras|count) %}{% set total_extras = (custom_extras|count) %}{% endif %}
+  {% set empty_extras = (limit or 3) - total_extras %}
+  {% if empty_extras <= 0 %}{% set empty_extras = 1 %}{% endif %}
+
+  {% for extra in range(total_extras, total_extras + empty_extras) %}
+    {% set index = loop.index0 + total_extras %}
+    {% set prefix = 'extras__%d__' % index %}
+    {{ form.custom(
+      names=(prefix ~ 'key', prefix ~ 'value', prefix ~ 'deleted'),
+      id='field-extras-%d' % index,
+      label=_('Custom Field'),
+      values=(extra.key, extra.value, extra.deleted),
+      error=errors[prefix ~ 'key'] or errors[prefix ~ 'value']
+    ) }}
+  {% endfor %}
+</div>
-- 
GitLab