88 "net/http"
99 "net/url"
1010 "strconv"
11+ "strings"
1112
1213 "code.gitea.io/gitea/models/db"
1314 user_model "code.gitea.io/gitea/models/user"
@@ -22,10 +23,11 @@ import (
2223)
2324
2425const (
25- tplBadges base.TplName = "admin/badge/list"
26- tplBadgeNew base.TplName = "admin/badge/new"
27- tplBadgeView base.TplName = "admin/badge/view"
28- tplBadgeEdit base.TplName = "admin/badge/edit"
26+ tplBadges base.TplName = "admin/badge/list"
27+ tplBadgeNew base.TplName = "admin/badge/new"
28+ tplBadgeView base.TplName = "admin/badge/view"
29+ tplBadgeEdit base.TplName = "admin/badge/edit"
30+ tplBadgeUsers base.TplName = "admin/badge/users"
2931)
3032
3133// BadgeSearchDefaultAdminSort is the default sort type for admin view
@@ -213,3 +215,67 @@ func DeleteBadge(ctx *context.Context) {
213215 ctx .Flash .Success (ctx .Tr ("admin.badges.deletion_success" ))
214216 ctx .Redirect (setting .AppSubURL + "/admin/badges" )
215217}
218+
219+ func BadgeUsers (ctx * context.Context ) {
220+ ctx .Data ["Title" ] = ctx .Tr ("admin.badges.users_with_badge" , ctx .ParamsInt64 (":badgeid" ))
221+ ctx .Data ["PageIsAdminBadges" ] = true
222+
223+ users , _ , err := user_model .GetBadgeUsers (ctx , & user_model.Badge {ID : ctx .ParamsInt64 (":badgeid" )})
224+ if err != nil {
225+ ctx .ServerError ("GetBadgeUsers" , err )
226+ return
227+ }
228+
229+ ctx .Data ["Users" ] = users
230+
231+ ctx .HTML (http .StatusOK , tplBadgeUsers )
232+ }
233+
234+ // BadgeUsersPost response for actions for user badges
235+ func BadgeUsersPost (ctx * context.Context ) {
236+ name := strings .ToLower (ctx .FormString ("user" ))
237+
238+ u , err := user_model .GetUserByName (ctx , name )
239+ if err != nil {
240+ if user_model .IsErrUserNotExist (err ) {
241+ ctx .Flash .Error (ctx .Tr ("form.user_not_exist" ))
242+ ctx .Redirect (setting .AppSubURL + ctx .Req .URL .EscapedPath ())
243+ } else {
244+ ctx .ServerError ("GetUserByName" , err )
245+ }
246+ return
247+ }
248+
249+ if err = user_model .AddUserBadge (ctx , u , & user_model.Badge {ID : ctx .ParamsInt64 (":badgeid" )}); err != nil {
250+ if user_model .IsErrBadgeNotExist (err ) {
251+ ctx .Flash .Error (ctx .Tr ("admin.badges.not_found" ))
252+ } else {
253+ ctx .ServerError ("AddUserBadge" , err )
254+ }
255+ return
256+ }
257+
258+ ctx .Flash .Success (ctx .Tr ("admin.badges.user_add_success" ))
259+ ctx .Redirect (setting .AppSubURL + ctx .Req .URL .EscapedPath ())
260+ }
261+
262+ // DeleteBadgeUser delete a badge from a user
263+ func DeleteBadgeUser (ctx * context.Context ) {
264+ if user , err := user_model .GetUserByID (ctx , ctx .FormInt64 ("id" )); err != nil {
265+ if user_model .IsErrUserNotExist (err ) {
266+ ctx .Flash .Error (ctx .Tr ("form.user_not_exist" ))
267+ } else {
268+ ctx .ServerError ("GetUserByName" , err )
269+ return
270+ }
271+ } else {
272+ if err := user_model .RemoveUserBadge (ctx , user , & user_model.Badge {ID : ctx .ParamsInt64 (":badgeid" )}); err == nil {
273+ ctx .Flash .Success (ctx .Tr ("admin.badges.user_remove_success" ))
274+ } else {
275+ ctx .Flash .Error ("DeleteUser: " + err .Error ())
276+ return
277+ }
278+ }
279+
280+ ctx .JSONRedirect (setting .AppSubURL + "/admin/badges/" + ctx .Params (":badgeid" ) + "/users" )
281+ }
0 commit comments