Private
Public Access
1
0

more fixes

This commit is contained in:
Sander Roosendaal
2020-01-15 15:55:41 +01:00
parent 88703bb34e
commit 8683d8eaa4
10 changed files with 29 additions and 44 deletions

View File

@@ -1351,7 +1351,7 @@ class TrainingPlan(models.Model):
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
manager = self.manager manager = self.manager
if not can_add_plan(manager): if not can_add_plan(manager.user):
raise ValidationError( raise ValidationError(
"Basic user cannot have a training plan" "Basic user cannot have a training plan"
) )

View File

@@ -86,7 +86,7 @@ def user_is_not_basic(user):
def is_coach(user): def is_coach(user):
return user.rower.rowerplan in ['coach','freecoach'] return user.rower.rowerplan in ['coach','freecoach']
def is_paidcoach(user): def is_paid_coach(user):
return user.rower.rowerplan == 'coach' return user.rower.rowerplan == 'coach'
@rules.predicate @rules.predicate
@@ -228,6 +228,9 @@ def can_add_workout_member(user,rower):
# check if user can plan for the rower # check if user can plan for the rower
@rules.predicate @rules.predicate
def can_plan_user(user,rower): def can_plan_user(user,rower):
if not isplanmember(user):
return False
try: try:
r = user.rower r = user.rower
except AttributeError: except AttributeError:
@@ -243,7 +246,7 @@ def can_plan_user(user,rower):
return False return False
rules.add_perm('rower.can_plan',can_plan_user) # replaces checkaccessplanuser rules.add_perm('rower.add_plan',can_plan_user) # replaces checkaccessplanuser
rules.add_perm('rower.is_coach',is_coach_user) # replaces checkaccessuser rules.add_perm('rower.is_coach',is_coach_user) # replaces checkaccessuser
rules.add_perm('rower.is_pro',ispromember) rules.add_perm('rower.is_pro',ispromember)

View File

@@ -173,12 +173,15 @@ def rower_get_coaches(rower):
def coach_getcoachees(coach): def coach_getcoachees(coach):
rowers = []
if coach.mycoachgroup and is_coach(coach.user): if coach.mycoachgroup and is_coach(coach.user):
return Rower.objects.filter( rs = Rower.objects.filter(
coachinggroups__in=[coach.mycoachgroup] coachinggroups__in=[coach.mycoachgroup]
).distinct().order_by("user__last_name","user__first_name") ).distinct().order_by("user__last_name","user__first_name")
else: for r in rs:
return [] rowers.append(r)
return rowers
def coach_remove_athlete(coach,rower): def coach_remove_athlete(coach,rower):
try: try:

View File

@@ -46,6 +46,4 @@
</ul> <!-- cd-accordion-menu --> </ul> <!-- cd-accordion-menu -->
{% include 'menuscript.html' %} {% include 'menuscript.html' %}

View File

@@ -44,13 +44,13 @@
{% if user.is_authenticated and user|is_manager and rower %} {% if user.is_authenticated and user|is_manager and rower %}
<p>&nbsp;</p> <p>&nbsp;</p>
{% if user|coach_rowers %} {% if request.user|coach_rowers %}
<ul class="cd-accordion-menu animated"> <ul class="cd-accordion-menu animated">
<li class="has-children" id="athletes"> <li class="has-children" id="athletes">
<input type="checkbox" name="athlete-selector" id="athlete-selector"> <input type="checkbox" name="athlete-selector" id="athlete-selector">
<label for="athlete-selector"><i class="fas fa-users fa-fw"></i>&nbsp;Athletes</label> <label for="athlete-selector"><i class="fas fa-users fa-fw"></i>&nbsp;Athletes</label>
<ul> <ul>
{% for member in user|coach_rowers %} {% for member in request.user|coach_rowers %}
<a href={{ request.path|userurl:member.user }}> <a href={{ request.path|userurl:member.user }}>
<i class="fas fa-user fa-fw"></i> <i class="fas fa-user fa-fw"></i>
{% if member.user == rower.user %} {% if member.user == rower.user %}

View File

