diff --git a/r2/r2/config/routing.py b/r2/r2/config/routing.py index 587a7626d..d9965e6a9 100644 --- a/r2/r2/config/routing.py +++ b/r2/r2/config/routing.py @@ -341,7 +341,6 @@ def make_map(): mc('/api/:action', controller='promote', requirements=dict(action=("promote|unpromote|edit_promo|link_thumb|" "freebie|promote_note|update_pay|refund|" - "traffic_viewer|rm_traffic_viewer|" "edit_campaign|delete_campaign|meta_promo|" "add_roadblock|rm_roadblock|check_inventory|" "refund_campaign|terminate_campaign"))) diff --git a/r2/r2/controllers/front.py b/r2/r2/controllers/front.py index 4064808e3..c353a729d 100755 --- a/r2/r2/controllers/front.py +++ b/r2/r2/controllers/front.py @@ -1080,7 +1080,7 @@ class FrontController(RedditController): @require_oauth2_scope("modtraffic") - @validate(VTrafficViewer('link'), + @validate(VSponsor('link'), link=VLink('link'), campaign=VPromoCampaign('campaign'), before=VDate('before', format='%Y%m%d%H'), diff --git a/r2/r2/controllers/promotecontroller.py b/r2/r2/controllers/promotecontroller.py index 3c8fc9e1d..b5eea5e73 100644 --- a/r2/r2/controllers/promotecontroller.py +++ b/r2/r2/controllers/promotecontroller.py @@ -50,7 +50,6 @@ from r2.lib.pages import ( Roadblocks, UploadedImage, ) -from r2.lib.pages.trafficpages import TrafficViewerList from r2.lib.pages.things import wrap_links from r2.lib.system_messages import user_added_messages from r2.lib.utils import make_offset_date, to_date, to36 @@ -691,46 +690,6 @@ class PromoteController(ListingController): rc = RenderableCampaign.from_campaigns(link, campaign) jquery.update_campaign(campaign._fullname, rc.render_html()) - @validatedForm(VSponsor('container'), - VModhash(), - user=VExistingUname('name'), - thing=VByName('container')) - def POST_traffic_viewer(self, form, jquery, user, thing): - """ - Adds a user to the list of users allowed to view a promoted - link's traffic page. - """ - if not form.has_errors("name", - errors.USER_DOESNT_EXIST, errors.NO_USER): - form.set_inputs(name="") - form.set_html(".status:first", _("added")) - if promote.add_traffic_viewer(thing, user): - user_row = TrafficViewerList(thing).user_row('traffic_viewer', user) - jquery(".traffic_viewer-table").show( - ).find("table").insert_table_rows(user_row) - - # send the user a message - msg = user_added_messages['traffic']['pm']['msg'] - subj = user_added_messages['traffic']['pm']['subject'] - if msg and subj: - d = dict(url=thing.make_permalink_slow(), - traffic_url=promote.promo_traffic_url(thing), - title=thing.title) - msg = msg % d - item, inbox_rel = Message._new(c.user, user, - subj, msg, request.ip) - queries.new_message(item, inbox_rel) - - - @validatedForm(VSponsor('container'), - VModhash(), - iuser=VByName('id'), - thing=VByName('container')) - def POST_rm_traffic_viewer(self, form, jquery, iuser, thing): - if thing and iuser: - promote.rm_traffic_viewer(thing, iuser) - - @validatedForm(VSponsor('link'), VModhash(), link=VByName("link"), diff --git a/r2/r2/lib/pages/pages.py b/r2/r2/lib/pages/pages.py index bc86e94ba..d78255991 100644 --- a/r2/r2/lib/pages/pages.py +++ b/r2/r2/lib/pages/pages.py @@ -2926,14 +2926,6 @@ class UserTableItem(Templated): def __repr__(self): return '' % self.user.name -class TrafficTableItem(UserTableItem): - type = "traffic_viewer" - remove_action = "rm_traffic_viewer" - - @property - def container_name(self): - return self.link._fullname - class RelTableItem(UserTableItem): def __init__(self, rel, **kw): self._id = rel._id diff --git a/r2/r2/lib/pages/trafficpages.py b/r2/r2/lib/pages/trafficpages.py index 455cc0461..cbfac6d8b 100644 --- a/r2/r2/lib/pages/trafficpages.py +++ b/r2/r2/lib/pages/trafficpages.py @@ -36,8 +36,7 @@ from r2.lib import promote from r2.lib.db.sorts import epoch_seconds from r2.lib.menus import menu from r2.lib.menus import NavButton, NamedButton, PageNameNav, NavMenu -from r2.lib.pages.pages import Reddit, TimeSeriesChart, UserList, TabbedPane -from r2.lib.pages import TrafficTableItem +from r2.lib.pages.pages import Reddit, TimeSeriesChart, TabbedPane from r2.lib.promote import cost_per_mille, cost_per_click from r2.lib.template_helpers import format_number from r2.lib.utils import Storage, to_date, timedelta_by_name @@ -535,8 +534,6 @@ class PromotedLinkTraffic(Templated): else 'all campaigns') editable = c.user_is_sponsor or c.user._id == thing.author_id - self.viewer_list = TrafficViewerList(thing, editable) - self.traffic_last_modified = traffic.get_traffic_last_modified() self.traffic_lag = (datetime.datetime.utcnow() - self.traffic_last_modified) @@ -739,36 +736,6 @@ class PromotedLinkTraffic(Templated): return out.getvalue() -class TrafficViewerList(UserList): - """Traffic share list on /traffic/*""" - - destination = "traffic_viewer" - remove_action = "rm_traffic_viewer" - type = "traffic_viewer" - - def __init__(self, link, editable=True): - self.link = link - UserList.__init__(self, editable=editable) - - @property - def form_title(self): - return _("share traffic") - - @property - def table_title(self): - return _("current viewers") - - def user_ids(self): - return promote.traffic_viewers(self.link) - - @property - def container_name(self): - return self.link._fullname - - def user_row(self, row_type, user, editable=True): - return TrafficTableItem(user) - - class SubredditTrafficReport(Templated): def __init__(self): self.srs, self.invalid_srs, self.report = [], [], [] diff --git a/r2/r2/lib/promote.py b/r2/r2/lib/promote.py index 2238a5b81..fb0cafd46 100644 --- a/r2/r2/lib/promote.py +++ b/r2/r2/lib/promote.py @@ -152,34 +152,6 @@ def is_live_on_sr(link, sr): return bool(live_campaigns_by_link(link, sr=sr)) -# These could be done with relationships, but that seeks overkill as -# we never query based on user and only check per-thing -def is_traffic_viewer(thing, user): - return (c.user_is_sponsor or user._id == thing.author_id or - user._id in getattr(thing, "promo_traffic_viewers", set())) - -def add_traffic_viewer(thing, user): - viewers = getattr(thing, "promo_traffic_viewers", set()).copy() - if user._id not in viewers: - viewers.add(user._id) - thing.promo_traffic_viewers = viewers - thing._commit() - return True - return False - -def rm_traffic_viewer(thing, user): - viewers = getattr(thing, "promo_traffic_viewers", set()).copy() - if user._id in viewers: - viewers.remove(user._id) - thing.promo_traffic_viewers = viewers - thing._commit() - return True - return False - -def traffic_viewers(thing): - return sorted(getattr(thing, "promo_traffic_viewers", set())) - - def update_promote_status(link, status): set_promote_status(link, status) hooks.get_hook('promote.edit_promotion').call(link=link) diff --git a/r2/r2/lib/validator/validator.py b/r2/r2/lib/validator/validator.py index 591ae8afa..6b94ef653 100644 --- a/r2/r2/lib/validator/validator.py +++ b/r2/r2/lib/validator/validator.py @@ -993,11 +993,6 @@ class VEmployee(VVerifiedUser): VVerifiedUser.run(self) -class VTrafficViewer(VSponsor): - def user_test(self, thing): - return (VSponsor.user_test(self, thing) or - promote.is_traffic_viewer(thing, c.user)) - class VSrModerator(Validator): def __init__(self, fatal=True, perms=(), *a, **kw): # If True, abort rather than setting an error diff --git a/r2/r2/public/static/css/reddit.less b/r2/r2/public/static/css/reddit.less index e65d1e0cb..81ca28d93 100755 --- a/r2/r2/public/static/css/reddit.less +++ b/r2/r2/public/static/css/reddit.less @@ -4907,11 +4907,6 @@ div.timeseries span.title { } } -.traffic_viewer-table { - margin-bottom: 2em; - margin-left: 1em; -} - .promo-traffic .content .tabmenu li { font-size: 1.3em; } diff --git a/r2/r2/templates/promotedlinktraffic.html b/r2/r2/templates/promotedlinktraffic.html index e4deaf533..e75a707d6 100644 --- a/r2/r2/templates/promotedlinktraffic.html +++ b/r2/r2/templates/promotedlinktraffic.html @@ -152,8 +152,6 @@ ${unsafe(safemarkdown(strings.traffic_promoted_link_explanation))} ${unsafe(safemarkdown(strings.traffic_help_email % dict(email=g.selfserve_support_email)))} -${thing.viewer_list} - ${make_campaign_table()} ${make_traffic_table()}