mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 16:01:32 +01:00 
			
		
		
		
	Fix #857
This commit is contained in:
		
							parent
							
								
									acf094fb07
								
							
						
					
					
						commit
						7140dbac95
					
				| @ -398,7 +398,7 @@ func runWeb(ctx *cli.Context) { | |||||||
| 		m.Group("/settings", func() { | 		m.Group("/settings", func() { | ||||||
| 			m.Combo("").Get(repo.Settings). | 			m.Combo("").Get(repo.Settings). | ||||||
| 				Post(bindIgnErr(auth.RepoSettingForm{}), repo.SettingsPost) | 				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.Group("/hooks", func() { | ||||||
| 				m.Get("", repo.Webhooks) | 				m.Get("", repo.Webhooks) | ||||||
|  | |||||||
| @ -612,6 +612,7 @@ settings.add_collaborator = Add New Collaborator | |||||||
| settings.add_collaborator_success = New collaborator has been added. | settings.add_collaborator_success = New collaborator has been added. | ||||||
| settings.remove_collaborator_success = Collaborator has been removed. | settings.remove_collaborator_success = Collaborator has been removed. | ||||||
| settings.search_user_placeholder = Search user... | 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.user_is_org_member = User is organization member who cannot be added as a collaborator. | ||||||
| settings.add_webhook = Add Webhook | 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>. | 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>. | ||||||
|  | |||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| @ -233,48 +233,6 @@ func Collaboration(ctx *middleware.Context) { | |||||||
| 	ctx.Data["Title"] = ctx.Tr("repo.settings") | 	ctx.Data["Title"] = ctx.Tr("repo.settings") | ||||||
| 	ctx.Data["PageIsSettingsCollaboration"] = true | 	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. | 	// Delete collaborator. | ||||||
| 	remove := strings.ToLower(ctx.Query("remove")) | 	remove := strings.ToLower(ctx.Query("remove")) | ||||||
| 	if len(remove) > 0 && remove != ctx.Repo.Owner.LowerName { | 	if len(remove) > 0 && remove != ctx.Repo.Owner.LowerName { | ||||||
| @ -302,6 +260,54 @@ func Collaboration(ctx *middleware.Context) { | |||||||
| 	ctx.HTML(200, COLLABORATION) | 	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) { | func parseOwnerAndRepo(ctx *middleware.Context) (*models.User, *models.Repository) { | ||||||
| 	owner, err := models.GetUserByName(ctx.Params(":username")) | 	owner, err := models.GetUserByName(ctx.Params(":username")) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | |||||||
| @ -28,7 +28,7 @@ | |||||||
| 						<div class="inline field ui left"> | 						<div class="inline field ui left"> | ||||||
| 							<div id="search-user-box"> | 							<div id="search-user-box"> | ||||||
| 								<div class="ui input"> | 								<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> | ||||||
| 								<div class="ui segment results hide"></div> | 								<div class="ui segment results hide"></div> | ||||||
| 							</div> | 							</div> | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user