Guest User

Untitled

a guest
Mar 11th, 2018
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.17 KB | None | 0 0
  1. object User extends User with MetaMegaProtoUser[User] {
  2. override def dbTableName = "users" // define the DB table name
  3. override def screenWrap = Full(<lift:surround with="default" at="content">
  4. <lift:bind /></lift:surround>)
  5. // define the order fields will appear in forms and output
  6. override def fieldOrder = List(id, firstName, lastName, email,
  7. locale, timezone, password, textArea)
  8.  
  9. // comment this line out to require email validations
  10. override def skipEmailValidation = true
  11.  
  12. override def afterCreate = createAddresses _ :: super.afterCreate
  13. override def beforeSave = saveAddresses _ :: super.beforeSave
  14. override def beforeUpdate = saveAddresses _ :: super.beforeUpdate
  15.  
  16. private def createAddresses(u:User) : Unit = {
  17. u.address(new Address)
  18. }
  19.  
  20. private def saveAddresses(u:User) : Unit = {
  21. u.address(u.address.obj.open_!.saveMe)
  22. Log.info(u.address.obj.open_!.toString)
  23. }
  24.  
  25. override def clean_?(toCheck: User): Boolean =
  26. Address.clean_?(toCheck.getAddress) && super.clean_?(toCheck)
  27.  
  28. override def dirty_?(toCheck: User): Boolean =
  29. Address.dirty_?(toCheck.getAddress) && super.dirty_?(toCheck)
  30.  
  31. override def editXhtml(user: User) =
  32. <lift:surround with="default" at="content">
  33. <form method="post" action={S.uri}>
  34. <h4>Account details</h4>
  35. <div>
  36. { localForm(user, false) }
  37. </div>
  38. <h4>Address</h4>
  39. <div>
  40. { addressForm( user.getAddress ) }
  41. </div>
  42. <p><user:submit /></p>
  43. </form>
  44. </lift:surround>
  45.  
  46. override def signupXhtml(user: User) =
  47. <lift:surround with="default" at="content">
  48. <form method="post" action={S.uri}>
  49. <h4>Account details</h4>
  50. <div>
  51. { localForm(user, false) }
  52. </div>
  53. <h4>Address</h4>
  54. <div>
  55. { addressForm( user.getAddress ) }
  56. </div>
  57. <p><user:submit /></p>
  58. </form>
  59. </lift:surround>
  60.  
  61.  
  62. private def localForm(user: User, ignorePassword: Boolean): NodeSeq = {
  63. signupFields.
  64. map(fi => getSingleton.getActualBaseField(user, fi)).
  65. filter(f => !ignorePassword || (f match {
  66. case f: MappedPassword[User] => false
  67. case _ => true
  68. })).
  69. flatMap(f =>
  70. f.toForm.toList.map(form => <p><label>{f.displayName}</label> {form}</p>) )
  71. }
  72.  
  73. private def addressForm(address : Address): NodeSeq = {
  74. val formFields = address.formFields
  75. formFields.
  76. map(fi => address.getSingleton.getActualBaseField(address, fi)).
  77. flatMap( f =>
  78. f.toForm.toList.map(form => <p><label>{f.displayName}</label> {form}</p>))
  79. }
  80. }
  81.  
  82. /**
  83. * An O-R mapped "User" class that includes first name, last name, password and we add a "Personal Essay" to it
  84. */
  85. class User extends MegaProtoUser[User] {
  86. def getSingleton = User // what's the "meta" server
  87.  
  88. // define an additional field for a personal essay
  89. object textArea extends MappedTextarea(this, 2048) {
  90. override def textareaRows = 10
  91. override def textareaCols = 50
  92. override def displayName = "Personal Essay"
  93. }
  94.  
  95. object address extends MappedLongForeignKey(this, Address) {
  96. override def dbIndexed_? = true
  97. }
  98.  
  99. def getAddress : Address =
  100. address.obj match {
  101. case Full(a) => a
  102. case _ =>
  103. val a = new Address
  104. address(a)
  105. address.primeObj(Full(a))
  106. a
  107. }
  108. }
Add Comment
Please, Sign In to add comment