Merge pull request #4006 from ProgramFOX/rankbanned

Replace "Kick from ranking" with "Ban from ranking"
This commit is contained in:
Thibault Duplessis 2018-02-02 10:01:09 -05:00 committed by GitHub
commit d83ca869cf
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 35 additions and 21 deletions

View file

@ -91,16 +91,18 @@ object Mod extends LilaController {
modApi.reopenAccount(me.id, username) inject redirect(username)
}
def kickFromRankings(username: String) = Secure(_.RemoveRanking) { implicit ctx => me =>
modApi.kickFromRankings(me.id, username) inject redirect(username)
}
def reportban(username: String, v: Boolean) = Secure(_.ReportBan) { implicit ctx => me =>
withSuspect(username) { sus =>
modApi.setReportban(AsMod(me), sus, v) inject redirect(username)
}
}
def rankban(username: String, v: Boolean) = Secure(_.RemoveRanking) { implicit ctx => me =>
withSuspect(username) { sus =>
modApi.setRankban(AsMod(me), sus, v) inject redirect(username)
}
}
def impersonate(username: String) = Auth { implicit ctx => me =>
if (username == "-" && lila.mod.Impersonate.isImpersonated(me)) fuccess {
lila.mod.Impersonate.stop(me)

View file

@ -59,8 +59,8 @@
}
<div class="second_mod_button_row">
@if(isGranted(_.RemoveRanking)) {
<form method="post" action="@routes.Mod.kickFromRankings(u.username)" data-hint="Excludes this user from the rankings during the next calculation." class="hint--bottom-left">
<input class="button" type="submit" value="Kick from ranking" />
<form method="post" action="@routes.Mod.rankban(u.username, !u.rankban)" data-hint="@if(u.rankban){In}else{Ex}cludes this user @if(u.rankban){from}else{in} the rankings." class="hint--bottom-left">
<input class="button@when(u.rankban, " active")" type="submit" value="Ban from ranking" />
</form>
}
@if(isGranted(_.ReportBan)) {

View file

@ -382,7 +382,7 @@ POST /mod/:username/title controllers.Mod.setTitle(username: String
POST /mod/:username/inquiry controllers.Mod.spontaneousInquiry(username: String)
GET /mod/:username/communication controllers.Mod.communicationPublic(username: String)
GET /mod/:username/communication/private controllers.Mod.communicationPrivate(username: String)
POST /mod/:username/kickFromRankings controllers.Mod.kickFromRankings(username: String)
POST /mod/:username/rankban/:v controllers.Mod.rankban(username: String, v: Boolean)
POST /mod/:username/reportban/:v controllers.Mod.reportban(username: String, v: Boolean)
POST /mod/:username/impersonate controllers.Mod.impersonate(username: String)
GET /mod/log controllers.Mod.log

View file

@ -132,15 +132,17 @@ final class ModApi(
logApi.setPermissions(mod, user.id, permissions)
}
def kickFromRankings(mod: String, username: String): Funit = withUser(username) { user =>
lilaBus.publish(lila.hub.actorApi.mod.KickFromRankings(user.id), 'kickFromRankings)
logApi.kickFromRankings(mod, user.id)
}
def setReportban(mod: Mod, sus: Suspect, v: Boolean): Funit = (sus.user.reportban != v) ?? {
UserRepo.setReportban(sus.user.id, v) >>- logApi.reportban(mod, sus, v)
}
def setRankban(mod: Mod, sus: Suspect, v: Boolean): Funit = (sus.user.rankban != v) ?? {
if (v) {
lilaBus.publish(lila.hub.actorApi.mod.KickFromRankings(sus.user.id), 'kickFromRankings)
}
UserRepo.setRankban(sus.user.id, v) >>- logApi.rankban(mod, sus, v)
}
private def withUser[A](username: String)(op: User => Fu[A]): Fu[A] =
UserRepo named username flatten "[mod] missing user " + username flatMap op
}

View file

@ -46,6 +46,8 @@ case class Modlog(
case Modlog.kickFromRankings => "kick from rankings"
case Modlog.reportban => "reportban"
case Modlog.unreportban => "un-reportban"
case Modlog.rankban => "rankban"
case Modlog.unrankban => "un-rankban"
case Modlog.modMessage => "send message"
case Modlog.coachReview => "disapprove coach review"
case Modlog.cheatDetected => "game lost by cheat detection"
@ -100,6 +102,8 @@ object Modlog {
val kickFromRankings = "kickFromRankings"
val reportban = "reportban"
val unreportban = "unreportban"
val rankban = "rankban"
val unrankban = "unrankban"
val modMessage = "modMessage"
val coachReview = "coachReview"
val cheatDetected = "cheatDetected"

View file

@ -109,10 +109,6 @@ final class ModlogApi(coll: Coll) {
Modlog(mod, user.some, Modlog.permissions, details = permissions.mkString(", ").some)
}
def kickFromRankings(mod: String, user: String) = add {
Modlog(mod, user.some, Modlog.kickFromRankings)
}
def reportban(mod: Mod, sus: Suspect, v: Boolean) = add {
Modlog.make(mod, sus, if (v) Modlog.reportban else Modlog.unreportban)
}
@ -137,6 +133,10 @@ final class ModlogApi(coll: Coll) {
Modlog.make(mod, sus, Modlog.garbageCollect)
}
def rankban(mod: Mod, sus: Suspect, v: Boolean) = add {
Modlog.make(mod, sus, if (v) Modlog.rankban else Modlog.unrankban)
}
def recent = coll.find($empty).sort($sort naturalDesc).cursor[Modlog]().gather[List](100)
def wasUnengined(sus: Suspect) = coll.exists($doc(

View file

@ -69,8 +69,8 @@ final class PerfsUpdater(
UserRepo.setPerfs(black, perfsB, black.perfs) zip
historyApi.add(white, game, perfsW) zip
historyApi.add(black, game, perfsB) zip
rankingApi.save(white.id, game.perfType, perfsW) zip
rankingApi.save(black.id, game.perfType, perfsB) inject ratingDiffs.some
(if (!white.rankban) rankingApi.save(white.id, game.perfType, perfsW) else funit) zip
(if (!black.rankban) rankingApi.save(black.id, game.perfType, perfsB) else funit) inject ratingDiffs.some
}
}

View file

@ -27,7 +27,8 @@ case class User(
kid: Boolean,
lang: Option[String],
plan: Plan,
reportban: Boolean = false
reportban: Boolean = false,
rankban: Boolean = false
) extends Ordered[User] {
override def equals(other: Any) = other match {
@ -197,6 +198,7 @@ object User {
val colorIt = "colorIt"
val plan = "plan"
val reportban = "reportban"
val rankban = "rankban"
val salt = "salt"
val bpass = "bpass"
val sha512 = "sha512"
@ -234,7 +236,8 @@ object User {
lang = r strO lang,
title = r strO title,
plan = r.getO[Plan](plan) | Plan.empty,
reportban = r boolD reportban
reportban = r boolD reportban,
rankban = r boolD rankban
)
def writes(w: BSON.Writer, o: User) = BSONDocument(
@ -257,7 +260,8 @@ object User {
lang -> o.lang,
title -> o.title,
plan -> o.plan.nonEmpty,
reportban -> w.boolO(o.reportban)
reportban -> w.boolO(o.reportban),
rankban -> w.boolO(o.rankban)
)
}
}

View file

@ -280,6 +280,8 @@ object UserRepo {
def setReportban(id: ID, v: Boolean): Funit = coll.updateField($id(id), "reportban", v).void
def setRankban(id: ID, v: Boolean): Funit = coll.updateField($id(id), "rankban", v).void
def setIpBan(id: ID, v: Boolean) = coll.updateField($id(id), "ipBan", v).void
def toggleKid(user: User) = coll.updateField($id(user.id), "kid", !user.kid)