digitaleagenturnc/chat/views.py

115 lines
4.1 KiB
Python

from django.shortcuts import render
from django.contrib.auth.decorators import login_required
from channels_presence.models import Presence
from django.http import HttpResponseRedirect,HttpResponse, JsonResponse
from django.contrib.auth.models import User
from channels_presence.models import Room
from channels_presence.models import Presence
import channels.layers
from django.utils import timezone
from .models import ChatRoom, ChatMessage
# Create your views here.
@login_required
def chatmanagement(request):
users_online = Room.objects.get(channel_name="agency_" + str(request.user.profile.agency.pk))
context = {
'active_link' : 'chat',
"usersofagency" : User.objects.filter(profile__agency=request.user.profile.agency).exclude(pk=request.user.pk).order_by("last_name"),
"onlineusers" : users_online.get_users()
}
return render(request, 'chat/chatmanagement.html', context)
@login_required
def getloggedusers(request):
if request.method == "GET":
users_online = Room.objects.get(channel_name="agency_" + str(request.user.profile.agency.pk))
context = {
"usersofagency" : User.objects.filter(profile__agency=request.user.profile.agency).exclude(pk=request.user.pk).oder_by("last_name"),
"onlineusers" : users_online.get_users()
}
return render(request, "chat/chat_allusers.html", context)
else:
return JsonResponse({})
@login_required
def getloggedusersdata(request):
if request.method == "GET":
users_online = Room.objects.get(channel_name="agency_" + str(request.user.profile.agency.pk)).get_users()
users_agency = User.objects.filter(profile__agency=request.user.profile.agency).exclude(pk=request.user.pk)
user_online_final = []
for u in users_agency:
if(u in users_online):
user_online_final.append("" + str(u.pk))
return JsonResponse({"onlineusers" : user_online_final})
else:
return JsonResponse({})
@login_required
def chatajaxmain(request):
if request.method == "GET":
context = {}
choosenroom = ""
if request.GET["action"] == "startnewchat_user_user":
singleuserid = request.GET["new_chat_userid"]
getroom = ChatRoom.objects.filter(chatmember_single__pk=singleuserid, creator=request.user) | ChatRoom.objects.filter(creator__pk=singleuserid, chatmember_single=request.user)
singleuser = User.objects.get(pk=singleuserid)
# NO PRIVATE CHAT THERE, CREATE ONE!
if(len(getroom) == 0):
newchatroom = ChatRoom(creator=request.user, chatroomtype=0, roomname="Gespräch mit " + singleuser.first_name + " " + singleuser.last_name, roomname_channel="privatechat_" + str(request.user.pk) + "_" + singleuserid, chatmember_single=singleuser, chatroom_createddate=timezone.now(), viewstatus=0)
newchatroom.save()
context = {
"roomdata" : newchatroom
}
else:
context = {
"roomdata" : list(getroom)[0]
}
return render(request, "chat/chat_content.html", context)
elif request.GET["action"] == "addnewmessage":
room = ChatRoom.objects.get(pk=request.GET["room"])
if(request.user == room.creator or request.user == room.chatmember_single):
newmessage = ChatMessage(room=room, author=request.user, content=request.GET["message"])
newmessage.save()
room.messages.add(newmessage)
room.save()
return render(request, "chat/chat_ownmessage.html", {"newmessage" : newmessage})
else:
JsonResponse({"status" : "Error on CHATAJAXMAIN"})
elif request.GET["action"] == "loadnewestmessage":
room = ChatRoom.objects.get(pk=request.GET["room"])
last_message = list(room.messages.order_by('-sendtime'))[0]
if(last_message.author == request.user):
return render(request, "chat/chat_ownmessage.html", {"newmessage" : last_message})
else:
return render(request, "chat/chat_othermessage.html", {"newmessage" : last_message})
else:
return JsonResponse({"status" : "Error on CHATAJAXMAIN"})
'''
author = models.ForeignKey(User, on_delete=models.CASCADE)
content = models.CharField(max_length=5000, blank=False, default="")
sendtime = models.DateField(default=timezone.now, blank=True)
room = models.ForeignKey("ChatRoom", on_delete=models.CASCADE)
'''