Skip to content

Commit

Permalink
Add badge capabilities to users (#20607)
Browse files Browse the repository at this point in the history
Co-authored-by: silverwind <me@silverwind.io>
Co-authored-by: zeripath <art27@cantab.net>
Co-authored-by: John Olheiser <john.olheiser@gmail.com>
  • Loading branch information
4 people authored Aug 17, 2022

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
1 parent 208b4ee commit d8e6c99
Showing 8 changed files with 105 additions and 0 deletions.
4 changes: 4 additions & 0 deletions .golangci.yml
Original file line number Diff line number Diff line change
@@ -171,3 +171,7 @@ issues:
- path: models/user/openid.go
linters:
- golint
- path: models/user/badge.go
linters:
- revive
text: "exported: type name will be used as user.UserBadge by other packages, and that stutters; consider calling this Badge"
3 changes: 3 additions & 0 deletions models/migrations/migrations.go
Original file line number Diff line number Diff line change
@@ -406,6 +406,9 @@ var migrations = []Migration{
NewMigration("Drop old CredentialID column", dropOldCredentialIDColumn),
// v223 -> v224
NewMigration("Rename CredentialIDBytes column to CredentialID", renameCredentialIDBytes),

// v999
NewMigration("Add badges to users", creatUserBadgesTable),
}

// GetCurrentDBVersion returns the current db version
28 changes: 28 additions & 0 deletions models/migrations/v999.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
// Copyright 2022 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.

package migrations

import (
"xorm.io/xorm"
)

func creatUserBadgesTable(x *xorm.Engine) error {
type Badge struct {
ID int64 `xorm:"pk autoincr"`
Description string
ImageURL string
}

type userBadge struct {
ID int64 `xorm:"pk autoincr"`
BadgeID int64
UserID int64 `xorm:"INDEX"`
}

if err := x.Sync2(new(Badge)); err != nil {
return err
}
return x.Sync2(new(userBadge))
}
1 change: 1 addition & 0 deletions models/user.go
Original file line number Diff line number Diff line change
@@ -85,6 +85,7 @@ func DeleteUser(ctx context.Context, u *user_model.User, purge bool) (err error)
&organization.TeamUser{UID: u.ID},
&issues_model.Stopwatch{UserID: u.ID},
&user_model.Setting{UserID: u.ID},
&user_model.UserBadge{UserID: u.ID},
&pull_model.AutoMerge{DoerID: u.ID},
&pull_model.ReviewState{UserID: u.ID},
); err != nil {
42 changes: 42 additions & 0 deletions models/user/badge.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
// Copyright 2022 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.

package user

import (
"context"

"code.gitea.io/gitea/models/db"
)

// Badge represents a user badge
type Badge struct {
ID int64 `xorm:"pk autoincr"`
Description string
ImageURL string
}

// UserBadge represents a user badge
type UserBadge struct {
ID int64 `xorm:"pk autoincr"`
BadgeID int64
UserID int64 `xorm:"INDEX"`
}

func init() {
db.RegisterModel(new(Badge))
db.RegisterModel(new(UserBadge))
}

// GetUserBadges returns the user's badges.
func GetUserBadges(ctx context.Context, u *User) ([]*Badge, int64, error) {
sess := db.GetEngine(ctx).
Select("`badge`.*").
Join("INNER", "user_badge", "`user_badge`.badge_id=badge.id").
Where("user_badge.user_id=?", u.ID)

badges := make([]*Badge, 0, 8)
count, err := sess.FindAndCount(&badges)
return badges, count, err
}
7 changes: 7 additions & 0 deletions routers/web/user/profile.go
Original file line number Diff line number Diff line change
@@ -105,6 +105,13 @@ func Profile(ctx *context.Context) {
ctx.Data["Orgs"] = orgs
ctx.Data["HasOrgsVisible"] = organization.HasOrgsVisible(orgs, ctx.Doer)

badges, _, err := user_model.GetUserBadges(ctx, ctx.ContextUser)
if err != nil {
ctx.ServerError("GetUserBadges", err)
return
}
ctx.Data["Badges"] = badges

tab := ctx.FormString("tab")
ctx.Data["TabName"] = tab

11 changes: 11 additions & 0 deletions templates/user/profile.tmpl
Original file line number Diff line number Diff line change
@@ -69,6 +69,17 @@
</ul>
</li>
{{end}}
{{if .Badges}}
<li>
<ul class="user-badges">
{{range .Badges}}
<li>
<img width="64" height="64" src="{{.ImageURL}}" alt="{{.Description}}" data-content="{{.Description}}" class="tooltip"/>
</li>
{{end}}
</ul>
</li>
{{end}}
{{if and .IsSigned (ne .SignedUserName .Owner.Name)}}
<li class="follow">
{{if $.IsFollowing}}
9 changes: 9 additions & 0 deletions web_src/less/_user.less
Original file line number Diff line number Diff line change
@@ -169,6 +169,15 @@
}
}

.user-badges {
display: grid;
grid-template-columns: repeat(auto-fill, 64px);
gap: 2px;
}

.user-badges img {
object-fit: contain;
}
#notification_div .tab.segment {
overflow-x: auto;
}

0 comments on commit d8e6c99

Please sign in to comment.