mirror of
https://github.com/reddit-archive/reddit.git
synced 2026-01-24 06:18:08 -05:00
Allow subtracting subreddits from /r/mod.
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user