diff --git a/mayan/apps/tags/api_views.py b/mayan/apps/tags/api_views.py index ea6ee64631..3243970280 100644 --- a/mayan/apps/tags/api_views.py +++ b/mayan/apps/tags/api_views.py @@ -14,7 +14,8 @@ from rest_api.filters import MayanObjectPermissionsFilter from rest_api.permissions import MayanPermission from .models import Tag -from .permissions import PERMISSION_TAG_REMOVE, PERMISSION_TAG_VIEW +from .permissions import (PERMISSION_TAG_ATTACH, PERMISSION_TAG_REMOVE, + PERMISSION_TAG_VIEW) from .serializers import TagSerializer @@ -105,9 +106,34 @@ class APIDocumentTagRemoveView(generics.DestroyAPIView): tag = self.get_object() document = self.get_document() - document.tags.remove(tag) + tag.documents.remove(document) return Response(status=status.HTTP_204_NO_CONTENT) def get_queryset(self): document = self.get_document() return document.tags.all() + + +class APIDocumentTagAddView(generics.CreateAPIView): + """ + Attach a tag to a document. + """ + + queryset = Tag.objects.all() + serializer_class = TagSerializer + + def get_document(self): + document = get_object_or_404(Document, pk=self.kwargs['document_pk']) + try: + Permission.objects.check_permissions(self.request.user, [PERMISSION_TAG_ATTACH]) + except PermissionDenied: + AccessEntry.objects.check_access(PERMISSION_TAG_ATTACH, self.request.user, document) + + return document + + def post(self, request, *args, **kwargs): + tag = self.get_object() + document = self.get_document() + + tag.documents.add(document) + return Response(status=status.HTTP_201_CREATED) diff --git a/mayan/apps/tags/urls.py b/mayan/apps/tags/urls.py index 66a265ed06..fc2749d358 100644 --- a/mayan/apps/tags/urls.py +++ b/mayan/apps/tags/urls.py @@ -2,8 +2,9 @@ from __future__ import absolute_import from django.conf.urls import patterns, url -from .api_views import (APIDocumentTagRemoveView, APIDocumentTagListView, - APITagDocumentListView, APITagListView, APITagView) +from .api_views import (APIDocumentTagAddView, APIDocumentTagRemoveView, + APIDocumentTagListView, APITagDocumentListView, + APITagListView, APITagView) from .views import TagTaggedItemListView urlpatterns = patterns('tags.views', @@ -31,4 +32,5 @@ api_urls = patterns('', url(r'^tags/$', APITagListView.as_view(), name='tag-list'), url(r'^document/(?P[0-9]+)/tags/$', APIDocumentTagListView.as_view(), name='document-tag-list'), url(r'^document/(?P[0-9]+)/tags/(?P[0-9]+)/remove/$', APIDocumentTagRemoveView.as_view(), name='document-tag-remove'), + url(r'^document/(?P[0-9]+)/tags/(?P[0-9]+)/add/$', APIDocumentTagAddView.as_view(), name='document-tag-add'), )