Convert document comment deletion view to CBV. Remove unused document comment form.

This commit is contained in:
Roberto Rosario
2015-08-23 21:48:53 -04:00
parent a9517b9645
commit 1aadede546
5 changed files with 44 additions and 110 deletions

View File

@@ -1,14 +0,0 @@
from __future__ import unicode_literals
from django import forms
from .models import Comment
class CommentForm(forms.ModelForm):
"""
A standard model form to allow users to post a comment
"""
class Meta:
fields = ('comment',)
model = Comment

View File

@@ -17,10 +17,6 @@ link_comment_delete = Link(
permissions=(permission_comment_delete,), tags='dangerous', permissions=(permission_comment_delete,), tags='dangerous',
text=_('Delete'), view='comments:comment_delete', args='object.pk' text=_('Delete'), view='comments:comment_delete', args='object.pk'
) )
link_comment_multiple_delete = Link(
permissions=(permission_comment_delete,), tags='dangerous',
text=_('Delete'), view='comments:comment_multiple_delete', args='object.pk'
)
link_comments_for_document = Link( link_comments_for_document = Link(
permissions=(permission_comment_view,), text=_('Comments'), permissions=(permission_comment_view,), text=_('Comments'),
view='comments:comments_for_document', args='object.pk' view='comments:comments_for_document', args='object.pk'

View File

@@ -2,11 +2,13 @@ from __future__ import unicode_literals
from django.conf import settings from django.conf import settings
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from documents.models import Document from documents.models import Document
@python_2_unicode_compatible
class Comment(models.Model): class Comment(models.Model):
document = models.ForeignKey( document = models.ForeignKey(
Document, db_index=True, related_name='comments', Document, db_index=True, related_name='comments',
@@ -23,6 +25,9 @@ class Comment(models.Model):
verbose_name=_('Date time submitted') verbose_name=_('Date time submitted')
) )
def __str__(self):
return self.comment
class Meta: class Meta:
get_latest_by = 'submit_date' get_latest_by = 'submit_date'
ordering = ('-submit_date',) ordering = ('-submit_date',)

View File

@@ -2,20 +2,19 @@ from __future__ import unicode_literals
from django.conf.urls import patterns, url from django.conf.urls import patterns, url
from .views import CommentCreateView, DocumentCommentListView from .views import (
DocumentCommentCreateView, DocumentCommentDeleteView,
DocumentCommentListView
)
urlpatterns = patterns( urlpatterns = patterns(
'document_comments.views', '',
url( url(
r'^comment/(?P<comment_id>\d+)/delete/$', 'comment_delete', r'^comment/(?P<pk>\d+)/delete/$', DocumentCommentDeleteView.as_view(),
name='comment_delete' name='comment_delete'
), ),
url( url(
r'^comment/multiple/delete/$', 'comment_multiple_delete', r'^(?P<pk>\d+)/comment/add/$', DocumentCommentCreateView.as_view(),
name='comment_multiple_delete'
),
url(
r'^(?P<pk>\d+)/comment/add/$', CommentCreateView.as_view(),
name='comment_add' name='comment_add'
), ),
url( url(

View File

@@ -10,11 +10,12 @@ from django.template import RequestContext
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from acls.models import AccessControlList from acls.models import AccessControlList
from common.generics import SingleObjectCreateView, SingleObjectListView from common.generics import (
SingleObjectCreateView, SingleObjectDeleteView, SingleObjectListView
)
from documents.models import Document from documents.models import Document
from permissions import Permission from permissions import Permission
from .forms import CommentForm
from .models import Comment from .models import Comment
from .permissions import ( from .permissions import (
permission_comment_create, permission_comment_delete, permission_comment_create, permission_comment_delete,
@@ -22,87 +23,7 @@ from .permissions import (
) )
def comment_delete(request, comment_id=None, comment_id_list=None): class DocumentCommentCreateView(SingleObjectCreateView):
post_action_redirect = None
if comment_id:
comments = [get_object_or_404(Comment, pk=comment_id)]
elif comment_id_list:
comments = [
get_object_or_404(
Comment, pk=comment_id
) for comment_id in comment_id_list.split(',')
]
try:
Permission.check_permissions(request.user, (
permission_comment_delete,))
except PermissionDenied:
comments = AccessControlList.objects.filter_by_access(
permission_comment_delete, request.user, comments,
)
if not comments:
messages.error(request, _('At least one comment must be selected.'))
return HttpResponseRedirect(
request.META.get(
'HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL)
)
)
previous = request.POST.get(
'previous', request.GET.get(
'previous', request.META.get(
'HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL)
)
)
)
next = request.POST.get(
'next', request.GET.get(
'next', post_action_redirect if post_action_redirect else request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL))
)
)
if request.method == 'POST':
for comment in comments:
try:
comment.delete()
messages.success(
request, _('Comment "%s" deleted successfully.') % comment
)
except Exception as exception:
messages.error(
request, _(
'Error deleting comment "%(comment)s": %(error)s'
) % {
'comment': comment, 'error': exception
}
)
return HttpResponseRedirect(next)
context = {
'delete_view': True,
'previous': previous,
'next': next,
}
if len(comments) == 1:
context['object'] = comments[0].document
context['title'] = _('Delete comment?')
elif len(comments) > 1:
context['title'] = _('Delete comments?')
return render_to_response('appearance/generic_confirm.html', context,
context_instance=RequestContext(request))
def comment_multiple_delete(request):
return comment_delete(
request, comment_id_list=request.GET.get('id_list', [])
)
class CommentCreateView(SingleObjectCreateView):
fields = ('comment',) fields = ('comment',)
model = Comment model = Comment
object_verbose_name = _('Comment') object_verbose_name = _('Comment')
@@ -117,7 +38,7 @@ class CommentCreateView(SingleObjectCreateView):
permission_comment_create, request.user, self.get_document() permission_comment_create, request.user, self.get_document()
) )
return super(CommentCreateView, self).dispatch(request, *args, **kwargs) return super(DocumentCommentCreateView, self).dispatch(request, *args, **kwargs)
def get_document(self): def get_document(self):
return get_object_or_404(Document, pk=self.kwargs['pk']) return get_object_or_404(Document, pk=self.kwargs['pk'])
@@ -139,6 +60,33 @@ class CommentCreateView(SingleObjectCreateView):
) )
class DocumentCommentDeleteView(SingleObjectDeleteView):
model = Comment
def dispatch(self, request, *args, **kwargs):
try:
Permission.check_permissions(
request.user, (permission_comment_delete,)
)
except PermissionDenied:
AccessControlList.objects.check_access(
permission_comment_delete, request.user, self.get_object().document
)
return super(DocumentCommentDeleteView, self).dispatch(request, *args, **kwargs)
def get_extra_context(self):
return {
'object': self.get_object().document,
'title': _('Delete comment: %s?') % self.get_object(),
}
def get_post_action_redirect(self):
return reverse(
'comments:comments_for_document', args=(self.get_object().document.pk,)
)
class DocumentCommentListView(SingleObjectListView): class DocumentCommentListView(SingleObjectListView):
def get_document(self): def get_document(self):
return get_object_or_404(Document, pk=self.kwargs['pk']) return get_object_or_404(Document, pk=self.kwargs['pk'])