From 58256e0d3bcc99ece01b1aa795061ead1a5a0c55 Mon Sep 17 00:00:00 2001 From: Guilhem Saurel Date: Fri, 1 Jul 2016 23:42:22 +0200 Subject: [PATCH] add conversations about talk in talk descriptions --- .../conversations/_message_detail.html | 8 +++++ .../conversations/_message_form.html | 14 ++++++++ .../templates/conversations/conversation.html | 32 ++++--------------- conversations/urls.py | 1 + conversations/views.py | 24 +++++++++++--- proposals/models.py | 9 +++--- .../templates/proposals/talk_detail.html | 12 +++++++ proposals/views.py | 6 +++- 8 files changed, 69 insertions(+), 37 deletions(-) create mode 100644 conversations/templates/conversations/_message_detail.html create mode 100644 conversations/templates/conversations/_message_form.html diff --git a/conversations/templates/conversations/_message_detail.html b/conversations/templates/conversations/_message_detail.html new file mode 100644 index 0000000..c70f668 --- /dev/null +++ b/conversations/templates/conversations/_message_detail.html @@ -0,0 +1,8 @@ +
+
+ {{ message.created }} | {{ message.author.profile }} +
+
+ {{ message.content }} +
+
diff --git a/conversations/templates/conversations/_message_form.html b/conversations/templates/conversations/_message_form.html new file mode 100644 index 0000000..6dfb3a5 --- /dev/null +++ b/conversations/templates/conversations/_message_form.html @@ -0,0 +1,14 @@ +
+
+ Send a message +
+
+
+ {% csrf_token %} +
+ +
+ +
+
+
diff --git a/conversations/templates/conversations/conversation.html b/conversations/templates/conversations/conversation.html index b7dc3f6..aa958c9 100644 --- a/conversations/templates/conversations/conversation.html +++ b/conversations/templates/conversations/conversation.html @@ -5,36 +5,16 @@ {% block content %} {% for message in message_list %} -
-
- {{ message.date }} | {{ message.author.profile }} -
-
- {{ message.content }} -
-
+{% include 'conversations/_message_detail.html' %} {% endfor %} -
-
- Send a message -
-
-
- {% csrf_token %} -
- -
- -
-
-
+{% include 'conversations/_message_form.html' %} {% endblock %} diff --git a/conversations/urls.py b/conversations/urls.py index 67b148b..5e0cc17 100644 --- a/conversations/urls.py +++ b/conversations/urls.py @@ -7,6 +7,7 @@ urlpatterns = [ url(r'^inbox/$', views.conversation, name='inbox'), url(r'^$', views.correspondents, name='correspondents'), url(r'^with/(?P[\w.@+-]+)/$', views.conversation, name='conversation'), + url(r'^about/(?P[\w.@+-]+)/$', views.talk_conversation, name='talk-conversation'), url(r'^subscribe/(?P[\w.@+-]+)/$', views.subscribe, name='subscribe-conversation'), url(r'^unsubscribe/(?P[\w.@+-]+)/$', views.unsubscribe, name='unsubscribe-conversation'), ] diff --git a/conversations/views.py b/conversations/views.py index 5df8c50..964b2c5 100644 --- a/conversations/views.py +++ b/conversations/views.py @@ -7,6 +7,7 @@ from django.core.urlresolvers import reverse from django.shortcuts import get_object_or_404, redirect, render from accounts.models import Participation +from proposals.models import Talk from .forms import MessageForm @@ -30,11 +31,9 @@ def conversation(request, username=None): form = MessageForm(request.POST or None) if request.method == 'POST' and form.is_valid(): - message = form.save(commit=False) - message.conversation = conversation - message.author = request.user - message.subject = "Assistance request from %s" % message.author.profile - message.save() + form.instance.conversation = conversation + form.instance.author = request.user + form.save() messages.success(request, 'Message sent!') if username: return redirect(reverse('conversation', args=[username])) @@ -47,6 +46,21 @@ def conversation(request, username=None): }) +@login_required +def talk_conversation(request, talk): + + talk = get_object_or_404(Talk, slug=talk) + form = MessageForm(request.POST or None) + + if request.method == 'POST' and form.is_valid(): + form.instance.conversation = talk.conversation + form.instance.author = request.user + form.save() + messages.success(request, 'Message sent!') + + return redirect(talk.get_absolute_url()) + + @login_required def correspondents(request): diff --git a/proposals/models.py b/proposals/models.py index 95ae44b..622f301 100644 --- a/proposals/models.py +++ b/proposals/models.py @@ -53,19 +53,18 @@ class Talk(PonyConfModel): def get_absolute_url(self): return reverse('show-talk', kwargs={'slug': self.slug}) - def is_editable_by(self, user): + def is_moderable_by(self, user): if user.is_superuser: return True - if user == self.proposer: - return True - if user in self.speakers.all(): - return True try: participation = Participation.on_site.get(user=user) except Participation.DoesNotExists: return False return participation.orga or self.topics.filter(reviewers=participation).exists() + def is_editable_by(self, user): + return user == self.proposer or user in self.speakers.all() or self.is_moderable_by(user) + class Vote(PonyConfModel): diff --git a/proposals/templates/proposals/talk_detail.html b/proposals/templates/proposals/talk_detail.html index c41f9bf..6afe041 100644 --- a/proposals/templates/proposals/talk_detail.html +++ b/proposals/templates/proposals/talk_detail.html @@ -34,4 +34,16 @@ {% endfor %} +{% if moderate_perm %} +

Moderation

+ +Messages: +{% for message in talk.conversation.messages.all %} +{% include 'conversations/_message_detail.html' %} +{% endfor %} + +{% include 'conversations/_message_form.html' %} + +{% endif %} + {% endblock %} diff --git a/proposals/views.py b/proposals/views.py index 4a0f182..ede1771 100644 --- a/proposals/views.py +++ b/proposals/views.py @@ -4,6 +4,7 @@ from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.auth.models import User from django.contrib.sites.shortcuts import get_current_site from django.core.exceptions import PermissionDenied +from django.core.urlresolvers import reverse from django.shortcuts import get_object_or_404, redirect, render from django.views.generic import CreateView, DetailView, ListView @@ -81,7 +82,10 @@ class TalkDetail(LoginRequiredMixin, DetailView): queryset = Talk.on_site.all() def get_context_data(self, **kwargs): - return super().get_context_data(edit_perm=self.object.is_editable_by(self.request.user), **kwargs) + kwargs['edit_perm'] = self.object.is_editable_by(self.request.user) + kwargs['moderate_perm'] = self.object.is_moderable_by(self.request.user) + kwargs['form_url'] = reverse('talk-conversation', kwargs={'talk': self.object.slug}) + return super().get_context_data(**kwargs) class TopicList(LoginRequiredMixin, ListView):