diff --git a/r2/r2/controllers/wiki.py b/r2/r2/controllers/wiki.py index 2ebe65123..ffe5c3d57 100644 --- a/r2/r2/controllers/wiki.py +++ b/r2/r2/controllers/wiki.py @@ -37,6 +37,7 @@ from r2.lib.template_helpers import join_urls from r2.lib.validator import ( nop, validate, + VBoolean, VExistingUname, VInt, VMarkdown, @@ -217,7 +218,7 @@ class WikiController(RedditController): def GET_wiki_listing(self): def check_hidden(page): - return this_may_view(page) + return page.listed and this_may_view(page) pages, linear_pages = WikiPage.get_listing(c.site, filter_check=check_hidden) return WikiListing(pages, linear_pages).render() @@ -236,7 +237,8 @@ class WikiController(RedditController): @validate(page=VWikiPage('page', restricted=True, modonly=True)) def GET_wiki_settings(self, page): - settings = {'permlevel': page._get('permlevel', 0)} + settings = {'permlevel': page._get('permlevel', 0), + 'listed': page.listed} mayedit = page.get_editor_accounts() restricted = (not page.special) and page.restricted show_editors = not restricted @@ -247,16 +249,27 @@ class WikiController(RedditController): @validate(VModhash(), page=VWikiPage('page', restricted=True, modonly=True), - permlevel=VInt('permlevel')) - def POST_wiki_settings(self, page, permlevel): + permlevel=VInt('permlevel'), + listed=VBoolean('listed')) + def POST_wiki_settings(self, page, permlevel, listed): oldpermlevel = page.permlevel try: page.change_permlevel(permlevel) except ValueError: self.handle_error(403, 'INVALID_PERMLEVEL') - description = 'Page: %s, Changed from %s to %s' % (page.name, oldpermlevel, permlevel) - ModAction.create(c.site, c.user, 'wikipermlevel', - description=description) + if page.listed != listed: + page.listed = listed + page._commit() + verb = 'Relisted' if listed else 'Delisted' + description = '%s page %s' % (verb, page.name) + ModAction.create(c.site, c.user, 'wikipagelisted', + description=description) + if oldpermlevel != permlevel: + description = 'Page: %s, Changed from %s to %s' % ( + page.name, oldpermlevel, permlevel + ) + ModAction.create(c.site, c.user, 'wikipermlevel', + description=description) return self.GET_wiki_settings(page=page.name) def on_validation_error(self, error): diff --git a/r2/r2/lib/jsontemplates.py b/r2/r2/lib/jsontemplates.py index 0853200da..7264f72dc 100755 --- a/r2/r2/lib/jsontemplates.py +++ b/r2/r2/lib/jsontemplates.py @@ -779,6 +779,7 @@ class WikiSettingsJsonTemplate(ThingJsonTemplate): def data(self, thing): editors = [Wrapped(e).render() for e in thing.mayedit] return dict(permlevel=thing.permlevel, + listed=thing.listed, editors=editors) class WikiRevisionJsonTemplate(ThingJsonTemplate): diff --git a/r2/r2/lib/pages/wiki.py b/r2/r2/lib/pages/wiki.py index 43673af55..ca230f332 100644 --- a/r2/r2/lib/pages/wiki.py +++ b/r2/r2/lib/pages/wiki.py @@ -73,6 +73,7 @@ class WikiPageSettings(Templated): def __init__(self, settings, mayedit, show_editors=True, show_settings=True, page=None, **context): self.permlevel = settings['permlevel'] + self.listed = settings['listed'] self.show_settings = show_settings self.show_editors = show_editors self.page = page diff --git a/r2/r2/models/modaction.py b/r2/r2/models/modaction.py index c7b8b2700..64168feb2 100644 --- a/r2/r2/models/modaction.py +++ b/r2/r2/models/modaction.py @@ -56,7 +56,7 @@ class ModAction(tdb_cassandra.UuidThing, Printable): 'invitemoderator', 'uninvitemoderator', 'acceptmoderatorinvite', 'removemoderator', 'addcontributor', 'removecontributor', 'editsettings', 'editflair', 'distinguish', 'marknsfw', - 'wikibanned', 'wikicontributor', 'wikiunbanned', + 'wikibanned', 'wikicontributor', 'wikiunbanned', 'wikipagelisted', 'removewikicontributor', 'wikirevise', 'wikipermlevel', 'ignorereports', 'unignorereports', 'setpermissions', 'sticky', 'unsticky') @@ -81,6 +81,7 @@ class ModAction(tdb_cassandra.UuidThing, Printable): 'wikibanned': _('ban from wiki'), 'wikiunbanned': _('unban from wiki'), 'wikicontributor': _('add wiki contributor'), + 'wikipagelisted': _('delist/relist wiki pages'), 'removewikicontributor': _('remove wiki contributor'), 'wikirevise': _('wiki revise page'), 'wikipermlevel': _('wiki page permissions'), @@ -112,6 +113,7 @@ class ModAction(tdb_cassandra.UuidThing, Printable): 'editflair': _('edited flair'), 'wikirevise': _('edited wiki page'), 'wikipermlevel': _('changed wiki page permission level'), + 'wikipagelisted': _('changed wiki page listing preference'), 'distinguish': _('distinguished'), 'marknsfw': _('marked nsfw'), 'ignorereports': _('ignored reports'), diff --git a/r2/r2/models/wiki.py b/r2/r2/models/wiki.py index 43284d289..077695263 100644 --- a/r2/r2/models/wiki.py +++ b/r2/r2/models/wiki.py @@ -91,7 +91,7 @@ class WikiRevision(tdb_cassandra.UuidThing, Printable): _str_props = ('pageid', 'content', 'author', 'reason') _bool_props = ('hidden') - + cache_ignore = set(list(_str_props)).union(Printable.cache_ignore).union(['wikipage']) def get_author(self): @@ -192,8 +192,9 @@ class WikiPage(tdb_cassandra.Thing): _date_props = ('last_edit_date') _str_props = ('revision', 'name', 'last_edit_by', 'content', 'sr') _int_props = ('permlevel') - _bool_props = ('listed_') - + _bool_props = ('listed') + _defaults = {'listed': True} + def get_author(self): if self._get('last_edit_by'): return Account._byID36(self.last_edit_by, data=True) @@ -225,7 +226,7 @@ class WikiPage(tdb_cassandra.Thing): if not name or not sr: raise ValueError name = name.lower() - kw = dict(sr=sr._id36, name=name, permlevel=0, content='', listed_=False) + kw = dict(sr=sr._id36, name=name, permlevel=0, content='') page = cls(**kw) page._commit() return page diff --git a/r2/r2/public/static/css/reddit.less b/r2/r2/public/static/css/reddit.less index ca2ff2375..9326218c6 100755 --- a/r2/r2/public/static/css/reddit.less +++ b/r2/r2/public/static/css/reddit.less @@ -6875,6 +6875,7 @@ body:not(.gold) .allminus-link { .modactions.wikibanned, .modactions.wikiunbanned, .modactions.wikicontributor, +.modactions.wikipagelisted, .modactions.removewikicontributor, .modactions.ignorereports, .modactions.unignorereports, @@ -6920,6 +6921,7 @@ body:not(.gold) .allminus-link { .modactions.removecontributor { background-image: url(../modactions_removecontributor.png); /* SPRITE */ } +.modactions.wikipagelisted, .modactions.editsettings { background-image: url(../modactions_editsettings.png); /* SPRITE */ } diff --git a/r2/r2/templates/wikipagesettings.html b/r2/r2/templates/wikipagesettings.html index 2628c4f50..8165b99a7 100644 --- a/r2/r2/templates/wikipagesettings.html +++ b/r2/r2/templates/wikipagesettings.html @@ -49,6 +49,14 @@ %endif />
+ + <%utils:line_field title=" ${_('show this page on the listing?')}"> +
+ %endif %if thing.show_editors and thing.permlevel != 2: