Skip to content

Commit f70b2d9

Browse files
committed
Added preference editing support for the left_menu preference setting, and refactored the preference handling code substantially. Related to issues ietf-tools#1659 and ietf-tools#1663.
- Legacy-Id: 9673
1 parent 9067f88 commit f70b2d9

8 files changed

Lines changed: 167 additions & 134 deletions

File tree

ietf/cookies/tests.py

Lines changed: 85 additions & 35 deletions
Large diffs are not rendered by default.

ietf/cookies/urls.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@
44
from ietf.cookies import views
55

66
urlpatterns = patterns('',
7-
(r'^$', views.settings),
8-
(r'^new_enough/(?P<days>.*)$', views.new_enough),
7+
(r'^$', views.preferences),
8+
(r'^new_enough/(?P<days>.+)$', views.new_enough),
99
(r'^new_enough/', views.new_enough),
10-
(r'^expires_soon/(?P<days>.*)$', views.expires_soon),
10+
(r'^expires_soon/(?P<days>.+)$', views.expires_soon),
1111
(r'^expires_soon/', views.expires_soon),
12-
(r'^full_draft/(?P<enabled>.*)$', views.full_draft),
12+
(r'^full_draft/(?P<enabled>.+)$', views.full_draft),
1313
(r'^full_draft/', views.full_draft),
14-
(r'^left_menu/(?P<enabled>.*)$', views.left_menu),
14+
(r'^left_menu/(?P<enabled>.+)$', views.left_menu),
1515
(r'^left_menu/', views.left_menu),
1616
)

ietf/cookies/views.py

Lines changed: 43 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -2,76 +2,53 @@
22

33
from django.shortcuts import render_to_response as render
44
from django.template import RequestContext
5+
from django.conf import settings
56

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
388

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)
4840
return response
4941

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)
6044

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)
6747

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)
7754

ietf/doc/templatetags/ietf_filters.py

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -401,20 +401,18 @@ def unescape(text):
401401

402402
@register.filter(name='new_enough')
403403
def new_enough(x,request):
404-
days = 14
405-
if "new_enough" in request.COOKIES:
406-
value = request.COOKIES["new_enough"]
407-
if value.isdigit():
408-
days = int(value)
404+
days = settings.USER_PREFERENCE_DEFAULTS["new_enough"]
405+
value = request.COOKIES.get("new_enough", None)
406+
if value and value.isdigit():
407+
days = int(value)
409408
return x < days
410409

411410
@register.filter(name='expires_soon')
412411
def expires_soon(x,request):
413-
days = 14
414-
if "expires_soon" in request.COOKIES:
415-
value = request.COOKIES["expires_soon"]
416-
if value.isdigit():
417-
days = int(value)
412+
days = settings.USER_PREFERENCE_DEFAULTS["expires_soon"]
413+
value = request.COOKIES.get("expires_soon", None)
414+
if value and value.isdigit():
415+
days = int(value)
418416
return x > -days
419417

420418
@register.filter(name='startswith')

ietf/doc/views_doc.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ def document_main(request, name, rev=None):
143143

144144
# specific document types
145145
if doc.type_id == "draft":
146-
split_content = not ( request.GET.get('include_text') or request.COOKIES.get("full_draft", "") == "on" )
146+
split_content = not ( request.GET.get('include_text') or request.COOKIES.get("full_draft", settings.USER_PREFERENCE_DEFAULTS["full_draft"]) == "on" )
147147

148148
iesg_state = doc.get_state("draft-iesg")
149149
iesg_state_summary = doc.friendly_state()

ietf/settings.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -523,6 +523,14 @@ def skip_unreadable_post(record):
523523

524524
POSTCONFIRM_PATH = "/a/postconfirm/test-wrapper"
525525

526+
USER_PREFERENCE_DEFAULTS = {
527+
"expires_soon" : "14",
528+
"new_enough" : "14",
529+
"full_draft" : "off",
530+
"left_menu" : "on",
531+
}
532+
533+
526534
# Put the production SECRET_KEY in settings_local.py, and also any other
527535
# sensitive or site-specific changes. DO NOT commit settings_local.py to svn.
528536
from settings_local import * # pyflakes:ignore

ietf/templates/base/menu_user.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
{% endif %}
2424

2525
<li><a href="{% url "create_account" %}">{% if request.user.is_authenticated %}Manage account{% else %}New account{% endif %}</a></li>
26-
<li><a href="{%url "ietf.cookies.views.settings" %}" rel="nofollow">Settings</a></li>
26+
<li><a href="{%url "ietf.cookies.views.preferences" %}" rel="nofollow">Preferences</a></li>
2727

2828
{% if user|has_role:"Area Director" %}
2929
{% if flavor == "top" %}<li class="divider hidden-xs"></li>{% endif %}

ietf/templates/cookies/settings.html

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,43 +20,43 @@ <h2>How many days is considered "new"?</h2>
2020
<p>This setting affects how many days are considered "new enough" to get the special highlighting in the documents table. Default setting is 14 days.</p>
2121

