commit
4177457428
|
@ -101,7 +101,7 @@ final class Mod(
|
|||
|
||||
def warn(username: String, subject: String) =
|
||||
OAuthModBody(_.ModMessage) { me =>
|
||||
env.mod.presets.pmPresets.get().named(subject) ?? { preset =>
|
||||
env.mod.presets.getPmPresets(me.user).named(subject) ?? { preset =>
|
||||
withSuspect(username) { prev =>
|
||||
for {
|
||||
inquiry <- env.report.api.inquiries ofModId me.id
|
||||
|
|
|
@ -401,7 +401,7 @@ final class User(
|
|||
val rageSit = env.playban.api.getRageSit(user.id).map(view.showRageSit)
|
||||
|
||||
val actions = env.user.repo.isErased(user) map { erased =>
|
||||
html.user.mod.actions(user, emails, erased, env.mod.presets.pmPresets.get())
|
||||
html.user.mod.actions(user, emails, erased, env.mod.presets.getPmPresets(holder.user))
|
||||
}
|
||||
val userLoginsFu = env.security.userLogins(user, nbOthers)
|
||||
val others = for {
|
||||
|
@ -450,7 +450,7 @@ final class User(
|
|||
env.user.repo withEmails username orFail s"No such user $username" flatMap {
|
||||
case UserModel.WithEmails(user, emails) =>
|
||||
env.user.repo.isErased(user) map { erased =>
|
||||
Ok(html.user.mod.actions(user, emails, erased, env.mod.presets.pmPresets.get()))
|
||||
Ok(html.user.mod.actions(user, emails, erased, env.mod.presets.getPmPresets(ctx.me)))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -154,7 +154,7 @@ object discussion {
|
|||
div(
|
||||
select(cls := "appeal-presets")(
|
||||
option(st.value := "")("Presets"),
|
||||
ps.value.map { case ModPreset(name, text) =>
|
||||
ps.value.map { case ModPreset(name, text, _) =>
|
||||
option(
|
||||
st.value := text,
|
||||
st.title := text
|
||||
|
|
|
@ -152,7 +152,7 @@ object inquiry {
|
|||
isGranted(_.ModMessage) option div(cls := "dropper warn buttons")(
|
||||
iconTag(""),
|
||||
div(
|
||||
env.mod.presets.pmPresets.get().value.map { preset =>
|
||||
env.mod.presets.getPmPresets(ctx.me).value.map { preset =>
|
||||
postForm(action := routes.Mod.warn(in.user.username, preset.name))(
|
||||
submitButton(cls := "fbt", title := preset.text)(preset.name),
|
||||
autoNextInput
|
||||
|
|
|
@ -34,7 +34,7 @@ object presets {
|
|||
form("v"),
|
||||
raw(""),
|
||||
help = frag(
|
||||
"First line is the preset name, next lines are the content. Separate presets with a line of 3 or more dashes: ---."
|
||||
"First line is the permissions needed to use the preset (If a list, separated by commas is given, any user having at least one of these permissions will be able to send it), second is the preset name, next lines are the content. Separate presets with a line of 3 or more dashes: ---."
|
||||
).some
|
||||
)(form3.textarea(_)(rows := 20)),
|
||||
form3.action(
|
||||
|
|
|
@ -5,6 +5,8 @@ import play.api.data.Forms._
|
|||
import scala.concurrent.ExecutionContext
|
||||
|
||||
import lila.memo.SettingStore.{ Formable, StringReader }
|
||||
import lila.user.User
|
||||
import lila.security.{ Granter, Permission }
|
||||
import reactivemongo.api.bson.BSONHandler
|
||||
|
||||
final class ModPresetsApi(
|
||||
|
@ -20,7 +22,13 @@ final class ModPresetsApi(
|
|||
case _ => none
|
||||
}
|
||||
|
||||
lazy val pmPresets = settingStore[ModPresets](
|
||||
def getPmPresets(mod: User): ModPresets =
|
||||
ModPresets(pmPresets.get().value.filter(_.permissions.exists(Granter(_)(mod))))
|
||||
|
||||
def getPmPresets(mod: Option[User]): ModPresets =
|
||||
mod.map(getPmPresets).getOrElse(ModPresets(Nil))
|
||||
|
||||
private lazy val pmPresets = settingStore[ModPresets](
|
||||
"modPmPresets",
|
||||
default = ModPresets(Nil),
|
||||
text = "Moderator PM presets".some
|
||||
|
@ -42,7 +50,7 @@ case class ModPresets(value: List[ModPreset]) {
|
|||
value.find(_.text.filter(_.isLetter) == clean)
|
||||
}
|
||||
}
|
||||
case class ModPreset(name: String, text: String)
|
||||
case class ModPreset(name: String, text: String, permissions: Set[Permission])
|
||||
|
||||
object ModPresets {
|
||||
|
||||
|
@ -51,8 +59,8 @@ object ModPresets {
|
|||
private[mod] object setting {
|
||||
|
||||
private def write(presets: ModPresets): String =
|
||||
presets.value.map { case ModPreset(name, text) =>
|
||||
s"$name\n\n$text"
|
||||
presets.value.map { case ModPreset(name, text, permissions) =>
|
||||
s"${permissions.map(_.key) mkString ","}\n\n$name\n\n$text"
|
||||
} mkString "\n\n----------\n\n"
|
||||
|
||||
private def read(s: String): ModPresets =
|
||||
|
@ -63,11 +71,27 @@ object ModPresets {
|
|||
.map(_.linesIterator.toList)
|
||||
.filter(_.nonEmpty)
|
||||
.flatMap {
|
||||
case name :: text => ModPreset(name, text.dropWhile(_.isEmpty) mkString "\n").some
|
||||
case _ => none
|
||||
case perms :: rest => {
|
||||
val cleanRest = rest.dropWhile(_.isEmpty)
|
||||
for {
|
||||
name <- cleanRest.headOption
|
||||
text <- cleanRest.tail.some
|
||||
} yield ModPreset(
|
||||
name,
|
||||
text.dropWhile(_.isEmpty) mkString "\n",
|
||||
toPermisssions(perms)
|
||||
)
|
||||
}
|
||||
case _ => none
|
||||
}
|
||||
}
|
||||
|
||||
private def toPermisssions(s: String): Set[Permission] =
|
||||
Permission(s.split(",").map(key => s"ROLE_${key.trim.toUpperCase}").toList) match {
|
||||
case set if set.nonEmpty => set
|
||||
case _ => Set(Permission.Admin)
|
||||
}
|
||||
|
||||
private val presetsIso = lila.common.Iso[String, ModPresets](read, write)
|
||||
|
||||
implicit val presetsBsonHandler: BSONHandler[ModPresets] = lila.db.dsl.isoHandler(presetsIso)
|
||||
|
|
Loading…
Reference in New Issue