Skip to content

Commit

Permalink
Add support for limiing to certain tracks
Browse files Browse the repository at this point in the history
It's now possible to limit the public voting to certain tracks. This is
implemented as close as possible as the feature in pretalx where you
can limit tracks for certain review teams.

Related to pretalx#26.
  • Loading branch information
vmx committed Sep 29, 2023
1 parent a57ea6f commit 9b8c649
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 0 deletions.
7 changes: 7 additions & 0 deletions pretalx_public_voting/forms.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from django import forms
from django.utils.translation import gettext_lazy as _
from django_scopes.forms import SafeModelMultipleChoiceField
from i18nfield.forms import I18nModelForm
from pretalx.common.urls import build_absolute_uri
from pretalx.mail.models import QueuedMail
Expand Down Expand Up @@ -109,6 +110,7 @@ def save(self):
class PublicVotingSettingsForm(I18nModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields["limit_tracks"].queryset = self.instance.event.tracks.all()
minimum = self.instance.min_score
maximum = self.instance.max_score
for number in range(abs(maximum - minimum + 1)):
Expand Down Expand Up @@ -152,11 +154,16 @@ class Meta:
"anonymize_speakers",
"show_session_image",
"show_session_description",
"limit_tracks",
"allowed_emails",
"min_score",
"max_score",
)
widgets = {
"start": forms.DateTimeInput(attrs={"class": "datetimepickerfield"}),
"end": forms.DateTimeInput(attrs={"class": "datetimepickerfield"}),
"limit_tracks": forms.SelectMultiple(attrs={"class": "select2"}),
}
field_classes = {
"limit_tracks": SafeModelMultipleChoiceField,
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 4.2.5 on 2023-09-29 19:47

from django.db import migrations, models


class Migration(migrations.Migration):
dependencies = [
("submission", "0073_track_position"),
("pretalx_public_voting", "0005_publicvotingsettings_show_session_description"),
]

operations = [
migrations.AddField(
model_name="publicvotingsettings",
name="limit_tracks",
field=models.ManyToManyField(to="submission.track"),
),
]
3 changes: 3 additions & 0 deletions pretalx_public_voting/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,9 @@ class PublicVotingSettings(models.Model):
"You can limit who is allowed to cast a vote. Please enter one email address per line."
),
)
limit_tracks = models.ManyToManyField(
to="submission.Track", verbose_name=_("Limit to tracks"), blank=True
)

@cached_property
def allowed_email_list(self):
Expand Down
3 changes: 3 additions & 0 deletions pretalx_public_voting/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,9 @@ def get_queryset(self):
base_qs = self.request.event.submissions.all().filter(
state=SubmissionStates.SUBMITTED
)
tracks = self.request.event.public_vote_settings.limit_tracks.all()
if tracks:
base_qs = base_qs.filter(track__in=tracks)
submission_pks = list(base_qs.values_list("pk", flat=True))
random.seed(self.hashed_email)
random.shuffle(submission_pks)
Expand Down

0 comments on commit 9b8c649

Please sign in to comment.