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 @@
+
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
-
-
-
-
-
+{% 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):