diff --git a/tailbone/subscribers.py b/tailbone/subscribers.py index 23e31f3b..c0d8a9c0 100644 --- a/tailbone/subscribers.py +++ b/tailbone/subscribers.py @@ -1,9 +1,8 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- +# -*- coding: utf-8 -*- ################################################################################ # # Rattail -- Retail Software Framework -# Copyright © 2010-2012 Lance Edgar +# Copyright © 2010-2016 Lance Edgar # # This file is part of Rattail. # @@ -21,20 +20,23 @@ # along with Rattail. If not, see . # ################################################################################ - """ Event Subscribers """ -from pyramid import threadlocal -import rattail -from . import helpers +from __future__ import unicode_literals, absolute_import -from pyramid.security import authenticated_userid -from .db import Session -from rattail.db.model import User +import rattail +from rattail import enum +from rattail.db import model from rattail.db.auth import has_permission +from pyramid import threadlocal +from pyramid.security import authenticated_userid + +from tailbone import helpers +from tailbone.db import Session + def add_rattail_config_attribute_to_request(event): """ @@ -78,6 +80,24 @@ def before_render(event): renderer_globals['rattail'] = rattail +def add_inbox_count(event): + """ + Adds the current user's inbox message count to the global renderer context. + + Note that this is not enabled by default; to turn it on you must do this: + + config.add_subscriber('tailbone.subscribers.add_inbox_count', 'pyramid.events.BeforeRender') + """ + request = event.get('request') or threadlocal.get_current_request() + if request.user: + renderer_globals = event + renderer_globals['inbox_count'] = Session.query(model.Message)\ + .outerjoin(model.MessageRecipient)\ + .filter(model.MessageRecipient.recipient == Session.merge(request.user))\ + .filter(model.MessageRecipient.status == enum.MESSAGE_STATUS_INBOX)\ + .count() + + def context_found(event): """ Attach some goodies to the request object. @@ -96,7 +116,7 @@ def context_found(event): request.user = None uuid = authenticated_userid(request) if uuid: - request.user = Session.query(User).get(uuid) + request.user = Session.query(model.User).get(uuid) if request.user: Session().set_continuum_user(request.user)