Delete Repository page has been implemented.

This commit is contained in:
takezoe
2013-06-07 01:50:35 +09:00
parent 45bcaa9d5c
commit 280fe85ff9
3 changed files with 62 additions and 2 deletions

View File

@@ -1,8 +1,10 @@
package app
import service._
import util.Directory._
import util.OwnerOnlyAuthenticator
import jp.sf.amateras.scalatra.forms._
import org.apache.commons.io.FileUtils
class SettingsController extends SettingsControllerBase
with RepositoryService with AccountService with OwnerOnlyAuthenticator
@@ -95,8 +97,35 @@ trait SettingsControllerBase extends ControllerBase {
removeCollaborator(owner, repository, userName)
redirect("/%s/%s/settings/collaborators".format(owner, repository))
})
/**
* Display the delete repository page.
*/
get("/:owner/:repository/settings/delete")(ownerOnly {
val owner = params("owner")
val repository = params("repository")
getRepository(owner, repository, servletContext) match {
case Some(r) => settings.html.delete(r)
case None => NotFound()
}
})
/**
* Delete the repository.
*/
post("/:owner/:repository/settings/delete")(ownerOnly {
val owner = params("owner")
val repository = params("repository")
deleteRepository(owner, repository)
FileUtils.deleteDirectory(getRepositoryDir(owner, repository))
FileUtils.deleteDirectory(getWikiRepositoryDir(owner, repository))
redirect("/%s".format(owner))
})
/**
* Provides Constraint to validate the collaborator name.
*/

View File

@@ -42,6 +42,16 @@ trait RepositoryService { self: AccountService =>
lastActivityDate = currentDate)
}
def deleteRepository(userName: String, repositoryName: String): Unit = {
Collaborators
.filter { c => (c.userName is userName.bind) && (c.repositoryName is repositoryName.bind) }
.delete
Repositories
.filter { r => (r.userName is userName.bind) && (r.repositoryName is repositoryName.bind) }
.delete
}
/**
* Returns the list of specified user's repositories information.
*

View File

@@ -0,0 +1,21 @@
@(repository: service.RepositoryService.RepositoryInfo)(implicit context: app.Context)
@import context._
@html.main("Delete Repository"){
@html.header("settings", repository)
@menu("delete", repository){
<form id="form" method="post" action="@path/@repository.owner/@repository.name/settings/delete">
<h3>Delete repository</h3>
<p>
Once you delete a repository, there is no going back.
</p>
<input type="submit" class="btn btn-danger" value="Delete this repository"/>
</form>
}
}
<script>
$(function(){
$('#form').submit(function(){
return confirm('Once you delete a repository, there is no going back.\nAre you sure?');
});
});
</script>