limit students per class
This commit is contained in:
parent
3bafda3c4b
commit
1fac7c5ecf
|
@ -211,27 +211,28 @@ final class Clas(
|
|||
Ok(_)
|
||||
} else
|
||||
WithClassAndStudents(me, id) { (clas, students) =>
|
||||
ctx.req.flash.get("created").map(_ split ' ').?? {
|
||||
for {
|
||||
created <- ctx.req.flash.get("created").map(_ split ' ').?? {
|
||||
case Array(userId, password) =>
|
||||
env.clas.api.student
|
||||
.get(clas, userId)
|
||||
.map2(lila.clas.Student.WithPassword(_, lila.user.User.ClearPassword(password)))
|
||||
case _ => fuccess(none)
|
||||
} flatMap { created =>
|
||||
env.clas.forms.student.generate map { createForm =>
|
||||
Ok(
|
||||
}
|
||||
nbStudents <- env.clas.api.student.count(clas.id)
|
||||
createForm <- env.clas.forms.student.generate
|
||||
} yield Ok(
|
||||
html.clas.student.form(
|
||||
clas,
|
||||
students,
|
||||
env.clas.forms.student.invite(clas),
|
||||
createForm,
|
||||
nbStudents,
|
||||
created
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
def studentCreate(id: String) = SecureBody(_.Teacher) { implicit ctx => me =>
|
||||
NoTor {
|
||||
|
@ -241,14 +242,17 @@ final class Clas(
|
|||
.bindFromRequest()(ctx.body)
|
||||
.fold(
|
||||
err =>
|
||||
env.clas.api.student.count(clas.id) map { nbStudents =>
|
||||
BadRequest(
|
||||
html.clas.student.form(
|
||||
clas,
|
||||
students,
|
||||
env.clas.forms.student.invite(clas),
|
||||
err
|
||||
err,
|
||||
nbStudents
|
||||
)
|
||||
).fuccess,
|
||||
)
|
||||
},
|
||||
data =>
|
||||
env.clas.api.student.create(clas, data, me) map {
|
||||
case (user, password) =>
|
||||
|
@ -268,14 +272,17 @@ final class Clas(
|
|||
.bindFromRequest()(ctx.body)
|
||||
.fold(
|
||||
err =>
|
||||
env.clas.api.student.count(clas.id) map { nbStudents =>
|
||||
BadRequest(
|
||||
html.clas.student.form(
|
||||
clas,
|
||||
students,
|
||||
err,
|
||||
env.clas.forms.student.create
|
||||
env.clas.forms.student.create,
|
||||
nbStudents
|
||||
)
|
||||
).fuccess,
|
||||
)
|
||||
},
|
||||
data =>
|
||||
env.user.repo named data.username flatMap {
|
||||
_ ?? { user =>
|
||||
|
|
|
@ -113,11 +113,21 @@ object student {
|
|||
students: List[Student],
|
||||
invite: Form[_],
|
||||
create: Form[_],
|
||||
nbStudents: Int,
|
||||
created: Option[lila.clas.Student.WithPassword] = none
|
||||
)(implicit ctx: Context) =
|
||||
bits.layout(trans.clas.addStudent.txt(), Left(c withStudents students))(
|
||||
cls := "box-pad student-add",
|
||||
h1(trans.clas.addStudent()),
|
||||
h1(
|
||||
trans.clas.addStudent(),
|
||||
s" ($nbStudents/${lila.clas.Clas.maxStudents})"
|
||||
),
|
||||
nbStudents > (lila.clas.Clas.maxStudents / 2) option p(dataIcon := "", cls := "text")(
|
||||
s"Note that a class can have up to ${lila.clas.Clas.maxStudents} students.",
|
||||
"To manage more students, ",
|
||||
a(href := routes.Clas.studentForm(c.id.value))("create more classes"),
|
||||
"."
|
||||
),
|
||||
created map {
|
||||
case Student.WithPassword(student, password) =>
|
||||
flashMessage(cls := "student-add__created")(
|
||||
|
@ -134,6 +144,7 @@ object student {
|
|||
)
|
||||
},
|
||||
standardFlash(),
|
||||
(nbStudents <= lila.clas.Clas.maxStudents) option frag(
|
||||
div(cls := "student-add__choice")(
|
||||
div(cls := "info")(
|
||||
h2(trans.clas.inviteALichessAccount()),
|
||||
|
@ -158,14 +169,8 @@ object student {
|
|||
div(cls := "info")(
|
||||
h2(trans.clas.createANewLichessAccount()),
|
||||
p(trans.clas.createDesc1()),
|
||||
p(
|
||||
trans.clas.createDesc2()
|
||||
),
|
||||
p(
|
||||
strong(trans.clas.createDesc3()),
|
||||
br,
|
||||
trans.clas.createDesc4()
|
||||
)
|
||||
p(trans.clas.createDesc2()),
|
||||
p(strong(trans.clas.createDesc3()), br, trans.clas.createDesc4())
|
||||
),
|
||||
postForm(cls := "form3", action := routes.Clas.studentCreate(c.id.value))(
|
||||
form3.group(
|
||||
|
@ -182,6 +187,7 @@ object student {
|
|||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
def edit(clas: Clas, students: List[Student], s: Student.WithUser, form: Form[_])(implicit ctx: Context) =
|
||||
bits.layout(s.user.username, Left(clas withStudents students), s.student.some)(
|
||||
|
|
|
@ -26,6 +26,8 @@ case class Clas(
|
|||
|
||||
object Clas {
|
||||
|
||||
val maxStudents = 100
|
||||
|
||||
def make(teacher: User, name: String, desc: String) = Clas(
|
||||
_id = Id(scala.util.Random.alphanumeric take 8 mkString),
|
||||
name = name,
|
||||
|
|
|
@ -122,6 +122,8 @@ final class ClasApi(
|
|||
}
|
||||
}
|
||||
|
||||
def count(clasId: Clas.Id): Fu[Int] = coll.countSel($doc("clasId" -> clasId))
|
||||
|
||||
def isManaged(user: User): Fu[Boolean] =
|
||||
coll.exists($doc("userId" -> user.id, "managed" -> true))
|
||||
|
||||
|
|
Loading…
Reference in a new issue