digitaleagentur/chat/views.py

195 lines
7.4 KiB
Python

from django.shortcuts import render, redirect
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
from .forms import ChatAddChatRoom, ChatUpdateChatRoom
from django.contrib import messages
from django.views.generic import UpdateView
from django.urls import reverse_lazy
from django.contrib.auth.mixins import LoginRequiredMixin
# 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(),
"chatrooms" : ChatRoom.objects.all()
}
return render(request, 'chat/chatmanagement.html', context)
@login_required
def ChatAddGroupChat(request):
if request.method == "POST":
form = ChatAddChatRoom(request.POST, instance=request.user)
if(form.is_valid()):
newchatroom = ChatRoom(creator=request.user, chatroomtype=1, roomname=form.cleaned_data["roomname"], roomname_channel="groupchat", chatroom_createddate=timezone.now(), viewstatus=0)
newchatroom.save()
newchatroom.chatmembers.set(form.cleaned_data["chatmembers"])
newchatroom.chatmembers_admin.set(form.cleaned_data["chatmembers_admin"])
newchatroom.save()
messages.success(request, f'Raum angelegt!')
else:
messages.success(request, f'Raum konnte nicht angelegt werden!')
return redirect('chat:chat-management')
else:
context = {
'active_link' : 'chat',
"form" : ChatAddChatRoom(instance=request.user)
}
return render(request, 'chat/chatmanagement_addgc.html', context)
class ChatUpdateGroupChat(LoginRequiredMixin, UpdateView):
model = ChatRoom
template_name = 'chat/chatmanagement_addgc.html'
success_url = reverse_lazy('chat:chat-management')
form_class = ChatUpdateChatRoom
def form_valid(self, form):
# Send message to the site
messages.success(self.request, f'Chatraum aktualisiert!')
return super().form_valid(form)
def get_context_data(self, **kwargs):
context = super(ChatUpdateGroupChat, self).get_context_data(**kwargs)
context['active_link'] = 'chat'
print(context)
return 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).order_by("last_name"),
"onlineusers" : users_online.get_users()
}
return render(request, "chat/chat_allusers.html", context)
else:
return JsonResponse({})
@login_required
def getloggedusersdata(request):
user_online_final = []
user_besch_final = []
user_abw_final = []
user_off_final = []
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)
for u in users_agency:
if(u in users_online):
if(u.profile.onlinestatus == 0):
user_online_final.append("" + str(u.pk))
elif(u.profile.onlinestatus == 1):
user_besch_final.append("" + str(u.pk))
elif(u.profile.onlinestatus == 2):
user_abw_final.append("" + str(u.pk))
elif(u.profile.onlinestatus == 3):
user_off_final.append("" + str(u.pk))
return JsonResponse({"user_online_final" : user_online_final, "user_besch_final" : user_besch_final, "user_abw_final" : user_abw_final, "user_off_final" : user_off_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=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]
}
if(request.GET["is_basechat"] == "1"):
return render(request, "chat/chat_content_basechat.html", context)
else:
return render(request, "chat/chat_content.html", context)
# NACHRICHT LÖSCHEN
elif request.GET["action"] == "delmessage":
message_to_del = ChatMessage.objects.get(pk=request.GET["messageid"])
if(message_to_del.author == request.user):
message_to_del.delete()
return JsonResponse({"status" : "OK"})
else:
return JsonResponse({"status" : "FORBIDDEN"})
# GRUPPENCHAT LÖSCHEN
elif request.GET["action"] == "remove_chatroom":
chatroom = ChatRoom.objects.get(pk=request.GET["groupchatid"])
if(request.user == chatroom.creator or request.user in chatroom.chatmembers_admin.all()):
chatroom.delete()
messages.success(request, f'Raum gelöscht!')
return JsonResponse({"status" : "RELOAD"})
else:
messages.success(request, f'Das dürfen Sie nicht!')
return JsonResponse({"status" : "RELOAD"})
# GRUPPENCHAT ÖFFNEN
elif request.GET["action"] == "startnewchat_groupchat":
chatroom = ChatRoom.objects.get(pk=request.GET["groupchatid"])
if(request.user == chatroom.creator or request.user in chatroom.chatmembers.all() or request.user in chatroom.chatmembers_admin.all()):
context = {
"roomdata" : chatroom
}
return render(request, "chat/chat_content_groupchat.html", context)
else:
JsonResponse({"status" : "Error on CHATAJAXMAIN"})
elif request.GET["action"] == "addnewmessage":
room = ChatRoom.objects.get(pk=request.GET["room"])
if(request.user == room.creator or request.user == room.chatmember_single or request.user in room.chatmembers.all() or request.user in room.chatmembers_admin.all()):
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"})