From 34a8edc2e1758454dbc46449a65e3dd4c237a692 Mon Sep 17 00:00:00 2001 From: Andrew Buss Date: Thu, 21 May 2015 13:44:22 -0700 Subject: [PATCH] ignore effects of unverified users --- flashcards/fixtures/testusers.json | 1 + flashcards/migrations/0004_user_confirmed_email.py | 19 +++++++++++++++++++ flashcards/models.py | 13 +++++++++++-- 3 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 flashcards/migrations/0004_user_confirmed_email.py diff --git a/flashcards/fixtures/testusers.json b/flashcards/fixtures/testusers.json index 92563f2..be237e5 100644 --- a/flashcards/fixtures/testusers.json +++ b/flashcards/fixtures/testusers.json @@ -8,6 +8,7 @@ "is_superuser": false, "is_staff": false, "last_login": null, + "confirmed_email": true, "groups": [], "user_permissions": [], "password": "pbkdf2_sha256$20000$9NRycTz13dZ8$jV/YWGHYcytwdWAvNfdHMHF9nezQnR7AlXoK1v6KxHo=", diff --git a/flashcards/migrations/0004_user_confirmed_email.py b/flashcards/migrations/0004_user_confirmed_email.py new file mode 100644 index 0000000..5e79b1e --- /dev/null +++ b/flashcards/migrations/0004_user_confirmed_email.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('flashcards', '0003_auto_20150521_0203'), + ] + + operations = [ + migrations.AddField( + model_name='user', + name='confirmed_email', + field=models.BooleanField(default=False), + ), + ] diff --git a/flashcards/models.py b/flashcards/models.py index e56633f..ba30e9e 100644 --- a/flashcards/models.py +++ b/flashcards/models.py @@ -1,5 +1,6 @@ from math import log1p from math import exp +import datetime from django.contrib.auth.models import AbstractUser, UserManager from django.contrib.auth.tokens import default_token_generator @@ -13,7 +14,7 @@ from django.utils.timezone import now, make_aware from simple_email_confirmation import SimpleEmailConfirmationUserMixin from fields import MaskField from cached_property import cached_property -import datetime + @@ -70,6 +71,7 @@ class User(AbstractUser, SimpleEmailConfirmationUserMixin): USERNAME_FIELD = 'email' REQUIRED_FIELDS = [] sections = ManyToManyField('Section', help_text="The sections which the user is enrolled in") + confirmed_email = BooleanField(default=False) def is_in_section(self, section): return self.sections.filter(pk=section.pk).exists() @@ -118,6 +120,11 @@ class User(AbstractUser, SimpleEmailConfirmationUserMixin): "noreply@flashy.cards", [self.email]) + def confirm_email(self, confirmation_key): + # This will raise an exception if the email address is invalid + self.email_address_set.confirm(confirmation_key, save=True) + self.confirmed_email = True + class UserFlashcard(Model): """ @@ -250,6 +257,7 @@ class Flashcard(Model): epoch = make_aware(datetime.datetime.utcfromtimestamp(0)) delta = dt - epoch return delta.total_seconds() + z = 0 rate = 1.0 / 3600 for vote in self.userflashcard_set.iterator(): @@ -265,7 +273,8 @@ class Flashcard(Model): :param user: :return: A queryset with all cards that should be visible to a user. """ - return cls.objects.filter(author__is_active=True).filter(is_hidden=False).exclude(flashcardhide__user=user) + return cls.objects.filter(author__confirmed_email=True).filter(is_hidden=False).exclude( + flashcardhide__user=user) class UserFlashcardQuiz(Model): -- 1.9.1