Allow subtracting subreddits from /r/mod.

This commit is contained in:
Brian Simpson
2013-12-24 15:22:54 -05:00
parent 3dfe258407
commit fb19fc689d
2 changed files with 45 additions and 7 deletions

View File

@@ -93,6 +93,8 @@ from r2.models import (
Frontpage,
LabeledMulti,
Link,
Mod,
ModMinus,
MultiReddit,
NotFound,
Random,
@@ -371,14 +373,24 @@ def set_subreddit():
c.site = MultiReddit(multi_path, srs)
elif '-' in sr_name:
sr_names = sr_name.split('-')
if not sr_names[0].lower() == All.name.lower():
redirect_to("/subreddits/search?q=%s" % sr_name)
srs = Subreddit._by_name(sr_names[1:], stale=can_stale).values()
srs = [sr for sr in srs if not isinstance(sr, FakeSubreddit)]
if not srs:
c.site = All
base_sr_name, exclude_sr_names = sr_names[0], sr_names[1:]
srs = Subreddit._by_name(sr_names, stale=can_stale)
base_sr = srs.pop(base_sr_name)
exclude_srs = [sr for sr in srs.itervalues()
if not isinstance(sr, FakeSubreddit)]
if base_sr == All:
if exclude_srs:
c.site = AllMinus(exclude_srs)
else:
c.site = All
elif base_sr == Mod:
if exclude_srs:
c.site = ModMinus(exclude_srs)
else:
c.site = Mod
else:
c.site = AllMinus(srs)
redirect_to("/subreddits/search?q=%s" % sr_name)
else:
try:
c.site = Subreddit._by_name(sr_name, stale=can_stale)

View File

@@ -1529,6 +1529,32 @@ class ModSR(ModContribSR):
def is_moderator(self, user):
return FakeSRMember(ModeratorPermissionSet)
class ModMinus(ModSR):
def __init__(self, exclude_srs):
ModSR.__init__(self)
self.exclude_srs = exclude_srs
self.exclude_sr_ids = [sr._id for sr in exclude_srs]
@property
def sr_ids(self):
sr_ids = super(ModMinus, self).sr_ids
return [sr_id for sr_id in sr_ids if not sr_id in self.exclude_sr_ids]
@property
def name(self):
exclude_text = ', '.join(sr.name for sr in self.exclude_srs)
return 'subreddits you moderate except ' + exclude_text
@property
def title(self):
return self.name
@property
def path(self):
return '/r/mod-' + '-'.join(sr.name for sr in self.srs)
class ContribSR(ModContribSR):
name = "contrib"
title = "communities you're approved on"