Private
Public Access
1
0

user messages work

This commit is contained in:
2023-11-02 13:37:49 +01:00
parent 6f1f426c69
commit 44b8efe4d8
8 changed files with 114 additions and 16 deletions

View File

@@ -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()

View File

@@ -1 +0,0 @@
sander@rowsandall-2.6250:1697974899

View File

@@ -5,6 +5,9 @@
<li id="manage-messgs">
<a href="/rowers/me/messages/">
<i class="fas fa-envelope fa-fw"></i>&nbsp;Messages
{% if rower|usermessages %}
( {{ rower|usermessages }} )
{% endif %}
</a>
</li>
<li id="manage-prefs-simple">

View File

@@ -3,17 +3,52 @@
{% block title %}Messages{% endblock %}
{% block main %}
<h1>{{ rower.user.first_name }}'s Messages</h1>
<h1>{{ rower.user.first_name }}'s New Messages</h1>
<ul class="main-content">
{% for usermessage in usermessages %}
{% if not usermessage.isread %}
<li class="rounder">
<h2>{{ usermessage.subject }}</h2>
<p><em>{{ usermessage.datetime }}</em></p>
<p>
{{ usermessage.text }}
{{ usermessage.text|safe }}
</p>
{% if request.user.rower == usermessage.receiver %}
<p>
<a href="/rowers/me/messages/{{ usermessage.id }}/delete/">
<i class="fas fa-trash-alt fa-fw"></i>
</a>
<a href="/rowers/me/messages/{{ usermessage.id }}/markread/">
<i class="fas fa-check fa-fw"></i>
</a>
</p>
</li>
{% endif %}
{% endif %}
{% endfor %}
</ul>
<h1>{{ rower.user.first_name }}'s Previous Messages</h1>
<ul class="main-content">
{% for usermessage in usermessages %}
{% if usermessage.isread %}
<li class="rounder">
<h2>{{ usermessage.subject }}</h2>
<p><em>{{ usermessage.datetime }}</em></p>
<p>
{{ usermessage.text|safe }}
</p>
{% if request.user.rower == usermessage.receiver %}
<p>
<a href="/rowers/me/messages/{{ usermessage.id }}/delete/">
<i class="fas fa-trash-alt fa-fw"></i>
</a>
</p>
</li>
{% endif %}
{% endif %}
{% endfor %}
</ul>

View File

@@ -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):

View File

@@ -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<id>\d+)/delete/$', views.user_message_delete, name='user_message_delete'),
re_path(r'^me/messages/(?P<id>\d+)/markread/$', views.user_message_markread, name='user_message_markread'),
re_path(r'^me/messages/user/(?P<userid>\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/?/$',

View File

@@ -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)

View File

@@ -166,6 +166,14 @@
{% endif %}
</a>
</li>
{% if user.rower|usermessages %}
<li>
<a class="" href="{% url 'user_messages' %}" title="Messages" id="id-messages">
<i class="fas fa-envelope fa-fw"></i>
({{ user.rower|usermessages }})
</a>
</li>
{% endif %}
<li>
<a class="" href="{% url 'logout' %}?next=/login/" title="Sign Out" id="id-logout">
<i class="fas fa-sign-out-alt "></i>