|
2 | 2 |
|
3 | 3 | from django.shortcuts import render_to_response as render |
4 | 4 | from django.template import RequestContext |
| 5 | +from django.conf import settings |
5 | 6 |
|
6 | | -def settings(request, new_enough = -1, expires_soon = -1, full_draft = "", left_menu=""): |
7 | | - if new_enough < 0: |
8 | | - if "new_enough" in request.COOKIES and request.COOKIES["new_enough"].isdigit(): |
9 | | - new_enough = int(request.COOKIES["new_enough"]) |
10 | | - else: |
11 | | - new_enough = 14 |
12 | | - if expires_soon < 0: |
13 | | - if "expires_soon" in request.COOKIES and request.COOKIES["expires_soon"].isdigit(): |
14 | | - expires_soon = int(request.COOKIES["expires_soon"]) |
15 | | - else: |
16 | | - expires_soon = 14 |
17 | | - if full_draft == "": |
18 | | - if "full_draft" in request.COOKIES: |
19 | | - full_draft = request.COOKIES["full_draft"] |
20 | | - if full_draft != 'on' and full_draft != 'off': |
21 | | - full_draft = "off" |
22 | | - else: |
23 | | - full_draft = "off" |
24 | | - if left_menu == "": |
25 | | - if "left_menu" in request.COOKIES: |
26 | | - left_menu = request.COOKIES["left_menu"] |
27 | | - if left_menu != 'on' and left_menu != 'off': |
28 | | - left_menu = "on" |
29 | | - else: |
30 | | - left_menu = "on" |
31 | | - return render("cookies/settings.html", |
32 | | - { |
33 | | - "new_enough" : new_enough, |
34 | | - "expires_soon" : expires_soon, |
35 | | - "full_draft" : full_draft, |
36 | | - "left_menu": left_menu, |
37 | | - }, context_instance=RequestContext(request)) |
| 7 | +import debug # pyflakes:ignore |
38 | 8 |
|
39 | | -def new_enough(request, days="14"): |
40 | | - try: |
41 | | - days = int(days) |
42 | | - except: |
43 | | - days = 0 |
44 | | - if days == 0: |
45 | | - days = 14 |
46 | | - response = settings(request, new_enough=days) |
47 | | - response.set_cookie("new_enough", days, 315360000) |
| 9 | +def preferences(request, **kwargs): |
| 10 | + preferences = request.COOKIES.copy() |
| 11 | + new_cookies = {} |
| 12 | + del_cookies = [] |
| 13 | + for key in settings.USER_PREFERENCE_DEFAULTS.keys(): |
| 14 | + if key in kwargs: |
| 15 | + if kwargs[key] == None: |
| 16 | + del_cookies += [key] |
| 17 | + else: |
| 18 | + # ignore bad kwargs |
| 19 | + if key in ['new_enough', 'expires_soon'] and not kwargs[key].isdigit(): |
| 20 | + pass |
| 21 | + elif key in ['full_draft', 'left_menu'] and not kwargs[key] in ['on', 'off']: |
| 22 | + pass |
| 23 | + else: |
| 24 | + preferences[key] = new_cookies[key] = kwargs[key] |
| 25 | + if not key in preferences or preferences[key] in [None, 'None', ''] or key in del_cookies: |
| 26 | + preferences[key] = settings.USER_PREFERENCE_DEFAULTS[key] |
| 27 | + # reset bad cookie values |
| 28 | + if key in ['new_enough', 'expires_soon'] and not preferences[key].isdigit(): |
| 29 | + preferences[key] = settings.USER_PREFERENCE_DEFAULTS[key] |
| 30 | + del_cookies += [key] |
| 31 | + elif key in ['full_draft', 'left_menu'] and not preferences[key] in ['on', 'off']: |
| 32 | + preferences[key] = settings.USER_PREFERENCE_DEFAULTS[key] |
| 33 | + del_cookies += [key] |
| 34 | + request.COOKIES.update(preferences) |
| 35 | + response = render("cookies/settings.html", preferences, context_instance=RequestContext(request)) |
| 36 | + for key in new_cookies: |
| 37 | + response.set_cookie(key, new_cookies[key], settings.SESSION_COOKIE_AGE) |
| 38 | + for key in del_cookies: |
| 39 | + response.delete_cookie(key) |
48 | 40 | return response |
49 | 41 |
|
50 | | -def expires_soon(request, days="14"): |
51 | | - try: |
52 | | - days = int(days) |
53 | | - except: |
54 | | - days = 0 |
55 | | - if days == 0: |
56 | | - days = 14 |
57 | | - response = settings(request, expires_soon=days) |
58 | | - response.set_cookie("expires_soon", days, 315360000) |
59 | | - return response |
| 42 | +def new_enough(request, days=None): |
| 43 | + return preferences(request, new_enough=days) |
60 | 44 |
|
61 | | -def full_draft(request, enabled="off"): |
62 | | - if enabled != "on" and enabled != "off": |
63 | | - enabled = "off" |
64 | | - response = settings(request, full_draft=enabled) |
65 | | - response.set_cookie("full_draft", enabled, 315360000) |
66 | | - return response |
| 45 | +def expires_soon(request, days=None): |
| 46 | + return preferences(request, expires_soon=days) |
67 | 47 |
|
68 | | -def left_menu(request, enabled="on"): |
69 | | - if enabled != "on" and enabled != "off": |
70 | | - enabled = "on" |
71 | | - # Propagate the new setting immediately, to render the settings page |
72 | | - # iteself according to the setting: |
73 | | - request.COOKIES["left_menu"] = enabled |
74 | | - response = settings(request, left_menu=enabled) |
75 | | - response.set_cookie("left_menu", enabled, 315360000) |
76 | | - return response |
| 48 | + |
| 49 | +def full_draft(request, enabled=None): |
| 50 | + return preferences(request, full_draft=enabled) |
| 51 | + |
| 52 | +def left_menu(request, enabled=None): |
| 53 | + return preferences(request, left_menu=enabled) |
77 | 54 |
|
0 commit comments