set request.conference instead of views conf kwarg

This commit is contained in:
Élie Bouttier 2017-08-12 14:17:00 +02:00
parent 06deb53ef9
commit fce781dae7
6 changed files with 48 additions and 57 deletions

View File

@ -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

View File

@ -1,5 +1,4 @@
from .utils import get_current_conf
def conference(request):
return {'conference': get_current_conf(request)}
return {'conference': request.conference}

View File

@ -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

View File

@ -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)

View File

@ -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())

View File

@ -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():