messages view
This commit is contained in:
@@ -8,7 +8,7 @@ from .models import (
|
|||||||
WorkoutComment, C2WorldClassAgePerformance, PlannedSession,
|
WorkoutComment, C2WorldClassAgePerformance, PlannedSession,
|
||||||
GeoCourse, GeoPolygon, GeoPoint, VirtualRace, VirtualRaceResult,
|
GeoCourse, GeoPolygon, GeoPoint, VirtualRace, VirtualRaceResult,
|
||||||
PaidPlan, IndoorVirtualRaceResult, ShareKey,
|
PaidPlan, IndoorVirtualRaceResult, ShareKey,
|
||||||
CourseStandard, StandardCollection, InstantPlan,
|
CourseStandard, StandardCollection, InstantPlan, UserMessage
|
||||||
)
|
)
|
||||||
|
|
||||||
# Register your models here so you can use them in the Admin module
|
# Register your models here so you can use them in the Admin module
|
||||||
@@ -170,6 +170,9 @@ class CourseStandardAdmin(admin.ModelAdmin):
|
|||||||
class InstantPlanAdmin(admin.ModelAdmin):
|
class InstantPlanAdmin(admin.ModelAdmin):
|
||||||
list_display = ('name','duration','price')
|
list_display = ('name','duration','price')
|
||||||
|
|
||||||
|
class UserMessageAdmin(admin.ModelAdmin):
|
||||||
|
list_display = ('receiver','datetime','subject')
|
||||||
|
|
||||||
admin.site.unregister(User)
|
admin.site.unregister(User)
|
||||||
admin.site.register(User, UserAdmin)
|
admin.site.register(User, UserAdmin)
|
||||||
admin.site.register(Workout, WorkoutAdmin)
|
admin.site.register(Workout, WorkoutAdmin)
|
||||||
@@ -192,3 +195,4 @@ admin.site.register(ShareKey, ShareKeyAdmin)
|
|||||||
admin.site.register(CourseStandard, CourseStandardAdmin)
|
admin.site.register(CourseStandard, CourseStandardAdmin)
|
||||||
admin.site.register(StandardCollection, StandardCollectionAdmin)
|
admin.site.register(StandardCollection, StandardCollectionAdmin)
|
||||||
admin.site.register(InstantPlan, InstantPlanAdmin)
|
admin.site.register(InstantPlan, InstantPlanAdmin)
|
||||||
|
admin.site.register(UserMessage, UserMessageAdmin)
|
||||||
|
|||||||
@@ -1248,6 +1248,14 @@ class UserMessage(models.Model):
|
|||||||
text = models.CharField(max_length=1000)
|
text = models.CharField(max_length=1000)
|
||||||
subject = models.CharField(max_length=100,default='Message')
|
subject = models.CharField(max_length=100,default='Message')
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return '{r1} {r2} {d} {subject}'.format(
|
||||||
|
r1 = self.receiver.user.first_name,
|
||||||
|
r2 = self.receiver.user.last_name,
|
||||||
|
d = self.datetime,
|
||||||
|
subject = self.subject
|
||||||
|
)
|
||||||
|
|
||||||
# requestor is user
|
# requestor is user
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
1
rowers/templates/.#analysis.html
Symbolic link
1
rowers/templates/.#analysis.html
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
sander@rowsandall-2.6250:1697974899
|
||||||
@@ -2,6 +2,11 @@
|
|||||||
{% load rowerfilters %}
|
{% load rowerfilters %}
|
||||||
<h1><a href="/rowers/me/edit/">Profile</a></h1>
|
<h1><a href="/rowers/me/edit/">Profile</a></h1>
|
||||||
<ul class="cd-accordion-menu animated">
|
<ul class="cd-accordion-menu animated">
|
||||||
|
<li id="manage-messgs">
|
||||||
|
<a href="/rowers/me/messages/">
|
||||||
|
<i class="fas fa-envelope fa-fw"></i> Messages
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
<li id="manage-prefs-simple">
|
<li id="manage-prefs-simple">
|
||||||
<a href="/rowers/me/prefs/">
|
<a href="/rowers/me/prefs/">
|
||||||
<i class="fas fa-sliders-v-square fa-fw"></i> Threshold
|
<i class="fas fa-sliders-v-square fa-fw"></i> Threshold
|
||||||
|
|||||||
24
rowers/templates/user_messages.html
Normal file
24
rowers/templates/user_messages.html
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
{% extends "newbase.html" %}
|
||||||
|
|
||||||
|
{% block title %}Messages{% endblock %}
|
||||||
|
|
||||||
|
{% block main %}
|
||||||
|
<h1>{{ rower.user.first_name }}'s Messages</h1>
|
||||||
|
|
||||||
|
<ul class="main-content">
|
||||||
|
{% for usermessage in usermessages %}
|
||||||
|
<li class="rounder">
|
||||||
|
<h2>{{ usermessage.subject }}</h2>
|
||||||
|
<p><em>{{ usermessage.datetime }}</em></p>
|
||||||
|
<p>
|
||||||
|
{{ usermessage.text }}
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block sidebar %}
|
||||||
|
{% include 'menu_profile.html' %}
|
||||||
|
{% endblock %}
|
||||||
@@ -650,6 +650,7 @@ urlpatterns = [
|
|||||||
re_path(r'^alerts/(?P<id>\d+)/report/$',
|
re_path(r'^alerts/(?P<id>\d+)/report/$',
|
||||||
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/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/?/$',
|
||||||
|
|||||||
@@ -158,7 +158,8 @@ from rowers.models import (
|
|||||||
VideoAnalysis, ShareKey,
|
VideoAnalysis, ShareKey,
|
||||||
StandardCollection, CourseStandard,
|
StandardCollection, CourseStandard,
|
||||||
VirtualRaceFollower, TombStone, InstantPlan,
|
VirtualRaceFollower, TombStone, InstantPlan,
|
||||||
PlannedSessionStep,InStrokeAnalysis, ForceCurveAnalysis, SyncRecord
|
PlannedSessionStep,InStrokeAnalysis, ForceCurveAnalysis, SyncRecord,
|
||||||
|
UserMessage,
|
||||||
)
|
)
|
||||||
from rowers.models import ( RowerPowerForm, RowerHRZonesForm, SimpleRowerPowerForm,
|
from rowers.models import ( RowerPowerForm, RowerHRZonesForm, SimpleRowerPowerForm,
|
||||||
RowerForm, RowerCPForm, GraphImage, AdvancedWorkoutForm,
|
RowerForm, RowerCPForm, GraphImage, AdvancedWorkoutForm,
|
||||||
|
|||||||
@@ -248,6 +248,14 @@ def start_plantrial_view(request):
|
|||||||
|
|
||||||
return HttpResponseRedirect(url)
|
return HttpResponseRedirect(url)
|
||||||
|
|
||||||
|
@login_required()
|
||||||
|
@permission_required('rower.is_coach', fn=get_user_by_userid, raise_exception=True)
|
||||||
|
def user_messages(request,userid=0):
|
||||||
|
r = getrequestrowercoachee(request, userid=userid, notpermanent=True)
|
||||||
|
usermessages = UserMessage.objects.filter(receiver=r).order_by('-datetime')
|
||||||
|
return render(request,'user_messages.html',
|
||||||
|
{'usermessages':usermessages,
|
||||||
|
'rower':r})
|
||||||
|
|
||||||
# Page where user can manage his favorite charts
|
# Page where user can manage his favorite charts
|
||||||
@login_required()
|
@login_required()
|
||||||
|
|||||||
Reference in New Issue
Block a user