Skip to content

Commit

Permalink
Fix broken review settings delete
Browse files Browse the repository at this point in the history
  • Loading branch information
rixx committed Sep 26, 2024
1 parent 0d73dbd commit 053ff25
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 88 deletions.
1 change: 1 addition & 0 deletions doc/changelog.rst
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
Release Notes
=============

- :bug:`orga` Deleting review phases and review score categories was broken.
- :feature:`schedule` The schedule page makes even better use of several caching methods in order to be smaller and faster to load and re-load.
- :announcement:`admin` Due to a potentially tricky update in Django, and maintenance cost, pretalx is dropping support for MySQL/MariaDB. Please use either PostgreSQL or SQLite. If you are currently running MySLQ, please take a look at this exemplary `MySQL migration guide<https://pretix.readthedocs.io/en/latest/admin/mysql2postgres.html>`_ by the pretix project **BEFORE** starting your pretalx update, in order to migrate your data with ``pgloader`` to PostgreSQL!
- :announcement:`admin` pretalx now requires Python 3.10 or newer.
Expand Down
32 changes: 15 additions & 17 deletions src/pretalx/orga/templates/orga/settings/review.html
Original file line number Diff line number Diff line change
Expand Up @@ -75,11 +75,9 @@ <h3 class="d-flex offset-md-3 flex-wrap align-items-start">
<span class="mr-2 ml-2">{% translate "Review Score category" %}</span>
{% bootstrap_field form.name form_group_class="" layout="inline" %}
{% if action != "view" %}
<a href="{{ form.instance.urls.delete }}"
class="btn btn-danger flip ml-auto"
title="{% translate "Delete score category" %}">
<button type="button" class="btn btn-xs btn-danger ml-auto" data-formset-delete-button>
<i class="fa fa-trash"></i>
</a>
</button>
{% endif %}
</h3>
<div class="sr-only">
Expand Down Expand Up @@ -132,10 +130,9 @@ <h3 class="d-flex offset-md-3 flex-wrap align-items-start">
<span class="mr-2 ml-2">{% translate "Score Category" %}</span>
{% bootstrap_field scores_formset.empty_form.name form_group_class="" layout="inline" %}
{% if action != "view" %}
<div class="score-delete flip ml-auto">
<button type="button" class="btn btn-danger" data-formset-delete-button>
<i class="fa fa-trash"></i></button>
</div>
<button type="button" class="btn btn-xs btn-danger ml-auto" data-formset-delete-button>
<i class="fa fa-trash"></i>
</button>
{% endif %}
</h3>
<div class="sr-only">
Expand Down Expand Up @@ -214,11 +211,11 @@ <h3 class="d-flex offset-md-3 flex-wrap">
</a>
{% endif %}
{% include "orga/includes/order_object.html" with object=form.instance attrs="mr-2 keep-scroll-position" %}
<a href="{{ form.instance.urls.delete }}"
class="btn btn-danger"
title="{% translate "Delete phase" %}">
<i class="fa fa-trash"></i>
</a>
{% if action != "view" %}
<button type="button" class="btn btn-xs btn-danger ml-auto" data-formset-delete-button>
<i class="fa fa-trash"></i>
</button>
{% endif %}
{% endif %}
</h3>
<div class="sr-only">
Expand All @@ -239,10 +236,11 @@ <h3 class="d-flex offset-md-3 flex-wrap">
<h3 class="d-flex offset-md-3">
<span class="mr-2 ml-2">{% translate "Review Phase" %}</span>
{% bootstrap_field phases_formset.empty_form.name form_group_class="" layout="inline" %}
<div class="phase-option-delete flip ml-auto">
<button type="button" class="btn btn-danger" data-formset-delete-button>
<i class="fa fa-trash"></i></button>
</div>
{% if action != "view" %}
<button type="button" class="btn btn-xs btn-danger ml-auto" data-formset-delete-button>
<i class="fa fa-trash"></i>
</button>
{% endif %}
</h3>
<div class="sr-only">
{{ phases_formset.empty_form.id }}
Expand Down
12 changes: 1 addition & 11 deletions src/pretalx/orga/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -640,24 +640,14 @@
include(
[
*event.ReviewPhaseOrderView.get_urls(),
path(
"delete",
event.PhaseDelete.as_view(),
name="settings.review.phasedelete",
),
path(
"activate",
event.PhaseActivate.as_view(),
name="settings.review.phasedelete",
name="settings.review.phase.activate",
),
]
),
),
path(
"settings/review/category/<int:pk>/delete",
event.ScoreCategoryDelete.as_view(),
name="settings.review.categorydelete",
),
path(
"schedule/", schedule.ScheduleView.as_view(), name="schedule.main"
),
Expand Down
52 changes: 9 additions & 43 deletions src/pretalx/orga/views/event.py
Original file line number Diff line number Diff line change
Expand Up @@ -297,6 +297,9 @@ def save_phases(self):
form.instance.event = self.request.event
form.save()

