diff --git a/chat/forms.py b/chat/forms.py new file mode 100644 index 0000000..b555a86 --- /dev/null +++ b/chat/forms.py @@ -0,0 +1,39 @@ +from django import forms +from .models import ChatRoom +from users.models import UserFullName + + +class ChatUpdateChatRoom(forms.ModelForm): + + class Meta: + model = ChatRoom + labels = { + "roomname" : "Raumname", + "chatmembers" : "Mitglieder", + "chatmembers_admin" : "Verwalter", + } + + fields = ['roomname', 'chatmembers', 'chatmembers_admin'] + + def __init__(self, *args, **kwargs): + print(kwargs) + super(ChatUpdateChatRoom, self).__init__(*args, **kwargs) + self.fields['chatmembers'] = forms.MultipleChoiceField(required=True, label="Mitglieder", choices=[(u.id, u) for u in UserFullName.objects.filter(profile__agency__pk=kwargs["instance"].creator.profile.agency.pk).exclude(pk=kwargs["instance"].creator.pk)], widget=forms.CheckboxSelectMultiple()) + self.fields['chatmembers_admin'] = forms.MultipleChoiceField(required=False, label="Raumverwalter", choices=[(u.id, u) for u in UserFullName.objects.filter(profile__agency__pk=kwargs["instance"].creator.profile.agency.pk).exclude(pk=kwargs["instance"].creator.pk)], widget=forms.CheckboxSelectMultiple()) + +class ChatAddChatRoom(forms.ModelForm): + + class Meta: + model = ChatRoom + labels = { + "roomname" : "Raumname", + "chatmembers" : "Mitglieder", + "chatmembers_admin" : "Verwalter", + } + + fields = ['roomname', 'chatmembers', 'chatmembers_admin'] + + def __init__(self, *args, **kwargs): + super(ChatAddChatRoom, self).__init__(*args, **kwargs) + self.fields['chatmembers'] = forms.MultipleChoiceField(required=True, label="Mitglieder", choices=[(u.id, u) for u in UserFullName.objects.filter(profile__agency__pk=kwargs["instance"].profile.agency.pk).exclude(pk=kwargs["instance"].pk)], widget=forms.CheckboxSelectMultiple()) + self.fields['chatmembers_admin'] = forms.MultipleChoiceField(required=False, label="Raumverwalter", choices=[(u.id, u) for u in UserFullName.objects.filter(profile__agency__pk=kwargs["instance"].profile.agency.pk).exclude(pk=kwargs["instance"].pk)], widget=forms.CheckboxSelectMultiple()) diff --git a/chat/models.py b/chat/models.py index 9aa1a9d..45b6f8a 100644 --- a/chat/models.py +++ b/chat/models.py @@ -3,7 +3,7 @@ from django.contrib.auth.models import User from users.models import Agency from django.urls import reverse from django.utils import timezone - +from django_cryptography.fields import encrypt ''' @@ -13,7 +13,7 @@ MODEL ChatMessage ''' class ChatMessage(models.Model): author = models.ForeignKey(User, on_delete=models.CASCADE) - content = models.CharField(max_length=5000, blank=False, default="") + content = encrypt(models.CharField(max_length=5000, blank=False, default="")) sendtime = models.DateTimeField(default=timezone.now, blank=True) room = models.ForeignKey("ChatRoom", on_delete=models.CASCADE) ''' @@ -24,7 +24,7 @@ Model ChatRoom class ChatRoom(models.Model): - creator = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True) + creator = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True) ''' chatroomtype @@ -34,9 +34,11 @@ class ChatRoom(models.Model): ''' chatroomtype = models.IntegerField(default=0) roomname = models.CharField(max_length=200, blank=False, default="") + grouproomname = models.CharField(max_length=200, blank=False, default="") # This field is for random-String Django Channels roomname_channel = models.CharField(max_length=200, blank=False) chatmembers = models.ManyToManyField(User, blank=True, related_name='users_in_chatroom') + chatmembers_admin = models.ManyToManyField(User, blank=True, related_name='adminusers_in_chatroom') chatroom_createddate = models.DateTimeField(blank=True) chatmember_single = models.ForeignKey(User, related_name='singleuserchat', on_delete=models.CASCADE, null=True, blank=True) ''' @@ -53,6 +55,8 @@ class ChatRoom(models.Model): def __str__(self): return f'{self.roomname}' + def get_absolute_url(self): + return reverse('chat-update', kwargs={'pk':self.pk}) diff --git a/chat/templates/chat/chat_content.html b/chat/templates/chat/chat_content.html index 766d0d1..e13144d 100644 --- a/chat/templates/chat/chat_content.html +++ b/chat/templates/chat/chat_content.html @@ -32,11 +32,11 @@ {% endif %} {% if message.author == request.user %} -
+
-
{{message.sendtime|date:"H:i"}}
+
 {{message.sendtime|date:"H:i"}}
{{message.content}} @@ -44,7 +44,7 @@
{% else %} -
+
@@ -102,7 +102,8 @@ $(document).ready(function(){ chatwebsocket.onmessage = function(e) { - datainfo = e["data"].split("__"); + datainfo = e["data"].split("__"); + if(datainfo[0] == "starttyping") { typingname = (datainfo[1].split("_"))[1]; @@ -136,7 +137,11 @@ $(document).ready(function(){ } }); } - }; + console.log(datainfo) + if(datainfo[0] == "delete_message"){ + $("#usermessage_" + datainfo[1]).remove(); + } + } chatwebsocket.onclose = function(e) { console.error('Chat socket closed unexpectedly'); @@ -179,8 +184,22 @@ $(document).ready(function(){ }); } } +function deleteOwnMessage(id){ - + $.ajax( + { + type: "GET", + url: "{% url 'chat:chat-ajax' %}", + data : { + action : "delmessage", + messageid : id + }, + success: function( data ) + { + chatwebsocket.send("delmessage__" + id + "__privatechat_{{roomdata.creator.pk}}_{{roomdata.chatmember_single.pk}}"); + } + }); +} $(document).on('keypress',function(e) { if(e.which == 13) { if($("#message").val().length > 0 && sending){ diff --git a/chat/templates/chat/chat_content_basechat.html b/chat/templates/chat/chat_content_basechat.html index db01b59..096ae0e 100644 --- a/chat/templates/chat/chat_content_basechat.html +++ b/chat/templates/chat/chat_content_basechat.html @@ -69,11 +69,11 @@ {% endif %} {% if message.author == request.user %} -
+
-
{{message.sendtime|date:"H:i"}}
+
 {{message.sendtime|date:"H:i"}}
{{message.content}} @@ -81,7 +81,7 @@
{% else %} -
+
@@ -180,6 +180,10 @@ $(document).ready(function(){ } }); } + + if(datainfo[0] == "delete_message"){ + $("#usermessage_" + datainfo[1]).remove(); + } }; chatwebsocket.onclose = function(e) { @@ -224,6 +228,22 @@ $(document).ready(function(){ } } +function deleteOwnMessage(id){ + + $.ajax( + { + type: "GET", + url: "{% url 'chat:chat-ajax' %}", + data : { + action : "delmessage", + messageid : id + }, + success: function( data ) + { + chatwebsocket.send("delmessage__" + id + "__privatechat_{{roomdata.creator.pk}}_{{roomdata.chatmember_single.pk}}"); + } + }); +} $(document).on('keypress',function(e) { if(e.which == 13) { diff --git a/chat/templates/chat/chat_content_groupchat.html b/chat/templates/chat/chat_content_groupchat.html new file mode 100644 index 0000000..3498e22 --- /dev/null +++ b/chat/templates/chat/chat_content_groupchat.html @@ -0,0 +1,253 @@ +{% load counter_tag %} +

{{roomdata.roomname}} + {% if user in roomdata.chatmembers_admin.all or user == roomdata.creator %} + + + {% endif %} +

+ + +
+
+
+ +
+ Unterhaltung gestartet am {{roomdata.chatroom_createddate}} +
+
+ +
+ {% for message in roomdata.messages.all %} + + {% if forloop.counter0 == 0 %} + {% setMessageDayInfo message %} + {% else %} + {% getMessageDayInfo message as newday %} + {% if newday == True %} +
+
+
+ {{message.sendtime|date:"d.m.Y"}} +
+
+ {% endif %} + {% endif %} + + {% if message.author == request.user %} +
+
+ +
+
 {{message.sendtime|date:"H:i"}} +
+
+ + {{message.content}} + +
+
+ {% else %} +
+
+ +
+
{{message.author.first_name}} {{message.author.last_name}}, {{message.sendtime|date:"H:i"}}
+
+ + {{message.content}} + +
+
+ {% endif %} + {% endfor %} +
+   +
+ +
+ +   + +
+ +
+ + + + +{% if user in roomdata.chatmembers_admin.all or user == roomdata.creator %} + + +{% endif %} diff --git a/chat/templates/chat/chat_othermessage.html b/chat/templates/chat/chat_othermessage.html index ce535cb..cfc2bdf 100644 --- a/chat/templates/chat/chat_othermessage.html +++ b/chat/templates/chat/chat_othermessage.html @@ -1,4 +1,4 @@ -
+
diff --git a/chat/templates/chat/chat_ownmessage.html b/chat/templates/chat/chat_ownmessage.html index ab3083d..bf01cd9 100644 --- a/chat/templates/chat/chat_ownmessage.html +++ b/chat/templates/chat/chat_ownmessage.html @@ -1,11 +1,11 @@ -
+
-
{{newmessage.sendtime|date:"H:i"}}
+
 {{newmessage.sendtime|date:"H:i"}}
- {{newmessage.content}} + {{newmessage.content}}
-
\ No newline at end of file +
diff --git a/chat/templates/chat/chatmanagement.html b/chat/templates/chat/chatmanagement.html index 4d9547c..14671d2 100644 --- a/chat/templates/chat/chatmanagement.html +++ b/chat/templates/chat/chatmanagement.html @@ -53,23 +53,22 @@ min-height: 600px; overflow-y: auto; } - - -

Chat 

+ ACHTUNG! Der Chat befindet sich im Beta-Stadium! Bitte vermeiden Sie es daher, persönliche oder intime Informationen zu verschicken, bis alle Funktionen ausreichend erprobt sind. Vielen Dank!
-

Mitarbeiter und Räume

+
Mitarbeiter +

{% for user in usersofagency %}
-
+
@@ -90,6 +89,29 @@
+ {% endfor %} +
+
Chaträume + +
+
+ {% for chatroom in chatrooms %} + {% if user in chatroom.chatmembers.all or user in chatroom.chatmembers_admin.all or user == chatroom.creator and chatroom.chatroomtype == 1 %} +
+
+
+
{{chatroom.roomname}} +
+ {% for member in chatroom.chatmembers.all %} + {{member.first_name}} {{member.last_name}}{% if forloop.counter < chatroom.chatmembers.all|length %}, {% endif %} + {% endfor %} + +
+
+
+ + + {% endif %} {% endfor %}
@@ -112,24 +134,48 @@ ) $(".hoverchatcard").click(function(){ + clickedroomtype = $(this)[0]["id"].split("_")[0]; + clickedroomid = $(this)[0]["id"].split("_")[1]; - $.ajax( - { - type: "GET", - url: "{% url 'chat:chat-ajax' %}", - data : { - action : "startnewchat_user_user", - new_chat_userid : $(this)[0]["id"].split("_")[1], - is_basechat : 0 - }, - success: function( data ) - { - if(creator_id != false && chatmember_id != false){ - chatwebsocket.close(); - } - $("#mainchatcontent").html(data); - } - }); + if (clickedroomtype == "userchat"){ + $.ajax( + { + type: "GET", + url: "{% url 'chat:chat-ajax' %}", + data : { + action : "startnewchat_user_user", + new_chat_userid : $(this)[0]["id"].split("_")[1], + is_basechat : 0 + }, + success: function( data ) + { + if(creator_id != false && chatmember_id != false){ + chatwebsocket.close(); + } + $("#mainchatcontent").html(data); + } + }); + } + //Open Groupchat + else{ + $.ajax( + { + type: "GET", + url: "{% url 'chat:chat-ajax' %}", + data : { + action : "startnewchat_groupchat", + groupchatid : clickedroomid, + is_basechat : 0 + }, + success: function( data ) + { + if(creator_id != false && chatmember_id != false){ + chatwebsocket.close(); + } + $("#mainchatcontent").html(data); + } + }); + } }); function updatePresenceLive() { diff --git a/chat/templates/chat/chatmanagement_addgc.html b/chat/templates/chat/chatmanagement_addgc.html new file mode 100644 index 0000000..b68825e --- /dev/null +++ b/chat/templates/chat/chatmanagement_addgc.html @@ -0,0 +1,48 @@ +{% extends "users/base.html" %} +{% load crispy_forms_tags %} +{% block content %} +{% if request.user.profile.agency.module_chat %} +
+

Gruppenchat

+
+
+ {% csrf_token %} + {{form|crispy}} + Sie selbst sind Raumverwalter und können auch später weitere Mitglieder hinzufügen. +
+ Abbrechen + +
+ +
+ +{% else %} +

Das Module Chat wurde in ihrer Agentur deaktiviert.

+{% endif %} +{% endblock content %} + + diff --git a/chat/urls.py b/chat/urls.py index 37f28d5..d20f00f 100644 --- a/chat/urls.py +++ b/chat/urls.py @@ -4,8 +4,11 @@ from . import views app_name = 'chat' urlpatterns = [ path('managemenet/', views.chatmanagement, name='chat-management'), + path('addgc/', views.ChatAddGroupChat, name='chat-addgroup'), + path('addgc/update/', views.ChatUpdateGroupChat.as_view(), name='chat-update'), path('ajaxchat', views.chatajaxmain, name="chat-ajax"), path('ajaxchat/getloggedusers', views.getloggedusers, name="chtaajax-getloggedusers"), path('ajaxchat/getloggedusersdata', views.getloggedusersdata, name="chtaajax-getloggedusers-data") + ] \ No newline at end of file diff --git a/chat/views.py b/chat/views.py index 84dbcc6..e1bfa22 100644 --- a/chat/views.py +++ b/chat/views.py @@ -1,4 +1,4 @@ -from django.shortcuts import render +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 @@ -8,6 +8,11 @@ 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 @@ -18,13 +23,51 @@ def chatmanagement(request): 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() + "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): @@ -81,7 +124,7 @@ def chatajaxmain(request): 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 = 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 @@ -94,9 +137,39 @@ def chatajaxmain(request): 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): + 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() @@ -118,12 +191,3 @@ def chatajaxmain(request): 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) - - -''' \ No newline at end of file diff --git a/users/admin.py b/users/admin.py index a024516..b0c9f2e 100644 --- a/users/admin.py +++ b/users/admin.py @@ -7,6 +7,7 @@ from message.models import Message from cloud.models import DataFile from organizer.models import AGContacts from timemanagement.models import Workday, Breaks, AbsenceReason, FreeDays, Absence +from chat.models import ChatRoom admin.site.register(StandardComments) admin.site.register(StandardCommentRate) @@ -28,3 +29,4 @@ admin.site.register(AbsenceReason) admin.site.register(Absence) admin.site.register(FreeDays) admin.site.register(UserYearAbsenceInfo) +admin.site.register(ChatRoom) diff --git a/users/mainwebsocket.py b/users/mainwebsocket.py index 53f3817..e379abc 100644 --- a/users/mainwebsocket.py +++ b/users/mainwebsocket.py @@ -8,7 +8,6 @@ import channels from django.contrib.auth.models import User from rest_framework.authtoken.models import Token - class UsersConsumer(WebsocketConsumer): appconnect = False @@ -63,7 +62,7 @@ class UsersConsumer(WebsocketConsumer): # WEBSOCKET-DATA-CONTENT def receive(self, text_data=None, bytes_data=None): if text_data == '"heartbeat"': - Presence.objects.touch(self.channel_name) + Presence.objects.touch(self.channel_name) # UPDATET STANDARD def update_standard(self, event): @@ -103,11 +102,7 @@ class UsersChat(WebsocketConsumer): loggeduser = self.scope["user"] roomname = "privatechat_" + str(self.scope["url_route"]["kwargs"]["creator"]) + "_" + str(self.scope["url_route"]["kwargs"]["single"]) - # TODO: Hier das doppelte Problem lösen mit den Channels...Datenbank dazuziehen!!! - print(roomname) - print(loggeduser.pk) channel_layer = channels.layers.get_channel_layer() - print(channel_layer) Room.objects.add(roomname, self.channel_name, loggeduser) def disconnect(self, close_code): @@ -126,10 +121,12 @@ class UsersChat(WebsocketConsumer): elif datainfo[0] == 'stoptyping': channel_layer = channels.layers.get_channel_layer() async_to_sync(channel_layer.group_send)(datainfo[2], {'type' : 'stop_typing'}) - elif datainfo[0] == 'load': + elif datainfo[0] == 'load': channel_layer = channels.layers.get_channel_layer() async_to_sync(channel_layer.group_send)(datainfo[2], {'type' : 'reloadmessages'}) - + elif datainfo[0] == 'delmessage': + channel_layer = channels.layers.get_channel_layer() + async_to_sync(channel_layer.group_send)(datainfo[2], {'type' : 'delmessage', 'messageid' : datainfo[1] }) def start_typing(self, event): useristyping = User.objects.get(pk=event["typingname"]) @@ -151,4 +148,76 @@ class UsersChat(WebsocketConsumer): # SOMETHING IN PRESENCE CHANGED def update_presence_live(self, event): - self.send("presence_update") \ No newline at end of file + self.send("presence_update") + + def delmessage(self, event): + self.send("delete_message__" + event["messageid"]) + + +class GroupChat(WebsocketConsumer): + + def connect(self): + super().connect() + pathcheck = self.scope["path"].split("/") + loggeduser = "" + + # CHECK IF SOCKET COMES FROM APP OR FROM WEB + #APP + if(len(pathcheck) == 7 and len(pathcheck[5]) > 0): + loggeduser = User.objects.get(pk=Token.objects.get(key=pathcheck[5]).user_id) + self.appconnect = True + else: + loggeduser = self.scope["user"] + + roomname = "groupchat_" + str(self.scope["url_route"]["kwargs"]["chatid"]) + channel_layer = channels.layers.get_channel_layer() + Room.objects.add(roomname, self.channel_name, loggeduser) + + def disconnect(self, close_code): + Presence.objects.touch(self.channel_name) + Room.objects.remove("", self.channel_name) + + # WEBSOCKET-DATA-CONTENT + def receive(self, text_data=None, bytes_data=None): + datainfo = text_data.split("__") + typinguserid = datainfo[1] + + print(datainfo[2]) + + if datainfo[0] == 'starttyping': + channel_layer = channels.layers.get_channel_layer() + async_to_sync(channel_layer.group_send)(datainfo[2], {'type' : 'start_typing', 'typingname' : typinguserid}) + elif datainfo[0] == 'stoptyping': + channel_layer = channels.layers.get_channel_layer() + async_to_sync(channel_layer.group_send)(datainfo[2], {'type' : 'stop_typing'}) + elif datainfo[0] == 'load': + channel_layer = channels.layers.get_channel_layer() + async_to_sync(channel_layer.group_send)(datainfo[2], {'type' : 'reloadmessages'}) + elif datainfo[0] == 'delmessage': + channel_layer = channels.layers.get_channel_layer() + async_to_sync(channel_layer.group_send)(datainfo[2], {'type' : 'delmessage', 'messageid' : datainfo[1] }) + + def start_typing(self, event): + useristyping = User.objects.get(pk=event["typingname"]) + self.send("starttyping__" + str(useristyping.pk) + "_" + useristyping.first_name + " " + useristyping.last_name + " tippt...") + + def stop_typing(self, event): + self.send("stoptyping") + + def reloadmessages(self, event): + self.send("reloadmessages") + + # UPDATET STANDARD + def update_standard(self, event): + self.send("standard_update") + + # NEW AGENCY NEWS + def agency_newnews(self, event): + self.send("Neue Agenturnews!") + + # SOMETHING IN PRESENCE CHANGED + def update_presence_live(self, event): + self.send("presence_update") + + def delmessage(self, event): + self.send("delete_message__" + event["messageid"]) \ No newline at end of file diff --git a/users/routing.py b/users/routing.py index 4b0701b..d93fd31 100644 --- a/users/routing.py +++ b/users/routing.py @@ -4,6 +4,7 @@ from . import mainwebsocket websocket_urlpatterns = [ re_path(r'ws/chat/(?P\w+)/(?P\w+)/$', mainwebsocket.UsersChat, name="ws-chat"), + re_path(r'ws/groupchat/(?P\w+)/$', mainwebsocket.GroupChat, name="ws-groupchat"), re_path(r'ws/appchat/(?P\w+)/(?P\w+)/(?P\w+)/$', mainwebsocket.UsersChat, name="ws-appchat"), re_path(r'ws/', mainwebsocket.UsersConsumer, name="ws-default"), ] \ No newline at end of file diff --git a/users/templates/users/base.html b/users/templates/users/base.html index 4b03fcc..160be42 100644 --- a/users/templates/users/base.html +++ b/users/templates/users/base.html @@ -154,6 +154,7 @@ {% endif %} {% if request.user.profile.agency.module_chat %} + {% if active_link == 'chat' %}