From 1489e9c47a83ef0f76095021d5ae52dff6384f17 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Wed, 8 Nov 2017 13:19:25 +0100 Subject: [PATCH] checks email for uniqueness upon change --- rowers/dataprep.py | 7 ++++++- rowers/models.py | 41 +++++++++++++++++++++++++++++++++++++++-- rowers/views.py | 5 +++-- 3 files changed, 48 insertions(+), 5 deletions(-) diff --git a/rowers/dataprep.py b/rowers/dataprep.py index 5771c12e..98a55ae2 100644 --- a/rowers/dataprep.py +++ b/rowers/dataprep.py @@ -29,7 +29,7 @@ from rowingdata import ( TCXParser, RowProParser, ErgDataParser, CoxMateParser, BoatCoachParser, RowPerfectParser, BoatCoachAdvancedParser, - MysteryParser, BoatCoachOTWParser, + MysteryParser, BoatCoachOTWParser,QuiskeParser, painsledDesktopParser, speedcoachParser, ErgStickParser, SpeedCoach2Parser, FITParser, fitsummarydata, make_cumvalues,cumcpdata, @@ -866,6 +866,11 @@ def handle_nonpainsled(f2, fileformat, summary=''): row = MysteryParser(f2) hasrecognized = True + # handle Quiske + if (fileformat == 'quiske'): + row = QuiskeParser(f2) + hasrecognized = True + # handle RowPerfect if (fileformat == 'rowperfect3'): row = RowPerfectParser(f2) diff --git a/rowers/models.py b/rowers/models.py index ef3d25e0..ab94a5d7 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -2,6 +2,8 @@ from __future__ import unicode_literals from django.db import models from django.contrib.auth.models import User +from django.core.validators import validate_email +from django.core.exceptions import ValidationError from django import forms from django.forms import ModelForm from django.dispatch import receiver @@ -941,15 +943,50 @@ class AccountRowerForm(ModelForm): 'defaulttimezone','showfavoritechartnotes', 'defaultlandingpage'] + def clean_email(self): + email = self.cleaned_data.get('email') + + try: + validate_email(email) + except ValidationError: + raise forms.ValidationError( + 'Please enter a valid email address') + + try: + match = User.objects.get(email__iexact=email) + if self.instance.user == match: + return email + except User.DoesNotExist: + return email + + raise forms.ValidationError('This email address is not allowed') + + + class UserForm(ModelForm): class Meta: model = User fields = ['first_name','last_name','email'] + def clean_email(self): + email = self.cleaned_data.get('email') - def clean(self): - cleaned_data = super(UserForm, self).clean() + try: + validate_email(email) + except ValidationError: + raise forms.ValidationError( + 'Please enter a valid email address') + + try: + match = User.objects.get(email__iexact=email) + if self.instance == match: + return email + except User.DoesNotExist: + return email + raise forms.ValidationError('This email address is not allowed') + + # Form to set rower's Heart Rate zones, including test routines # to enable consistency class RowerForm(ModelForm): diff --git a/rowers/views.py b/rowers/views.py index 619a99db..a94c8089 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -17,6 +17,7 @@ from django import template from django.db import IntegrityError, transaction from django.views.decorators.csrf import csrf_exempt + from django.shortcuts import render from django.http import ( HttpResponse, HttpResponseRedirect, @@ -9703,7 +9704,7 @@ def rower_edit_view(request,message=""): }) elif request.method == 'POST' and "weightcategory" in request.POST: accountform = AccountRowerForm(request.POST) - userform = UserForm(request.POST) + userform = UserForm(request.POST,instance=request.user) if accountform.is_valid() and userform.is_valid(): # process cd = accountform.cleaned_data @@ -9720,7 +9721,7 @@ def rower_edit_view(request,message=""): if len(first_name): u.first_name = first_name u.last_name = last_name - if len(email): + if len(email): ## and check_email_freeforuse(u,email): u.email = email