This repository has been archived on 2025-05-04. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
s2forums/djangobb_forum/middleware.py
2012-04-26 14:31:51 +03:00

51 lines
1.9 KiB
Python

from datetime import datetime, timedelta
from django.core.cache import cache
from django.utils import translation
from django.conf import settings as global_settings
from djangobb_forum import settings as forum_settings
class LastLoginMiddleware(object):
def process_request(self, request):
if request.user.is_authenticated():
cache.set('djangobb_user%d' % request.user.id, True, forum_settings.USER_ONLINE_TIMEOUT)
class ForumMiddleware(object):
def process_request(self, request):
if request.user.is_authenticated():
profile = request.user.forum_profile
language = translation.get_language_from_request(request)
if not profile.language:
profile.language = language
profile.save()
if profile.language and profile.language != language:
request.session['django_language'] = profile.language
translation.activate(profile.language)
request.LANGUAGE_CODE = translation.get_language()
class UsersOnline(object):
def process_request(self, request):
now = datetime.now()
delta = now - timedelta(seconds=forum_settings.USER_ONLINE_TIMEOUT)
users_online = cache.get('djangobb_users_online', {})
guests_online = cache.get('djangobb_guests_online', {})
if request.user.is_authenticated():
users_online[request.user.id] = now
else:
guest_sid = request.COOKIES.get(global_settings.SESSION_COOKIE_NAME, '')
guests_online[guest_sid] = now
for user_id in users_online.keys():
if users_online[user_id] < delta:
del users_online[user_id]
for guest_id in guests_online.keys():
if guests_online[guest_id] < delta:
del guests_online[guest_id]
cache.set('djangobb_users_online', users_online, 60*60*24)
cache.set('djangobb_guests_online', guests_online, 60*60*24)