rosedu/wouso

View on GitHub
wouso/interface/context_processors.py

Summary

Maintainability
A
2 hrs
Test Coverage
import logging
from django.core.urlresolvers import reverse, NoReverseMatch
from django.conf import settings
from wouso.core.game import get_games
from wouso.core.config.models import Setting
from wouso.core.magic.models import Bazaar
from wouso.interface.apps import get_apps
from wouso.interface.apps.messaging.models import Message
from wouso.interface import get_static_pages, detect_mobile, mobile_browser
from wouso.interface.cpanel import get_cpanel_games
from wouso.settings import FORCE_SCRIPT_NAME
from . import set_theme

def context(request):
    """ Make all configuration settings available as config_name
    and also define some game context
    """
    settings_dict = {}
    settings_dict['basepath'] = FORCE_SCRIPT_NAME
    for s in Setting.objects.all():
        settings_dict['config_' + s.name.replace('-','_').lower()] = s.get_value()

    for k, v in settings_dict.iteritems():
        if k.startswith('config_disable'):
            try:
                settings_dict[k] = bool(v)
            except ValueError: pass

    # user defined theme
    if request.user.is_authenticated():
        custom_theme = settings_dict.get('config_theme_user_%d' % request.user.get_profile().id, None)
        if custom_theme:
            settings_dict['config_theme'] = custom_theme
            set_theme(custom_theme)

    # override theme using GET args
    if request.GET.get('theme', None) is not None:
        from wouso.utils import get_themes
        theme = request.GET['theme']
        if theme in get_themes():
            settings_dict['config_theme'] = theme
            set_theme(theme)
    else:
        set_theme(settings_dict.get('config_theme', None))

    # shorthand user.get_profile
    settings_dict['player'] = request.user.get_profile() if request.user.is_authenticated() else None

    # do not use minidetector for now
    mobile = detect_mobile(request)
    if mobile:
        settings_dict['base_template'] = 'mobile_base.html'
    else:
        settings_dict['base_template'] = 'site_base.html'
    settings_dict['has_mobile'] = mobile_browser(request)

    if request.GET.get('ajax', False):
        settings_dict['base_template'] = 'interface/ajax_message.html'

    settings_dict['static_pages'] = get_static_pages()
    settings_dict['games_list'] = get_cpanel_games()
    return settings_dict