Unknwon лет назад: 8
Родитель
Сommit
7140dbac95

+ 1 - 1
cmd/web.go

@@ -398,7 +398,7 @@ func runWeb(ctx *cli.Context) {
 		m.Group("/settings", func() {
 			m.Combo("").Get(repo.Settings).
 				Post(bindIgnErr(auth.RepoSettingForm{}), repo.SettingsPost)
-			m.Route("/collaboration", "GET,POST", repo.Collaboration)
+			m.Combo("/collaboration").Get(repo.Collaboration).Post(repo.CollaborationPost)
 
 			m.Group("/hooks", func() {
 				m.Get("", repo.Webhooks)

+ 1 - 0
conf/locale/locale_en-US.ini

@@ -612,6 +612,7 @@ settings.add_collaborator = Add New Collaborator
 settings.add_collaborator_success = New collaborator has been added.
 settings.remove_collaborator_success = Collaborator has been removed.
 settings.search_user_placeholder = Search user...
+settings.org_not_allowed_to_be_collaborator = Organization is not allowed to be added as a collaborator.
 settings.user_is_org_member = User is organization member who cannot be added as a collaborator.
 settings.add_webhook = Add Webhook
 settings.hooks_desc = Webhooks are much like basic HTTP POST event triggers. Whenever something occurs in Gogs, we will handle the notification to the target host you specify. Learn more in this <a target="_blank" href="%s">Webhooks Guide</a>.

Разница между файлами не показана из-за своего большого размера
+ 905 - 690
modules/bindata/bindata.go


+ 48 - 42
routers/repo/setting.go

@@ -233,48 +233,6 @@ func Collaboration(ctx *middleware.Context) {
 	ctx.Data["Title"] = ctx.Tr("repo.settings")
 	ctx.Data["PageIsSettingsCollaboration"] = true
 
-	if ctx.Req.Method == "POST" {
-		name := strings.ToLower(ctx.Query("collaborator"))
-		if len(name) == 0 || ctx.Repo.Owner.LowerName == name {
-			ctx.Redirect(setting.AppSubUrl + ctx.Req.URL.Path)
-			return
-		}
-
-		u, err := models.GetUserByName(name)
-		if err != nil {
-			if models.IsErrUserNotExist(err) {
-				ctx.Flash.Error(ctx.Tr("form.user_not_exist"))
-				ctx.Redirect(setting.AppSubUrl + ctx.Req.URL.Path)
-			} else {
-				ctx.Handle(500, "GetUserByName", err)
-			}
-			return
-		}
-
-		// Check if user is organization member.
-		if ctx.Repo.Owner.IsOrganization() && ctx.Repo.Owner.IsOrgMember(u.Id) {
-			ctx.Flash.Info(ctx.Tr("repo.settings.user_is_org_member"))
-			ctx.Redirect(ctx.Repo.RepoLink + "/settings/collaboration")
-			return
-		}
-
-		if err = ctx.Repo.Repository.AddCollaborator(u); err != nil {
-			ctx.Handle(500, "AddCollaborator", err)
-			return
-		}
-
-		if setting.Service.EnableNotifyMail {
-			if err = mailer.SendCollaboratorMail(ctx.Render, u, ctx.User, ctx.Repo.Repository); err != nil {
-				ctx.Handle(500, "SendCollaboratorMail", err)
-				return
-			}
-		}
-
-		ctx.Flash.Success(ctx.Tr("repo.settings.add_collaborator_success"))
-		ctx.Redirect(setting.AppSubUrl + ctx.Req.URL.Path)
-		return
-	}
-
 	// Delete collaborator.
 	remove := strings.ToLower(ctx.Query("remove"))
 	if len(remove) > 0 && remove != ctx.Repo.Owner.LowerName {
@@ -302,6 +260,54 @@ func Collaboration(ctx *middleware.Context) {
 	ctx.HTML(200, COLLABORATION)
 }
 
+func CollaborationPost(ctx *middleware.Context) {
+	name := strings.ToLower(ctx.Query("collaborator"))
+	if len(name) == 0 || ctx.Repo.Owner.LowerName == name {
+		ctx.Redirect(setting.AppSubUrl + ctx.Req.URL.Path)
+		return
+	}
+
+	u, err := models.GetUserByName(name)
+	if err != nil {
+		if models.IsErrUserNotExist(err) {
+			ctx.Flash.Error(ctx.Tr("form.user_not_exist"))
+			ctx.Redirect(setting.AppSubUrl + ctx.Req.URL.Path)
+		} else {
+			ctx.Handle(500, "GetUserByName", err)
+		}
+		return
+	}
+
+	// Organization is not allowed to be added as a collaborator.
+	if u.IsOrganization() {
+		ctx.Flash.Error(ctx.Tr("repo.settings.org_not_allowed_to_be_collaborator"))
+		ctx.Redirect(setting.AppSubUrl + ctx.Req.URL.Path)
+		return
+	}
+
+	// Check if user is organization member.
+	if ctx.Repo.Owner.IsOrganization() && ctx.Repo.Owner.IsOrgMember(u.Id) {
+		ctx.Flash.Info(ctx.Tr("repo.settings.user_is_org_member"))
+		ctx.Redirect(ctx.Repo.RepoLink + "/settings/collaboration")
+		return
+	}
+
+	if err = ctx.Repo.Repository.AddCollaborator(u); err != nil {
+		ctx.Handle(500, "AddCollaborator", err)
+		return
+	}
+
+	if setting.Service.EnableNotifyMail {
+		if err = mailer.SendCollaboratorMail(ctx.Render, u, ctx.User, ctx.Repo.Repository); err != nil {
+			ctx.Handle(500, "SendCollaboratorMail", err)
+			return
+		}
+	}
+
+	ctx.Flash.Success(ctx.Tr("repo.settings.add_collaborator_success"))
+	ctx.Redirect(setting.AppSubUrl + ctx.Req.URL.Path)
+}
+
 func parseOwnerAndRepo(ctx *middleware.Context) (*models.User, *models.Repository) {
 	owner, err := models.GetUserByName(ctx.Params(":username"))
 	if err != nil {

+ 1 - 1
templates/repo/settings/collaboration.tmpl

@@ -28,7 +28,7 @@
 						<div class="inline field ui left">
 							<div id="search-user-box">
 								<div class="ui input">
-									<input class="prompt" name="collaborator" placeholder="{{.i18n.Tr "repo.settings.search_user_placeholder"}}" autocomplete="off" required>
+									<input class="prompt" name="collaborator" placeholder="{{.i18n.Tr "repo.settings.search_user_placeholder"}}" autocomplete="off" autofocus required>
 								</div>
 								<div class="ui segment results hide"></div>
 							</div>