Advertisement
Guest User

Untitled

a guest
Jan 29th, 2015
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 3.04 KB | None | 0 0
  1. package controllers
  2.  
  3. import jp.t2v.lab.play2.auth.AuthElement
  4. import models.{Account, SecretKey, Teacher, TeacherPermission}
  5. import play.api.data._
  6. import play.api.data.Forms._
  7. import play.api.mvc.Controller
  8. import play.modules.reactivemongo.MongoController
  9. import reactivemongo.api.collections.default.BSONCollection
  10. import reactivemongo.bson.BSONDocument
  11. import school.Utilities
  12.  
  13. import scala.concurrent.Future
  14. import scala.concurrent.ExecutionContext.Implicits.global
  15. import scala.util.{Success, Failure}
  16.  
  17. /**
  18.  * Created by mitrus on 1/27/15.
  19.  */
  20. object TeacherController extends Controller with MongoController with AuthElement with AuthConfigImpl {
  21.  
  22.   case class BecomeMasterData(form: String)
  23.  
  24.   val becomeMasterForm = Form(
  25.     mapping(
  26.       "form" -> text
  27.     )(BecomeMasterData.apply)(BecomeMasterData.unapply)
  28.   )
  29.  
  30.   def becomeMaster = AsyncStack(AuthorityKey -> TeacherPermission) { implicit request =>
  31.     becomeMasterForm.bindFromRequest().fold(
  32.       formWithErrors => Future.successful(BadRequest(views.html.masterPage("Error in form!", loggedIn, loggedIn.user.asInstanceOf[Teacher]))),
  33.       data => {
  34.         loggedIn.user.asInstanceOf[Teacher].master match {
  35.           case None => {
  36.             val secretkeysDB = db.collection[BSONCollection]("secretkeys")
  37.             val usersDB = db.collection[BSONCollection]("users")
  38.             val query = BSONDocument(
  39.               "form" -> data.form,
  40.               "school" -> loggedIn.school
  41.             )
  42.             val secretKeyForForm = secretkeysDB.
  43.               find(query).
  44.               one[SecretKey]
  45.             secretKeyForForm.flatMap {
  46.               case None => {
  47.                 val key = Utilities.randomAlphanumericString(6)
  48.                 val insertSK = secretkeysDB.insert(SecretKey(key, data.form, loggedIn.school, loggedIn.id))
  49.                 insertSK.flatMap { _ =>
  50.                   val newAccount = loggedIn.copy(user = loggedIn.user.asInstanceOf[Teacher].copy(master = Some(data.form)))
  51.                   usersDB.update(BSONDocument("id" -> loggedIn.id), newAccount).map {x =>
  52.                     Ok(views.html.masterPage("Secret key " + key + " has been added!", loggedIn, loggedIn.user.asInstanceOf[Teacher]))
  53.                   }
  54.                 } recover {
  55.                   case _ => Ok(views.html.masterPage("Error in generation secret key!", loggedIn, loggedIn.user.asInstanceOf[Teacher]))
  56.                 }
  57.               }
  58.               case _ => {
  59.                 Future.successful {Ok(views.html.masterPage("This form's alread a master!", loggedIn, loggedIn.user.asInstanceOf[Teacher]))}
  60.               }
  61.             }
  62.           }
  63.           case _ => {
  64.             Future.successful {Ok(views.html.masterPage("You're already a master!", loggedIn, loggedIn.user.asInstanceOf[Teacher]))}
  65.           }
  66.         }
  67.  
  68.  
  69.       }
  70.     )
  71.   }
  72.  
  73.   def masterPage = StackAction(AuthorityKey -> TeacherPermission) { implicit request =>
  74.     val teacherInfo = loggedIn.user.asInstanceOf[Teacher]
  75.     Ok(views.html.masterPage("", loggedIn, teacherInfo))
  76.   }
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement