From 44b8efe4d89497c197133122fb1c9a957f6199b5 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Thu, 2 Nov 2023 13:37:49 +0100 Subject: [PATCH] user messages work --- rowers/emails.py | 29 ++++++++++++--------- rowers/templates/.#analysis.html | 1 - rowers/templates/menu_profile.html | 3 +++ rowers/templates/user_messages.html | 39 +++++++++++++++++++++++++++-- rowers/templatetags/rowerfilters.py | 11 +++++++- rowers/urls.py | 3 +++ rowers/views/userviews.py | 36 ++++++++++++++++++++++++++ templates/newbase.html | 8 ++++++ 8 files changed, 114 insertions(+), 16 deletions(-) delete mode 120000 rowers/templates/.#analysis.html diff --git a/rowers/emails.py b/rowers/emails.py index bf64c90a..577baf01 100644 --- a/rowers/emails.py +++ b/rowers/emails.py @@ -1,5 +1,5 @@ from django.contrib.staticfiles import finders - +from bs4 import BeautifulSoup import os import time import gc @@ -112,17 +112,22 @@ def send_template_email(from_email, to_email, subject, else: emailbounced = False - try: - usr = User.objects.get(email=to_email) - umsg = UserMessage( - receiver = usr.rower, - datetime = timezone.now(), - text = text_content, - subject=subject, - ) - umsg.save() - except User.DoesNotExist: - pass + for recipient in to_email: + try: + soup = BeautifulSoup(html_content) + + s2 = soup.body + + usr = User.objects.get(email=recipient) + umsg = UserMessage( + receiver = usr.rower, + datetime = timezone.now(), + text = '{text}'.format(text=s2), + subject=subject, + ) + umsg.save() + except User.DoesNotExist: + pass if not emailbounced: res = msg.send() diff --git a/rowers/templates/.#analysis.html b/rowers/templates/.#analysis.html deleted file mode 120000 index 874cf7e6..00000000 --- a/rowers/templates/.#analysis.html +++ /dev/null @@ -1 +0,0 @@ -sander@rowsandall-2.6250:1697974899 \ No newline at end of file diff --git a/rowers/templates/menu_profile.html b/rowers/templates/menu_profile.html index dd93df61..351faac9 100644 --- a/rowers/templates/menu_profile.html +++ b/rowers/templates/menu_profile.html @@ -5,6 +5,9 @@
  •  Messages + {% if rower|usermessages %} + ( {{ rower|usermessages }} ) + {% endif %}
  • diff --git a/rowers/templates/user_messages.html b/rowers/templates/user_messages.html index adabb51d..576fcda7 100644 --- a/rowers/templates/user_messages.html +++ b/rowers/templates/user_messages.html @@ -3,17 +3,52 @@ {% block title %}Messages{% endblock %} {% block main %} -

    {{ rower.user.first_name }}'s Messages

    +

    {{ rower.user.first_name }}'s New Messages

    + +

    {{ rower.user.first_name }}'s Previous Messages

    + + diff --git a/rowers/templatetags/rowerfilters.py b/rowers/templatetags/rowerfilters.py index 789aebe9..efb5862e 100644 --- a/rowers/templatetags/rowerfilters.py +++ b/rowers/templatetags/rowerfilters.py @@ -15,7 +15,7 @@ from rowers.models import ( course_length, WorkoutComment, TrainingMacroCycle, TrainingMesoCycle, TrainingMicroCycle, Rower, Workout, SiteAnnouncement, TeamInvite, TeamRequest, CoachOffer, CoachRequest, - VirtualRaceFollower, VirtualRace, favanalysischoices, + VirtualRaceFollower, VirtualRace, favanalysischoices, UserMessage, Team, TrainingPlan, TrainingTarget) from rowers.plannedsessions import ( @@ -56,6 +56,15 @@ def workoutdate(id): # pragma: no cover except Workout.DoesNotExist: return 'unknown' +@register.filter +def usermessages(rower): + try: + msgs = UserMessage.objects.filter(receiver=rower, isread=False) + return msgs.count() + except UserMessage.DoesNotExist: + pass + + return 0 @register.filter def isfollower(user, id): diff --git a/rowers/urls.py b/rowers/urls.py index 6181048d..42924ec1 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -651,6 +651,9 @@ urlpatterns = [ views.alert_report_view, name='alert_report_view'), re_path(r'^me/deactivate/$', views.deactivate_user, name='deactivate_user'), re_path(r'^me/messages/$', views.user_messages, name='user_messages'), + re_path(r'^me/messages/(?P\d+)/delete/$', views.user_message_delete, name='user_message_delete'), + re_path(r'^me/messages/(?P\d+)/markread/$', views.user_message_markread, name='user_message_markread'), + re_path(r'^me/messages/user/(?P\d+)/$', views.user_messages, name='user_messages'), re_path(r'^me/delete/$', views.remove_user, name='remove_user'), re_path(r'^survey/$', views.survey, name='survey'), re_path(r'^me/gdpr-optin-confirm/?/$', diff --git a/rowers/views/userviews.py b/rowers/views/userviews.py index 5b32b13b..9b54615b 100644 --- a/rowers/views/userviews.py +++ b/rowers/views/userviews.py @@ -257,6 +257,42 @@ def user_messages(request,userid=0): {'usermessages':usermessages, 'rower':r}) +@login_required() +def user_message_delete(request,id=0): + try: + msg = UserMessage.objects.get(id=id) + except UserMessage.DoesNotExist: + pass + + if msg.receiver == request.user.rower: + msg.delete() + messages.info(request,'Deleted message {id}'.format(id=id)) + else: + messages.error('You are not allowed to delete this message') + + url = reverse('user_messages') + return HttpResponseRedirect(url) + + +@login_required() +def user_message_markread(request,id=0): + try: + msg = UserMessage.objects.get(id=id) + except UserMessage.DoesNotExist: + pass + + if msg.receiver == request.user.rower: + msg.isread = True + msg.save() + messages.info(request,'Marked message {id} read'.format(id=id)) + else: + messages.error('You are not allowed to change this message') + + url = reverse('user_messages') + return HttpResponseRedirect(url) + + + # Page where user can manage his favorite charts @login_required() @permission_required('rower.is_coach', fn=get_user_by_userid, raise_exception=True) diff --git a/templates/newbase.html b/templates/newbase.html index b2c32821..54db92b3 100644 --- a/templates/newbase.html +++ b/templates/newbase.html @@ -166,6 +166,14 @@ {% endif %}
  • + {% if user.rower|usermessages %} +
  • + + + ({{ user.rower|usermessages }}) + +
  • + {% endif %}