]> source.dussan.org Git - gitea.git/commitdiff
fix repo setting and delete repo
authorslene <vslene@gmail.com>
Mon, 17 Mar 2014 06:36:28 +0000 (14:36 +0800)
committerslene <vslene@gmail.com>
Mon, 17 Mar 2014 06:36:28 +0000 (14:36 +0800)
models/repo.go
modules/auth/repo.go
routers/repo/repo.go
routers/repo/single.go
templates/repo/delete.tmpl [deleted file]
templates/repo/setting.tmpl
web.go

index cfca3583f89575341534ad380a5b39b53817ae60..3b35f4975352355558fca8db5e6a38bd35a72a34 100644 (file)
@@ -307,6 +307,9 @@ func DeleteRepository(userId, repoId int64, userName string) (err error) {
        }
 
        session := orm.NewSession()
+       if err = session.Begin(); err != nil {
+               return err
+       }
        if _, err = session.Delete(&Repository{Id: repoId}); err != nil {
                session.Rollback()
                return err
index ac1b6b699b379f200e0d4ebf7f11d74acc73e397..2cc93744ce3b5e9d55a791b5f371eb4dc5da474d 100644 (file)
@@ -17,7 +17,6 @@ import (
 )
 
 type CreateRepoForm struct {
-       UserId      int64  `form:"userId"`
        RepoName    string `form:"repo" binding:"Required;AlphaDash"`
        Visibility  string `form:"visibility"`
        Description string `form:"desc" binding:"MaxSize(100)"`
@@ -52,9 +51,3 @@ func (f *CreateRepoForm) Validate(errors *binding.Errors, req *http.Request, con
 
        validate(errors, data, f)
 }
-
-type DeleteRepoForm struct {
-       UserId   int64  `form:"userId" binding:"Required"`
-       UserName string `form:"userName" binding:"Required"`
-       RepoId   int64  `form:"repoId" binding:"Required"`
-}
index 116c199b7d19c01d4b6423c07602fef1f47f1f55..edd8862794efe821ab7d8a57cfc4795b3ba0e733 100644 (file)
@@ -20,49 +20,35 @@ func Create(ctx *middleware.Context, form auth.CreateRepoForm) {
                return
        }
 
-       if ctx.HasError() {
-               ctx.Render.HTML(200, "repo/create", ctx.Data)
+       if _, err := models.CreateRepository(ctx.User,
+               form.RepoName, form.Description, form.Language, form.License,
+               form.Visibility == "private", form.InitReadme == "on"); err == nil {
+               ctx.Render.Redirect("/"+ctx.User.Name+"/"+form.RepoName, 302)
                return
-       }
-
-       // TODO: access check
-
-       user, err := models.GetUserById(form.UserId)
-       if err != nil {
-               if err.Error() == models.ErrUserNotExist.Error() {
-                       ctx.RenderWithErr("User does not exist", "repo/create", &form)
-                       return
-               }
-       }
-
-       if err == nil {
-               if _, err = models.CreateRepository(user,
-                       form.RepoName, form.Description, form.Language, form.License,
-                       form.Visibility == "private", form.InitReadme == "on"); err == nil {
-                       ctx.Render.Redirect("/"+user.Name+"/"+form.RepoName, 302)
-                       return
-               }
-       }
-
-       if err.Error() == models.ErrRepoAlreadyExist.Error() {
+       } else if err == models.ErrRepoAlreadyExist {
                ctx.RenderWithErr("Repository name has already been used", "repo/create", &form)
                return
        }
-
-       ctx.Handle(200, "repo.Create", err)
 }
 
-func Delete(ctx *middleware.Context, form auth.DeleteRepoForm) {
-       ctx.Data["Title"] = "Delete repository"
-
-       if ctx.Req.Method == "GET" {
-               ctx.Render.HTML(200, "repo/delete", ctx.Data)
+func SettingPost(ctx *middleware.Context) {
+       if !ctx.Repo.IsOwner {
+               ctx.Render.Error(404)
                return
        }
 
-       if err := models.DeleteRepository(form.UserId, form.RepoId, form.UserName); err != nil {
-               ctx.Handle(200, "repo.Delete", err)
-               return
+       switch ctx.Query("action") {
+       case "delete":
+               if len(ctx.Repo.Repository.Name) == 0 || ctx.Repo.Repository.Name != ctx.Query("repository") {
+                       ctx.Data["ErrorMsg"] = "Please make sure you entered repository name is correct."
+                       ctx.Render.HTML(200, "repo/setting", ctx.Data)
+                       return
+               }
+
+               if err := models.DeleteRepository(ctx.User.Id, ctx.Repo.Repository.Id, ctx.User.LowerName); err != nil {
+                       ctx.Handle(200, "repo.Delete", err)
+                       return
+               }
        }
 
        ctx.Render.Redirect("/", 302)
index c4189ad6d0d476b8ab229235f5bafca70355048d..fdc4e6e7f8bf136540f1ef721fb6d4e36942f36d 100644 (file)
@@ -65,7 +65,8 @@ func Single(ctx *middleware.Context, params martini.Params) {
 }
 
 func Setting(ctx *middleware.Context, params martini.Params) {
-       if !ctx.Repo.IsValid {
+       if !ctx.Repo.IsOwner {
+               ctx.Render.Error(404)
                return
        }
 
diff --git a/templates/repo/delete.tmpl b/templates/repo/delete.tmpl
deleted file mode 100644 (file)
index 0b95c3f..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-{{template "base/head" .}}
-{{template "base/navbar" .}}
-<div class="container">
-       <form action="/repo/delete" method="post" class="form-horizontal">
-               <div class="form-group">
-                   <div class="col-md-offset-4 col-md-3">
-                       <button type="submit" class="btn btn-danger">Delete repository</button>
-                   </div>
-               </div>
-       </form>
-</div>
-{{template "base/footer" .}}
\ No newline at end of file
index 225e2294295d76c5957fd3385d99a855ed1c80c5..06f0ed4d50feeec752c3b6396f34836c4f187bbe 100644 (file)
@@ -4,30 +4,60 @@
 {{template "repo/toolbar" .}}
 <div id="gogs-body" class="container">
     <div id="gogs-user-setting-nav" class="col-md-3">
-        <h4>Repository Settings</h4>
         <ul class="list-group" data-init="tabs">
-            <li class="list-group-item"><a href="#options" data-toggle="tab">Options</a></li>
-            <!--<li class="list-group-item" data-toggle="tab"><a href="#">Collaborators</a></li>
-            <li class="list-group-item" data-toggle="tab"><a href="#">Notifications</a></li>-->
-            <li class="list-group-item"><a href="#delete" data-toggle="tab">Delete</a></li>
+            <li class="list-group-item active"><a href="/{{.Owner.Name}}/{{.Repository.Name}}/settings">Options</a></li>
+            <!--<li class="list-group-item"><a href="#">Collaborators</a></li>
+            <li class="list-group-item"><a href="#">Notifications</a></li>-->
         </ul>
     </div>
-    <div id="gogs-repo-setting-container" class="col-md-9 tab-content">
-        <div id="options" class="tab-pane">
-            <h4>Repository Options</h4>
+    <div id="gogs-repo-setting-container" class="col-md-9">
+        {{if .ErrorMsg}}<p class="alert alert-danger">{{.ErrorMsg}}</p>{{end}}
+        <div class="panel panel-default">
+            <div class="panel-heading">
+                Repository Options
+            </div>
+            <div class="panel-body">
+                
+            </div>
         </div>
-        <div id="delete" class="tab-pane">
-            <h4>Delete Repository</h4>
-            <p class="alert alert-warning">Unexpected bad things will happen if you don't read this!</p>
-            <p>This action <strong>CANNOT</strong> be undone. This will delete the repository, wiki, issues, and comments permanently. </p>
+        <div class="panel panel-warning">
+            <div class="panel-heading">
+                Danger Zone
+            </div>
+            <div class="panel-body">
+                <button type="button" class="btn btn-default pull-right" href="#delete-repository-modal" data-toggle="modal">
+                    Delete this repository
+                </button>
+                <dd>
+                    <dt>Delete this repository.</dt>
+                    <dl>Once you delete a repository, there is no going back. Please be certain.</dl>
+                </dd>
 
-            <form action="/repo/delete" method="post">
-                <input type="hidden" name="userId" value="{{.Owner.Id}}"/>
-                <input type="hidden" name="userName" value="{{.Owner.Name}}"/>
-                <input type="hidden" name="repoId" value="{{.Repository.Id}}"/>
-                <hr/>
-                <button class="btn btn-danger btn-lg">I understand the consequences, delete this repository</button>
-            </form>
+                <div class="modal fade" id="delete-repository-modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
+                    <div class="modal-dialog">
+                        <form action="/{{.Owner.Name}}/{{.Repository.Name}}/settings" method="post" class="modal-content">
+                            <input type="hidden" name="action" value="delete">
+
+                            <div class="modal-header">
+                                <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+                                <h4 class="modal-title" id="myModalLabel">Delete repository</h4>
+                            </div>
+
+                            <div class="modal-body">
+                                <div class="form-group">
+                                    <label>Please enter your repository name "<strong class="text-danger">{{.Repository.Name}}</strong>"</label>
+                                    <input name="repository" class="form-control" type="text" placeholder="Type your repository name" required="required">
+                                </div>
+                            </div>
+
+                            <div class="modal-footer">
+                                <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
+                                <button class="btn btn-danger btn-lg">I understand the consequences, delete this repository</button>
+                            </div>
+                        </form>
+                    </div>
+                </div>
+            </div>
         </div>
     </div>
 </div>
diff --git a/web.go b/web.go
index 16f39bdb0eb752c0d89f8672e693a3ca6f17964a..86ea8a5bc0feec9b1556b65660a2506b93b017c5 100644 (file)
--- a/web.go
+++ b/web.go
@@ -68,11 +68,12 @@ func runWeb(*cli.Context) {
        m.Get("/user/:username", middleware.SignInRequire(false), user.Profile)
 
        m.Any("/repo/create", middleware.SignInRequire(true), binding.BindIgnErr(auth.CreateRepoForm{}), repo.Create)
-       m.Any("/repo/delete", middleware.SignInRequire(true), binding.Bind(auth.DeleteRepoForm{}), repo.Delete)
 
        m.Get("/help", routers.Help)
 
-       m.Get("/:username/:reponame/settings", middleware.SignInRequire(false), middleware.RepoAssignment(true), repo.Setting)
+       m.Post("/:username/:reponame/settings", middleware.SignInRequire(true), middleware.RepoAssignment(true), repo.SettingPost)
+       m.Get("/:username/:reponame/settings", middleware.SignInRequire(true), middleware.RepoAssignment(true), repo.Setting)
+
        m.Get("/:username/:reponame/commits", middleware.SignInRequire(false), middleware.RepoAssignment(true), repo.Commits)
        m.Get("/:username/:reponame/issues", middleware.SignInRequire(false), middleware.RepoAssignment(true), repo.Issues)
        m.Get("/:username/:reponame/pulls", middleware.SignInRequire(false), middleware.RepoAssignment(true), repo.Pulls)