From 93d805ad6b0e5324c515323d2fc0a4a7ea3f1dad Mon Sep 17 00:00:00 2001 From: Rodney Ewing Date: Thu, 8 Aug 2013 15:07:07 -0700 Subject: [PATCH] add user prefrence for insite notifications --- mediagoblin/db/migrations.py | 16 ++++++++++++++-- mediagoblin/db/models.py | 1 + mediagoblin/edit/forms.py | 2 ++ mediagoblin/edit/views.py | 4 +++- mediagoblin/notifications/__init__.py | 18 ++++++++++++++++-- 5 files changed, 36 insertions(+), 5 deletions(-) diff --git a/mediagoblin/db/migrations.py b/mediagoblin/db/migrations.py index 374ab4c8..d542d7b9 100644 --- a/mediagoblin/db/migrations.py +++ b/mediagoblin/db/migrations.py @@ -425,7 +425,7 @@ class RequestToken_v0(declarative_base()): callback = Column(Unicode, nullable=False, default=u"oob") created = Column(DateTime, nullable=False, default=datetime.datetime.now) updated = Column(DateTime, nullable=False, default=datetime.datetime.now) - + class AccessToken_v0(declarative_base()): """ Model for representing the access tokens @@ -438,7 +438,7 @@ class AccessToken_v0(declarative_base()): request_token = Column(Unicode, ForeignKey(RequestToken_v0.token)) created = Column(DateTime, nullable=False, default=datetime.datetime.now) updated = Column(DateTime, nullable=False, default=datetime.datetime.now) - + class NonceTimestamp_v0(declarative_base()): """ @@ -460,3 +460,15 @@ def create_oauth1_tables(db): NonceTimestamp_v0.__table__.create(db.bind) db.commit() + + +@RegisterMigration(15, MIGRATIONS) +def wants_notifications(db): + """Add a wants_notifications field to User model""" + metadata = MetaData(bind=db.bind) + user_table = inspect_table(metadata, "core__users") + + col = Column('wants_notifications', Boolean, default=True) + col.create(user_table) + + db.commit() diff --git a/mediagoblin/db/models.py b/mediagoblin/db/models.py index 9cb39ff4..4341e086 100644 --- a/mediagoblin/db/models.py +++ b/mediagoblin/db/models.py @@ -69,6 +69,7 @@ class User(Base, UserMixin): # Intented to be nullable=False, but migrations would not work for it # set to nullable=True implicitly. wants_comment_notification = Column(Boolean, default=True) + wants_notifications = Column(Boolean, default=True) license_preference = Column(Unicode) is_admin = Column(Boolean, default=False, nullable=False) url = Column(Unicode) diff --git a/mediagoblin/edit/forms.py b/mediagoblin/edit/forms.py index 85c243a0..5de1bf96 100644 --- a/mediagoblin/edit/forms.py +++ b/mediagoblin/edit/forms.py @@ -67,6 +67,8 @@ class EditAccountForm(wtforms.Form): normalize_user_or_email_field(allow_user=False)]) wants_comment_notification = wtforms.BooleanField( description=_("Email me when others comment on my media")) + wants_notifications = wtforms.BooleanField( + description=_("Enable/Disable insite notifications")) license_preference = wtforms.SelectField( _('License preference'), [ diff --git a/mediagoblin/edit/views.py b/mediagoblin/edit/views.py index 6aa2acd9..a11cb932 100644 --- a/mediagoblin/edit/views.py +++ b/mediagoblin/edit/views.py @@ -228,10 +228,12 @@ def edit_account(request): user = request.user form = forms.EditAccountForm(request.form, wants_comment_notification=user.wants_comment_notification, - license_preference=user.license_preference) + license_preference=user.license_preference, + wants_notifications=user.wants_notifications) if request.method == 'POST' and form.validate(): user.wants_comment_notification = form.wants_comment_notification.data + user.wants_notifications = form.wants_notifications.data user.license_preference = form.license_preference.data diff --git a/mediagoblin/notifications/__init__.py b/mediagoblin/notifications/__init__.py index ed9f8d78..b6f9f478 100644 --- a/mediagoblin/notifications/__init__.py +++ b/mediagoblin/notifications/__init__.py @@ -17,7 +17,8 @@ import logging from mediagoblin.db.models import Notification, \ - CommentNotification, CommentSubscription + CommentNotification, CommentSubscription, User +from mediagoblin.notifications.task import email_notification_task from mediagoblin.notifications.tools import generate_comment_message _log = logging.getLogger(__name__) @@ -121,6 +122,12 @@ NOTIFICATION_FETCH_LIMIT = 100 def get_notifications(user_id, only_unseen=True): query = Notification.query.filter_by(user_id=user_id) + wants_notifications = User.query.filter_by(id=user_id).first()\ + .wants_notifications + + # If the user does not want notifications, don't return any + if not wants_notifications: + return None if only_unseen: query = query.filter_by(seen=False) @@ -130,12 +137,19 @@ def get_notifications(user_id, only_unseen=True): return notifications + def get_notification_count(user_id, only_unseen=True): query = Notification.query.filter_by(user_id=user_id) + wants_notifications = User.query.filter_by(id=user_id).first()\ + .wants_notifications if only_unseen: query = query.filter_by(seen=False) - count = query.count() + # If the user doesn't want notifications, don't show any + if not wants_notifications: + count = None + else: + count = query.count() return count -- 2.25.1