specify event language
parent
68b7fb4ef8
commit
ee9270be16
|
@ -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))
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
)
|
||||
|
||||
|
|
|
@ -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]
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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",
|
||||
|
|
Loading…
Reference in New Issue