student /class UI
This commit is contained in:
parent
676c8b4647
commit
7bd0554782
|
@ -2,6 +2,7 @@ package controllers
|
|||
|
||||
import play.api.mvc._
|
||||
|
||||
import lila.api.Context
|
||||
import lila.app._
|
||||
import views._
|
||||
|
||||
|
@ -12,18 +13,34 @@ final class Clas(
|
|||
) extends LilaController(env) {
|
||||
|
||||
def index = Open { implicit ctx =>
|
||||
ctx.me.ifTrue(isGranted(_.Teacher)).ifFalse(getBool("home")).map { me =>
|
||||
WithTeacher(me) { t =>
|
||||
env.clas.api.clas.of(t.teacher) map { classes =>
|
||||
Ok(views.html.clas.clas.index(classes))
|
||||
if (getBool("home")) renderHome
|
||||
ctx.me match {
|
||||
case _ if getBool("home") => renderHome
|
||||
case None => renderHome
|
||||
case Some(me) if isGranted(_.Teacher) =>
|
||||
WithTeacher(me) { t =>
|
||||
env.clas.api.clas.of(t.teacher) map { classes =>
|
||||
Ok(views.html.clas.clas.teacherIndex(classes))
|
||||
}
|
||||
}
|
||||
}
|
||||
} | {
|
||||
pageHit
|
||||
prismicC getBookmark "class" map {
|
||||
_ ?? {
|
||||
case (doc, resolver) => Ok(views.html.clas.clas.home(doc, resolver))
|
||||
case Some(me) =>
|
||||
env.clas.api.student.isStudent(me) flatMap {
|
||||
case false => renderHome
|
||||
case _ =>
|
||||
env.clas.api.student.clasIdsOfUser(me) flatMap
|
||||
env.clas.api.clas.byIds map {
|
||||
case List(single) => Redirect(routes.Clas.show(single.id.value))
|
||||
case many => Ok(views.html.clas.clas.studentIndex(many))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private def renderHome(implicit ctx: Context) = {
|
||||
pageHit
|
||||
prismicC getBookmark "class" map {
|
||||
_ ?? {
|
||||
case (doc, resolver) => Ok(views.html.clas.clas.home(doc, resolver))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -311,9 +328,7 @@ final class Clas(
|
|||
|
||||
def verifyTeacher = Action { req =>
|
||||
pageHit(req)
|
||||
Redirect(
|
||||
"https://forms.gle/Z4Nngdya1zYcD1HS7"
|
||||
)
|
||||
Redirect("https://forms.gle/Z4Nngdya1zYcD1HS7")
|
||||
}
|
||||
|
||||
private def WithTeacher(me: lila.user.User)(
|
||||
|
|
|
@ -32,7 +32,7 @@ object clas {
|
|||
)
|
||||
}
|
||||
|
||||
def index(classes: List[Clas])(implicit ctx: Context) =
|
||||
def teacherIndex(classes: List[Clas])(implicit ctx: Context) =
|
||||
bits.layout("Lichess Classes", Right("classes"))(
|
||||
cls := "clas-index",
|
||||
div(cls := "box__top")(
|
||||
|
@ -47,20 +47,30 @@ object clas {
|
|||
if (classes.isEmpty)
|
||||
frag(hr, p(cls := "box__pad classes__empty")("No classes yet."))
|
||||
else
|
||||
div(cls := "classes")(
|
||||
classes.map { clas =>
|
||||
div(
|
||||
cls := List("clas-widget" -> true, "clas-widget-archived" -> clas.isArchived),
|
||||
dataIcon := "f"
|
||||
)(
|
||||
a(cls := "overlay", href := routes.Clas.show(clas.id.value)),
|
||||
div(
|
||||
h3(clas.name),
|
||||
p(clas.desc)
|
||||
)
|
||||
)
|
||||
}
|
||||
renderClasses(classes)
|
||||
)
|
||||
|
||||
def studentIndex(classes: List[Clas])(implicit ctx: Context) =
|
||||
bits.layout("Lichess Classes", Right("classes"))(
|
||||
cls := "clas-index",
|
||||
div(cls := "box__top")(h1("Lichess Classes")),
|
||||
renderClasses(classes)
|
||||
)
|
||||
|
||||
private def renderClasses(classes: List[Clas]) =
|
||||
div(cls := "classes")(
|
||||
classes.map { clas =>
|
||||
div(
|
||||
cls := List("clas-widget" -> true, "clas-widget-archived" -> clas.isArchived),
|
||||
dataIcon := "f"
|
||||
)(
|
||||
a(cls := "overlay", href := routes.Clas.show(clas.id.value)),
|
||||
div(
|
||||
h3(clas.name),
|
||||
p(clas.desc)
|
||||
)
|
||||
)
|
||||
}
|
||||
)
|
||||
|
||||
def teachers(clas: Clas) =
|
||||
|
|
|
@ -61,6 +61,12 @@ final class ClasApi(
|
|||
.sort($sort desc "viewedAt")
|
||||
.list[Clas]()
|
||||
|
||||
def byIds(clasIds: List[Clas.Id]): Fu[List[Clas]] =
|
||||
coll.ext
|
||||
.find($inIds(clasIds))
|
||||
.sort($sort desc "createdAt")
|
||||
.list[Clas]()
|
||||
|
||||
def create(data: ClasForm.ClasData, teacher: Teacher): Fu[Clas] = {
|
||||
val clas = Clas.make(teacher, data.name, data.desc)
|
||||
coll.insert.one(clas) inject clas
|
||||
|
@ -117,6 +123,9 @@ final class ClasApi(
|
|||
.sort($sort asc "userId")
|
||||
.list[Student]()
|
||||
|
||||
def clasIdsOfUser(user: User): Fu[List[Clas.Id]] =
|
||||
coll.distinctEasy[Clas.Id, List]("clasId", $doc("userId" -> user.id))
|
||||
|
||||
def withUsers(students: List[Student]): Fu[List[Student.WithUser]] =
|
||||
userRepo.coll.idsMap[User, User.ID](
|
||||
students.map(_.userId),
|
||||
|
|
Loading…
Reference in a new issue