digitaleagenturnc/chat/views.py

194 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"})