From 359f4987de4361bec1b5c80ecb2bc627e3391d36 Mon Sep 17 00:00:00 2001 From: Brian Simpson Date: Tue, 1 Oct 2013 20:44:52 -0400 Subject: [PATCH] Allow sponsors to create promoted links as other users. --- r2/r2/controllers/promotecontroller.py | 31 +++++++++++++++++++++----- r2/r2/lib/errors.py | 1 + r2/r2/templates/promotelinknew.html | 16 +++++++++++++ 3 files changed, 43 insertions(+), 5 deletions(-) diff --git a/r2/r2/controllers/promotecontroller.py b/r2/r2/controllers/promotecontroller.py index d853cd505..a5792cf43 100644 --- a/r2/r2/controllers/promotecontroller.py +++ b/r2/r2/controllers/promotecontroller.py @@ -393,6 +393,7 @@ class PromoteController(ListingController): rate_ip=True, prefix='create_promo_'), VShamedDomain('url'), + username=VLength('username', 100, empty_error=None), l=VLink('link_id'), title=VTitle('title'), url=VUrl('url', allow_self=False, lookup=False), @@ -406,10 +407,9 @@ class PromoteController(ListingController): media_override=VBoolean("media-override"), domain_override=VLength("domain", 100) ) - def POST_edit_promo(self, form, jquery, ip, l, title, url, selftext, kind, - disable_comments, - media_height, media_width, media_embed, - media_override, domain_override): + def POST_edit_promo(self, form, jquery, ip, username, l, title, url, + selftext, kind, disable_comments, media_height, + media_width, media_embed, media_override, domain_override): should_ratelimit = False if not c.user_is_sponsor: @@ -418,6 +418,27 @@ class PromoteController(ListingController): if not should_ratelimit: c.errors.remove((errors.RATELIMIT, 'ratelimit')) + # check for user override + if not l and c.user_is_sponsor and username: + try: + user = Account._by_name(username) + except NotFound: + c.errors.add(errors.USER_DOESNT_EXIST, field="username") + form.set_error(errors.USER_DOESNT_EXIST, "username") + return + + if not user.email: + c.errors.add(errors.NO_EMAIL_FOR_USER, field="username") + form.set_error(errors.NO_EMAIL_FOR_USER, "username") + return + + if not user.email_verified: + c.errors.add(errors.NO_VERIFIED_EMAIL, field="username") + form.set_error(errors.NO_VERIFIED_EMAIL, "username") + return + else: + user = c.user + # check for shame banned domains if form.has_errors("url", errors.DOMAIN_BANNED): g.stats.simple_event('spam.shame.link') @@ -446,7 +467,7 @@ class PromoteController(ListingController): if not l: l = promote.new_promotion(title, url if kind == 'link' else 'self', selftext if kind == 'self' else '', - c.user, ip) + user, ip) elif promote.is_promo(l): # changing link type is not allowed diff --git a/r2/r2/lib/errors.py b/r2/r2/lib/errors.py index 4caa3b939..544ace3a3 100644 --- a/r2/r2/lib/errors.py +++ b/r2/r2/lib/errors.py @@ -52,6 +52,7 @@ error_list = dict(( ('NO_NAME', _('please enter a name')), ('NO_EMAIL', _('please enter an email address')), ('NO_EMAIL_FOR_USER', _('no email address for that user')), + ('NO_VERIFIED_EMAIL', _('no verified email address for that user')), ('NO_TO_ADDRESS', _('send it to whom?')), ('NO_SUBJECT', _('please enter a subject')), ('USER_DOESNT_EXIST', _("that user doesn't exist")), diff --git a/r2/r2/templates/promotelinknew.html b/r2/r2/templates/promotelinknew.html index 212ccd2e1..03555bbcd 100644 --- a/r2/r2/templates/promotelinknew.html +++ b/r2/r2/templates/promotelinknew.html @@ -32,6 +32,9 @@
+ %if c.user_is_sponsor: + ${username_field()} + %endif ${title_field(None, editable=True)} ${kind_selector()} ${url_field(None, editable=True, enable_override=c.user_is_sponsor)} @@ -55,3 +58,16 @@
+ +<%def name="username_field()"> + <%utils:line_field title="${_('create as user')}" id="username-field" css_class="rounded"> + + ${error_field("NO_EMAIL_FOR_USER", "username", "div")} + ${error_field("NO_VERIFIED_EMAIL", "username", "div")} + ${error_field("USER_DOESNT_EXIST", "username", "div")} +
+

${_("Create a promotion on another user's account.")}

+
+ +