Add ability to sticky/delete topics

This commit is contained in:
Trever Fischer
2012-04-18 10:33:36 -04:00
parent 1626161f75
commit 8b5fdc6a1d
4 changed files with 43 additions and 1 deletions

View File

@@ -67,10 +67,20 @@ class Topic(models.Model):
class Meta:
ordering = ['-sticky', '-updated']
permissions = (
('delete_topic', "Can delete topics"),
('move_topic', "Can move topics"),
('sticky_topic', "Can sticky topics"),
)
def save(self, *args, **kwargs):
unique_slug(self, slug_source='title', slug_field='slug')
super(Topic, self).save(*args, **kwargs)
def delete(self, *args, **kwargs):
for p in self.rootPost.get_descendants(True):
p.delete()
super(Topic, self).delete(*args, **kwargs)
def lastPost(self):
try:

View File

@@ -5,7 +5,9 @@ urlpatterns = patterns('forums',
url(r'^(?P<forum>.*)/$', 'views.forum'),
url(r'^(?P<forumID>.*)/new$', 'views.newTopic'),
url(r'^(?P<forumSlug>.*)/(?P<topicID>.*)/(?P<topicSlug>.*)$', 'views.topic'),
url(r'^delete/(?P<topicID>.*)', 'views.deleteTopic'),
url(r'^topic/(?P<topicID>.*)$', 'views.topic'),
url(r'^sticky/(?P<topicID>.*)', 'views.stickyTopic'),
url(r'^reply/(?P<topicID>.*)', 'views.reply'),
url(r'^reply$', 'views.reply'),
url(r'^post/(?P<id>.*)$', 'views.post'),

View File

@@ -1,6 +1,6 @@
import models
import forms
from django.contrib.auth.decorators import login_required
from django.contrib.auth.decorators import login_required, permission_required
from django.shortcuts import render_to_response
from django.http import HttpResponseRedirect
from django.template import RequestContext
@@ -63,3 +63,17 @@ def newTopic(request, forumID=None):
topic.save()
return HttpResponseRedirect(reverse('forums.views.post', kwargs={'id': reply.id}))
return render_to_response('forums/newTopic.html', {"forum":parentForum, "replyForm":replyForm, "topicForm": topicForm}, context_instance = RequestContext(request))
@permission_required('forums.delete_topic')
def deleteTopic(request, topicID):
topic = models.Topic.objects.get(id__exact=topicID)
forumID = topic.forum.slug
topic.delete()
return HttpResponseRedirect(reverse('forums.views.forum', kwargs={'forum': forumID}))
@permission_required('forums.sticky_topic')
def stickyTopic(request, topicID):
topic = models.Topic.objects.get(id__exact=topicID)
topic.sticky = (not topic.sticky)
topic.save()
return HttpResponseRedirect(reverse('forums.views.topic', kwargs={'topicID': topic.id}))

View File

@@ -17,6 +17,22 @@
<div class="avatar">{% avatar topic.rootPost.user 32 %}</div>
<h2>{{topic.title}}</h2>
<div class="byline">Started by <span itemprop="author">{{topic.rootPost.user}}</span> {{ topic.created|timesince }} ago</div>
{% if perms.forums %}
<ul>
{% if perms.forums.delete_topic %}
<li><a href="{% url forums.views.deleteTopic topicID=topic.id %}">Delete Topic</a></li>
{% endif %}
{% if perms.forums.sticky_topic %}
<li><a href="{% url forums.views.stickyTopic topicID=topic.id %}">
{% if topic.sticky %}
UnSticky
{% else %}
Make Sticky
{% endif %}
</a></li>
{% endif %}
</ul>
{% endif %}
<br style="clear:both;"/>
{% include "forums/_post.html" with post=topic.rootPost %}
</div>