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
{% for usermessage in usermessages %}
+ {% if not usermessage.isread %}
-
{{ usermessage.subject }}
{{ usermessage.datetime }}
- {{ usermessage.text }}
+ {{ usermessage.text|safe }}
+
+ {% if request.user.rower == usermessage.receiver %}
+
+
+
+
+
+
+
+ {% endif %}
+ {% endif %}
+ {% endfor %}
+
+
+{{ rower.user.first_name }}'s Previous Messages
+
+
+ {% for usermessage in usermessages %}
+ {% if usermessage.isread %}
+ -
+
{{ usermessage.subject }}
+ {{ usermessage.datetime }}
+
+ {{ usermessage.text|safe }}
+
+ {% if request.user.rower == usermessage.receiver %}
+
+
+
+
+
+
+ {% endif %}
+ {% endif %}
{% endfor %}
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 %}