user messages work
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
from django.contrib.staticfiles import finders
|
from django.contrib.staticfiles import finders
|
||||||
|
from bs4 import BeautifulSoup
|
||||||
import os
|
import os
|
||||||
import time
|
import time
|
||||||
import gc
|
import gc
|
||||||
@@ -112,17 +112,22 @@ def send_template_email(from_email, to_email, subject,
|
|||||||
else:
|
else:
|
||||||
emailbounced = False
|
emailbounced = False
|
||||||
|
|
||||||
try:
|
for recipient in to_email:
|
||||||
usr = User.objects.get(email=to_email)
|
try:
|
||||||
umsg = UserMessage(
|
soup = BeautifulSoup(html_content)
|
||||||
receiver = usr.rower,
|
|
||||||
datetime = timezone.now(),
|
s2 = soup.body
|
||||||
text = text_content,
|
|
||||||
subject=subject,
|
usr = User.objects.get(email=recipient)
|
||||||
)
|
umsg = UserMessage(
|
||||||
umsg.save()
|
receiver = usr.rower,
|
||||||
except User.DoesNotExist:
|
datetime = timezone.now(),
|
||||||
pass
|
text = '{text}'.format(text=s2),
|
||||||
|
subject=subject,
|
||||||
|
)
|
||||||
|
umsg.save()
|
||||||
|
except User.DoesNotExist:
|
||||||
|
pass
|
||||||
|
|
||||||
if not emailbounced:
|
if not emailbounced:
|
||||||
res = msg.send()
|
res = msg.send()
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
sander@rowsandall-2.6250:1697974899
|
|
||||||
@@ -5,6 +5,9 @@
|
|||||||
<li id="manage-messgs">
|
<li id="manage-messgs">
|
||||||
<a href="/rowers/me/messages/">
|
<a href="/rowers/me/messages/">
|
||||||
<i class="fas fa-envelope fa-fw"></i> Messages
|
<i class="fas fa-envelope fa-fw"></i> Messages
|
||||||
|
{% if rower|usermessages %}
|
||||||
|
( {{ rower|usermessages }} )
|
||||||
|
{% endif %}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li id="manage-prefs-simple">
|
<li id="manage-prefs-simple">
|
||||||
|
|||||||
@@ -3,17 +3,52 @@
|
|||||||
{% block title %}Messages{% endblock %}
|
{% block title %}Messages{% endblock %}
|
||||||
|
|
||||||
{% block main %}
|
{% block main %}
|
||||||
<h1>{{ rower.user.first_name }}'s Messages</h1>
|
<h1>{{ rower.user.first_name }}'s New Messages</h1>
|
||||||
|
|
||||||
<ul class="main-content">
|
<ul class="main-content">
|
||||||
{% for usermessage in usermessages %}
|
{% for usermessage in usermessages %}
|
||||||
|
{% if not usermessage.isread %}
|
||||||
<li class="rounder">
|
<li class="rounder">
|
||||||
<h2>{{ usermessage.subject }}</h2>
|
<h2>{{ usermessage.subject }}</h2>
|
||||||
<p><em>{{ usermessage.datetime }}</em></p>
|
<p><em>{{ usermessage.datetime }}</em></p>
|
||||||
<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>
|
</p>
|
||||||
</li>
|
</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 %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ from rowers.models import (
|
|||||||
course_length, WorkoutComment,
|
course_length, WorkoutComment,
|
||||||
TrainingMacroCycle, TrainingMesoCycle, TrainingMicroCycle,
|
TrainingMacroCycle, TrainingMesoCycle, TrainingMicroCycle,
|
||||||
Rower, Workout, SiteAnnouncement, TeamInvite, TeamRequest, CoachOffer, CoachRequest,
|
Rower, Workout, SiteAnnouncement, TeamInvite, TeamRequest, CoachOffer, CoachRequest,
|
||||||
VirtualRaceFollower, VirtualRace, favanalysischoices,
|
VirtualRaceFollower, VirtualRace, favanalysischoices, UserMessage,
|
||||||
Team, TrainingPlan, TrainingTarget)
|
Team, TrainingPlan, TrainingTarget)
|
||||||
|
|
||||||
from rowers.plannedsessions import (
|
from rowers.plannedsessions import (
|
||||||
@@ -56,6 +56,15 @@ def workoutdate(id): # pragma: no cover
|
|||||||
except Workout.DoesNotExist:
|
except Workout.DoesNotExist:
|
||||||
return 'unknown'
|
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
|
@register.filter
|
||||||
def isfollower(user, id):
|
def isfollower(user, id):
|
||||||
|
|||||||
@@ -651,6 +651,9 @@ urlpatterns = [
|
|||||||
views.alert_report_view, name='alert_report_view'),
|
views.alert_report_view, name='alert_report_view'),
|
||||||
re_path(r'^me/deactivate/$', views.deactivate_user, name='deactivate_user'),
|
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/$', 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'^me/delete/$', views.remove_user, name='remove_user'),
|
||||||
re_path(r'^survey/$', views.survey, name='survey'),
|
re_path(r'^survey/$', views.survey, name='survey'),
|
||||||
re_path(r'^me/gdpr-optin-confirm/?/$',
|
re_path(r'^me/gdpr-optin-confirm/?/$',
|
||||||
|
|||||||
@@ -257,6 +257,42 @@ def user_messages(request,userid=0):
|
|||||||
{'usermessages':usermessages,
|
{'usermessages':usermessages,
|
||||||
'rower':r})
|
'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
|
# Page where user can manage his favorite charts
|
||||||
@login_required()
|
@login_required()
|
||||||
@permission_required('rower.is_coach', fn=get_user_by_userid, raise_exception=True)
|
@permission_required('rower.is_coach', fn=get_user_by_userid, raise_exception=True)
|
||||||
|
|||||||
@@ -166,6 +166,14 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</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>
|
<li>
|
||||||
<a class="" href="{% url 'logout' %}?next=/login/" title="Sign Out" id="id-logout">
|
<a class="" href="{% url 'logout' %}?next=/login/" title="Sign Out" id="id-logout">
|
||||||
<i class="fas fa-sign-out-alt "></i>
|
<i class="fas fa-sign-out-alt "></i>
|
||||||
|
|||||||
Reference in New Issue
Block a user