Commit cf6a65a52745ade15d2340fae21cc45c12005f55
1 parent
c1b04946
Exists in
master
and in
2 other branches
Adding send message in api chat
Showing
1 changed file
with
89 additions
and
1 deletions
Show diff stats
api/views.py
| ... | ... | @@ -2,6 +2,14 @@ import requests, json |
| 2 | 2 | from django.shortcuts import get_object_or_404, reverse |
| 3 | 3 | from django.contrib.auth import authenticate |
| 4 | 4 | from django.views.decorators.csrf import csrf_exempt |
| 5 | +from django.utils.translation import ugettext as _ | |
| 6 | +from django.template.loader import render_to_string | |
| 7 | +import textwrap | |
| 8 | +from datetime import datetime | |
| 9 | +from django.utils import formats | |
| 10 | +from django.utils.html import strip_tags | |
| 11 | + | |
| 12 | +from channels import Group | |
| 5 | 13 | |
| 6 | 14 | from rest_framework import viewsets |
| 7 | 15 | from rest_framework.response import Response |
| ... | ... | @@ -13,7 +21,7 @@ from django.db.models import Q |
| 13 | 21 | from security.models import Security |
| 14 | 22 | |
| 15 | 23 | from chat.serializers import ChatSerializer |
| 16 | -from chat.models import TalkMessages | |
| 24 | +from chat.models import TalkMessages, Conversation, ChatVisualizations | |
| 17 | 25 | |
| 18 | 26 | from subjects.serializers import SubjectSerializer |
| 19 | 27 | from subjects.models import Subject |
| ... | ... | @@ -221,4 +229,84 @@ class ChatViewset(viewsets.ModelViewSet): |
| 221 | 229 | |
| 222 | 230 | response = json.dumps(info) |
| 223 | 231 | |
| 232 | + return HttpResponse(response) | |
| 233 | + | |
| 234 | + @csrf_exempt | |
| 235 | + @list_route(methods = ['POST'], permissions_classes = [IsAuthenticated]) | |
| 236 | + def send_message(self, request): | |
| 237 | + username = request.data['email'] | |
| 238 | + user_two = request.data['user_two'] | |
| 239 | + subject = request.data['subject'] | |
| 240 | + msg_text = request.data['text'] | |
| 241 | + create_date = request.data['create_date'] | |
| 242 | + | |
| 243 | + info = {} | |
| 244 | + | |
| 245 | + if not user_two == "" and not username == "": | |
| 246 | + user = User.objects.get(email = username) | |
| 247 | + user_to = User.objects.get(email = user_two) | |
| 248 | + | |
| 249 | + talks = Conversation.objects.filter((Q(user_one__email = username) & Q(user_two__email = user_two)) | (Q(user_two__email = username) & Q(user_one__email = user_two))) | |
| 250 | + | |
| 251 | + if talks.count() > 0: | |
| 252 | + talk = talks[0] | |
| 253 | + else: | |
| 254 | + talk = Conversation() | |
| 255 | + talk.user_one = user | |
| 256 | + talk.user_two = user_to | |
| 257 | + | |
| 258 | + talk.save() | |
| 259 | + | |
| 260 | + subject = Subject.objects.get(slug = subject) | |
| 261 | + | |
| 262 | + message = TalkMessages() | |
| 263 | + message.text = "<p>" + msg_text + "</p>" | |
| 264 | + message.user = user | |
| 265 | + message.talk = talk | |
| 266 | + | |
| 267 | + message.save() | |
| 268 | + | |
| 269 | + if not message.pk is None: | |
| 270 | + simple_notify = textwrap.shorten(strip_tags(message.text), width = 30, placeholder = "...") | |
| 271 | + | |
| 272 | + notification = { | |
| 273 | + "type": "chat", | |
| 274 | + "subtype": "subject", | |
| 275 | + "space": subject.slug, | |
| 276 | + "user_icon": message.user.image_url, | |
| 277 | + "notify_title": str(message.user), | |
| 278 | + "simple_notify": simple_notify, | |
| 279 | + "view_url": reverse("chat:view_message", args = (message.id, ), kwargs = {}), | |
| 280 | + "complete": render_to_string("chat/_message.html", {"talk_msg": message}, request), | |
| 281 | + "container": "chat-" + str(message.user.id), | |
| 282 | + "last_date": _("Last message in %s")%(formats.date_format(message.create_date, "SHORT_DATETIME_FORMAT")) | |
| 283 | + } | |
| 284 | + | |
| 285 | + notification = json.dumps(notification) | |
| 286 | + | |
| 287 | + Group("user-%s" % user_to.id).send({'text': notification}) | |
| 288 | + | |
| 289 | + ChatVisualizations.objects.create(viewed = False, message = message, user = user_to) | |
| 290 | + | |
| 291 | + info["message"] = _("Message sent successfully!") | |
| 292 | + info["success"] = True | |
| 293 | + info["number"] = 1 | |
| 294 | + else: | |
| 295 | + info["message"] = _("Error while sending message!") | |
| 296 | + info["success"] = False | |
| 297 | + info["number"] = 0 | |
| 298 | + else: | |
| 299 | + info["message"] = _("No information received!") | |
| 300 | + info["success"] = False | |
| 301 | + info["number"] = 0 | |
| 302 | + | |
| 303 | + info["data"] = {} | |
| 304 | + info["data"]["messages"] = [] | |
| 305 | + | |
| 306 | + info["type"] = "" | |
| 307 | + info["title"] = _("Amadeus") | |
| 308 | + info['extra'] = 0 | |
| 309 | + | |
| 310 | + response = json.dumps(info) | |
| 311 | + | |
| 224 | 312 | return HttpResponse(response) |
| 225 | 313 | \ No newline at end of file | ... | ... |