diff --git a/scipost_django/scipost/forms.py b/scipost_django/scipost/forms.py index 43b03ece263b1788688140202a64ebff03f1aef0..ddb0258020ee723e3a05ffd38fb84b5d79a4d5aa 100644 --- a/scipost_django/scipost/forms.py +++ b/scipost_django/scipost/forms.py @@ -418,9 +418,6 @@ class UpdatePersonalDataForm(forms.ModelForm): {"placeholder": "full URL, e.g. https://[yourpage].org"} ), ) - accepts_SciPost_emails = forms.BooleanField( - required=False, label="You accept to receive unsolicited emails from SciPost" - ) class Meta: model = Contributor @@ -431,7 +428,6 @@ class UpdatePersonalDataForm(forms.ModelForm): "orcid_id", "address", "webpage", - "accepts_SciPost_emails", ] def __init__(self, *args, **kwargs): @@ -444,18 +440,12 @@ class UpdatePersonalDataForm(forms.ModelForm): ] self.fields["orcid_id"].initial = self.instance.profile.orcid_id self.fields["webpage"].initial = self.instance.profile.webpage - self.fields["accepts_SciPost_emails"].initial = ( - self.instance.profile.accepts_SciPost_emails - ) def save(self): self.instance.profile.title = self.cleaned_data["title"] self.instance.profile.acad_field = self.cleaned_data["acad_field"] self.instance.profile.orcid_id = self.cleaned_data["orcid_id"] self.instance.profile.webpage = self.cleaned_data["webpage"] - self.instance.profile.accepts_SciPost_emails = self.cleaned_data[ - "accepts_SciPost_emails" - ] self.instance.profile.save() self.instance.profile.specialties.set(self.cleaned_data["specialties"]) return super().save() diff --git a/scipost_django/scipost/templates/scipost/personal_page/_hx_accepts_refereeing_requests_checkbox.html b/scipost_django/scipost/templates/scipost/personal_page/_hx_accepts_refereeing_requests_checkbox.html new file mode 100644 index 0000000000000000000000000000000000000000..af162da97265d874a047c2ff0a274c13d52bd4c3 --- /dev/null +++ b/scipost_django/scipost/templates/scipost/personal_page/_hx_accepts_refereeing_requests_checkbox.html @@ -0,0 +1,7 @@ +<div class="d-flex flex-row gap-3 align-items-center"> + <label for="accepts-refereeing-requests">I accept to receive refereeing requests</label> + <input type="checkbox" id="accepts-refereeing-requests" name="accepts_refereeing_requests" hx-trigger="change" hx-target="this" hx-post="{% url 'scipost:_hx_accepts_refereeing_requests_checkbox' %}" + {% if user.contributor.profile.accepts_refereeing_requests %}checked{% endif %} + /> + + </div> diff --git a/scipost_django/scipost/templates/scipost/personal_page/_hx_accepts_scipost_emails_checkbox.html b/scipost_django/scipost/templates/scipost/personal_page/_hx_accepts_scipost_emails_checkbox.html new file mode 100644 index 0000000000000000000000000000000000000000..f094dcb99a2c9e1a20f4dfcf27e0e3250cceb148 --- /dev/null +++ b/scipost_django/scipost/templates/scipost/personal_page/_hx_accepts_scipost_emails_checkbox.html @@ -0,0 +1,7 @@ +<div class="d-flex flex-row gap-3 align-items-center"> + <label for="accepts-scipost-emails">I accept to receive (unsolicited) emails from SciPost</label> + <input type="checkbox" id="accepts-scipost-emails" name="accepts_scipost_emails" hx-trigger="change" hx-target="this" hx-post="{% url 'scipost:_hx_accepts_scipost_emails_checkbox' %}" + {% if user.contributor.profile.accepts_SciPost_emails %}checked{% endif %} + /> + + </div> diff --git a/scipost_django/scipost/templates/scipost/personal_page/_hx_communication.html b/scipost_django/scipost/templates/scipost/personal_page/_hx_communication.html index e60bd7ed2633eb87ff91213d3d69c5cedaf0e324..096f66765d3673129a4e736b973cc664f52450e5 100644 --- a/scipost_django/scipost/templates/scipost/personal_page/_hx_communication.html +++ b/scipost_django/scipost/templates/scipost/personal_page/_hx_communication.html @@ -1,7 +1,7 @@ {% include 'scipost/personal_page/_hx_tablist.html' with selected='communication' %} -<div class="row"> +<div class="row mb-0"> <div class="col-12"> <div class="card bg-light"> <div class="card-body"> @@ -14,9 +14,9 @@ </div> -<div class="row"> +<div class="row mb-0"> <div class="col-12"> - <h3 class="mb-3">Email addresses associated to your Profile:</h3> + <h3 class="mt-3">Email addresses associated to your Profile:</h3> <a role="button" type="button" @@ -29,9 +29,9 @@ </div> - <div class="row"> - <div class="col-12"> - <h3 class="mb-3">Mailing list subscriptions:</h3> + <div class="row mb-0"> + <div class="col-12 col-md-8"> + <h3 class="mt-3">Mailing list subscriptions:</h3> {% for mailing_list in contributor.eligible_mailing_lists.all %} @@ -42,5 +42,13 @@ </div> + + <div class="col-12 col-md-4"> + <h3 class="mt-3">Preferences:</h3> + + {% include 'scipost/personal_page/_hx_accepts_scipost_emails_checkbox.html' %} + {% include 'scipost/personal_page/_hx_accepts_refereeing_requests_checkbox.html' %} + + </div> </div> </div> diff --git a/scipost_django/scipost/urls.py b/scipost_django/scipost/urls.py index dbcbd71a3231e171368ff280ea81effd33579ed0..abd0bd3251317d21de943228c3bba165cfa8b9de 100644 --- a/scipost_django/scipost/urls.py +++ b/scipost_django/scipost/urls.py @@ -344,6 +344,16 @@ urlpatterns = [ path( "update_personal_data", views.update_personal_data, name="update_personal_data" ), + path( + "_hx_accepts_scipost_emails_checkbox", + views._hx_accepts_scipost_emails_checkbox, + name="_hx_accepts_scipost_emails_checkbox", + ), + path( + "_hx_accepts_refereeing_requests_checkbox", + views._hx_accepts_refereeing_requests_checkbox, + name="_hx_accepts_refereeing_requests_checkbox", + ), path("totp/", views.TOTPListView.as_view(), name="totp"), path("totp/create", views.TOTPDeviceCreateView.as_view(), name="totp_create"), path( diff --git a/scipost_django/scipost/views.py b/scipost_django/scipost/views.py index de22df7a55e6872453e89e6a77005b6976e37e21..26e3082c78e67e8d83b6e51bb5d6582e08b49da6 100644 --- a/scipost_django/scipost/views.py +++ b/scipost_django/scipost/views.py @@ -4,6 +4,7 @@ __license__ = "AGPL v3" import urllib +from django.template.response import TemplateResponse from django.utils import timezone from django.shortcuts import get_object_or_404, render from django.conf import settings @@ -1269,6 +1270,36 @@ def personal_page_hx_author_replies(request): return render(request, "scipost/personal_page/_hx_author_replies.html", context) +def _hx_accepts_scipost_emails_checkbox(request): + profile = request.user.contributor.profile + + if request.method == "POST": + profile.accepts_SciPost_emails = ( + request.POST.get("accepts_scipost_emails") == "on" + ) + profile.save() + + return TemplateResponse( + request, + "scipost/personal_page/_hx_accepts_scipost_emails_checkbox.html", + ) + + +def _hx_accepts_refereeing_requests_checkbox(request): + profile = request.user.contributor.profile + + if request.method == "POST": + profile.accepts_refereeing_requests = ( + request.POST.get("accepts_refereeing_requests") == "on" + ) + profile.save() + + return TemplateResponse( + request, + "scipost/personal_page/_hx_accepts_refereeing_requests_checkbox.html", + ) + + def _update_personal_data_user_only(request): user_form = UpdateUserDataForm(request.POST or None, instance=request.user) if user_form.is_valid():