From e1ef6f3a358bfc7672a557ad3f1ae764f2b7104f Mon Sep 17 00:00:00 2001 From: Brian Simpson Date: Wed, 9 Oct 2013 02:20:07 -0400 Subject: [PATCH] Show gifts received by the user in ServerSecondsBar. --- r2/r2/lib/pages/pages.py | 49 +++++++++++++++++++-------- r2/r2/models/gold.py | 8 +++++ r2/r2/public/static/css/reddit.less | 4 +++ r2/r2/templates/serversecondsbar.html | 9 ++++- 4 files changed, 54 insertions(+), 16 deletions(-) diff --git a/r2/r2/lib/pages/pages.py b/r2/r2/lib/pages/pages.py index 872e39ea6..d2caa6fcf 100644 --- a/r2/r2/lib/pages/pages.py +++ b/r2/r2/lib/pages/pages.py @@ -31,7 +31,7 @@ from r2.models import Flair, FlairTemplate, FlairTemplateBySubredditIndex from r2.models import USER_FLAIR, LINK_FLAIR from r2.models import GoldPartnerDealCode from r2.models.bidding import Bid -from r2.models.gold import gold_payments_by_user +from r2.models.gold import gold_payments_by_user, gold_received_by_user from r2.models.promo import NO_TRANSACTION, PromotionLog, PromotedLinkRoadblock from r2.models.token import OAuth2Client, OAuth2AccessToken from r2.models import traffic @@ -1610,7 +1610,7 @@ class ProfilePage(Reddit): if (c.user == self.user or c.user.employee or self.user.pref_public_server_seconds): seconds_bar = ServerSecondsBar(self.user) - if seconds_bar.message: + if seconds_bar.message or seconds_bar.gift_message: rb.push(seconds_bar) rb.push(ProfileBar(self.user)) @@ -1708,6 +1708,15 @@ class ServerSecondsBar(Templated): for datestr, v in g.live_config['pennies_per_server_second'].iteritems() } + my_message = _("you have helped pay for %(time)s of reddit server time.") + their_message = _("%(user)s has helped pay for %%(time)s of reddit server " + "time.") + + my_gift_message = _("gifts on your behalf have helped pay for %(time)s of " + "reddit server time.") + their_gift_message = _("gifts on behalf of %(user)s have helped pay for " + "%%(time)s of reddit server time.") + @classmethod def get_rate(cls, dt): cutoff_dates = sorted(cls.pennies_per_server_second.keys()) @@ -1720,11 +1729,25 @@ class ServerSecondsBar(Templated): # for simplicity all payment processor fees are $0.30 + 2.9% return pennies * (1 - 0.029) - 30 + def make_message(self, seconds, my_message, their_message): + if not seconds: + return '' + + delta = datetime.timedelta(seconds=seconds) + server_time = precise_format_timedelta(delta, threshold=5, + locale=c.locale) + if c.user == self.user: + message = my_message + else: + message = their_message % {'user': self.user.name} + return message % {'time': server_time} + def __init__(self, user): Templated.__init__(self) self.is_public = user.pref_public_server_seconds self.is_user = c.user == user + self.user = user seconds = 0. gold_payments = gold_payments_by_user(user) @@ -1744,21 +1767,17 @@ class ServerSecondsBar(Templated): for payment in selfserve_payments: rate = self.get_rate(payment.date) seconds += self.subtract_fees(payment.charge_amount * 100) / rate + self.message = self.make_message(seconds, self.my_message, + self.their_message) - if not seconds: - self.message = '' - else: - delta = datetime.timedelta(seconds=seconds) - server_time = precise_format_timedelta(delta, threshold=5, - locale=c.locale) + seconds = 0. + gold_gifts = gold_received_by_user(user) - if user == c.user: - message = _("you have helped pay for %(time)s of reddit " - "server time.") - else: - message = _("%(user)s has helped pay for %%(time)s of reddit " - "server time.") % {'user': user.name} - self.message = message % {'time': server_time} + for payment in gold_gifts: + rate = self.get_rate(payment.date) + seconds += self.subtract_fees(payment.pennies) / rate + self.gift_message = self.make_message(seconds, self.my_gift_message, + self.their_gift_message) class MenuArea(Templated): diff --git a/r2/r2/models/gold.py b/r2/r2/models/gold.py index 3999121e7..943852d72 100644 --- a/r2/r2/models/gold.py +++ b/r2/r2/models/gold.py @@ -477,6 +477,14 @@ def gold_payments_by_user(user): return transactions + +def gold_received_by_user(user): + transactions = transactions_by_user(user) + transactions = [trans for trans in transactions + if trans.trans_id.startswith('X')] + return transactions + + def append_random_bottlecap_phrase(message): """Appends a random "bottlecap" phrase from the wiki page. diff --git a/r2/r2/public/static/css/reddit.less b/r2/r2/public/static/css/reddit.less index 08a1c3279..cb08aa645 100755 --- a/r2/r2/public/static/css/reddit.less +++ b/r2/r2/public/static/css/reddit.less @@ -6360,6 +6360,10 @@ body:not(.gold) .allminus-link { border: 1px solid #5F99CF; text-align: center; padding: 10px; + + p { + padding: 5px 0; + } } .server-seconds-public label { diff --git a/r2/r2/templates/serversecondsbar.html b/r2/r2/templates/serversecondsbar.html index e0106e1e2..d074ed653 100644 --- a/r2/r2/templates/serversecondsbar.html +++ b/r2/r2/templates/serversecondsbar.html @@ -24,7 +24,14 @@
- ${thing.message} + %if thing.message: +

${thing.message}

+ %endif + + %if thing.gift_message: +

${thing.gift_message}

+ %endif + %if thing.is_user:
${_("visible to:")}