Title improvements

- Disallow LM for titles only condition
- validate titles before setting on user (@ProgramFox)
- mod log format cleanup
This commit is contained in:
Isaac Levy 2017-11-15 11:11:10 -05:00
parent e546857221
commit feff667f78
5 changed files with 25 additions and 12 deletions

View file

@ -229,7 +229,7 @@
@if(history.nonEmpty) {
<ul>
@history.map { e =>
<li>@userIdLink(e.mod.some) <b>@e.showAction</b> @u.username @e.details @momentFromNow(e.date)</li>
<li>@userIdLink(e.mod.some, withTitle=false) <b>@e.showAction</b> @e.details @momentFromNow(e.date)</li>
}
</ul>
<br />

View file

@ -107,9 +107,18 @@ final class ModApi(
}
def setTitle(mod: String, username: String, title: Option[String]): Funit = withUser(username) { user =>
UserRepo.setTitle(user.id, title) >>
logApi.setTitle(mod, user.id, title) >>-
lightUserApi.invalidate(user.id)
title match {
case None => {
UserRepo.removeTitle(user.id) >>-
logApi.removeTitle(mod, user.id) >>-
lightUserApi.invalidate(user.id)
}
case Some(t) => User.titlesMap.get(t) ?? { tFull =>
UserRepo.addTitle(user.id, t) >>-
logApi.addTitle(mod, user.id, s"$t ($tFull)") >>-
lightUserApi.invalidate(user.id)
}
}
}
def setEmail(mod: String, username: String, email: EmailAddress): Funit = withUser(username) { user =>

View file

@ -41,9 +41,12 @@ final class ModlogApi(coll: Coll) {
Modlog(mod, user.some, Modlog.reopenAccount)
}
def setTitle(mod: String, user: String, title: Option[String]) = add {
val name = title flatMap lila.user.User.titlesMap.get
Modlog(mod, user.some, name.isDefined.fold(Modlog.setTitle, Modlog.removeTitle), details = name)
def addTitle(mod: String, user: String, title: String) = add {
Modlog(mod, user.some, Modlog.setTitle, title.some)
}
def removeTitle(mod: String, user: String) = add {
Modlog(mod, user.some, Modlog.removeTitle)
}
def setEmail(mod: String, user: String) = add {

View file

@ -32,7 +32,7 @@ object Condition {
case object Titled extends Condition with FlatCond {
def name(lang: Lang) = "Only titled players"
def apply(user: User) =
if (user.hasTitle) Accepted
if (user.title.exists(_ != "LM")) Accepted
else Refused(name _)
}

View file

@ -166,10 +166,11 @@ object UserRepo {
$set(F.profile -> Profile.profileBSONHandler.write(profile))
).void
def setTitle(id: ID, title: Option[String]): Funit = title match {
case Some(t) => coll.updateField($id(id), F.title, t).void
case None => coll.update($id(id), $unset(F.title)).void
}
def addTitle(id: ID, title: String): Funit =
coll.updateField($id(id), F.title, title).void
def removeTitle(id: ID): Funit =
coll.unsetField($id(id), F.title).void
def setPlayTime(id: ID, playTime: User.PlayTime): Funit =
coll.update($id(id), $set(F.playTime -> User.playTimeHandler.write(playTime))).void