diff --git a/src/main/scala/app/AccountController.scala b/src/main/scala/app/AccountController.scala index e8880eb..a013e64 100644 --- a/src/main/scala/app/AccountController.scala +++ b/src/main/scala/app/AccountController.scala @@ -105,6 +105,7 @@ } else NotFound } + // TODO Merge with UserManagementController private def updateImage(userName: String, fileId: Option[String]): Unit = { fileId.map { fileId => val filename = "avatar." + FileUtil.getExtension(FileUploadUtil.getUploadedFilename(fileId).get) diff --git a/src/main/scala/app/UserManagementController.scala b/src/main/scala/app/UserManagementController.scala index f05062f..e8502f8 100644 --- a/src/main/scala/app/UserManagementController.scala +++ b/src/main/scala/app/UserManagementController.scala @@ -1,23 +1,30 @@ package app import service._ -import util.AdminAuthenticator +import util.{FileUploadUtil, FileUtil, AdminAuthenticator} import util.StringUtil._ import jp.sf.amateras.scalatra.forms._ +import org.apache.commons.io.FileUtils +import util.Directory._ +import scala.Some class UserManagementController extends UserManagementControllerBase with AccountService with AdminAuthenticator trait UserManagementControllerBase extends ControllerBase { self: AccountService with AdminAuthenticator => - case class UserNewForm(userName: String, password: String, mailAddress: String, isAdmin: Boolean, url: Option[String]) - case class UserEditForm(userName: String, password: Option[String], mailAddress: String, isAdmin: Boolean, url: Option[String]) + case class UserNewForm(userName: String, password: String, mailAddress: String, isAdmin: Boolean, + url: Option[String], fileId: Option[String]) + + case class UserEditForm(userName: String, password: Option[String], mailAddress: String, isAdmin: Boolean, + url: Option[String], fileId: Option[String], clearImage: Boolean) val newForm = mapping( "userName" -> trim(label("Username" , text(required, maxlength(100), identifier, uniqueUserName))), "password" -> trim(label("Password" , text(required, maxlength(20)))), "mailAddress" -> trim(label("Mail Address" , text(required, maxlength(100), uniqueMailAddress()))), "isAdmin" -> trim(label("User Type" , boolean())), - "url" -> trim(label("URL" , optional(text(maxlength(200))))) + "url" -> trim(label("URL" , optional(text(maxlength(200))))), + "fileId" -> trim(label("File ID" , optional(text()))) )(UserNewForm.apply) val editForm = mapping( @@ -25,7 +32,9 @@ "password" -> trim(label("Password" , optional(text(maxlength(20))))), "mailAddress" -> trim(label("Mail Address" , text(required, maxlength(100), uniqueMailAddress("userName")))), "isAdmin" -> trim(label("User Type" , boolean())), - "url" -> trim(label("URL" , optional(text(maxlength(200))))) + "url" -> trim(label("URL" , optional(text(maxlength(200))))), + "fileId" -> trim(label("File ID" , optional(text()))), + "clearImage" -> trim(label("Clear image" , boolean())) )(UserEditForm.apply) get("/admin/users")(adminOnly { @@ -38,6 +47,7 @@ post("/admin/users/_new", newForm)(adminOnly { form => createAccount(form.userName, encrypt(form.password), form.mailAddress, form.isAdmin, form.url) + updateImage(form.userName, form.fileId) redirect("/admin/users") }) @@ -55,11 +65,32 @@ isAdmin = form.isAdmin, url = form.url)) + if(form.clearImage){ + account.image.map { image => + new java.io.File(getUserUploadDir(userName), image).delete() + updateAvatarImage(userName, None) + } + } else { + updateImage(userName, form.fileId) + } + redirect("/admin/users") } getOrElse NotFound }) // TODO Merge with AccountController? + private def updateImage(userName: String, fileId: Option[String]): Unit = { + fileId.map { fileId => + val filename = "avatar." + FileUtil.getExtension(FileUploadUtil.getUploadedFilename(fileId).get) + FileUtils.moveFile( + FileUploadUtil.getTemporaryFile(fileId), + new java.io.File(getUserUploadDir(userName), filename) + ) + updateAvatarImage(userName, Some(filename)) + } + } + + // TODO Merge with AccountController? private def uniqueUserName: Constraint = new Constraint(){ def validate(name: String, value: String): Option[String] = getAccountByUserName(value).map { _ => "User already exists." } diff --git a/src/main/twirl/account/edit.scala.html b/src/main/twirl/account/edit.scala.html index 649c848..2eeb22a 100644 --- a/src/main/twirl/account/edit.scala.html +++ b/src/main/twirl/account/edit.scala.html @@ -41,19 +41,7 @@
-
- @if(account.nonEmpty && account.get.image.nonEmpty){ - - } else { -
No Image
- } -
- @if(account.nonEmpty && account.get.image.nonEmpty){ - - } - + @helper.html.uploadavatar(account)
@@ -67,38 +55,3 @@ } - - \ No newline at end of file diff --git a/src/main/twirl/admin/users/edit.scala.html b/src/main/twirl/admin/users/edit.scala.html index a048880..b6d3213 100644 --- a/src/main/twirl/admin/users/edit.scala.html +++ b/src/main/twirl/admin/users/edit.scala.html @@ -3,40 +3,50 @@ @html.main(if(account.isEmpty) "New User" else "Update User"){ @admin.html.menu("users"){
-
- - - -
-
- - - -
-
- - - -
-
- - - -
-
- - - -
-
+
+
+
+ + + +
+
+ + + +
+
+ + + +
+
+ + + +
+
+ + + +
+
+
+
+ + @helper.html.uploadavatar(account) +
+
+
+
Cancel
diff --git a/src/main/twirl/admin/users/list.scala.html b/src/main/twirl/admin/users/list.scala.html index bffa161..1fef459 100644 --- a/src/main/twirl/admin/users/list.scala.html +++ b/src/main/twirl/admin/users/list.scala.html @@ -14,6 +14,7 @@ Edit
+ @helper.html.avatar(account.userName, 20) @account.userName @if(account.isAdmin){ (Administrator) diff --git a/src/main/twirl/helper/activities.scala.html b/src/main/twirl/helper/activities.scala.html index d5387b8..7cac4de 100644 --- a/src/main/twirl/helper/activities.scala.html +++ b/src/main/twirl/helper/activities.scala.html @@ -8,9 +8,7 @@
@datetime(activity.activityDate)
- @if(avatar){ - @helper.html.avatar(activity.activityUserName, 16) - } + @helper.html.avatar(activity.activityUserName, 16) @activityMessage(activity.message)
@activity.additionalInfo.map { additionalInfo => diff --git a/src/main/twirl/helper/uploadavatar.scala.html b/src/main/twirl/helper/uploadavatar.scala.html new file mode 100644 index 0000000..a008cfb --- /dev/null +++ b/src/main/twirl/helper/uploadavatar.scala.html @@ -0,0 +1,50 @@ +@(account: Option[model.Account])(implicit context: app.Context) +@import context._ +
+ @if(account.nonEmpty && account.get.image.nonEmpty){ + + } else { +
No Image
+ } +
+@if(account.nonEmpty && account.get.image.nonEmpty){ + +} + + + \ No newline at end of file