Allow sponsors to create promoted links as other users.

This commit is contained in:
Brian Simpson
2013-10-01 20:44:52 -04:00
parent 8096fb3a1d
commit 359f4987de
3 changed files with 43 additions and 5 deletions

View File

@@ -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

View File

@@ -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")),

View File

@@ -32,6 +32,9 @@
<div class="pretty-form" id="promo-form">
%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 @@
</div>
</div>
</div>
<%def name="username_field()">
<%utils:line_field title="${_('create as user')}" id="username-field" css_class="rounded">
<input id="username" name="username" type="text"
class="rounded">
${error_field("NO_EMAIL_FOR_USER", "username", "div")}
${error_field("NO_VERIFIED_EMAIL", "username", "div")}
${error_field("USER_DOESNT_EXIST", "username", "div")}
<div class="infotext rounded">
<p>${_("Create a promotion on another user's account.")}</p>
</div>
</%utils:line_field>
</%def>