specify event language

pull/3767/head
Thibault Duplessis 2017-10-31 17:33:32 -05:00
parent 68b7fb4ef8
commit ee9270be16
8 changed files with 48 additions and 6 deletions

View File

@ -33,7 +33,7 @@ object Lobby extends LilaController {
Env.current.preloader(
posts = Env.forum.recent(ctx.me, Env.team.cached.teamIdsList).nevermind,
tours = Env.tournament.cached.promotable.get.nevermind,
events = Env.event.api.promotable.get.nevermind,
events = Env.event.api.promoteTo(ctx.req).nevermind,
simuls = Env.simul.allCreatedFeaturable.get.nevermind
) dmap (html.lobby.home.apply _).tupled dmap { html =>
ensureSessionId(ctx.req)(status(html))

View File

@ -20,6 +20,9 @@
@base.form.group(form("url"), Html("External URL")) {
@base.form.input(form("url"))
}
@base.form.group(form("lang"), Html("Language")) {
@base.form.select(form("lang"), lila.i18n.LangList.choices)
}
<div>
@base.form.group(form("enabled"), Html("Enabled"), half = true) {
@base.form.select(form("enabled"), booleanChoices)

View File

@ -160,7 +160,7 @@ lazy val timeline = module("timeline", Seq(common, db, game, user, hub, security
libraryDependencies ++= provided(play.api, play.test, reactivemongo.driver)
)
lazy val event = module("event", Seq(common, db, memo)).settings(
lazy val event = module("event", Seq(common, db, memo, i18n)).settings(
libraryDependencies ++= provided(play.api, play.test, reactivemongo.driver)
)

View File

@ -1,11 +1,15 @@
package lila.event
import lila.db.dsl._
import reactivemongo.bson._
import play.api.i18n.Lang
import lila.db.dsl._
private[event] object BsonHandlers {
implicit val UserIdBsonHandler = stringAnyValHandler[Event.UserId](_.value, Event.UserId.apply)
private implicit val UserIdBsonHandler = stringAnyValHandler[Event.UserId](_.value, Event.UserId.apply)
private implicit val LangBsonHandler = stringAnyValHandler[Lang](_.code, Lang.apply)
implicit val EventBsonHandler = Macros.handler[Event]
}

View File

@ -1,6 +1,7 @@
package lila.event
import org.joda.time.DateTime
import play.api.i18n.Lang
case class Event(
_id: String,
@ -9,6 +10,7 @@ case class Event(
description: Option[String],
homepageHours: Int,
url: String,
lang: Lang,
enabled: Boolean,
createdBy: Event.UserId,
createdAt: DateTime,

View File

@ -1,6 +1,7 @@
package lila.event
import org.joda.time.DateTime
import play.api.mvc.RequestHeader
import scala.concurrent.duration._
import lila.db.dsl._
@ -12,7 +13,17 @@ final class EventApi(
import BsonHandlers._
val promotable = asyncCache.single(
def promoteTo(req: RequestHeader): Fu[List[Event]] =
promotable.get map {
_.filter { event =>
event.lang.language == lila.i18n.enLang.language ||
lila.i18n.I18nLangPicker.allFromRequestHeaders(req).exists {
_.language == event.lang.language
}
}
}
private val promotable = asyncCache.single(
name = "event.promotable",
fetchPromotable,
expireAfter = _.ExpireAfterWrite(5 minutes)

View File

@ -4,6 +4,9 @@ import org.joda.time.DateTime
import play.api.data._
import play.api.data.Forms._
import play.api.data.validation.Constraints._
import play.api.i18n.Lang
import lila.i18n.LangList
object EventForm {
@ -15,10 +18,21 @@ object EventForm {
"description" -> optional(nonEmptyText(minLength = 5, maxLength = 4000)),
"homepageHours" -> number(min = 0, max = 24),
"url" -> nonEmptyText,
"lang" -> nonEmptyText.verifying(l => LangList.choices.exists(_._1 == l)),
"enabled" -> boolean,
"startsAt" -> utcDate,
"finishesAt" -> utcDate
)(Data.apply)(Data.unapply))
)(Data.apply)(Data.unapply)) fill Data(
title = "",
headline = "",
description = none,
homepageHours = 0,
url = "",
lang = lila.i18n.enLang.language,
enabled = true,
startsAt = DateTime.now,
finishesAt = DateTime.now
)
case class Data(
title: String,
@ -26,6 +40,7 @@ object EventForm {
description: Option[String],
homepageHours: Int,
url: String,
lang: String,
enabled: Boolean,
startsAt: DateTime,
finishesAt: DateTime
@ -37,6 +52,7 @@ object EventForm {
description = description,
homepageHours = homepageHours,
url = url,
lang = Lang(lang),
enabled = enabled,
startsAt = startsAt,
finishesAt = finishesAt
@ -49,6 +65,7 @@ object EventForm {
description = description,
homepageHours = homepageHours,
url = url,
lang = Lang(lang),
enabled = enabled,
startsAt = startsAt,
finishesAt = finishesAt,
@ -65,6 +82,7 @@ object EventForm {
description = event.description,
homepageHours = event.homepageHours,
url = event.url,
lang = event.lang.language,
enabled = event.enabled,
startsAt = event.startsAt,
finishesAt = event.finishesAt

View File

@ -8,6 +8,10 @@ object LangList {
def nameByStr(str: String): String = I18nLangPicker.byStr(str).fold(str)(name)
lazy val choices = all.toList.map {
case (Lang(language, _), name) => language -> name
}.sortBy(_._1)
val all = Map(
Lang("en", "GB") -> "English",
Lang("af", "ZA") -> "Afrikaans",