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