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,6 +2,14 @@ import requests, json | ||
2 | from django.shortcuts import get_object_or_404, reverse | 2 | from django.shortcuts import get_object_or_404, reverse |
3 | from django.contrib.auth import authenticate | 3 | from django.contrib.auth import authenticate |
4 | from django.views.decorators.csrf import csrf_exempt | 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 | from rest_framework import viewsets | 14 | from rest_framework import viewsets |
7 | from rest_framework.response import Response | 15 | from rest_framework.response import Response |
@@ -13,7 +21,7 @@ from django.db.models import Q | @@ -13,7 +21,7 @@ from django.db.models import Q | ||
13 | from security.models import Security | 21 | from security.models import Security |
14 | 22 | ||
15 | from chat.serializers import ChatSerializer | 23 | from chat.serializers import ChatSerializer |
16 | -from chat.models import TalkMessages | 24 | +from chat.models import TalkMessages, Conversation, ChatVisualizations |
17 | 25 | ||
18 | from subjects.serializers import SubjectSerializer | 26 | from subjects.serializers import SubjectSerializer |
19 | from subjects.models import Subject | 27 | from subjects.models import Subject |
@@ -221,4 +229,84 @@ class ChatViewset(viewsets.ModelViewSet): | @@ -221,4 +229,84 @@ class ChatViewset(viewsets.ModelViewSet): | ||
221 | 229 | ||
222 | response = json.dumps(info) | 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 | return HttpResponse(response) | 312 | return HttpResponse(response) |
225 | \ No newline at end of file | 313 | \ No newline at end of file |