UserField: link to user
authorTomas Zeman <tzeman@volny.cz>
Fri, 27 Apr 2012 14:15:51 +0200
changeset 82 ad2fe2f9bac7
parent 81 c7d21399c726
child 83 f7553032b302
UserField: link to user
src/main/scala/fis/aaa/model/UserField.scala
--- a/src/main/scala/fis/aaa/model/UserField.scala	Fri Apr 27 12:04:35 2012 +0200
+++ b/src/main/scala/fis/aaa/model/UserField.scala	Fri Apr 27 14:15:51 2012 +0200
@@ -15,10 +15,11 @@
  */
 package fis.aaa.model
 
+import fis.base.ui.EntityLink
 import net.liftweb.common._
 import net.liftweb.common.Box._
 import net.liftweb.http.SHtml
-import net.liftweb.record.{LifecycleCallbacks, Record}
+import net.liftweb.record.{BaseField, LifecycleCallbacks, Record}
 import net.liftweb.record.field.{OptionalLongField, LongField}
 import net.liftweb.util.Vendor
 import net.tz.lift.model._
@@ -29,9 +30,8 @@
  * User field.
  */
 class UserField[T <: Record[T]](own: T, l: Vendor[Iterable[User]],
-  u: Vendor[Long => Box[User]]) extends LongField(own) {
+  u: Vendor[Long => Box[User]]) extends LongField(own) with UserDisplay {
 
-  override def asHtml = user.dmap(NodeSeq.Empty)(_.name.asHtml)
   override def toForm = Full(SHtml.selectObj[Long](
     l() map { u => (u.id, u.name.get) } toSeq, valueBox, set(_)))
   def user: Box[User] = u()(get)
@@ -41,9 +41,9 @@
  * Optional user field.
  */
 class OptionalUserField[T <: Record[T]](own: T, l: Vendor[Iterable[User]],
-  u: Vendor[Long => Box[User]]) extends OptionalLongField(own) {
+  u: Vendor[Long => Box[User]]) extends OptionalLongField(own) with
+  UserDisplay {
 
-  override def asHtml = user.dmap(NodeSeq.Empty)(_.name.asHtml)
   override def toForm = Full(SHtml.selectObj[Box[Long]](
     (Empty, emptyLabel) +: (l() map { u => (Full(u.id), u.name.get) } toSeq),
     Full(valueBox), setBox(_)))
@@ -56,9 +56,8 @@
  */
 class CreatedByField[T <: Record[T]](own: T, cur: Vendor[Box[User]],
   u: Vendor[Long => Box[User]]) extends OptionalLongField(own) with
-  LifecycleCallbacks {
+  UserDisplay with LifecycleCallbacks {
 
-  override def asHtml = user.dmap(NodeSeq.Empty)(_.name.asHtml)
   override def defaultValue = cur().dmap(super.defaultValue)(_.id) 
   override def displayName = l10n(name)
   override def beforeCreate {
@@ -72,9 +71,8 @@
  */
 class UpdatedByField[T <: Record[T]](own: T, cur: Vendor[Box[User]],
   u: Vendor[Long => Box[User]]) extends OptionalLongField(own) with
-  LifecycleCallbacks {
+  UserDisplay with LifecycleCallbacks {
 
-  override def asHtml = user.dmap(NodeSeq.Empty)(_.name.asHtml)
   override def defaultValue = cur().dmap(super.defaultValue)(_.id)
   override def beforeSave {
     set(cur().map { _.id })
@@ -103,4 +101,13 @@
   override def defaultValue: Long = User.get.map(_.id).getOrElse(0L)
 }
 
+trait UserDisplay extends BaseField {
+  def user: Box[User]
+
+  override def asHtml = (for {
+    u <- user
+    l <- EntityLink(u) or Full(u.name)
+  } yield l.asHtml) openOr NodeSeq.Empty
+}
+
 // vim: set ts=2 sw=2 et: