From c3e42dbe337255365c820320dd086bb8350baf44 Mon Sep 17 00:00:00 2001 From: borissedw Date: Wed, 9 Aug 2023 13:54:47 +0300 Subject: [PATCH 1/6] 0.0.88 --- static/js/check_new_messages.js | 20 ++++++++++++++++++-- static/js/global_js.js | 11 +++++++++++ templates/tb_base.html | 2 ++ 3 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 static/js/global_js.js diff --git a/static/js/check_new_messages.js b/static/js/check_new_messages.js index 1397e97..5c3d8e8 100644 --- a/static/js/check_new_messages.js +++ b/static/js/check_new_messages.js @@ -20,7 +20,9 @@ function check_new_messages_timeout(){ } check_msg = setInterval(function () { - + sessionStorage.setItem('online',user_online) + let new_message = getNewMessageSession() + let user_online = userOnline('set') window = document.querySelector(".container-messages") if (window === null){ // @@ -29,7 +31,7 @@ function check_new_messages_timeout(){ check_new_messages(window,it) } }, - 1000) + 60000) } @@ -58,6 +60,7 @@ function check_new_messages (window,it){ data_new_messages.last_message_modifiedDT = last_message_time.dataset['modifieddt'] } + $.ajax({ headers: { "X-CSRFToken": $('input[name=csrfmiddlewaretoken]').val() }, url: '/ru/messages/update_chat/', @@ -110,3 +113,16 @@ function success_check_new_messages (data) { } + +function userOnline (set=null,check=null) { + let user_online = null + if (set !== null){ + user_online = navigator.userActivation.isActive || navigator.userActivation.hasBeenActive === true; + sessionStorage.setItem('online',user_online) + + } else if (check !== null){ + user_online = navigator.userActivation.isActive || navigator.userActivation.hasBeenActive === true; + sessionStorage.getItem('online') + } + return user_online +} \ No newline at end of file diff --git a/static/js/global_js.js b/static/js/global_js.js new file mode 100644 index 0000000..abf8c58 --- /dev/null +++ b/static/js/global_js.js @@ -0,0 +1,11 @@ +$(document).ready(function (){ + getNewMessageSession() +}) + +function getNewMessageSession (){ + let new_message = JSON.parse( + sessionStorage.getItem('user_alerts') + ) + return new_message +} + diff --git a/templates/tb_base.html b/templates/tb_base.html index 1132407..8a6e258 100644 --- a/templates/tb_base.html +++ b/templates/tb_base.html @@ -13,6 +13,8 @@ + + {% block meta %} From e5d7116cadcf4c62b100f808e6cc136930648b9c Mon Sep 17 00:00:00 2001 From: SDE Date: Wed, 9 Aug 2023 14:06:43 +0300 Subject: [PATCH 2/6] 0.2.0 chat v2 --- AuthApp/funcs.py | 2 ++ AuthApp/middleware.py | 29 +++++++++++++++++++ AuthApp/models.py | 10 +++++++ BaseModels/base_models.py | 11 +++++++ ChatServiceApp/js_views.py | 13 +++++++++ TWB/settings.py | 1 + .../profile/b_list_of_users_messenger.html | 2 +- ...sers.html => w_chat_right_panel_user.html} | 0 8 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 AuthApp/funcs.py create mode 100644 AuthApp/middleware.py rename templates/widgets/{w_chat_right_panel_users.html => w_chat_right_panel_user.html} (100%) diff --git a/AuthApp/funcs.py b/AuthApp/funcs.py new file mode 100644 index 0000000..139597f --- /dev/null +++ b/AuthApp/funcs.py @@ -0,0 +1,2 @@ + + diff --git a/AuthApp/middleware.py b/AuthApp/middleware.py new file mode 100644 index 0000000..9ae529b --- /dev/null +++ b/AuthApp/middleware.py @@ -0,0 +1,29 @@ +import json + +from django.http import HttpResponse +from django.utils.deprecation import MiddlewareMixin + +class ResponseInterceptionMiddleware: + # def __init__(self, get_response): + # self.get_response = get_response + # + # def __call__(self, request): + # return self.get_response(request) + # def process_request(self, request): + def __init__(self, get_response): + self.get_response = get_response + # One-time configuration and initialization. + + def __call__(self, request): + # Code to be executed for each request before + # the view (and later middleware) are called. + + if request.user.is_authenticated: + request = request.user.user_profile.save_user_alerts_to_session(request) + + response = self.get_response(request) + + # Code to be executed for each request/response after + # the view is called. + + return response \ No newline at end of file diff --git a/AuthApp/models.py b/AuthApp/models.py index 67b4e1e..0b9a8d8 100644 --- a/AuthApp/models.py +++ b/AuthApp/models.py @@ -1,5 +1,8 @@ # coding=utf-8 from __future__ import unicode_literals + +import json + from django.contrib.auth.models import User from django.db import models from django.utils.translation import gettext_lazy as _ @@ -48,6 +51,13 @@ class UserProfile(BaseModel): on_delete=models.SET_NULL ) + def save_user_alerts_to_session(self, request): + for_save_to_session = self.pop_node_by_name('for_save_to_session') + if for_save_to_session: + for key, val in for_save_to_session.items(): + request.session[key] = json.dumps(val) + return request + def __str__(self): if self.user: diff --git a/BaseModels/base_models.py b/BaseModels/base_models.py index 15f9475..3da4d34 100644 --- a/BaseModels/base_models.py +++ b/BaseModels/base_models.py @@ -34,6 +34,17 @@ class BaseModel(models.Model): else: return str(self.id) + def pop_node_by_name(self, node_name): + if not self.json_data or not node_name in self.json_data: + return None + + res = self.json_data[node_name] + del self.json_data[node_name] + self.save(update_fields=['json_data']) + + return res + + def get_node_by_name(self, node_name): if not self.json_data or not node_name in self.json_data: return None diff --git a/ChatServiceApp/js_views.py b/ChatServiceApp/js_views.py index cf9ec08..51fd327 100644 --- a/ChatServiceApp/js_views.py +++ b/ChatServiceApp/js_views.py @@ -102,9 +102,12 @@ def update_chat_ajax(request): }) html = render_to_string(tpl_name, res_Dict, request=request) + res_Dict.update({'receivers': get_chat_receivers_for_user(request.user)}) + users_list_html = render_to_string('blocks/profile/b_list_of_users_messenger.html', res_Dict, request=request) Dict.update({ 'html': html, + 'users_list_html': users_list_html, 'required_beep': True, }) return JsonResponse(Dict, status=200) @@ -185,6 +188,16 @@ def send_msg_ajax(request): 'text': data['text'] }) + session_data = { + 'for_save_to_session':{ + 'user_alerts':{ + 'new_message': True + } + } + } + + receiver.user_profile.add_node_to_json_data(session_data, save=True) + msg = Message.objects.create(**msg_create_kwargs) if ticket: diff --git a/TWB/settings.py b/TWB/settings.py index 7c546b3..c19d7f1 100644 --- a/TWB/settings.py +++ b/TWB/settings.py @@ -60,6 +60,7 @@ MIDDLEWARE = [ 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', + 'AuthApp.middleware.ResponseInterceptionMiddleware', ] ROOT_URLCONF = 'TWB.urls' diff --git a/templates/blocks/profile/b_list_of_users_messenger.html b/templates/blocks/profile/b_list_of_users_messenger.html index 44b7b71..83ca9b5 100644 --- a/templates/blocks/profile/b_list_of_users_messenger.html +++ b/templates/blocks/profile/b_list_of_users_messenger.html @@ -3,6 +3,6 @@ Чаты:
{% for item in receivers %} - {% include "widgets/w_chat_right_panel_users.html" %} + {% include "widgets/w_chat_right_panel_user.html" %} {% endfor %}
diff --git a/templates/widgets/w_chat_right_panel_users.html b/templates/widgets/w_chat_right_panel_user.html similarity index 100% rename from templates/widgets/w_chat_right_panel_users.html rename to templates/widgets/w_chat_right_panel_user.html From 6f03ba3720c813ff11ab3f1b69759dc33bead052 Mon Sep 17 00:00:00 2001 From: borissedw Date: Wed, 9 Aug 2023 14:31:57 +0300 Subject: [PATCH 3/6] 0.0.89 --- static/js/user_profile.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/static/js/user_profile.js b/static/js/user_profile.js index 660d489..7a0c26a 100644 --- a/static/js/user_profile.js +++ b/static/js/user_profile.js @@ -10,6 +10,7 @@ function writeMessage(){ // enctype: 'json', // data: formData, success: function(data){ + getNewMessageSession() // location.href = '/profile' document.querySelector(".info_profile").innerHTML = data.html; @@ -35,6 +36,7 @@ function technicalSupport(){ // enctype: 'json', // data: formData, success: function(data){ + getNewMessageSession() console.log('data received') // location.href = '/profile' document.querySelector(".info_profile").innerHTML = data.html; @@ -59,6 +61,7 @@ function mySubscription(){ // enctype: 'json', // data: formData, success: function(data){ + getNewMessageSession() console.log('data received') // location.href = '/profile' document.querySelector(".info_profile").innerHTML = data.html; @@ -83,6 +86,7 @@ function myProfile(){ // enctype: 'json', // data: formData, success: function(data){ + getNewMessageSession() console.log('data received') // location.href = '/profile' document.querySelector(".info_profile").innerHTML = data.html; @@ -144,6 +148,7 @@ function searchTown(el){ // enctype: 'json', data: JSON.stringify(get_address_point), success: function(data){ + getNewMessageSession() return insertSearchList(data, el.name + '_list') }, error: function (data){ @@ -296,6 +301,7 @@ function sendRoute(el, routeID = null){ // enctype: 'json', data: formData, success: function(data){ + getNewMessageSession() console.log('data received') // location.href = '/profile' document.querySelector(".info_profile").innerHTML = data.html @@ -366,6 +372,7 @@ function createRoute(){ // enctype: 'json', // data: {}, success: function(data){ + getNewMessageSession() // console.log('data received') // location.href = '/profile' document.querySelector(".info_profile").innerHTML = data.html @@ -401,6 +408,7 @@ function getRoute(){ // enctype: 'json', // data: formData, success: function(data){ + getNewMessageSession() console.log('data received') // location.href = '/profile' document.querySelector(".info_profile").innerHTML = data.html; From cc74155226ba9b36c05a6b3aad0f9efc257f17f6 Mon Sep 17 00:00:00 2001 From: borissedw Date: Wed, 9 Aug 2023 14:39:14 +0300 Subject: [PATCH 4/6] 0.0.90 --- static/js/check_new_messages.js | 6 +++--- static/js/user_profile(boris).js | 7 +++++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/static/js/check_new_messages.js b/static/js/check_new_messages.js index 5c3d8e8..17b29b6 100644 --- a/static/js/check_new_messages.js +++ b/static/js/check_new_messages.js @@ -20,8 +20,7 @@ function check_new_messages_timeout(){ } check_msg = setInterval(function () { - sessionStorage.setItem('online',user_online) - let new_message = getNewMessageSession() + // let new_message = getNewMessageSession() let user_online = userOnline('set') window = document.querySelector(".container-messages") if (window === null){ @@ -31,7 +30,7 @@ function check_new_messages_timeout(){ check_new_messages(window,it) } }, - 60000) + 10000) } @@ -72,6 +71,7 @@ function check_new_messages (window,it){ // enctype: 'json', data: JSON.stringify(data_new_messages), success: function(data){ + getNewMessageSession() success_check_new_messages(data) }, diff --git a/static/js/user_profile(boris).js b/static/js/user_profile(boris).js index 3ba761c..58145ee 100644 --- a/static/js/user_profile(boris).js +++ b/static/js/user_profile(boris).js @@ -10,6 +10,7 @@ function createTicketShow () { // enctype: 'json', // data: formData, success: function(data){ + getNewMessageSession() document.querySelector(".insert-tech-place").innerHTML = data.html; @@ -80,6 +81,7 @@ function attachFileCreateTicket () { // enctype: 'json', data: data, success: function(data){ + getNewMessageSession() document.querySelector(".insert-tech-place").innerHTML = data.html; @@ -107,6 +109,7 @@ function attachFilemeassge () { // enctype: 'json', data: data, success: function(data){ + getNewMessageSession() document.querySelector(".insert-tech-place").innerHTML = data.html; @@ -130,6 +133,7 @@ function createTicket (el) { // enctype: 'json', data: formData, success: function(data){ + getNewMessageSession() document.querySelector(".insert-tech-place").innerHTML = data.html; @@ -169,6 +173,7 @@ function selectedUserMessenger (ticket_id=null,user_id=null){ // enctype: 'json', data: JSON.stringify(data), success: function(data){ + getNewMessageSession() document.querySelector(".info_profile").innerHTML = data.html; @@ -219,6 +224,7 @@ function sendMessage(id_ticket=null,sender,receiver){ // enctype: 'json', data: JSON.stringify(data), success: function(data){ + getNewMessageSession() document.querySelector(".container-messages").innerHTML = data.html; document.querySelector(".enter-message-inp").value = null @@ -251,6 +257,7 @@ function openTicket (ticket_id){ // enctype: 'json', data: JSON.stringify(data), success: function(data){ + getNewMessageSession() document.querySelector(".info_profile").innerHTML = data.html; From 9dd94ffac096ece5c85febbfac6d4016a62577e8 Mon Sep 17 00:00:00 2001 From: SDE Date: Wed, 9 Aug 2023 14:49:30 +0300 Subject: [PATCH 5/6] 0.2.1 chat v2 --- AuthApp/models.py | 2 +- AuthApp/views.py | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/AuthApp/models.py b/AuthApp/models.py index 0b9a8d8..5da0aeb 100644 --- a/AuthApp/models.py +++ b/AuthApp/models.py @@ -52,7 +52,7 @@ class UserProfile(BaseModel): ) def save_user_alerts_to_session(self, request): - for_save_to_session = self.pop_node_by_name('for_save_to_session') + for_save_to_session = self.get_node_by_name('for_save_to_session') if for_save_to_session: for key, val in for_save_to_session.items(): request.session[key] = json.dumps(val) diff --git a/AuthApp/views.py b/AuthApp/views.py index 1762574..454dab8 100644 --- a/AuthApp/views.py +++ b/AuthApp/views.py @@ -55,6 +55,8 @@ def user_profile_View(request): Dict = {} + request.session['user_id'] = request.user.id + t = loader.get_template('pages/profile/p_user_profile.html') return HttpResponse(t.render(Dict, request)) From 99f8dee2693b54b75913201c9d10a33294907a41 Mon Sep 17 00:00:00 2001 From: SDE Date: Wed, 9 Aug 2023 15:32:39 +0300 Subject: [PATCH 6/6] 0.2.2 chat v2 --- AuthApp/middleware.py | 39 ++++++++++++++++++++++++++++++++++----- AuthApp/views.py | 7 +++++-- 2 files changed, 39 insertions(+), 7 deletions(-) diff --git a/AuthApp/middleware.py b/AuthApp/middleware.py index 9ae529b..bb9ea6f 100644 --- a/AuthApp/middleware.py +++ b/AuthApp/middleware.py @@ -1,7 +1,28 @@ import json - +import datetime from django.http import HttpResponse -from django.utils.deprecation import MiddlewareMixin +from django.conf import settings + + +def set_cookie(response, key, value, days_expire=7): + if days_expire is None: + max_age = 365 * 24 * 60 * 60 # one year + else: + max_age = days_expire * 24 * 60 * 60 + expires = datetime.datetime.strftime( + datetime.datetime.utcnow() + datetime.timedelta(seconds=max_age), + "%a, %d-%b-%Y %H:%M:%S GMT", + ) + response.set_cookie( + key, + value, + max_age=max_age, + expires=expires, + domain=settings.SESSION_COOKIE_DOMAIN, + secure=settings.SESSION_COOKIE_SECURE or None, + ) + + return response class ResponseInterceptionMiddleware: # def __init__(self, get_response): @@ -18,12 +39,20 @@ class ResponseInterceptionMiddleware: # Code to be executed for each request before # the view (and later middleware) are called. - if request.user.is_authenticated: - request = request.user.user_profile.save_user_alerts_to_session(request) + # if request.user.is_authenticated: + # request = request.user.user_profile.save_user_alerts_to_session(request) response = self.get_response(request) + if request.user.is_authenticated: + for_save_to_session = request.user.user_profile.get_node_by_name('for_save_to_session') + if for_save_to_session: + for key, val in for_save_to_session.items(): + # request.session[key] = json.dumps(val) + # response.set_cookie(key, json.dumps(val)) + set_cookie(response, key, val, 30) # Code to be executed for each request/response after # the view is called. - return response \ No newline at end of file + return response + diff --git a/AuthApp/views.py b/AuthApp/views.py index 454dab8..af9ead1 100644 --- a/AuthApp/views.py +++ b/AuthApp/views.py @@ -55,10 +55,13 @@ def user_profile_View(request): Dict = {} - request.session['user_id'] = request.user.id + user_online = request.session.get('online', False) + # request.COOKIES['user_id'] = request.user.id t = loader.get_template('pages/profile/p_user_profile.html') - return HttpResponse(t.render(Dict, request)) + response = HttpResponse(t.render(Dict, request)) + response.set_cookie('user_id', request.user.id) + return response def login_View(request):