diff --git a/src/main/scala/app/AccountController.scala b/src/main/scala/app/AccountController.scala index e6a0632..acf066f 100644 --- a/src/main/scala/app/AccountController.scala +++ b/src/main/scala/app/AccountController.scala @@ -42,14 +42,23 @@ */ get("/:userName") { val userName = params("userName") - getAccountByUserName(userName).map { x => + getAccountByUserName(userName).map { account => params.getOrElse("tab", "repositories") match { // Public Activity - case "activity" => account.html.activity(x, getActivitiesByUser(userName, true)) + case "activity" => + _root_.account.html.activity(account, + if(account.isGroupAccount) Nil else getGroupsByUserName(userName), + getActivitiesByUser(userName, true)) + // Members - case "members" if(x.isGroupAccount) => account.html.members(x, getGroupMembers(x.userName)) + case "members" if(account.isGroupAccount) => + _root_.account.html.members(account, getGroupMembers(account.userName)) + // Repositories - case _ => account.html.repositories(x, getVisibleRepositories(userName, baseUrl, context.loginAccount.map(_.userName))) + case _ => + _root_.account.html.repositories(account, + if(account.isGroupAccount) Nil else getGroupsByUserName(userName), + getVisibleRepositories(userName, baseUrl, context.loginAccount.map(_.userName))) } } getOrElse NotFound } diff --git a/src/main/scala/app/UserManagementController.scala b/src/main/scala/app/UserManagementController.scala index 7544ee5..08f14d8 100644 --- a/src/main/scala/app/UserManagementController.scala +++ b/src/main/scala/app/UserManagementController.scala @@ -17,9 +17,11 @@ case class EditUserForm(userName: String, password: Option[String], mailAddress: String, isAdmin: Boolean, url: Option[String], fileId: Option[String], clearImage: Boolean) - case class NewGroupForm(groupName: String, fileId: Option[String], memberNames: Option[String]) + case class NewGroupForm(groupName: String, url: Option[String], fileId: Option[String], + memberNames: Option[String]) - case class EditGroupForm(groupName: String, fileId: Option[String], memberNames: Option[String], clearImage: Boolean) + case class EditGroupForm(groupName: String, url: Option[String], fileId: Option[String], + memberNames: Option[String], clearImage: Boolean) val newUserForm = mapping( "userName" -> trim(label("Username" , text(required, maxlength(100), identifier, uniqueUserName))), @@ -42,12 +44,14 @@ val newGroupForm = mapping( "groupName" -> trim(label("Group name" , text(required, maxlength(100), identifier))), + "url" -> trim(label("URL" , optional(text(maxlength(200))))), "fileId" -> trim(label("File ID" , optional(text()))), "memberNames" -> trim(label("Member Names" , optional(text()))) )(NewGroupForm.apply) val editGroupForm = mapping( "groupName" -> trim(label("Group name" , text(required, maxlength(100), identifier))), + "url" -> trim(label("URL" , optional(text(maxlength(200))))), "fileId" -> trim(label("File ID" , optional(text()))), "memberNames" -> trim(label("Member Names" , optional(text()))), "clearImage" -> trim(label("Clear image" , boolean())) @@ -96,7 +100,7 @@ }) post("/admin/users/_newgroup", newGroupForm)(adminOnly { form => - createGroup(form.groupName) + createGroup(form.groupName, form.url) updateGroupMembers(form.groupName, form.memberNames.map(_.split(",").toList).getOrElse(Nil)) updateImage(form.groupName, form.fileId, false) redirect("/admin/users") @@ -110,6 +114,8 @@ post("/admin/users/:groupName/_editgroup", editGroupForm)(adminOnly { form => val groupName = params("groupName") getAccountByUserName(groupName).map { account => + updateGroup(groupName, form.url) + val memberNames = form.memberNames.map(_.split(",").toList).getOrElse(Nil) updateGroupMembers(form.groupName, memberNames) diff --git a/src/main/scala/service/AccountService.scala b/src/main/scala/service/AccountService.scala index 769f9b7..3f828e3 100644 --- a/src/main/scala/service/AccountService.scala +++ b/src/main/scala/service/AccountService.scala @@ -46,22 +46,24 @@ def updateLastLoginDate(userName: String): Unit = Accounts.filter(_.userName is userName.bind).map(_.lastLoginDate).update(currentDate) - def createGroup(groupName: String): Unit = + def createGroup(groupName: String, url: Option[String]): Unit = Accounts insert Account( userName = groupName, password = "", mailAddress = groupName + "@devnull", isAdmin = false, - url = None, + url = url, registeredDate = currentDate, updatedDate = currentDate, lastLoginDate = None, image = None, isGroupAccount = true) + def updateGroup(groupName: String, url: Option[String]): Unit = + Accounts.filter(_.userName is groupName.bind).map(_.url.?).update(url) + def updateGroupMembers(groupName: String, members: List[String]): Unit = { Query(GroupMembers).filter(_.groupName is groupName.bind).delete - members.foreach { userName => GroupMembers insert GroupMember (groupName, userName) } diff --git a/src/main/twirl/account/activity.scala.html b/src/main/twirl/account/activity.scala.html index 29b2982..1f2cefc 100644 --- a/src/main/twirl/account/activity.scala.html +++ b/src/main/twirl/account/activity.scala.html @@ -1,23 +1,6 @@ -@(account: model.Account, activities: List[model.Activity])(implicit context: app.Context) +@(account: model.Account, groupNames: List[String], activities: List[model.Activity])(implicit context: app.Context) @import context._ @import view.helpers._ -@html.main(account.userName){ -
-
-
-
- -
@account.userName
-
-
-
@account.url
-
Joined on @date(account.registeredDate)
-
-
-
- @tab(account, "activity") - @helper.html.activities(activities) -
-
-
+@main(account, groupNames, "activity"){ + @helper.html.activities(activities) } diff --git a/src/main/twirl/account/main.scala.html b/src/main/twirl/account/main.scala.html new file mode 100644 index 0000000..f571851 --- /dev/null +++ b/src/main/twirl/account/main.scala.html @@ -0,0 +1,48 @@ +@(account: model.Account, groupNames: List[String], active: String)(body: Html)(implicit context: app.Context) +@import context._ +@import view.helpers._ +@html.main(account.userName){ +
+
+
+
+ +
@account.userName
+
+
+ @if(account.url.isDefined){ +
@account.url
+ } +
Joined on @date(account.registeredDate)
+
+ @if(groupNames.nonEmpty){ +
+
Groups
+ @groupNames.map { groupName => + @avatar(groupName, 36, tooltip = true) + } +
+ } + +
+
+ + @body +
+
+
+} diff --git a/src/main/twirl/account/members.scala.html b/src/main/twirl/account/members.scala.html index e2366b9..14d7c77 100644 --- a/src/main/twirl/account/members.scala.html +++ b/src/main/twirl/account/members.scala.html @@ -1,33 +1,16 @@ @(account: model.Account, members: List[String])(implicit context: app.Context) @import context._ @import view.helpers._ -@html.main(account.userName){ -
-
-
-
- -
@account.userName
-
-
-
@account.url
-
Joined on @date(account.registeredDate)
+@main(account, Nil, "members"){ + @if(members.isEmpty){ + No members + } else { + @members.map { userName => +
+
+ @avatar(userName, 20) @userName
-
- @tab(account, "members") - @if(members.isEmpty){ - No members - } else { - @members.map { userName => -
-
- @avatar(userName, 20) @userName -
-
- } - } -
-
-
+ } + } } \ No newline at end of file diff --git a/src/main/twirl/account/repositories.scala.html b/src/main/twirl/account/repositories.scala.html index 9a2ce34..de47a3d 100644 --- a/src/main/twirl/account/repositories.scala.html +++ b/src/main/twirl/account/repositories.scala.html @@ -1,42 +1,25 @@ -@(account: model.Account, repositories: List[service.RepositoryService.RepositoryInfo])(implicit context: app.Context) +@(account: model.Account, groupNames: List[String], repositories: List[service.RepositoryService.RepositoryInfo])(implicit context: app.Context) @import context._ @import view.helpers._ -@html.main(account.userName){ -
-
-
-
- -
@account.userName
-
-
- -
Joined on @date(account.registeredDate)
-
-
-
- @tab(account, "repositories") - @if(repositories.isEmpty){ - No repositories - } else { - @repositories.map { repository => -
-
- @repository.owner - / - @repository.name - @if(repository.repository.isPrivate){ - - } -
- @if(repository.repository.description.isDefined){ -
@repository.repository.description
- } -
Last updated: @datetime(repository.repository.lastActivityDate)
-
+@main(account, groupNames, "repositories"){ + @if(repositories.isEmpty){ + No repositories + } else { + @repositories.map { repository => +
+
+ @repository.owner + / + @repository.name + @if(repository.repository.isPrivate){ + } +
+ @if(repository.repository.description.isDefined){ +
@repository.repository.description
} +
Last updated: @datetime(repository.repository.lastActivityDate)
-
-
+ } + } } diff --git a/src/main/twirl/account/tab.scala.html b/src/main/twirl/account/tab.scala.html deleted file mode 100644 index 0e2a9fe..0000000 --- a/src/main/twirl/account/tab.scala.html +++ /dev/null @@ -1,18 +0,0 @@ -@(account: model.Account, active: String)(implicit context: app.Context) -@import context._ -@import view.helpers._ - diff --git a/src/main/twirl/admin/users/group.scala.html b/src/main/twirl/admin/users/group.scala.html index a0617d5..96a51ed 100644 --- a/src/main/twirl/admin/users/group.scala.html +++ b/src/main/twirl/admin/users/group.scala.html @@ -5,18 +5,23 @@ @admin.html.menu("users"){
-
+
+ + + +
+
@helper.html.uploadavatar(account)
-
+
    @@ -27,7 +32,7 @@ }
- +
diff --git a/src/main/twirl/admin/users/list.scala.html b/src/main/twirl/admin/users/list.scala.html index a14a224..df75de3 100644 --- a/src/main/twirl/admin/users/list.scala.html +++ b/src/main/twirl/admin/users/list.scala.html @@ -15,7 +15,7 @@ @if(account.isGroupAccount){ Edit } else { - Edit + Edit }
@@ -30,23 +30,19 @@ (Normal) } } + @if(account.isGroupAccount){ + @members(account.userName).map { userName => + @avatar(userName, 20, tooltip = true) + } + }

- @if(account.isGroupAccount){ - @if(members(account.userName).isEmpty){ - No members - } else { - Members: - @members(account.userName).map { userName => - @avatar(userName, 20, tooltip = true) - } - } - } else { + @if(!account.isGroupAccount){ @account.mailAddress - @account.url.map { url => - @url - } + } + @account.url.map { url => + @url }