diff --git a/mayan/apps/document_comments/forms.py b/mayan/apps/document_comments/forms.py deleted file mode 100644 index ac6f02c69a..0000000000 --- a/mayan/apps/document_comments/forms.py +++ /dev/null @@ -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 diff --git a/mayan/apps/document_comments/links.py b/mayan/apps/document_comments/links.py index cb9fc469bd..ed93ed017c 100644 --- a/mayan/apps/document_comments/links.py +++ b/mayan/apps/document_comments/links.py @@ -17,10 +17,6 @@ link_comment_delete = Link( permissions=(permission_comment_delete,), tags='dangerous', 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( permissions=(permission_comment_view,), text=_('Comments'), view='comments:comments_for_document', args='object.pk' diff --git a/mayan/apps/document_comments/models.py b/mayan/apps/document_comments/models.py index e2b618497d..3408e82255 100644 --- a/mayan/apps/document_comments/models.py +++ b/mayan/apps/document_comments/models.py @@ -2,11 +2,13 @@ from __future__ import unicode_literals from django.conf import settings from django.db import models +from django.utils.encoding import python_2_unicode_compatible from django.utils.translation import ugettext_lazy as _ from documents.models import Document +@python_2_unicode_compatible class Comment(models.Model): document = models.ForeignKey( Document, db_index=True, related_name='comments', @@ -23,6 +25,9 @@ class Comment(models.Model): verbose_name=_('Date time submitted') ) + def __str__(self): + return self.comment + class Meta: get_latest_by = 'submit_date' ordering = ('-submit_date',) diff --git a/mayan/apps/document_comments/urls.py b/mayan/apps/document_comments/urls.py index 7e49ac57a3..b2c68b989e 100644 --- a/mayan/apps/document_comments/urls.py +++ b/mayan/apps/document_comments/urls.py @@ -2,20 +2,19 @@ from __future__ import unicode_literals from django.conf.urls import patterns, url -from .views import CommentCreateView, DocumentCommentListView +from .views import ( + DocumentCommentCreateView, DocumentCommentDeleteView, + DocumentCommentListView +) urlpatterns = patterns( - 'document_comments.views', + '', url( - r'^comment/(?P\d+)/delete/$', 'comment_delete', + r'^comment/(?P\d+)/delete/$', DocumentCommentDeleteView.as_view(), name='comment_delete' ), url( - r'^comment/multiple/delete/$', 'comment_multiple_delete', - name='comment_multiple_delete' - ), - url( - r'^(?P\d+)/comment/add/$', CommentCreateView.as_view(), + r'^(?P\d+)/comment/add/$', DocumentCommentCreateView.as_view(), name='comment_add' ), url( diff --git a/mayan/apps/document_comments/views.py b/mayan/apps/document_comments/views.py index ae0429b75b..ee33bc0ad3 100644 --- a/mayan/apps/document_comments/views.py +++ b/mayan/apps/document_comments/views.py @@ -10,11 +10,12 @@ from django.template import RequestContext from django.utils.translation import ugettext_lazy as _ from acls.models import AccessControlList -from common.generics import SingleObjectCreateView, SingleObjectListView +from common.generics import ( + SingleObjectCreateView, SingleObjectDeleteView, SingleObjectListView +) from documents.models import Document from permissions import Permission -from .forms import CommentForm from .models import Comment from .permissions import ( permission_comment_create, permission_comment_delete, @@ -22,87 +23,7 @@ from .permissions import ( ) -def comment_delete(request, comment_id=None, comment_id_list=None): - 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): +class DocumentCommentCreateView(SingleObjectCreateView): fields = ('comment',) model = Comment object_verbose_name = _('Comment') @@ -117,7 +38,7 @@ class CommentCreateView(SingleObjectCreateView): 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): 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): def get_document(self): return get_object_or_404(Document, pk=self.kwargs['pk'])