def unspam(self, things, unbanner=None, train_spam=True, insert=True): from r2.lib.db import queries things = tup(things) # We want to make unban-all moderately efficient, so when # mass-unbanning, we're going to skip the code below on links that # are already not banned. However, when someone manually clicks # "approve" on an unbanned link, and there's just one, we want do # want to run the code below. That way, the little green checkmark # will have the right mouseover details, the reports will be # cleared, etc. if len(things) > 1: things = [x for x in things if x._spam] Report.accept(things, False) for t in things: ban_info = copy(getattr(t, 'ban_info', {})) ban_info['unbanned_at'] = datetime.now(g.tz) if unbanner: ban_info['unbanner'] = unbanner if ban_info.get('reset_used', None) == None: ban_info['reset_used'] = False else: ban_info['reset_used'] = True t.ban_info = ban_info t._spam = False t._commit() self.author_spammer(things, False) self.set_last_sr_ban(things) queries.unban(things, insert) queries.mark_moderated(things)
def spam(self, things, auto=True, moderator_banned=False, banner=None, date=None, train_spam=True, **kw): from r2.lib.db import queries all_things = tup(things) new_things = [x for x in all_things if not x._spam] # No need to accept reports on things with _spam=True, # since nobody can report them in the first place. Report.accept(new_things, True) for t in all_things: if getattr(t, "promoted", None) is not None: g.log.debug("Refusing to mark promotion %r as spam" % t) continue if not t._spam and train_spam: note = 'spam' elif not t._spam and not train_spam: note = 'remove not spam' elif t._spam and not train_spam: note = 'confirm spam' elif t._spam and train_spam: note = 'reinforce spam' t._spam = True ban_info = copy(getattr(t, 'ban_info', {})) if isinstance(banner, dict): ban_info['banner'] = banner[t._fullname] else: ban_info['banner'] = banner ban_info.update(auto=auto, moderator_banned=moderator_banned, banned_at=date or datetime.now(g.tz), **kw) ban_info['note'] = note t.ban_info = ban_info t._commit() if not auto: self.author_spammer(new_things, True) self.set_last_sr_ban(new_things) queries.mark_moderated(things) queries.ban(all_things)