diff --git a/project/backend/api/views.py b/project/backend/api/views.py index a6d42c16..d9dfc072 100644 --- a/project/backend/api/views.py +++ b/project/backend/api/views.py @@ -12,8 +12,12 @@ from rest_framework import generics, status from django.contrib.postgres.search import SearchVector from database.models import * +from django.core.mail import * import random, json, datetime +from backend import settings + + # from nltk.corpus import wordnet as wn # import nltk @@ -132,6 +136,15 @@ def post(self, request): serializer.errors, status=400 ) + +def send_notification(receiver,subject,content): + receiver = receiver.split(",") + try: + send_mail(subject = subject, message = content,from_email = settings.EMAIL_HOST_USER,recipient_list = receiver) + except: + return Response({"message": "A mistake occured while sending notification."}, status=400) + return Response({"message": "Notification sent successfully."}, status=201) + class SemanticTagAPIView(APIView): authentication_classes = (TokenAuthentication,) permission_classes = (IsAuthenticated, IsContributorAndWorkspace) @@ -181,6 +194,7 @@ def remove_workspace_tag(request): else: return JsonResponse({'message': "You don't have permission to do this!"}, status=403) + def search(request): res = BasicUserDetailAPI.as_view()(request) try: @@ -1263,6 +1277,12 @@ def get_random_node_id(request): def send_collaboration_request(request): if not request.user.basicuser.contributor.workspaces.filter(workspace_id=request.data.get('workspace')).exists(): return Response({"message": "This contributor is not allowed to access this workspace."}, status=403) + receiver = BasicUser.objects.filter(id=request.data.get('receiver'))[0] + if receiver.email_notification_preference: + subject = 'Incoming collaboration request' + content = 'You have received a collaboration request!' + receiver = receiver.user + send_notification(receiver, subject, content) serializer = CollaborationRequestSerializer(data=request.data) if serializer.is_valid(): serializer.save() @@ -1314,6 +1334,17 @@ def send_review_request(request): if rv not in reviewers: reviewers.append(rv) response_data = {'reviewer1': '', 'reviewer2': ''} + + + data = {'sender': request.data.get('sender'), 'receiver': reviewers[0].id ,'workspace': request.data.get('workspace')} + + receiver = BasicUser.objects.filter(id=reviewers[0].id)[0] + if receiver.email_notification_preference: + subject = 'Incoming review request' + content = 'You have received a review request!' + receiver = receiver.user + send_notification(receiver,subject,content) + workspace = request.user.basicuser.contributor.workspaces.filter(workspace_id=request.data.get('workspace'))[0] if workspace.is_in_review: return Response({"message": "This workspace is already under review."}, status=403) @@ -1323,6 +1354,7 @@ def send_review_request(request): workspace.is_rejected = False workspace.save() data = {'sender': request.data.get('sender'), 'receiver': reviewers[0].id, 'workspace': request.data.get('workspace')} + serializer = ReviewRequestSerializer(data=data) if serializer.is_valid(): @@ -1477,6 +1509,8 @@ def update_review_request_status(request): serializer = ReviewRequestSerializer(req) return Response(serializer.data, status=200) + + class AskQuestion(APIView): authentication_classes = (TokenAuthentication,) permission_classes = (IsAuthenticated,) diff --git a/project/backend/backend/settings.py b/project/backend/backend/settings.py index ee9b565f..f81b6193 100644 --- a/project/backend/backend/settings.py +++ b/project/backend/backend/settings.py @@ -77,7 +77,14 @@ WSGI_APPLICATION = 'backend.wsgi.application' - +EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' +EMAIL_HOST = 'smtp.gmail.com' +EMAIL_PORT = 587 +EMAIL_HOST_USER = 'sciencecollabplatform@gmail.com' +EMAIL_HOST_PASSWORD = os.environ.get('EMAIL_PASSWORD') +EMAIL_USE_TLS = True +ADMIN_EMAIL='sciencecollabplatform@gmail.com' +EMAIL_USE_SSL = False # Database # https://docs.djangoproject.com/en/4.2/ref/settings/#databases