2222
<div class="btn-group btn-group-justified">
23-
<a class="btn btn-default {% if new_enough == 7 %}active{% endif %}" href="/accounts/settings/new_enough/7">7 days</a>
24-
<a class="btn btn-default {% if new_enough == 14 %}active{% endif %}" href="/accounts/settings/new_enough/14">14 days</a>
25-
<a class="btn btn-default {% if new_enough == 21 %}active{% endif %}" href="/accounts/settings/new_enough/21">21 days</a>
26-
<a class="btn btn-default {% if new_enough == 30 %}active{% endif %}" href="/accounts/settings/new_enough/30">30 days</a>
27-
<a class="btn btn-default {% if new_enough == 60 %}active{% endif %}" href="/accounts/settings/new_enough/60">60 days</a>
28-
<a class="btn btn-default {% if new_enough == 90 %}active{% endif %}" href="/accounts/settings/new_enough/90">90 days</a>
23+
<a class="btn btn-default {% if new_enough == '7' %}active{% endif %}" href="/accounts/settings/new_enough/7">7 days</a>
24+
<a class="btn btn-default {% if new_enough == '14' %}active{% endif %}" href="/accounts/settings/new_enough/14">14 days</a>
25+
<a class="btn btn-default {% if new_enough == '21' %}active{% endif %}" href="/accounts/settings/new_enough/21">21 days</a>
26+
<a class="btn btn-default {% if new_enough == '30' %}active{% endif %}" href="/accounts/settings/new_enough/30">30 days</a>
27+
<a class="btn btn-default {% if new_enough == '60' %}active{% endif %}" href="/accounts/settings/new_enough/60">60 days</a>
28+
<a class="btn btn-default {% if new_enough == '90' %}active{% endif %}" href="/accounts/settings/new_enough/90">90 days</a>
2929
</div>
3030

3131
<h2 class="ietf-divider">How many days is considered "soon"?</h2>
3232

3333
<p>This setting tells what is considered "soon" when showing documents that are going to be expire soon. Default setting is 14 days.</p>
3434

3535
<div class="btn-group btn-group-justified">
36-
<a class="btn btn-default {% if expires_soon == 7 %}active{% endif %}" href="/accounts/settings/expires_soon/7">7 days</a>
37-
<a class="btn btn-default {% if expires_soon == 14 %}active{% endif %}" href="/accounts/settings/expires_soon/14">14 days</a>
38-
<a class="btn btn-default {% if expires_soon == 21 %}active{% endif %}" href="/accounts/settings/expires_soon/21">21 days</a>
39-
<a class="btn btn-default {% if expires_soon == 30 %}active{% endif %}" href="/accounts/settings/expires_soon/30">30 days</a>
40-
<a class="btn btn-default {% if expires_soon == 60 %}active{% endif %}" href="/accounts/settings/expires_soon/60">60 days</a>
41-
<a class="btn btn-default {% if expires_soon == 90 %}active{% endif %}" href="/accounts/settings/expires_soon/90">90 days</a>
36+
<a class="btn btn-default {% if expires_soon == '7' %}active{% endif %}" href="/accounts/settings/expires_soon/7">7 days</a>
37+
<a class="btn btn-default {% if expires_soon == '14' %}active{% endif %}" href="/accounts/settings/expires_soon/14">14 days</a>
38+
<a class="btn btn-default {% if expires_soon == '21' %}active{% endif %}" href="/accounts/settings/expires_soon/21">21 days</a>
39+
<a class="btn btn-default {% if expires_soon == '30' %}active{% endif %}" href="/accounts/settings/expires_soon/30">30 days</a>
40+
<a class="btn btn-default {% if expires_soon == '60' %}active{% endif %}" href="/accounts/settings/expires_soon/60">60 days</a>
41+
<a class="btn btn-default {% if expires_soon == '90' %}active{% endif %}" href="/accounts/settings/expires_soon/90">90 days</a>
4242
</div>
4343

4444
<h2 class="ietf-divider">Show full document text by default?</h2>
4545

4646
<p>Show the full text immediately on the document page instead of only showing beginning of it. This defaults to off.</p>
4747

4848
<div class="btn-group btn-group-justified">
49-
<a class="btn btn-default {% if full_draft == "off" %}active{% endif %}" href="/accounts/settings/full_draft/off">Off</a>
50-
<a class="btn btn-default {% if full_draft == "on" %}active{% endif %}" href="/accounts/settings/full_draft/on">On</a>
49+
<a class="btn btn-default {% if full_draft == 'off' %}active{% endif %}" href="/accounts/settings/full_draft/off">Off</a>
50+
<a class="btn btn-default {% if full_draft == 'on' %}active{% endif %}" href="/accounts/settings/full_draft/on">On</a>
5151
</div>
5252

5353
<h2 class="ietf-divider">Show the left-hand menu?</h2>
5454

5555
<p>Show the left-hand menu on all regular pages? This defaults to on.</p>
5656

5757
<div class="btn-group btn-group-justified">
58-
<a class="btn btn-default {% if left_menu == "off" %}active{% endif %}" href="/accounts/settings/left_menu/off">Off</a>
59-
<a class="btn btn-default {% if left_menu == "on" %}active{% endif %}" href="/accounts/settings/left_menu/on">On</a>
58+
<a class="btn btn-default {% if left_menu == 'off' %}active{% endif %}" href="/accounts/settings/left_menu/off">Off</a>
59+
<a class="btn btn-default {% if left_menu == 'on' %}active{% endif %}" href="/accounts/settings/left_menu/on">On</a>
6060
</div>
6161

6262

0 commit comments

Comments
 (0)