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