diff --git a/CHANGES.rst b/CHANGES.rst index baeccb9c3bd1a277eb09e094047f431b72b42ff0..54b4c88c983f79b055485be017cc1e4ab009285e 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -8,13 +8,14 @@ Changes ======= -Version 2024.4 (released 2024-11-26, updated 2024-11-29) +Version 2024.4 (released 2024-11-26, updated 2024-12-05) - Pin `Flask-Menu`` dependency - Add `Invenio-DAMAP` to the dependencies - Implement TU Wien user identity generator for connection to DAMAP - Cast TISS ID into string for the Invenio-DAMAP integration - Send out notification emails when records get published +- Rework curation menu item registration and unpin `Flask-Menu` Version 2024.3 (released 2024-10-01, updated 2024-11-13) diff --git a/invenio_config_tuw/__init__.py b/invenio_config_tuw/__init__.py index f70eb84fdc90421eed8d2831ef0361456dab6e47..3882381b54509764e814684ca45a7ef4b844a502 100644 --- a/invenio_config_tuw/__init__.py +++ b/invenio_config_tuw/__init__.py @@ -9,6 +9,6 @@ from .ext import InvenioConfigTUW -__version__ = "2024.4.3" +__version__ = "2024.4.4" __all__ = ("__version__", "InvenioConfigTUW") diff --git a/invenio_config_tuw/startup.py b/invenio_config_tuw/startup.py index eb3b71160cc5dd70d57327bdcf975d598ca014d9..d8ed7b33473ca90dd7307e3d66f03819c57a4555 100644 --- a/invenio_config_tuw/startup.py +++ b/invenio_config_tuw/startup.py @@ -16,13 +16,8 @@ initialized, and thus we can rely on them being already available. from logging import ERROR from logging.handlers import SMTPHandler -from flask import Blueprint, current_app, flash, render_template, request -from flask_login import current_user, login_required -from flask_menu import register_menu -from invenio_db import db from invenio_rdm_records.services.search_params import MyDraftsParam -from .curation import CurationForm from .formatters import CustomFormatter @@ -96,44 +91,11 @@ def override_search_drafts_options(app): pass -def create_curation_settings_blueprint(app): - """Register the curation settings view after the app has been initialized. - - This is necessary because we're depending on the Flask-Menu extension. - """ - blueprint = Blueprint( - "invenio_config_tuw_settings", - __name__, - url_prefix="/account/settings/curation", - ) - - @blueprint.route("/", methods=["GET", "POST"]) - @login_required - @register_menu( - blueprint, - "settings.curation", +def register_menu_entries(app): + """Register the curation setting endpoint in Flask-Menu.""" + menu = app.extensions["menu"].root() + menu.submenu("settings.curation").register( + "invenio_config_tuw_settings.curation_settings_view", '<i class="file icon"></i> Curation', order=1, ) - def curation_settings_view(): - preferences_curation_form = CurationForm( - formdata=None, obj=current_user, prefix="preferences-curation" - ) - - form_name = request.form.get("submit", None) - form = preferences_curation_form if form_name else None - - if form: - form.process(formdata=request.form) - if form.validate_on_submit(): - form.populate_obj(current_user) - db.session.add(current_user) - current_app.extensions["security"].datastore.commit() - flash(("Curation settings were updated."), category="success") - - return render_template( - "invenio_theme_tuw/settings/curation.html", - preferences_curation_form=preferences_curation_form, - ) - - return blueprint diff --git a/invenio_config_tuw/views.py b/invenio_config_tuw/views.py new file mode 100644 index 0000000000000000000000000000000000000000..b294d22fd7f606ca33b3e0ee9cf9fba765c88ded --- /dev/null +++ b/invenio_config_tuw/views.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2024 TU Wien. +# +# Invenio-Config-TUW is free software; you can redistribute it and/or modify +# it under the terms of the MIT License; see LICENSE file for more details. + +"""Custom view functions for TU Wien.""" + +from flask import Blueprint, current_app, flash, render_template, request +from flask_login import current_user, login_required +from invenio_db import db + +from .curation import CurationForm + +blueprint = Blueprint( + "invenio_config_tuw_settings", + __name__, + url_prefix="/account/settings/curation", +) + + +@blueprint.route("/", methods=["GET", "POST"]) +@login_required +def curation_settings_view(): + """Page for the curation consent setting in user profiles.""" + preferences_curation_form = CurationForm( + formdata=None, obj=current_user, prefix="preferences-curation" + ) + + form_name = request.form.get("submit", None) + form = preferences_curation_form if form_name else None + + if form: + form.process(formdata=request.form) + if form.validate_on_submit(): + form.populate_obj(current_user) + db.session.add(current_user) + current_app.extensions["security"].datastore.commit() + flash(("Curation settings were updated."), category="success") + + return render_template( + "invenio_theme_tuw/settings/curation.html", + preferences_curation_form=preferences_curation_form, + ) diff --git a/pyproject.toml b/pyproject.toml index b0ca2a0318a532c647b96a31ecd8112aac5dedba..5ba634963eab4986081855e9830ee74e2e01c292 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -47,7 +47,6 @@ dependencies = [ "Invenio-Search>=2.1.0,<3.0.0", "Flask>=2.0.2", "Flask-Minify>=0.47", - "Flask-Menu<2.0.0", "Invenio-DAMAP>=0.1.1" ] @@ -70,11 +69,12 @@ invenio_config_tuw = "invenio_config_tuw:InvenioConfigTUW" invenio_config_tuw = "invenio_config_tuw:InvenioConfigTUW" [project.entry-points."invenio_base.blueprints"] -invenio_config_tuw_settings = "invenio_config_tuw.startup:create_curation_settings_blueprint" +invenio_config_tuw_settings = "invenio_config_tuw.views:blueprint" [project.entry-points."invenio_base.finalize_app"] invenio_config_tuw_mail_handler = "invenio_config_tuw.startup:register_smtp_error_handler" invenio_config_tuw_search_drafts = "invenio_config_tuw.startup:override_search_drafts_options" +invenio_config_tuw_curation_settings = "invenio_config_tuw.startup:register_menu_entries" [project.entry-points."invenio_base.api_finalize_app"] invenio_config_tuw_mail_handler = "invenio_config_tuw.startup:register_smtp_error_handler"