@@ -1909,7 +1909,6 @@ class PlannedSessionDelete(DeleteView):
@user_passes_test(isplanmember,login_url="/rowers/paidplans", @user_passes_test(isplanmember,login_url="/rowers/paidplans",
message="This functionality requires a Coach or Self-Coach plan", message="This functionality requires a Coach or Self-Coach plan",
redirect_field_name=None) redirect_field_name=None)
@permission_required('rower.add_plan',fn=get_rower_by_userid,raise_exception=True)
def rower_create_trainingplan(request,id=0): def rower_create_trainingplan(request,id=0):
therower = getrequestrower(request,userid=id) therower = getrequestrower(request,userid=id)
theuser = therower.user theuser = therower.user
@@ -1977,7 +1976,8 @@ def rower_create_trainingplan(request,id=0):
p.save() p.save()
for athlete in athletes: for athlete in athletes:
p.rowers.add(athlete) if can_plan_user(request.user,athlete):
p.rowers.add(athlete)
targets = TrainingTarget.objects.filter( targets = TrainingTarget.objects.filter(
@@ -2012,7 +2012,7 @@ def rower_create_trainingplan(request,id=0):
breadcrumbs = [ breadcrumbs = [
{ {
'url':reverse(plannedsessions_view, 'url':reverse(plannedsessions_view,
kwargs={'userid':userid}), kwargs={'userid':id}),
'name': 'Plan' 'name': 'Plan'
}, },
{ {

View File

@@ -44,7 +44,7 @@ from rowers.rower_rules import (
can_view_target,can_change_target,can_delete_target, can_view_target,can_change_target,can_delete_target,
can_view_plan,can_change_plan,can_delete_plan, can_view_plan,can_change_plan,can_delete_plan,
can_view_cycle,can_change_cycle,can_delete_cycle, can_view_cycle,can_change_cycle,can_delete_cycle,
can_add_workout_member, can_add_workout_member,can_plan_user,is_paid_coach
) )
from django.shortcuts import render from django.shortcuts import render
@@ -348,9 +348,8 @@ def get_user_by_id(*args,**kwargs):
return get_object_or_404(User,pk=id) return get_object_or_404(User,pk=id)
def get_rower_by_userid(*args,**kwargs): def get_rower_by_userid(request,id):
userid = kwargs['id'] u = User.objects.get(id=id)
u = User.objects.get(id=userid)
return u.rower return u.rower
def getrequestrower(request,rowerid=0,userid=0,notpermanent=False): def getrequestrower(request,rowerid=0,userid=0,notpermanent=False):
@@ -381,6 +380,7 @@ def getrequestrower(request,rowerid=0,userid=0,notpermanent=False):
raise Http404("Rower doesn't exist") raise Http404("Rower doesn't exist")
if userid != 0 and not is_coach_user(request.user,u): if userid != 0 and not is_coach_user(request.user,u):
request.session['rowerid'] = request.user.rower.id
raise PermissionDenied("You have no access to this user") raise PermissionDenied("You have no access to this user")
if notpermanent == False: if notpermanent == False:
@@ -414,6 +414,7 @@ def getrequestplanrower(request,rowerid=0,userid=0,notpermanent=False):
raise Http404("Rower doesn't exist") raise Http404("Rower doesn't exist")
if not is_coach_user(request.user,r.user): if not is_coach_user(request.user,r.user):
request.session['rowerid'] = r.id
raise PermissionDenied("You have no access to this user") raise PermissionDenied("You have no access to this user")
if notpermanent == False: if notpermanent == False:
@@ -1038,23 +1039,6 @@ def iscoachmember(user):
return result return result
def cancreateteam(user):
if user.is_anonymous:
return False
try:
r = Rower.objects.get(user=user)
except Rower.DoesNotExist:
r = Rower(user=user)
r.save()
if user.is_authenticated and ('coach' in r.rowerplan):
return True
elif user.is_athenticated() and r.rowerplan in ['plan','pro']:
ts = Team.objects.filter(manager=user)
if len(otherteams) >= 1:
return False
from rowers.utils import ProcessorCustomerError from rowers.utils import ProcessorCustomerError

View File

@@ -648,15 +648,10 @@ def team_edit_view(request, team_id=0):
'team':t, 'team':t,
}) })
#@user_passes_test(cancreateteam,login_url="/rowers/paidplans",redirect_field_name=None) @user_passes_test(can_add_team,login_url="/rowers/paidplans",redirect_field_name=None)
def team_create_view(request): def team_create_view(request):
r = getrequestrower(request) r = getrequestrower(request)
if not user_is_not_basic(request.user):
messages.error(request,"You must upgrade to Pro or higher to create teams/training groups")
url = reverse('paidplans')
return HttpResponseRedirect(url)
if request.method == 'POST': if request.method == 'POST':
teamcreateform = TeamForm(request.POST) teamcreateform = TeamForm(request.POST)
if teamcreateform.is_valid(): if teamcreateform.is_valid():

View File

@@ -1760,7 +1760,9 @@ def workouts_view(request,message='',successmessage='',
# check if access is allowed # check if access is allowed
if not is_rower_team_member(request.user,r): if not is_rower_team_member(request.user,r):
raise PermissionDenied("Access denied") request.session['rowerid'] = request.user.rower.id
raise PermissionDenied("Access denied")

View File

@@ -246,7 +246,7 @@
{% endif %} {% endif %}
{% endif %} {% endif %}
{% if user.rower.protrialexpires and user.rower.protrialexpires|is_future_date %} {% if user.rower.protrialexpires and user.rower.protrialexpires|is_future_date %}
{% if user.rower.plantrialexpires and user.rower.rowerplan != 'plan' %} {% if user.rower.plantrialexpires and user.rower.plantrialexpires|is_future_date and user.rower.rowerplan != 'plan' %}
<li class="grid_4"> <li class="grid_4">
<p class="successmessage"> <p class="successmessage">
{{ user.rower.protrialexpires|date_dif|ddays }} days left of your Self-Coach trial - Would you like to <a href="/rowers/paidplans/">upgrade now?</a> {{ user.rower.protrialexpires|date_dif|ddays }} days left of your Self-Coach trial - Would you like to <a href="/rowers/paidplans/">upgrade now?</a>