From fce781dae7210a6fb877c5015908925420457188 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89lie=20Bouttier?= Date: Sat, 12 Aug 2017 14:17:00 +0200 Subject: [PATCH] set request.conference instead of views conf kwarg --- cfp/admin.py | 8 ++--- cfp/context_processors.py | 3 +- cfp/middleware.py | 10 +++--- cfp/mixins.py | 2 +- cfp/utils.py | 13 ++------ cfp/views.py | 69 ++++++++++++++++++++------------------- 6 files changed, 48 insertions(+), 57 deletions(-) diff --git a/cfp/admin.py b/cfp/admin.py index 2b732bf..dc2d484 100644 --- a/cfp/admin.py +++ b/cfp/admin.py @@ -1,6 +1,5 @@ from django.contrib import admin from django.contrib.sites.models import Site -from django.contrib.sites.shortcuts import get_current_site from ponyconf.admin import SiteAdminMixin from .models import Conference, Participant, Talk, TalkCategory, Track, Vote @@ -31,10 +30,9 @@ class TalkCategoryAdmin(SiteAdminMixin, admin.ModelAdmin): class TalkAdmin(SiteAdminMixin, admin.ModelAdmin): def get_form(self, request, obj=None, **kwargs): form = super().get_form(request, obj, **kwargs) - site = get_current_site(request) - form.base_fields['speakers'].queryset = Participant.objects.filter(site=site) - form.base_fields['track'].queryset = Track.objects.filter(site=site) - form.base_fields['category'].queryset = TalkCategory.objects.filter(site=site) + form.base_fields['speakers'].queryset = Participant.objects.filter(site=request.conference.site) + form.base_fields['track'].queryset = Track.objects.filter(site=request.conference.site) + form.base_fields['category'].queryset = TalkCategory.objects.filter(site=request.conference.site) return form diff --git a/cfp/context_processors.py b/cfp/context_processors.py index cec76e0..4a24df3 100644 --- a/cfp/context_processors.py +++ b/cfp/context_processors.py @@ -1,5 +1,4 @@ -from .utils import get_current_conf def conference(request): - return {'conference': get_current_conf(request)} + return {'conference': request.conference} diff --git a/cfp/middleware.py b/cfp/middleware.py index 1e90315..61501dc 100644 --- a/cfp/middleware.py +++ b/cfp/middleware.py @@ -1,4 +1,6 @@ -from .utils import get_current_conf +from django.contrib.sites.shortcuts import get_current_site + +from .models import Conference class ConferenceMiddleware: @@ -9,6 +11,6 @@ class ConferenceMiddleware: return self.get_response(request) def process_view(self, request, view, view_args, view_kwargs): - if view.__module__ != 'cfp.views': - return - view_kwargs['conference'] = get_current_conf(request) + site = get_current_site(request) + conf = Conference.objects.select_related('site').prefetch_related('staff').get(site=site) + request.conference = conf diff --git a/cfp/mixins.py b/cfp/mixins.py index 095e598..a916d61 100644 --- a/cfp/mixins.py +++ b/cfp/mixins.py @@ -10,4 +10,4 @@ class StaffRequiredMixin(UserPassesTestMixin): class OnSiteMixin: def get_queryset(self): - return super().get_queryset().filter(site=self.kwargs['conference'].site) + return super().get_queryset().filter(site=self.request.conference.site) diff --git a/cfp/utils.py b/cfp/utils.py index d2b9c9c..2404de9 100644 --- a/cfp/utils.py +++ b/cfp/utils.py @@ -1,5 +1,4 @@ from django.utils.crypto import get_random_string -from django.contrib.sites.shortcuts import get_current_site from django.db.models import Q, Sum from django.db.models.functions import Coalesce from django.utils.safestring import mark_safe @@ -7,13 +6,6 @@ from django.utils.safestring import mark_safe from markdown import markdown import bleach -from .models import Conference - - -def get_current_conf(request): - site = get_current_site(request) - return Conference.objects.get(site=site) - def query_sum(queryset, field): return queryset.aggregate(s=Coalesce(Sum(field), 0))['s'] @@ -24,7 +16,7 @@ def generate_user_uid(): def allowed_talks(talks, request): - if not Participation.objects.get(site=get_current_site(request), user=request.user).is_orga(): + if not Participation.objects.get(site=request.conference.site, user=request.user).is_orga(): talks = talks.filter(Q(topics__reviewers=request.user) | Q(speakers=request.user) | Q(proposer=request.user)) return talks.distinct() @@ -37,5 +29,4 @@ def markdown_to_html(md): def is_staff(request, user): - conference = get_current_conf(request) - return user.is_authenticated and (user.is_superuser or conference.staff.filter(pk=user.pk).exists()) + return user.is_authenticated and (user.is_superuser or request.conference.staff.filter(pk=user.pk).exists()) diff --git a/cfp/views.py b/cfp/views.py index 7cbb1ed..486a82a 100644 --- a/cfp/views.py +++ b/cfp/views.py @@ -21,15 +21,16 @@ from .models import Participant, Talk, TalkCategory, Vote, Track, Room from .forms import TalkForm, TalkStaffForm, TalkFilterForm, ParticipantForm, ParticipantStaffForm, ConferenceForm, CreateUserForm, STATUS_VALUES, TrackForm, RoomForm -def home(request, conference): - if conference.home: +def home(request): + if request.conference.home: return render(request, 'cfp/home.html') else: return redirect(reverse('talk-proposal')) -def talk_proposal(request, conference, talk_id=None, participant_id=None): +def talk_proposal(request, talk_id=None, participant_id=None): + conference = request.conference site = conference.site if is_staff(request, request.user): categories = TalkCategory.objects.filter(site=site) @@ -102,19 +103,19 @@ Thanks! }) -def talk_proposal_speaker_edit(request, conference, talk_id, participant_id=None): +def talk_proposal_speaker_edit(request, talk_id, participant_id=None): - talk = get_object_or_404(Talk, token=talk_id, site=conference.site) + talk = get_object_or_404(Talk, token=talk_id, site=request.conference.site) participant = None if participant_id: - participant = get_object_or_404(Participant, token=participant_id, site=conference.site) + participant = get_object_or_404(Participant, token=participant_id, site=request.conference.site) participant_form = ParticipantForm(request.POST or None, instance=participant) if request.method == 'POST' and participant_form.is_valid(): - participant, created = Participant.objects.get_or_create(email=participant_form.cleaned_data['email'], site=conference.site) + participant, created = Participant.objects.get_or_create(email=participant_form.cleaned_data['email'], site=request.conference.site) participant_form = ParticipantForm(request.POST, instance=participant) participant = participant_form.save() participant.save() @@ -129,15 +130,15 @@ def talk_proposal_speaker_edit(request, conference, talk_id, participant_id=None @staff_required -def staff(request, conference): +def staff(request): return render(request, 'cfp/staff/base.html') @staff_required -def talk_list(request, conference): +def talk_list(request): show_filters = False - talks = Talk.objects.filter(site=conference.site) - filter_form = TalkFilterForm(request.GET or None, site=conference.site) + talks = Talk.objects.filter(site=request.conference.site) + filter_form = TalkFilterForm(request.GET or None, site=request.conference.site) # Filtering if filter_form.is_valid(): data = filter_form.cleaned_data @@ -201,7 +202,7 @@ def talk_list(request, conference): glyphicon = 'sort' sort_urls[c] = url.urlencode() sort_glyphicons[c] = glyphicon - talks = talks.prefetch_related('category', 'speakers') + talks = talks.prefetch_related('category', 'speakers', 'track') return render(request, 'cfp/staff/talk_list.html', { 'show_filters': show_filters, 'talk_list': talks, @@ -212,8 +213,8 @@ def talk_list(request, conference): @staff_required -def talk_details(request, conference, talk_id): - talk = get_object_or_404(Talk, token=talk_id, site=conference.site) +def talk_details(request, talk_id): + talk = get_object_or_404(Talk, token=talk_id, site=request.conference.site) message_form = MessageForm(request.POST or None) if request.method == 'POST' and message_form.is_valid(): message = message_form.save(commit=False) @@ -229,8 +230,8 @@ def talk_details(request, conference, talk_id): @staff_required -def talk_vote(request, conference, talk_id, score): - talk = get_object_or_404(Talk, token=talk_id, site=conference.site) +def talk_vote(request, talk_id, score): + talk = get_object_or_404(Talk, token=talk_id, site=request.conference.site) vote, created = Vote.objects.get_or_create(talk=talk, user=request.user) vote.vote = int(score) vote.save() @@ -239,8 +240,8 @@ def talk_vote(request, conference, talk_id, score): @staff_required -def talk_decide(request, conference, talk_id, accept): - talk = get_object_or_404(Talk, token=talk_id, site=conference.site) +def talk_decide(request, talk_id, accept): + talk = get_object_or_404(Talk, token=talk_id, site=request.conference.site) if request.method == 'POST': # Does we need to send a notification to the proposer? m = request.POST.get('message', '').strip() @@ -264,8 +265,8 @@ def talk_decide(request, conference, talk_id, accept): @staff_required -def participant_list(request, conference): - participants = Participant.objects.filter(site=conference.site) \ +def participant_list(request): + participants = Participant.objects.filter(site=request.conference.site) \ .extra(select={'lower_name': 'lower(name)'}) \ .order_by('lower_name') return render(request, 'cfp/staff/participant_list.html', { @@ -274,8 +275,8 @@ def participant_list(request, conference): @staff_required -def participant_details(request, conference, participant_id): - participant = get_object_or_404(Participant, token=participant_id, site=conference.site) +def participant_details(request, participant_id): + participant = get_object_or_404(Participant, token=participant_id, site=request.conference.site) message_form = MessageForm(request.POST or None) if request.method == 'POST' and message_form.is_valid(): message = message_form.save(commit=False) @@ -299,19 +300,19 @@ class ParticipantUpdate(StaffRequiredMixin, OnSiteMixin, UpdateView): @staff_required -def conference(request, conference): - form = ConferenceForm(request.POST or None, instance=conference) +def conference(request): + form = ConferenceForm(request.POST or None, instance=request.conference) if request.method == 'POST' and form.is_valid(): - old_staff = set(conference.staff.all()) + old_staff = set(request.conference.staff.all()) new_conference = form.save() new_staff = set(new_conference.staff.all()) added_staff = new_staff - old_staff protocol = 'https' if request.is_secure() else 'http' - base_url = protocol+'://'+conference.site.domain + base_url = protocol+'://'+request.conference.site.domain url_login = base_url + reverse('login') url_password_reset = base_url + reverse('password_reset') - msg_title = _('[{}] You have been added to the staff team').format(conference.name) + msg_title = _('[{}] You have been added to the staff team').format(request.conference.name) msg_body_template = _("""Hi {}, You have been added to the staff team. @@ -325,11 +326,11 @@ You can now: """) # TODO: send bulk emails for user in added_staff: - msg_body = msg_body_template.format(user.get_full_name(), url_login, url_password_reset, conference.name) + msg_body = msg_body_template.format(user.get_full_name(), url_login, url_password_reset, request.conference.name) send_mail( msg_title, msg_body, - conference.from_email(), + request.conference.from_email(), [user.email], fail_silently=False, ) @@ -351,8 +352,8 @@ class TalkUpdate(StaffRequiredMixin, OnSiteMixin, UpdateView): def get_form_kwargs(self): kwargs = super().get_form_kwargs() kwargs.update({ - 'categories': TalkCategory.objects.filter(site=self.kwargs['conference'].site), - 'tracks': Track.objects.filter(site=self.kwargs['conference'].site), + 'categories': TalkCategory.objects.filter(site=self.request.conference.site), + 'tracks': Track.objects.filter(site=self.request.conference.site), }) return kwargs @@ -373,7 +374,7 @@ class TrackFormMixin(TrackMixin): def get_form_kwargs(self): kwargs = super().get_form_kwargs() kwargs.update({ - 'conference': self.kwargs['conference'], + 'conference': self.request.conference, }) return kwargs @@ -406,7 +407,7 @@ class RoomFormMixin(RoomMixin): def get_form_kwargs(self): kwargs = super().get_form_kwargs() kwargs.update({ - 'conference': self.kwargs['conference'], + 'conference': self.request.conference, }) return kwargs @@ -420,7 +421,7 @@ class RoomUpdate(StaffRequiredMixin, RoomFormMixin, UpdateView): @staff_required -def create_user(request, conference): +def create_user(request): form = CreateUserForm(request.POST or None) if request.method == 'POST' and form.is_valid():