Allow moderators to hail fire upon cheaters
parent
affd31fd62
commit
d34d4760ad
|
@ -98,4 +98,8 @@ object Mod extends LilaController {
|
|||
)
|
||||
}
|
||||
|
||||
def refreshUserAssess(username: String) = Secure(_.MarkEngine) { implicit ctx =>
|
||||
me => assessApi.refreshAssessByUsername(username) inject redirect(username)
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -5,7 +5,10 @@
|
|||
<div class="actions clearfix">
|
||||
@if(isGranted(_.UserEvaluate)) {
|
||||
<form method="post" action="@routes.User.evaluate(u.username)">
|
||||
<input class="button" type="submit" value="@{eval.isDefined.??("(Re)")}Evaluate" />
|
||||
<input class="button" type="submit" value="@{eval.isDefined.??("(Re)")}Evaluate (old)" />
|
||||
</form>
|
||||
<form method="post" action="@routes.Mod.refreshUserAssess(u.username)">
|
||||
<input class="button" type="submit" value="@{aggregateAssessment.playerAssessments.nonEmpty.??("(Re)")}Evaluate (new)" />
|
||||
</form>
|
||||
}
|
||||
@if(isGranted(_.MarkEngine)) {
|
||||
|
@ -120,11 +123,6 @@
|
|||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p class="legend">
|
||||
@Range(1, 6).map { i =>
|
||||
<span class="sig_@i">@Display.assessmentString(i)</span>
|
||||
}
|
||||
</p>
|
||||
<table class="slist">
|
||||
<thead>
|
||||
<tr>
|
||||
|
|
|
@ -211,6 +211,7 @@ GET /mod/:username/communication controllers.Mod.communication(username: S
|
|||
POST /mod/:ip/ipban controllers.Mod.ipban(ip: String)
|
||||
GET /mod/log controllers.Mod.log
|
||||
POST /mod/refreshAssess controllers.Mod.refreshAssess
|
||||
POST /mod/:username/refreshUserAssess controllers.Mod.refreshUserAssess(username: String)
|
||||
|
||||
# Wiki
|
||||
GET /wiki controllers.Wiki.home
|
||||
|
|
|
@ -6,6 +6,7 @@ import lila.db.BSON.BSONJodaDateTimeHandler
|
|||
import lila.evaluation.{ Analysed, PlayerAssessment, PlayerFlags, GameAssessments, Assessible }
|
||||
import lila.game.Game
|
||||
import lila.game.{ Game, GameRepo }
|
||||
import lila.user.{ User, UserRepo }
|
||||
import org.joda.time.DateTime
|
||||
import reactivemongo.bson._
|
||||
import scala.concurrent._
|
||||
|
@ -42,11 +43,23 @@ final class AssessApi(collAssessments: Coll, logApi: ModlogApi) {
|
|||
|
||||
def refreshAssess(gameId: String): Funit =
|
||||
GameRepo.game(gameId) zip
|
||||
AnalysisRepo.doneById(gameId) map {
|
||||
AnalysisRepo.doneById(gameId) flatMap {
|
||||
case (Some(g), Some(a)) => onAnalysisReady(g, a)
|
||||
case _ => funit
|
||||
}
|
||||
|
||||
def refreshAssessByUsername(username: String): Funit = withUser(username) { user =>
|
||||
GameRepo.chronologicalFinishedByUser(user.id) map {
|
||||
gs => gs map {
|
||||
g => AnalysisRepo.doneById(g.id) flatMap {
|
||||
case Some(a) => onAnalysisReady(g, a)
|
||||
case _ => funit
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
def onAnalysisReady(game: Game, analysis: Analysis): Funit = {
|
||||
if (!game.isCorrespondence && game.turns >= 40 && game.mode.rated) {
|
||||
val gameAssessments: GameAssessments = Assessible(Analysed(game, analysis)).assessments
|
||||
|
@ -54,4 +67,8 @@ final class AssessApi(collAssessments: Coll, logApi: ModlogApi) {
|
|||
gameAssessments.black.fold(funit){createPlayerAssessment}
|
||||
} else funit
|
||||
}
|
||||
|
||||
private def withUser[A](username: String)(op: User => Fu[A]): Fu[A] =
|
||||
UserRepo named username flatten "[mod] missing user " + username flatMap op
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue