remove the use of CurrentSiteManager
This commit is contained in:
parent
0206181158
commit
fa659ee595
20
accounts/migrations/0002_auto_20160709_2059.py
Normal file
20
accounts/migrations/0002_auto_20160709_2059.py
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by Django 1.9.7 on 2016-07-09 20:59
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('accounts', '0001_initial'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterModelManagers(
|
||||||
|
name='participation',
|
||||||
|
managers=[
|
||||||
|
],
|
||||||
|
),
|
||||||
|
]
|
|
@ -1,7 +1,6 @@
|
||||||
from enum import IntEnum
|
from enum import IntEnum
|
||||||
|
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.contrib.sites.managers import CurrentSiteManager
|
|
||||||
from django.contrib.sites.models import Site
|
from django.contrib.sites.models import Site
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
@ -44,9 +43,6 @@ class Participation(PonyConfModel):
|
||||||
sound = models.BooleanField("I need sound", default=False)
|
sound = models.BooleanField("I need sound", default=False)
|
||||||
orga = models.BooleanField(default=False)
|
orga = models.BooleanField(default=False)
|
||||||
|
|
||||||
objects = models.Manager()
|
|
||||||
on_site = CurrentSiteManager()
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
# A User can participe only once to a Conference (= Site)
|
# A User can participe only once to a Conference (= Site)
|
||||||
unique_together = ('site', 'user')
|
unique_together = ('site', 'user')
|
||||||
|
|
|
@ -10,7 +10,7 @@ from .models import Participation, Profile
|
||||||
|
|
||||||
@receiver(user_logged_in)
|
@receiver(user_logged_in)
|
||||||
def on_user_logged_in(sender, request, user, **kwargs):
|
def on_user_logged_in(sender, request, user, **kwargs):
|
||||||
proposition, created = Participation.on_site.get_or_create(user=user, site=get_current_site(request))
|
proposition, created = Participation.objects.get_or_create(user=user, site=get_current_site(request))
|
||||||
if created:
|
if created:
|
||||||
messages.info(request, "Please check your profile!\n", fail_silently=True) # FIXME
|
messages.info(request, "Please check your profile!\n", fail_silently=True) # FIXME
|
||||||
messages.success(request, 'Welcome!', fail_silently=True) # FIXME
|
messages.success(request, 'Welcome!', fail_silently=True) # FIXME
|
||||||
|
|
|
@ -51,7 +51,7 @@ class AccountTests(TestCase):
|
||||||
self.assertEqual(self.client.get(reverse('list-participant')).status_code, 200)
|
self.assertEqual(self.client.get(reverse('list-participant')).status_code, 200)
|
||||||
self.assertEqual(self.client.post(reverse('edit-participant', kwargs={'username': 'a'}),
|
self.assertEqual(self.client.post(reverse('edit-participant', kwargs={'username': 'a'}),
|
||||||
{'biography': 'foo', 'notes': 'bar'}).status_code, 403)
|
{'biography': 'foo', 'notes': 'bar'}).status_code, 403)
|
||||||
b = Participation.on_site.get(user=b)
|
b = Participation.objects.get(user=b)
|
||||||
b.orga = True
|
b.orga = True
|
||||||
b.save()
|
b.save()
|
||||||
self.assertEqual(self.client.post(reverse('edit-participant', kwargs={'username': 'a'}),
|
self.assertEqual(self.client.post(reverse('edit-participant', kwargs={'username': 'a'}),
|
||||||
|
|
|
@ -3,6 +3,7 @@ from django.contrib.auth.decorators import login_required
|
||||||
from django.core.exceptions import PermissionDenied
|
from django.core.exceptions import PermissionDenied
|
||||||
from django.shortcuts import get_object_or_404, render
|
from django.shortcuts import get_object_or_404, render
|
||||||
from django.views.generic import ListView
|
from django.views.generic import ListView
|
||||||
|
from django.contrib.sites.shortcuts import get_current_site
|
||||||
|
|
||||||
from registration.backends.default.views import RegistrationView
|
from registration.backends.default.views import RegistrationView
|
||||||
|
|
||||||
|
@ -25,7 +26,7 @@ def profile(request):
|
||||||
|
|
||||||
forms = [UserForm(request.POST or None, instance=request.user),
|
forms = [UserForm(request.POST or None, instance=request.user),
|
||||||
ProfileForm(request.POST or None, instance=request.user.profile),
|
ProfileForm(request.POST or None, instance=request.user.profile),
|
||||||
ParticipationForm(request.POST or None, instance=Participation.on_site.get(user=request.user))]
|
ParticipationForm(request.POST or None, instance=Participation.objects.get(site=get_current_site(request), user=request.user))]
|
||||||
|
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
if all(form.is_valid() for form in forms):
|
if all(form.is_valid() for form in forms):
|
||||||
|
@ -39,7 +40,8 @@ def profile(request):
|
||||||
|
|
||||||
|
|
||||||
class ParticipantList(StaffRequiredMixin, ListView):
|
class ParticipantList(StaffRequiredMixin, ListView):
|
||||||
queryset = Participation.on_site.all()
|
def get_queryset(self):
|
||||||
|
return Participation.objects.filter(site=get_current_site(self.request)).all()
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
|
@ -52,7 +54,7 @@ def edit(request, username):
|
||||||
participation_form_class = ParticipationOrgaForm if is_orga(request, request.user) else ParticipationForm
|
participation_form_class = ParticipationOrgaForm if is_orga(request, request.user) else ParticipationForm
|
||||||
forms = [UserForm(request.POST or None, instance=profile.user),
|
forms = [UserForm(request.POST or None, instance=profile.user),
|
||||||
ProfileOrgaForm(request.POST or None, instance=profile),
|
ProfileOrgaForm(request.POST or None, instance=profile),
|
||||||
participation_form_class(request.POST or None, instance=Participation.on_site.get(user=profile.user))]
|
participation_form_class(request.POST or None, instance=Participation.objects.get(site=get_current_site(request), user=profile.user))]
|
||||||
|
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
if all(form.is_valid() for form in forms):
|
if all(form.is_valid() for form in forms):
|
||||||
|
|
|
@ -30,7 +30,7 @@ def check_talk(talk):
|
||||||
reviewers = User.objects.filter(topic__talk=talk)
|
reviewers = User.objects.filter(topic__talk=talk)
|
||||||
talk.conversation.subscribers.add(*reviewers)
|
talk.conversation.subscribers.add(*reviewers)
|
||||||
for user in talk.speakers.all():
|
for user in talk.speakers.all():
|
||||||
participation, created = Participation.on_site.get_or_create(user=user, site=talk.site)
|
participation, created = Participation.objects.get_or_create(user=user, site=talk.site)
|
||||||
participation.conversation.subscribers.add(*reviewers)
|
participation.conversation.subscribers.add(*reviewers)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -66,7 +66,7 @@ def talk_conversation(request, talk):
|
||||||
@login_required
|
@login_required
|
||||||
def correspondents(request):
|
def correspondents(request):
|
||||||
|
|
||||||
correspondent_list = Participation.on_site.filter(conversation__subscribers=request.user)
|
correspondent_list = Participation.objects.filter(site=get_current_site(request), conversation__subscribers=request.user)
|
||||||
|
|
||||||
return render(request, 'conversations/correspondents.html', {
|
return render(request, 'conversations/correspondents.html', {
|
||||||
'correspondent_list': correspondent_list,
|
'correspondent_list': correspondent_list,
|
||||||
|
|
25
proposals/migrations/0002_auto_20160709_2059.py
Normal file
25
proposals/migrations/0002_auto_20160709_2059.py
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by Django 1.9.7 on 2016-07-09 20:59
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('proposals', '0001_initial'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterModelManagers(
|
||||||
|
name='talk',
|
||||||
|
managers=[
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.AlterModelManagers(
|
||||||
|
name='topic',
|
||||||
|
managers=[
|
||||||
|
],
|
||||||
|
),
|
||||||
|
]
|
|
@ -1,7 +1,6 @@
|
||||||
from enum import IntEnum
|
from enum import IntEnum
|
||||||
|
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.contrib.sites.managers import CurrentSiteManager
|
|
||||||
from django.contrib.sites.models import Site
|
from django.contrib.sites.models import Site
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
from django.core.validators import MaxValueValidator, MinValueValidator
|
from django.core.validators import MaxValueValidator, MinValueValidator
|
||||||
|
@ -26,9 +25,6 @@ class Topic(PonyConfModel):
|
||||||
|
|
||||||
reviewers = models.ManyToManyField(User, blank=True)
|
reviewers = models.ManyToManyField(User, blank=True)
|
||||||
|
|
||||||
objects = models.Manager()
|
|
||||||
on_site = CurrentSiteManager()
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def talks(self):
|
def talks(self):
|
||||||
return Talk.objects.filter(topics=self).all()
|
return Talk.objects.filter(topics=self).all()
|
||||||
|
@ -55,9 +51,6 @@ class Talk(PonyConfModel):
|
||||||
event = models.IntegerField(choices=enum_to_choices(EVENTS), default=EVENTS.conference_short.value)
|
event = models.IntegerField(choices=enum_to_choices(EVENTS), default=EVENTS.conference_short.value)
|
||||||
accepted = models.NullBooleanField(default=None)
|
accepted = models.NullBooleanField(default=None)
|
||||||
|
|
||||||
objects = models.Manager()
|
|
||||||
on_site = CurrentSiteManager()
|
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.title
|
return self.title
|
||||||
|
|
||||||
|
@ -68,7 +61,7 @@ class Talk(PonyConfModel):
|
||||||
if user.is_superuser:
|
if user.is_superuser:
|
||||||
return True
|
return True
|
||||||
try:
|
try:
|
||||||
participation = Participation.on_site.get(user=user)
|
participation = Participation.objects.get(site=self.site, user=user)
|
||||||
except Participation.DoesNotExists:
|
except Participation.DoesNotExists:
|
||||||
return False
|
return False
|
||||||
return participation.orga or self.topics.filter(reviewers=participation.user).exists()
|
return participation.orga or self.topics.filter(reviewers=participation.user).exists()
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
{% for speaker in participation_list %}
|
{% for speaker in participation_list %}
|
||||||
<li><a href="{% url 'show-speaker' username=speaker.user.username %}">{{ speaker }}</a></li>
|
<li><a href="{% url 'show-speaker' username=speaker.username %}">{{ speaker.profile }}</a></li>
|
||||||
{% empty %}
|
{% empty %}
|
||||||
<li><i>No speakers.</i></li>
|
<li><i>No speakers.</i></li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
|
@ -20,13 +20,13 @@ class ProposalsTests(TestCase):
|
||||||
self.client.login(username='a', password='a')
|
self.client.login(username='a', password='a')
|
||||||
self.client.post(reverse('add-talk'), {'title': 'super talk', 'description': 'super', 'event': 1, 'topics': 1,
|
self.client.post(reverse('add-talk'), {'title': 'super talk', 'description': 'super', 'event': 1, 'topics': 1,
|
||||||
'speakers': 1})
|
'speakers': 1})
|
||||||
talk = Talk.on_site.first()
|
talk = Talk.objects.first()
|
||||||
self.assertEqual(str(talk), 'super talk')
|
self.assertEqual(str(talk), 'super talk')
|
||||||
self.assertEqual(talk.description, 'super')
|
self.assertEqual(talk.description, 'super')
|
||||||
self.client.post(reverse('edit-talk', kwargs={'talk': 'super-talk'}),
|
self.client.post(reverse('edit-talk', kwargs={'talk': 'super-talk'}),
|
||||||
{'title': 'mega talk', 'description': 'mega', 'event': 1, 'speakers': 1})
|
{'title': 'mega talk', 'description': 'mega', 'event': 1, 'speakers': 1})
|
||||||
self.assertEqual(str(talk), 'super talk') # title is read only there
|
self.assertEqual(str(talk), 'super talk') # title is read only there
|
||||||
talk = Talk.on_site.first()
|
talk = Talk.objects.first()
|
||||||
self.assertEqual(talk.description, 'mega')
|
self.assertEqual(talk.description, 'mega')
|
||||||
|
|
||||||
# Status Code
|
# Status Code
|
||||||
|
@ -71,9 +71,9 @@ class ProposalsTests(TestCase):
|
||||||
def test_topic_edition_permissions(self):
|
def test_topic_edition_permissions(self):
|
||||||
# Only orga and superuser can edit topics
|
# Only orga and superuser can edit topics
|
||||||
self.client.login(username='b', password='b')
|
self.client.login(username='b', password='b')
|
||||||
self.assertFalse(Participation.on_site.get(user__username='b').orga)
|
self.assertFalse(Participation.objects.get(user__username='b').orga)
|
||||||
self.assertEqual(self.client.get(reverse('edit-topic', kwargs={'slug': 'topipo'})).status_code, 302)
|
self.assertEqual(self.client.get(reverse('edit-topic', kwargs={'slug': 'topipo'})).status_code, 302)
|
||||||
Participation.on_site.filter(user__username='b').update(orga=True)
|
Participation.objects.filter(user__username='b').update(orga=True)
|
||||||
self.assertEqual(self.client.get(reverse('edit-topic', kwargs={'slug': 'topipo'})).status_code, 200)
|
self.assertEqual(self.client.get(reverse('edit-topic', kwargs={'slug': 'topipo'})).status_code, 200)
|
||||||
self.client.login(username='c', password='c') # superuser
|
self.client.login(username='c', password='c') # superuser
|
||||||
self.assertEqual(self.client.get(reverse('edit-topic', kwargs={'slug': 'topipo'})).status_code, 200)
|
self.assertEqual(self.client.get(reverse('edit-topic', kwargs={'slug': 'topipo'})).status_code, 200)
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
from django.db.models import Q, Sum
|
from django.db.models import Q, Sum
|
||||||
from django.db.models.functions import Coalesce
|
from django.db.models.functions import Coalesce
|
||||||
|
from django.contrib.sites.shortcuts import get_current_site
|
||||||
|
|
||||||
from accounts.models import Participation
|
from accounts.models import Participation
|
||||||
|
|
||||||
|
@ -9,7 +10,7 @@ def query_sum(queryset, field):
|
||||||
|
|
||||||
|
|
||||||
def allowed_talks(talks, request):
|
def allowed_talks(talks, request):
|
||||||
participation = Participation.on_site.get(user=request.user)
|
participation = Participation.objects.get(site=get_current_site(request), user=request.user)
|
||||||
if not participation.is_orga():
|
if not participation.is_orga():
|
||||||
talks = talks.filter(Q(topics__reviewers=participation.user) | Q(speakers=request.user) | Q(proposer=request.user))
|
talks = talks.filter(Q(topics__reviewers=participation.user) | Q(speakers=request.user) | Q(proposer=request.user))
|
||||||
return talks.distinct()
|
return talks.distinct()
|
||||||
|
|
|
@ -28,15 +28,15 @@ def home(request):
|
||||||
@login_required
|
@login_required
|
||||||
def talk_list(request):
|
def talk_list(request):
|
||||||
return render(request, 'proposals/talks.html', {
|
return render(request, 'proposals/talks.html', {
|
||||||
'my_talks': Talk.on_site.filter(Q(speakers=request.user) | Q(proposer=request.user)).distinct(),
|
'my_talks': Talk.objects.filter(site=get_current_site(request)).filter(Q(speakers=request.user) | Q(proposer=request.user)).distinct(),
|
||||||
'other_talks': allowed_talks(Talk.on_site.exclude(speakers=request.user, proposer=request.user), request)
|
'other_talks': allowed_talks(Talk.objects.filter(site=get_current_site(request)).exclude(speakers=request.user, proposer=request.user), request)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def talk_list_by_topic(request, topic):
|
def talk_list_by_topic(request, topic):
|
||||||
topic = get_object_or_404(Topic, slug=topic)
|
topic = get_object_or_404(Topic, slug=topic)
|
||||||
talks = allowed_talks(Talk.on_site.filter(topics=topic), request)
|
talks = allowed_talks(Talk.objects.filter(site=topic.site, topics=topic), request)
|
||||||
return render(request, 'proposals/talk_list.html', {'title': 'Talks related to %s:' % topic, 'talk_list': talks})
|
return render(request, 'proposals/talk_list.html', {'title': 'Talks related to %s:' % topic, 'talk_list': talks})
|
||||||
|
|
||||||
|
|
||||||
|
@ -70,12 +70,13 @@ def talk_edit(request, talk=None):
|
||||||
|
|
||||||
|
|
||||||
class TalkDetail(LoginRequiredMixin, DetailView):
|
class TalkDetail(LoginRequiredMixin, DetailView):
|
||||||
queryset = Talk.on_site.all()
|
def get_queryset(self):
|
||||||
|
return Talk.objects.filter(site=get_current_site(self.request)).all()
|
||||||
|
|
||||||
def get_context_data(self, **ctx):
|
def get_context_data(self, **ctx):
|
||||||
user = self.request.user
|
user = self.request.user
|
||||||
if self.object.is_moderable_by(user):
|
if self.object.is_moderable_by(user):
|
||||||
vote = Vote.objects.filter(talk=self.object, user=Participation.on_site.get(user=user)).first()
|
vote = Vote.objects.filter(talk=self.object, user=Participation.objects.get(site=get_current_site(self.request), user=user)).first()
|
||||||
ctx.update(edit_perm=True, moderate_perm=True, vote=vote,
|
ctx.update(edit_perm=True, moderate_perm=True, vote=vote,
|
||||||
form_url=reverse('talk-conversation', kwargs={'talk': self.object.slug}))
|
form_url=reverse('talk-conversation', kwargs={'talk': self.object.slug}))
|
||||||
else:
|
else:
|
||||||
|
@ -85,7 +86,9 @@ class TalkDetail(LoginRequiredMixin, DetailView):
|
||||||
|
|
||||||
class TopicMixin(object):
|
class TopicMixin(object):
|
||||||
model = Topic
|
model = Topic
|
||||||
queryset = Topic.on_site.all()
|
|
||||||
|
def get_queryset(self):
|
||||||
|
return Topic.objects.filter(site=get_current_site(self.request)).all()
|
||||||
|
|
||||||
|
|
||||||
class TopicList(LoginRequiredMixin, TopicMixin, ListView):
|
class TopicList(LoginRequiredMixin, TopicMixin, ListView):
|
||||||
|
@ -105,15 +108,18 @@ class TopicUpdate(OrgaRequiredMixin, TopicMixin, UpdateView):
|
||||||
|
|
||||||
|
|
||||||
class SpeakerList(StaffRequiredMixin, ListView):
|
class SpeakerList(StaffRequiredMixin, ListView):
|
||||||
queryset = Participation.on_site.filter(user__talk__in=Talk.on_site.all()).distinct()
|
|
||||||
template_name = 'proposals/speaker_list.html'
|
template_name = 'proposals/speaker_list.html'
|
||||||
|
|
||||||
|
def get_queryset(self):
|
||||||
|
current_site = get_current_site(request)
|
||||||
|
return User.objects.filter(talk__in=Talk.objects.filter(site=current_site)).all().distinct()
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def vote(request, talk, score):
|
def vote(request, talk, score):
|
||||||
site = get_current_site(request)
|
current_site = get_current_site(request)
|
||||||
talk = get_object_or_404(Talk, site=site, slug=talk)
|
talk = get_object_or_404(Talk, site=current_site, slug=talk)
|
||||||
user = Participation.on_site.get(user=request.user)
|
user = Participation.objects.get(site=current_site, user=request.user)
|
||||||
if not talk.is_moderable_by(request.user):
|
if not talk.is_moderable_by(request.user):
|
||||||
raise PermissionDenied()
|
raise PermissionDenied()
|
||||||
vote, created = Vote.objects.get_or_create(talk=talk, user=user)
|
vote, created = Vote.objects.get_or_create(talk=talk, user=user)
|
||||||
|
@ -128,5 +134,5 @@ def user_details(request, username):
|
||||||
speaker = get_object_or_404(User, username=username)
|
speaker = get_object_or_404(User, username=username)
|
||||||
return render(request, 'proposals/user_details.html', {
|
return render(request, 'proposals/user_details.html', {
|
||||||
'profile': speaker.profile,
|
'profile': speaker.profile,
|
||||||
'talk_list': allowed_talks(Talk.on_site.filter(speakers=speaker), request),
|
'talk_list': allowed_talks(Talk.objects.filter(site=get_current_site(request), speakers=speaker), request),
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in New Issue
Block a user