summaryrefslogtreecommitdiffstats
path: root/forum/skins/__init__.py
blob: be6bd4f38e33055255d52ea788ba3b02dd27b840 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
from django.conf import settings
from django.template import loader
from django.template.loaders import filesystem 
from django.http import HttpResponse
import os.path
import logging

#module for skinning osqa
#at this point skin can be changed only in settings file
#via OSQA_DEFAULT_SKIN variable

#note - Django template loaders use method django.utils._os.safe_join
#to work on unicode file paths
#here it is ignored because it is assumed that we won't use unicode paths

def load_template_source(name, dirs=None):
    try:
        tname = os.path.join(settings.OSQA_DEFAULT_SKIN,'templates',name)
        return filesystem.load_template_source(tname,dirs)
    except:
        tname = os.path.join('default','templates',name)
        return filesystem.load_template_source(tname,dirs)
load_template_source.is_usable = True

def find_media_source(url):
    """returns url prefixed with the skin name
    of the first skin that contains the file 
    directories are searched in this order:
    settings.OSQA_DEFAULT_SKIN, then 'default', then 'commmon'
    if file is not found - returns None
    and logs an error message
    """
    while url[0] == '/': url = url[1:]
    d = os.path.dirname
    n = os.path.normpath
    j = os.path.join
    f = os.path.isfile
    skins = n(j(d(d(__file__)),'skins'))
    try:
        media = os.path.join(skins, settings.OSQA_DEFAULT_SKIN, url)
        assert(f(media))
        use_skin = settings.OSQA_DEFAULT_SKIN
    except:
        try:
            media = j(skins, 'default', url)
            assert(f(media))
            use_skin = 'default'
        except:
            media = j(skins, 'common', url)
            try:
                assert(f(media))
                use_skin = 'common'
            except:
                logging.error('could not find media for %s' % url)
                use_skin = ''
                return None
    return use_skin + '/' + url