Update document comments app
Add keyword arguments to the app links. Remove use of `raise_404`. Update URL parameters to use document_id and comment_id. Signed-off-by: Roberto Rosario <Roberto.Rosario@mayan-edms.com>
This commit is contained in:
@@ -2,7 +2,7 @@ from __future__ import absolute_import, unicode_literals
|
||||
|
||||
from rest_framework import generics
|
||||
|
||||
from mayan.apps.common.mixins import ExternalObjectViewMixin
|
||||
from mayan.apps.common.mixins import ExternalObjectMixin
|
||||
from mayan.apps.documents.models import Document
|
||||
|
||||
from .permissions import (
|
||||
@@ -12,13 +12,13 @@ from .permissions import (
|
||||
from .serializers import CommentSerializer, WritableCommentSerializer
|
||||
|
||||
|
||||
class APICommentListView(ExternalObjectViewMixin, generics.ListCreateAPIView):
|
||||
class APICommentListView(ExternalObjectMixin, generics.ListCreateAPIView):
|
||||
"""
|
||||
get: Returns a list of all the document comments.
|
||||
post: Create a new document comment.
|
||||
"""
|
||||
external_object_pk_url_kwarg = 'document_pk'
|
||||
external_object_class = Document
|
||||
external_object_pk_url_kwarg = 'document_id'
|
||||
|
||||
def get_document(self):
|
||||
return self.get_external_object()
|
||||
@@ -59,14 +59,14 @@ class APICommentListView(ExternalObjectViewMixin, generics.ListCreateAPIView):
|
||||
return context
|
||||
|
||||
|
||||
class APICommentView(ExternalObjectViewMixin, generics.RetrieveDestroyAPIView):
|
||||
class APICommentView(ExternalObjectMixin, generics.RetrieveDestroyAPIView):
|
||||
"""
|
||||
delete: Delete the selected document comment.
|
||||
get: Returns the details of the selected document comment.
|
||||
"""
|
||||
external_object_pk_url_kwarg = 'document_pk'
|
||||
external_object_class = Document
|
||||
lookup_url_kwarg = 'comment_pk'
|
||||
external_object_pk_url_kwarg = 'document_id'
|
||||
lookup_url_kwarg = 'comment_id'
|
||||
serializer_class = CommentSerializer
|
||||
|
||||
def get_document(self):
|
||||
|
||||
@@ -60,18 +60,18 @@ class DocumentCommentsApp(MayanAppConfig):
|
||||
|
||||
SourceColumn(source=Comment, label=_('Date'), attribute='submit_date')
|
||||
SourceColumn(
|
||||
source=Comment, label=_('User'),
|
||||
func=lambda context: context['object'].user.get_full_name() if context['object'].user.get_full_name() else context['object'].user
|
||||
func=lambda context: context['object'].user.get_full_name() if context['object'].user.get_full_name() else context['object'].user,
|
||||
label=_('User'), source=Comment
|
||||
)
|
||||
SourceColumn(source=Comment, label=_('Comment'), attribute='comment')
|
||||
|
||||
document_page_search.add_model_field(
|
||||
label=_('Comments'),
|
||||
field='document_version__document__comments__comment',
|
||||
label=_('Comments')
|
||||
)
|
||||
document_search.add_model_field(
|
||||
field='comments__comment',
|
||||
label=_('Comments')
|
||||
label=_('Comments'),
|
||||
field='comments__comment'
|
||||
)
|
||||
|
||||
menu_sidebar.bind_links(
|
||||
|
||||
@@ -5,12 +5,12 @@ from django.utils.translation import ugettext_lazy as _
|
||||
from mayan.apps.events import EventTypeNamespace
|
||||
|
||||
namespace = EventTypeNamespace(
|
||||
name='document_comments', label=_('Document comments')
|
||||
label=_('Document comments'), name='document_comments'
|
||||
)
|
||||
|
||||
event_document_comment_created = namespace.add_event_type(
|
||||
name='create', label=_('Document comment created')
|
||||
label=_('Document comment created'), name='create'
|
||||
)
|
||||
event_document_comment_deleted = namespace.add_event_type(
|
||||
name='delete', label=_('Document comment deleted')
|
||||
label=_('Document comment deleted'), name='delete'
|
||||
)
|
||||
|
||||
@@ -2,9 +2,9 @@ from __future__ import absolute_import, unicode_literals
|
||||
|
||||
from mayan.apps.appearance.classes import Icon
|
||||
|
||||
icon_comments_for_document = Icon(driver_name='fontawesome', symbol='comment')
|
||||
icon_comment_add = Icon(
|
||||
driver_name='fontawesome-dual', primary_symbol='comment',
|
||||
secondary_symbol='plus'
|
||||
)
|
||||
icon_comment_delete = Icon(driver_name='fontawesome', symbol='times')
|
||||
icon_comments_for_document = Icon(driver_name='fontawesome', symbol='comment')
|
||||
|
||||
@@ -13,17 +13,18 @@ from .permissions import (
|
||||
)
|
||||
|
||||
link_comment_add = Link(
|
||||
args='object.pk', icon_class=icon_comment_add,
|
||||
icon_class=icon_comment_add, kwargs={'document_id': 'object.pk'},
|
||||
permissions=(permission_comment_create,), text=_('Add comment'),
|
||||
view='comments:comment_add',
|
||||
)
|
||||
link_comment_delete = Link(
|
||||
args='object.pk', icon_class=icon_comment_delete,
|
||||
icon_class=icon_comment_delete, kwargs={'comment_id': 'object.pk'},
|
||||
permissions=(permission_comment_delete,), tags='dangerous',
|
||||
text=_('Delete'), view='comments:comment_delete',
|
||||
)
|
||||
link_comments_for_document = Link(
|
||||
args='resolved_object.pk', icon_class=icon_comments_for_document,
|
||||
icon_class=icon_comments_for_document,
|
||||
kwargs={'document_id': 'resolved_object.pk'},
|
||||
permissions=(permission_comment_view,), text=_('Comments'),
|
||||
view='comments:comments_for_document',
|
||||
)
|
||||
|
||||
@@ -7,11 +7,11 @@ from mayan.apps.permissions import PermissionNamespace
|
||||
namespace = PermissionNamespace(label=_('Comments'), name='comments')
|
||||
|
||||
permission_comment_create = namespace.add_permission(
|
||||
name='comment_create', label=_('Create new comments')
|
||||
label=_('Create new comments'), name='comment_create'
|
||||
)
|
||||
permission_comment_delete = namespace.add_permission(
|
||||
name='comment_delete', label=_('Delete comments')
|
||||
label=_('Delete comments'), name='comment_delete'
|
||||
)
|
||||
permission_comment_view = namespace.add_permission(
|
||||
name='comment_view', label=_('View comments')
|
||||
label=_('View comments'), name='comment_view'
|
||||
)
|
||||
|
||||
@@ -25,14 +25,14 @@ class CommentSerializer(serializers.HyperlinkedModelSerializer):
|
||||
def get_document_comments_url(self, instance):
|
||||
return reverse(
|
||||
viewname='rest_api:comment-list', kwargs={
|
||||
'document_pk': instance.document.pk,
|
||||
'document_id': instance.document.pk,
|
||||
}, request=self.context['request'], format=self.context['format']
|
||||
)
|
||||
|
||||
def get_url(self, instance):
|
||||
return reverse(
|
||||
viewname='rest_api:comment-detail', kwargs={
|
||||
'document_pk': instance.document.pk, 'comment_pk': instance.pk
|
||||
'document_id': instance.document.pk, 'comment_pk': instance.pk
|
||||
}, request=self.context['request'], format=self.context['format']
|
||||
)
|
||||
|
||||
@@ -59,13 +59,13 @@ class WritableCommentSerializer(serializers.ModelSerializer):
|
||||
def get_document_comments_url(self, instance):
|
||||
return reverse(
|
||||
viewname='rest_api:comment-list', kwargs={
|
||||
'document_pk': instance.document.pk
|
||||
'document_id': instance.document.pk
|
||||
}, request=self.context['request'], format=self.context['format']
|
||||
)
|
||||
|
||||
def get_url(self, instance):
|
||||
return reverse(
|
||||
viewname='rest_api:comment-detail', kwargs={
|
||||
'document_pk': instance.document.pk, 'comment_pk': instance.pk
|
||||
'document_id': instance.document.pk, 'comment_id': instance.pk
|
||||
}, request=self.context['request'], format=self.context['format']
|
||||
)
|
||||
|
||||
@@ -9,13 +9,13 @@ class CommentsTestMixin(object):
|
||||
def _create_comment(self, user=None):
|
||||
self.test_comment = self.document.comments.create(
|
||||
comment=TEST_COMMENT_TEXT,
|
||||
user=user or self.user or self.admin_user
|
||||
user=user or self._test_case_user or self.admin_user
|
||||
)
|
||||
|
||||
def _request_document_comment_add_view(self):
|
||||
response = self.post(
|
||||
viewname='comments:comment_add',
|
||||
kwargs={'document_pk': self.document.pk},
|
||||
kwargs={'document_id': self.document.pk},
|
||||
data={'comment': TEST_COMMENT_TEXT}
|
||||
)
|
||||
self.test_comment = Comment.objects.filter(
|
||||
@@ -27,5 +27,5 @@ class CommentsTestMixin(object):
|
||||
def _request_document_comment_delete_view(self):
|
||||
return self.post(
|
||||
viewname='comments:comment_delete',
|
||||
kwargs={'comment_pk': self.test_comment.pk},
|
||||
kwargs={'comment_id': self.test_comment.pk},
|
||||
)
|
||||
|
||||
@@ -16,10 +16,6 @@ from .mixins import CommentsTestMixin
|
||||
|
||||
|
||||
class CommentAPITestCase(CommentsTestMixin, DocumentTestMixin, BaseAPITestCase):
|
||||
def setUp(self):
|
||||
super(CommentAPITestCase, self).setUp()
|
||||
self.login_user()
|
||||
|
||||
def _request_api_comment_create_view(self):
|
||||
return self.post(
|
||||
viewname='rest_api:comment-list',
|
||||
|
||||
@@ -13,10 +13,6 @@ from .mixins import CommentsTestMixin
|
||||
|
||||
|
||||
class CommentEventsTestCase(CommentsTestMixin, GenericDocumentViewTestCase):
|
||||
def setUp(self):
|
||||
super(CommentEventsTestCase, self).setUp()
|
||||
self.login_user()
|
||||
|
||||
def test_comment_created_event_no_permissions(self):
|
||||
Action.objects.all().delete()
|
||||
|
||||
|
||||
@@ -12,10 +12,6 @@ from .mixins import CommentsTestMixin
|
||||
|
||||
|
||||
class CommentsViewsTestCase(CommentsTestMixin, GenericDocumentViewTestCase):
|
||||
def setUp(self):
|
||||
super(CommentsViewsTestCase, self).setUp()
|
||||
self.login_user()
|
||||
|
||||
def test_document_comment_add_view_no_permission(self):
|
||||
response = self._request_document_comment_add_view()
|
||||
self.assertEqual(response.status_code, 404)
|
||||
@@ -31,7 +27,7 @@ class CommentsViewsTestCase(CommentsTestMixin, GenericDocumentViewTestCase):
|
||||
|
||||
def _create_test_comment(self):
|
||||
self.test_comment = self.document.comments.create(
|
||||
user=self.user, comment=TEST_COMMENT_TEXT
|
||||
user=self._test_case_user, comment=TEST_COMMENT_TEXT
|
||||
)
|
||||
|
||||
def test_document_comment_delete_view_no_permission(self):
|
||||
@@ -54,7 +50,7 @@ class CommentsViewsTestCase(CommentsTestMixin, GenericDocumentViewTestCase):
|
||||
def _request_document_comment_list_view(self):
|
||||
return self.get(
|
||||
viewname='comments:comments_for_document',
|
||||
kwargs={'document_pk': self.document.pk}
|
||||
kwargs={'document_id': self.document.pk}
|
||||
)
|
||||
|
||||
def test_document_comment_list_view_no_permissions(self):
|
||||
|
||||
@@ -10,26 +10,26 @@ from .views import (
|
||||
|
||||
urlpatterns = [
|
||||
url(
|
||||
regex=r'^comments/(?P<comment_pk>\d+)/delete/$', name='comment_delete',
|
||||
regex=r'^comments/(?P<comment_id>\d+)/delete/$', name='comment_delete',
|
||||
view=DocumentCommentDeleteView.as_view()
|
||||
),
|
||||
url(
|
||||
regex=r'^documents/(?P<document_pk>\d+)/comments/add/$',
|
||||
name='comment_add', view=DocumentCommentCreateView.as_view()
|
||||
),
|
||||
url(
|
||||
regex=r'^documents/(?P<document_pk>\d+)/comments/$',
|
||||
regex=r'^documents/(?P<document_id>\d+)/comments/$',
|
||||
name='comments_for_document', view=DocumentCommentListView.as_view()
|
||||
),
|
||||
url(
|
||||
regex=r'^documents/(?P<document_id>\d+)/comments/add/$',
|
||||
name='comment_add', view=DocumentCommentCreateView.as_view()
|
||||
)
|
||||
]
|
||||
|
||||
api_urls = [
|
||||
url(
|
||||
regex=r'^documents/(?P<document_pk>[0-9]+)/comments/$',
|
||||
regex=r'^documents/(?P<document_id>\d+)/comments/$',
|
||||
name='comment-list', view=APICommentListView.as_view()
|
||||
),
|
||||
url(
|
||||
regex=r'^documents/(?P<document_pk>[0-9]+)/comments/(?P<comment_pk>[0-9]+)/$',
|
||||
regex=r'^documents/(?P<document_id>\d+)/comments/(?P<comment_id>\d+)/$',
|
||||
name='comment-detail', view=APICommentView.as_view()
|
||||
),
|
||||
)
|
||||
]
|
||||
|
||||
@@ -7,7 +7,7 @@ from django.utils.translation import ugettext_lazy as _
|
||||
from mayan.apps.common.generics import (
|
||||
SingleObjectCreateView, SingleObjectDeleteView, SingleObjectListView
|
||||
)
|
||||
from mayan.apps.common.mixins import ExternalObjectViewMixin
|
||||
from mayan.apps.common.mixins import ExternalObjectMixin
|
||||
from mayan.apps.documents.models import Document
|
||||
|
||||
from .icons import icon_comments_for_document
|
||||
@@ -19,11 +19,11 @@ from .permissions import (
|
||||
)
|
||||
|
||||
|
||||
class DocumentCommentCreateView(ExternalObjectViewMixin, SingleObjectCreateView):
|
||||
fields = ('comment',)
|
||||
external_object_pk_url_kwarg = 'document_pk'
|
||||
class DocumentCommentCreateView(ExternalObjectMixin, SingleObjectCreateView):
|
||||
external_object_class = Document
|
||||
external_object_permission = permission_comment_create
|
||||
external_object_pk_url_kwarg = 'document_id'
|
||||
fields = ('comment',)
|
||||
model = Comment
|
||||
|
||||
def get_document(self):
|
||||
@@ -43,7 +43,7 @@ class DocumentCommentCreateView(ExternalObjectViewMixin, SingleObjectCreateView)
|
||||
def get_post_action_redirect(self):
|
||||
return reverse(
|
||||
viewname='comments:comments_for_document', kwargs={
|
||||
'document_pk': self.kwargs['document_pk']
|
||||
'document_id': self.kwargs['document_id']
|
||||
}
|
||||
)
|
||||
|
||||
@@ -55,9 +55,8 @@ class DocumentCommentCreateView(ExternalObjectViewMixin, SingleObjectCreateView)
|
||||
|
||||
class DocumentCommentDeleteView(SingleObjectDeleteView):
|
||||
model = Comment
|
||||
pk_url_kwarg = 'comment_pk'
|
||||
pk_url_kwarg = 'comment_id'
|
||||
object_permission = permission_comment_delete
|
||||
object_permission_raise_404 = True
|
||||
|
||||
def get_delete_extra_data(self):
|
||||
return {'_user': self.request.user}
|
||||
@@ -71,15 +70,15 @@ class DocumentCommentDeleteView(SingleObjectDeleteView):
|
||||
def get_post_action_redirect(self):
|
||||
return reverse(
|
||||
viewname='comments:comments_for_document', kwargs={
|
||||
'document_pk': self.get_object().document.pk
|
||||
'document_id': self.get_object().document.pk
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
class DocumentCommentListView(ExternalObjectViewMixin, SingleObjectListView):
|
||||
external_object_pk_url_kwarg = 'document_pk'
|
||||
class DocumentCommentListView(ExternalObjectMixin, SingleObjectListView):
|
||||
external_object_class = Document
|
||||
external_object_permission = permission_comment_view
|
||||
external_object_pk_url_kwarg = 'document_id'
|
||||
|
||||
def get_document(self):
|
||||
return self.get_external_object()
|
||||
|
||||
@@ -47,7 +47,6 @@ class MailDocumentView(MultipleObjectFormActionView):
|
||||
form_class = DocumentMailForm
|
||||
model = Document
|
||||
object_permission = permission_mailing_send_document
|
||||
object_permission_raise_404 = True
|
||||
pk_url_kwarg = 'document_pk'
|
||||
success_message = _('%(count)d document queued for email delivery')
|
||||
success_message_plural = _(
|
||||
@@ -173,7 +172,6 @@ class UserMailingCreateView(SingleObjectDynamicFormCreateView):
|
||||
class UserMailingDeleteView(SingleObjectDeleteView):
|
||||
model = UserMailer
|
||||
object_permission = permission_user_mailer_delete
|
||||
object_permission_raise_404 = True
|
||||
pk_url_kwarg = 'mailer_pk'
|
||||
post_action_redirect = reverse_lazy(viewname='mailer:user_mailer_list')
|
||||
|
||||
@@ -187,7 +185,6 @@ class UserMailingEditView(SingleObjectDynamicFormEditView):
|
||||
form_class = UserMailerDynamicForm
|
||||
model = UserMailer
|
||||
object_permission = permission_user_mailer_edit
|
||||
object_permission_raise_404 = True
|
||||
pk_url_kwarg = 'mailer_pk'
|
||||
|
||||
def get_extra_context(self):
|
||||
|
||||
Reference in New Issue
Block a user