diff --git a/ckanext/matolabtheme/plugin.py b/ckanext/matolabtheme/plugin.py index a98323e..68bfdaf 100644 --- a/ckanext/matolabtheme/plugin.py +++ b/ckanext/matolabtheme/plugin.py @@ -48,6 +48,9 @@ def declare_config_options(self, declaration: Declaration, key: Key): declaration.declare(group.banner_bottom, "/static/banner_bottom.png") declaration.declare(group.banner_bottom_upload, "") declaration.declare(group.clear_banner_bottom_upload, "") + declaration.declare(group.favicon, "/static/favicon.png") + declaration.declare(group.favicon_upload, "") + declaration.declare(group.clear_favicon_upload, "") declaration.declare(group.attribution_logo, "/static/favicon.png") declaration.declare(group.attribution_logo_upload, "") declaration.declare(group.clear_attribution_logo_upload, "") @@ -89,6 +92,18 @@ def update_config_schema(self, schema): ignore_missing, unicode_safe, ], + "ckanext.matolabtheme.favicon": [ + ignore_missing, + unicode_safe, + ], + "ckanext.matolabtheme.favicon_upload": [ + ignore_missing, + unicode_safe, + ], + "ckanext.matolabtheme.clear_favicon_upload": [ + ignore_missing, + unicode_safe, + ], "ckanext.matolabtheme.attribution_logo": [ ignore_missing, unicode_safe, diff --git a/ckanext/matolabtheme/templates/base.html b/ckanext/matolabtheme/templates/base.html index 015ed61..5ff6254 100644 --- a/ckanext/matolabtheme/templates/base.html +++ b/ckanext/matolabtheme/templates/base.html @@ -12,6 +12,10 @@ {% endif %} {% endblock %} +{% block links -%} + +{% endblock -%} + {% block bodytag %} {{ super() }} {% endblock %} diff --git a/ckanext/matolabtheme/templates/macros/form/image_upload_prefix.html b/ckanext/matolabtheme/templates/macros/form/image_upload_prefix.html deleted file mode 100644 index 74ba71a..0000000 --- a/ckanext/matolabtheme/templates/macros/form/image_upload_prefix.html +++ /dev/null @@ -1,52 +0,0 @@ -{% from 'macros/form/input.html' import input %} -{% from 'macros/form/checkbox.html' import checkbox %} - -{# -Builds a file upload for input - -Example -{% import 'macros/form.html' as form %} -{{ form.image_upload_prefix(data, errors, is_upload_enabled=true) }} - -#} -{% macro image_upload_prefix(data, errors, prefix='', field_url='image_url', field_upload='image_upload', field_clear='clear_upload', - is_url=false, is_upload=false, is_upload_enabled=false, placeholder=false, - url_label='', upload_label='', field_name='image_url') %} -{% set placeholder = placeholder if placeholder else _('http://example.com/my-image.jpg') %} -{% set url_label = url_label or _('Image URL') %} -{% set upload_label = upload_label or _('Image') %} -{% set previous_upload = data['previous_upload'] %} - -{% if field_url == 'url' and field_upload == 'upload' %} - {# backwards compatibility for old resource forms that still call the `forms.image_upload()` macro, eg ckanext-scheming #} - {% snippet 'package/snippets/resource_upload_field.html', - data=data, - errors=errors, - is_url=is_url, - is_upload=is_upload, - is_upload_enabled=is_upload_enabled, - url_label=url_label, - upload_label=upload_label, - placeholder=placeholder %} -{% else %} -
- - -
- {% if is_upload_enabled %} - or upload file: -
- -
- {% if is_upload %} -
- - -
- {% endif %} - {% endif %} -{% endif %} - -{% endmacro %} \ No newline at end of file diff --git a/ckanext/matolabtheme/templates/matolabtheme/theme_config.html b/ckanext/matolabtheme/templates/matolabtheme/theme_config.html index 4e3d31f..a152f89 100644 --- a/ckanext/matolabtheme/templates/matolabtheme/theme_config.html +++ b/ckanext/matolabtheme/templates/matolabtheme/theme_config.html @@ -3,7 +3,6 @@ {% extends "admin/base.html" %} {% import 'macros/form.html' as form %} -{% import 'macros/form/image_upload_prefix.html' as iu %} {% block primary_content_inner %} @@ -14,21 +13,26 @@ {{ h.csrf_input() }} - {% set field1_url = 'ckanext.matolabtheme.banner_top' %} {% set is_upload = data[field1_url] and not data[field1_url].startswith('http') %} {% set is_url = data[field1_url] and data[field1_url].startswith('http') %} - {{ iu.image_upload_prefix(data, errors, prefix='banner_top', is_upload_enabled=h.uploads_enabled(), field_name='ckanext.matolabtheme.banner_top_url', is_url=is_url, is_upload=is_upload, upload_label = _('Banner Top'), url_label=_('Banner top'), field_url=field1_url, field_upload='ckanext.matolabtheme.banner_top_upload', field_clear='ckanext.matolabtheme.clear_banner_top_upload' )}} - + {{ form.image_upload(data, errors,is_upload_enabled=h.uploads_enabled(), is_url=is_url, is_upload=is_upload, upload_label = _('Banner Top'), url_label=_('Banner top'), field_url=field1_url, field_upload='ckanext.matolabtheme.banner_top_upload', field_clear='ckanext.matolabtheme.clear_banner_top_upload')}} + + {% set field2_url = 'ckanext.matolabtheme.banner_bottom' %} {% set is_upload = data[field2_url] and not data[field2_url].startswith('http') %} {% set is_url = data[field2_url] and data[field2_url].startswith('http') %} - {{ iu.image_upload_prefix(data, errors, prefix='banner_bottom', is_upload_enabled=h.uploads_enabled(), field_name='ckanext.matolabtheme.banner_bottom_url', is_url=is_url, is_upload=is_upload, upload_label = _('Banner Bottom'), url_label=_('Banner bottom'), field_url=field2_url, field_upload='ckanext.matolabtheme.banner_bottom_upload', field_clear='ckanext.matolabtheme.clear_banner_bottom_upload' )}} + {{ form.image_upload(data, errors, is_upload_enabled=h.uploads_enabled(), field_name='ckanext.matolabtheme.banner_bottom_url', is_url=is_url, is_upload=is_upload, upload_label = _('Banner Bottom'), url_label=_('Banner bottom'), field_url=field2_url, field_upload='ckanext.matolabtheme.banner_bottom_upload', field_clear='ckanext.matolabtheme.clear_banner_bottom_upload' )}} - {% set field3_url = 'ckanext.matolabtheme.attribution_logo' %} - {% set is_upload = data[field3_url] and not data[field2_url].startswith('http') %} + {% set field3_url = 'ckanext.matolabtheme.favicon' %} + {% set is_upload = data[field3_url] and not data[field3_url].startswith('http') %} {% set is_url = data[field3_url] and data[field3_url].startswith('http') %} - {{ iu.image_upload_prefix(data, errors, prefix='attribution_logo', is_upload_enabled=h.uploads_enabled(), field_name='ckanext.matolabtheme.attribution_logo_url', is_url=is_url, is_upload=is_upload, upload_label = _('Attribution Logo'), url_label=_('Attribution logo'), field_url=field3_url, field_upload='ckanext.matolabtheme.attribution_logo_upload', field_clear='ckanext.matolabtheme.clear_attribution_logo_upload' )}} + {{ form.image_upload(data, errors, is_upload_enabled=h.uploads_enabled(), field_name='ckanext.matolabtheme.favicon_url', is_url=is_url, is_upload=is_upload, upload_label = _('Favicon'), url_label=_('Favicon'), field_url=field3_url, field_upload='ckanext.matolabtheme.favicon_upload', field_clear='ckanext.matolabtheme.clear_favicon_upload' )}} + + {% set field4_url = 'ckanext.matolabtheme.attribution_logo' %} + {% set is_upload = data[field4_url] and not data[field4_url].startswith('http') %} + {% set is_url = data[field4_url] and data[field4_url].startswith('http') %} + {{ form.image_upload(data, errors, is_upload_enabled=h.uploads_enabled(), field_name='ckanext.matolabtheme.attribution_logo_url', is_url=is_url, is_upload=is_upload, upload_label = _('Attribution Logo'), url_label=_('Attribution logo'), field_url=field4_url, field_upload='ckanext.matolabtheme.attribution_logo_upload', field_clear='ckanext.matolabtheme.clear_attribution_logo_upload' )}} {% endblock %}
diff --git a/ckanext/matolabtheme/views.py b/ckanext/matolabtheme/views.py index 34e43eb..9bb301b 100644 --- a/ckanext/matolabtheme/views.py +++ b/ckanext/matolabtheme/views.py @@ -9,7 +9,6 @@ import ckan.lib.uploader as uploader import ckan.logic as logic import ckan.logic.schema -import ckan.model as model from ckan.common import _, config, current_user, request from ckan.lib.helpers import helper_functions as h from ckan.views.home import CACHE_PARAMETERS @@ -41,6 +40,7 @@ def post(self) -> Union[str, Response]: try: req = request.form.copy() req.update(request.files.to_dict()) + log.debug(req) data_dict = logic.clean_dict( dict_fns.unflatten( logic.tuplize_dict( @@ -48,65 +48,37 @@ def post(self) -> Union[str, Response]: ) ) ) - # dark_mode=toolkit.config.get("ckanext.matolabtheme.dark_mode") + # Set dark_mode based on whether the checkbox was checked data_dict["ckanext.matolabtheme.dark_mode"] = ( "ckanext.matolabtheme.dark_mode" in req ) + del data_dict["ckanext.matolabtheme.dark_mode"] del data_dict["save"] - # data = logic.get_action("config_option_update")( - # {"user": current_user.name}, data_dict - # ) - # Handle banner uploads AFTER calling CKAN’s function + + # Handle uploads upload = uploader.get_uploader("admin") - for key in list(data_dict.keys()): - if key == "ckanext.matolabtheme.banner_top": - upload.update_data_dict( - data_dict, - "ckanext.matolabtheme.banner_top", - "ckanext.matolabtheme.banner_top_upload", - "ckanext.matolabtheme.clear_banner_top_upload", - ) - upload.upload(uploader.get_max_image_size()) - value = data_dict[key] - if upload.filepath: - static_url = upload.filepath.split("storage", 1)[-1] - value = h.url_for_static(static_url) - # Update CKAN's `config` object - model.set_system_info(key, value) - config[key] = value - elif key == "ckanext.matolabtheme.banner_bottom": - upload.update_data_dict( - data_dict, - "ckanext.matolabtheme.banner_bottom", - "ckanext.matolabtheme.banner_bottom_upload", - "ckanext.matolabtheme.clear_banner_bottom_upload", - ) - upload.upload(uploader.get_max_image_size()) - value = data_dict[key] - if upload.filepath: - static_url = upload.filepath.split("storage", 1)[-1] - value = h.url_for_static(static_url) - model.set_system_info(key, value) - config[key] = value - elif key == "ckanext.matolabtheme.attribution_logo": - upload.update_data_dict( - data_dict, - "ckanext.matolabtheme.attribution_logo", - "ckanext.matolabtheme.attribution_logo_upload", - "ckanext.matolabtheme.clear_attribution_logo_upload", - ) - upload.upload(uploader.get_max_image_size()) - value = data_dict[key] - if upload.filepath: - static_url = upload.filepath.split("storage", 1)[-1] - value = h.url_for_static(static_url) - model.set_system_info(key, value) - config[key] = value - elif key == "ckanext.matolabtheme.dark_mode": - value = data_dict[key] - model.set_system_info(key, value) - config[key] = value + log.debug(data_dict) + upload_fields=["ckanext.matolabtheme.banner_top","ckanext.matolabtheme.banner_bottom", "ckanext.matolabtheme.favicon", "ckanext.matolabtheme.attribution_logo"] + for key in upload_fields: + if key in data_dict.keys(): + upload.update_data_dict( + data_dict, + key, + key+"_upload", + "ckanext.matolabtheme.clear_banner_top_upload", + ) + upload.upload(uploader.get_max_image_size()) + value = data_dict[key] + # Set full Logo url + if value and not value.startswith('http') and not value.startswith('/'): + image_path = 'uploads/admin/' + value = h.url_for_static('{0}{1}'.format(image_path, value)) + data_dict[key]=value + log.debug(data_dict) + data = logic.get_action("config_option_update")( + {"user": current_user.name}, data_dict + ) except logic.ValidationError as e: data = request.form