From fbc4859634325e0a7fb970249fdff0eca12f69cd Mon Sep 17 00:00:00 2001 From: Logan Hanks Date: Tue, 17 Apr 2012 10:33:03 -0700 Subject: [PATCH] Provide option to let users self-assign link flair. --- r2/r2/controllers/api.py | 17 ++++++++++++++--- r2/r2/lib/pages/pages.py | 12 ++++++++++-- r2/r2/lib/pages/things.py | 3 +-- r2/r2/models/modaction.py | 1 + r2/r2/models/subreddit.py | 1 + r2/r2/templates/flairpane.html | 11 +++++++++++ 6 files changed, 38 insertions(+), 7 deletions(-) diff --git a/r2/r2/controllers/api.py b/r2/r2/controllers/api.py index 9b88fd992..16b9453fe 100644 --- a/r2/r2/controllers/api.py +++ b/r2/r2/controllers/api.py @@ -2293,10 +2293,13 @@ class ApiController(RedditController): flair_position = VOneOf("flair_position", ("left", "right")), link_flair_position = VOneOf("link_flair_position", ("", "left", "right")), - flair_self_assign_enabled = VBoolean("flair_self_assign_enabled")) + flair_self_assign_enabled = VBoolean("flair_self_assign_enabled"), + link_flair_self_assign_enabled = + VBoolean("link_flair_self_assign_enabled")) @api_doc(api_section.flair) def POST_flairconfig(self, form, jquery, flair_enabled, flair_position, - link_flair_position, flair_self_assign_enabled): + link_flair_position, flair_self_assign_enabled, + link_flair_self_assign_enabled): if c.site.flair_enabled != flair_enabled: c.site.flair_enabled = flair_enabled ModAction.create(c.site, c.user, action='editflair', @@ -2313,6 +2316,12 @@ class ApiController(RedditController): c.site.flair_self_assign_enabled = flair_self_assign_enabled ModAction.create(c.site, c.user, action='editflair', details='flair_self_enabled') + if (c.site.link_flair_self_assign_enabled + != link_flair_self_assign_enabled): + c.site.link_flair_self_assign_enabled = ( + link_flair_self_assign_enabled) + ModAction.create(c.site, c.user, action='editflair', + details='link_flair_self_enabled') c.site._commit() jquery.refresh() @@ -2444,9 +2453,11 @@ class ApiController(RedditController): site = c.site else: site = Subreddit._byID(link.sr_id, data=True) + self_assign_enabled = site.link_flair_self_assign_enabled else: flair_type = USER_FLAIR site = c.site + self_assign_enabled = site.flair_self_assign_enabled if flair_template_id: try: @@ -2461,7 +2472,7 @@ class ApiController(RedditController): text = None if not site.is_moderator(c.user) and not c.user_is_admin: - if not site.flair_self_assign_enabled: + if not self_assign_enabled: # TODO: serve error to client g.log.debug('flair self-assignment not permitted') return diff --git a/r2/r2/lib/pages/pages.py b/r2/r2/lib/pages/pages.py index 0b3910386..98cced933 100755 --- a/r2/r2/lib/pages/pages.py +++ b/r2/r2/lib/pages/pages.py @@ -2519,7 +2519,9 @@ class FlairPane(Templated): flair_enabled=c.site.flair_enabled, flair_position=c.site.flair_position, link_flair_position=c.site.link_flair_position, - flair_self_assign_enabled=c.site.flair_self_assign_enabled) + flair_self_assign_enabled=c.site.flair_self_assign_enabled, + link_flair_self_assign_enabled= + c.site.link_flair_self_assign_enabled) class FlairList(Templated): """List of users who are tagged with flair within a subreddit.""" @@ -2694,6 +2696,9 @@ class FlairSelector(CachedTemplate): target_wrapper = ( lambda flair_template: FlairSelectorLinkSample( link, site, flair_template)) + self_assign_enabled = ( + c.user._id == link.author_id + and site.link_flair_self_assign_enabled) else: flair_type = USER_FLAIR target = user @@ -2705,14 +2710,17 @@ class FlairSelector(CachedTemplate): user, subreddit=site, force_show_flair=True, flair_template=flair_template, flair_text_editable=admin or template.text_editable)) + self_assign_enabled = site.flair_self_assign_enabled text = getattr(target, attr_pattern % 'text', '') css_class = getattr(target, attr_pattern % 'css_class', '') templates, matching_template = self._get_templates( site, flair_type, text, css_class) - if site.flair_self_assign_enabled or admin: + if self_assign_enabled or admin: choices = [target_wrapper(template) for template in templates] + else: + choices = [] # If one of the templates is already selected, modify its text to match # the user's current flair. diff --git a/r2/r2/lib/pages/things.py b/r2/r2/lib/pages/things.py index a05fb0b79..ca6faf436 100644 --- a/r2/r2/lib/pages/things.py +++ b/r2/r2/lib/pages/things.py @@ -91,8 +91,7 @@ class LinkButtons(PrintableButtons): else: show_unmarknsfw = False - # add "or is_author" to allow submitters to edit flair on their links - show_flair = thing.can_ban + show_flair = thing.can_ban or is_author # do we show the delete button? show_delete = is_author and delete and not thing._deleted diff --git a/r2/r2/models/modaction.py b/r2/r2/models/modaction.py index e5588ddd6..06b357da6 100644 --- a/r2/r2/models/modaction.py +++ b/r2/r2/models/modaction.py @@ -93,6 +93,7 @@ class ModAction(tdb_cassandra.UuidThing, Printable): 'flair_position': _('toggle user flair position'), 'link_flair_position': _('toggle link flair position'), 'flair_self_enabled': _('toggle user assigned flair enabled'), + 'link_flair_self_enabled': _('toggle submitter assigned link flair enabled'), 'flair_template': _('add/edit flair templates'), 'flair_delete_template': _('delete flair template'), 'flair_clear_template': _('clear flair templates'), diff --git a/r2/r2/models/subreddit.py b/r2/r2/models/subreddit.py index 0876ff54d..ee47f7c76 100644 --- a/r2/r2/models/subreddit.py +++ b/r2/r2/models/subreddit.py @@ -77,6 +77,7 @@ class Subreddit(Thing, Printable): flair_position = 'right', # one of ('left', 'right') link_flair_position = '', # one of ('', 'left', 'right') flair_self_assign_enabled = False, + link_flair_self_assign_enabled = False, ) _essentials = ('type', 'name', 'lang') _data_int_props = Thing._data_int_props + ('mod_actions', 'reported') diff --git a/r2/r2/templates/flairpane.html b/r2/r2/templates/flairpane.html index 1ce5d6210..b9ac91160 100644 --- a/r2/r2/templates/flairpane.html +++ b/r2/r2/templates/flairpane.html @@ -49,6 +49,17 @@ +
+ + <%utils:line_field title="${_('user flair position')}">