(refs #8)Start to implement group management.

This commit is contained in:
takezoe
2013-07-22 22:22:49 +09:00
parent f5d69a3df6
commit 30eb949ce1
7 changed files with 92 additions and 12 deletions

View File

@@ -60,9 +60,10 @@ trait RepositorySettingsControllerBase extends ControllerBase with FlashMapSuppo
/**
* JSON API for collaborator completion.
*/
// TODO Merge with UserManagementController
get("/:owner/:repository/settings/collaborators/proposals")(usersOnly {
contentType = formats("json")
org.json4s.jackson.Serialization.write(Map("options" -> getAllUsers.map(_.userName).toArray))
org.json4s.jackson.Serialization.write(Map("options" -> getAllUsers.filter(!_.isGroupAccount).map(_.userName).toArray))
})
/**

View File

@@ -69,4 +69,17 @@ trait UserManagementControllerBase extends AccountManagementControllerBase {
} getOrElse NotFound
})
get("/admin/users/_newgroup"){
admin.users.html.group(None)
}
/**
* JSON API for collaborator completion.
*/
// TODO Merge with RepositorySettingsController
get("/admin/users/_members"){
contentType = formats("json")
org.json4s.jackson.Serialization.write(Map("options" -> getAllUsers.filter(!_.isGroupAccount).map(_.userName).toArray))
}
}

View File

@@ -12,7 +12,8 @@ object Accounts extends Table[Account]("ACCOUNT") {
def updatedDate = column[java.util.Date]("UPDATED_DATE")
def lastLoginDate = column[java.util.Date]("LAST_LOGIN_DATE")
def image = column[String]("IMAGE")
def * = userName ~ mailAddress ~ password ~ isAdmin ~ url.? ~ registeredDate ~ updatedDate ~ lastLoginDate.? ~ image.? <> (Account, Account.unapply _)
def groupAccount = column[Boolean]("GROUP_ACCOUNT")
def * = userName ~ mailAddress ~ password ~ isAdmin ~ url.? ~ registeredDate ~ updatedDate ~ lastLoginDate.? ~ image.? ~ groupAccount <> (Account, Account.unapply _)
}
case class Account(
@@ -24,5 +25,6 @@ case class Account(
registeredDate: java.util.Date,
updatedDate: java.util.Date,
lastLoginDate: Option[java.util.Date],
image: Option[String]
image: Option[String],
isGroupAccount: Boolean
)

View File

@@ -24,7 +24,8 @@ trait AccountService {
registeredDate = currentDate,
updatedDate = currentDate,
lastLoginDate = None,
image = None)
image = None,
isGroupAccount = false)
def updateAccount(account: Account): Unit =
Accounts

View File

@@ -0,0 +1,60 @@
@(account: Option[model.Account])(implicit context: app.Context)
@import context._
@import view.helpers._
@html.main(if(account.isEmpty) "New User" else "Update User"){
@admin.html.menu("users"){
<form method="POST" action="@if(account.isEmpty){@path/admin/users/_new} else {@path/admin/users/@account.get.userName/_edit}" validate="true">
<div class="row-fluid">
<div class="span5">
<fieldset>
<label for="userName"><strong>Group name</strong></label>
<input type="text" name="userName" id="userName" value="@account.map(_.userName)"@if(account.isDefined){ readonly}/>
<span id="error-userName" class="error"></span>
</fieldset>
<fieldset>
<label for="avatar"><strong>Image (Optional)</strong></label>
@helper.html.uploadavatar(account)
</fieldset>
</div>
<div class="span7">
<fieldset>
<label><strong>Members</strong></label>
<ul id="members" class="collaborator">
</ul>
<input type="text" id="memberName" style="width: 300px; margin-bottom: 0px;"/>
<input type="button" class="btn" value="Add" id="addMember">
</fieldset>
</div>
</div>
<fieldset class="margin">
<input type="submit" class="btn btn-success" value="@if(account.isEmpty){Create Group} else {Update Group}"/>
<a href="@path/admin/users" class="btn">Cancel</a>
</fieldset>
</form>
}
}
<script>
$(function(){
$('#memberName').typeahead({
source: function (query, process) {
return $.get('@path/admin/users/_members', { query: query },
function (data) {
return process(data.options);
});
}
});
$('#addMember').click(function(){
var userName = $('#memberName').val();
$('#members').append($('<li>')
.append($('<a>').attr('href', '#').text(userName))
.append(' ')
.append($('<a>').attr('href', '#').addClass('remove').text('(remove)')));
$('#memberName').val('');
});
$(document).on('click', '.remove', function(){
$(this).parent().remove();
});
});
</script>

View File

@@ -5,6 +5,7 @@
@admin.html.menu("users"){
<div style="text-align: right; margin-bottom: 4px;">
<a href="@path/admin/users/_new" class="btn">New User</a>
<a href="@path/admin/users/_newgroup" class="btn">New Group</a>
</div>
<table class="table table-bordered table-hover">
@users.map { account =>

View File

@@ -23,12 +23,14 @@
}
}
<script>
$('#userName').typeahead({
source: function (query, process) {
return $.get('@url(repository)/settings/collaborators/proposals', { query: query },
function (data) {
return process(data.options);
});
}
$(function(){
$('#userName').typeahead({
source: function (query, process) {
return $.get('@url(repository)/settings/collaborators/proposals', { query: query },
function (data) {
return process(data.options);
});
}
});
});
</script>