diff --git a/r2/r2/controllers/reddit_base.py b/r2/r2/controllers/reddit_base.py
index b5ebe5378..065832aed 100644
--- a/r2/r2/controllers/reddit_base.py
+++ b/r2/r2/controllers/reddit_base.py
@@ -121,7 +121,8 @@ class UnloggedUser(FakeAccount):
def _commit(self):
if self._dirty:
- self._t.update(self._dirties)
+ for k, (oldv, newv) in self._dirties.iteritems():
+ self._t[k] = newv
self._to_cookie(self._t)
def _load(self):
@@ -488,8 +489,13 @@ class RedditController(BaseController):
c.user_is_loggedin = True
else:
c.user = UnloggedUser(get_browser_langs())
- c.user._load()
-
+ # patch for fixing mangled language preferences
+ if (not isinstance(c.user.pref_lang, basestring) or
+ not all(isinstance(x, basestring)
+ for x in c.user.pref_content_langs)):
+ c.user.pref_lang = g.lang
+ c.user.pref_content_langs = [g.lang]
+ c.user._commit()
if c.user_is_loggedin:
if not c.user._loaded:
c.user._load()
diff --git a/r2/r2/public/static/js/reddit.js b/r2/r2/public/static/js/reddit.js
index 97ff14de7..d850141e1 100644
--- a/r2/r2/public/static/js/reddit.js
+++ b/r2/r2/public/static/js/reddit.js
@@ -1036,6 +1036,14 @@ var toolbar_p = function(expanded_size, collapsed_size) {
};
};
+function clear_all_langs(elem) {
+ $(elem).parents("form").find("input[type=checkbox]").attr("checked", false);
+}
+
+function check_some_langs(elem) {
+ $(elem).parents("form").find("#some-langs").attr("checked", true);
+}
+
/* The ready method */
$(function() {
/* set function to be called on thing creation/replacement,
diff --git a/r2/r2/templates/utils.html b/r2/r2/templates/utils.html
index b11ce4871..b3eb69114 100644
--- a/r2/r2/templates/utils.html
+++ b/r2/r2/templates/utils.html
@@ -194,7 +194,7 @@ ${unsafe(txt)}
all_checked, some_checked = some_checked, all_checked
%>
+ onclick="clear_all_langs(this)" ${all_checked}/>
+ onclick="check_some_langs(this)" ${checked}/>
%endfor