for form in self.phases_formset.deleted_forms:
form.instance.delete()

# Now that everything is saved, check for overlapping review phases,
# and show an error message if any exist. Raise an exception to
# get out of the transaction.
Expand Down Expand Up @@ -360,33 +363,17 @@ def save_scores(self):
form.instance.event = self.request.event
form.save()

for form in self.scores_formset.deleted_forms:
if not form.instance.is_independent:
weights_changed = True
form.instance.scores.all().delete()
form.instance.delete()

if weights_changed:
ReviewScoreCategory.recalculate_scores(self.request.event)
return True


class ScoreCategoryDelete(PermissionRequired, ActionConfirmMixin, TemplateView):
permission_required = "orga.change_settings"

def get_object(self):
return get_object_or_404(
ReviewScoreCategory, event=self.request.event, pk=self.kwargs.get("pk")
)

def action_object_name(self):
return _("Score category") + f": {self.get_object().name}"

@property
def action_back_url(self):
return self.request.event.orga_urls.review_settings

def post(self, request, *args, **kwargs):
super().dispatch(request, *args, **kwargs)
category = self.get_object()
category.delete()
return redirect(self.request.event.orga_urls.review_settings)


class ReviewPhaseOrderView(OrderModelView):
permission_required = "orga.change_settings"
model = ReviewPhase
Expand All @@ -395,27 +382,6 @@ def get_success_url(self):
return self.request.event.orga_urls.review_settings


class PhaseDelete(PermissionRequired, ActionConfirmMixin, TemplateView):
permission_required = "orga.change_settings"

def get_object(self):
return get_object_or_404(
ReviewPhase, event=self.request.event, pk=self.kwargs.get("pk")
)

def action_object_name(self):
return _("Review phase") + f": {self.get_object().name}"

@property
def action_back_url(self):
return self.request.event.orga_urls.review_settings

def post(self, request, *args, **kwargs):
phase = self.get_object()
phase.delete()
return redirect(self.request.event.orga_urls.review_settings)


class PhaseActivate(PermissionRequired, View):
permission_required = "orga.change_settings"

Expand Down
17 changes: 0 additions & 17 deletions src/tests/orga/views/test_orga_views_event.py
Original file line number Diff line number Diff line change
Expand Up @@ -984,23 +984,6 @@ def test_edit_review_settings_new_review_phase_wrong_dates(orga_client, event):
assert event.review_phases.count() == 2


@pytest.mark.django_db
def test_edit_review_settings_delete_review_phase(orga_client, event):
with scope(event=event):
assert event.review_phases.count() == 2
phase = event.review_phases.first()
response = orga_client.get(phase.urls.delete, follow=True)
assert response.status_code == 200
event = Event.objects.get(slug=event.slug)
with scope(event=event):
assert event.review_phases.count() == 2
response = orga_client.post(phase.urls.delete, follow=True)
assert response.status_code == 200
event = Event.objects.get(slug=event.slug)
with scope(event=event):
assert event.review_phases.count() == 1


@pytest.mark.django_db
def test_edit_review_settings_activate_review_phase(orga_client, event):
with scope(event=event):
Expand Down

0 comments on commit 053ff25

Please sign in to comment.