diff --git a/models/group/group.go b/models/group/group.go index 9e379f0cfe..86251fed8c 100644 --- a/models/group/group.go +++ b/models/group/group.go @@ -198,7 +198,7 @@ func (g *Group) Depth(ctx context.Context) (d int) { d++ pg = pg.ParentGroup } - return + return d } // DisplayLeftMargin generates a value for the left margin diff --git a/models/shared/group/group_item.go b/models/shared/group/group_item.go index 61fae9c67d..28d7172e89 100644 --- a/models/shared/group/group_item.go +++ b/models/shared/group/group_item.go @@ -1,26 +1,27 @@ package group import ( - "code.gitea.io/gitea/models/perm" "context" "slices" "code.gitea.io/gitea/models/db" group_model "code.gitea.io/gitea/models/group" + "code.gitea.io/gitea/models/perm" repo_model "code.gitea.io/gitea/models/repo" "code.gitea.io/gitea/models/unit" user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/log" + "xorm.io/builder" ) -// GroupItem - represents an item in a group, either a repository or a subgroup. +// Item - represents an item in a group, either a repository or a subgroup. // used to display, for example, the group sidebar -type GroupItem interface { +type Item interface { Link() string Title() string - Parent() GroupItem - Children(doer *user_model.User) []GroupItem + Parent() Item + Children(doer *user_model.User) []Item Avatar(ctx context.Context) string HasChildren(doer *user_model.User) bool IsGroup() bool @@ -40,7 +41,7 @@ func (g *groupItemGroup) Title() string { return g.Group.Name } -func (g *groupItemGroup) Parent() GroupItem { +func (g *groupItemGroup) Parent() Item { if g.Group.ParentGroupID == 0 { return nil } @@ -48,7 +49,7 @@ func (g *groupItemGroup) Parent() GroupItem { return &groupItemGroup{group} } -func (g *groupItemGroup) Children(doer *user_model.User) (items []GroupItem) { +func (g *groupItemGroup) Children(doer *user_model.User) (items []Item) { repos := make([]*repo_model.Repository, 0) sess := db.GetEngine(db.DefaultContext) err := sess.Table("repository"). @@ -57,11 +58,11 @@ func (g *groupItemGroup) Children(doer *user_model.User) (items []GroupItem) { Find(&repos) if err != nil { log.Error("%w", err) - return make([]GroupItem, 0) + return make([]Item, 0) } err = g.Group.LoadAccessibleSubgroups(db.DefaultContext, false, doer) if err != nil { - return make([]GroupItem, 0) + return make([]Item, 0) } slices.SortStableFunc(g.Group.Subgroups, func(a, b *group_model.Group) int { return a.SortOrder - b.SortOrder @@ -97,7 +98,9 @@ func (g *groupItemGroup) ID() int64 { func (g *groupItemGroup) Sort() int { return g.Group.SortOrder } -func GetTopLevelGroupItemList(ctx context.Context, orgID int64, doer *user_model.User) (rootItems []GroupItem) { + +func GetTopLevelGroupItemList(ctx context.Context, orgID int64, doer *user_model.User) []Item { + var rootItems []Item groups, err := group_model.FindGroupsByCond(ctx, &group_model.FindGroupsOptions{ ParentGroupID: 0, ActorID: doer.ID, @@ -105,7 +108,7 @@ func GetTopLevelGroupItemList(ctx context.Context, orgID int64, doer *user_model }, group_model. AccessibleGroupCondition(doer, unit.TypeInvalid, perm.AccessModeRead)) if err != nil { - return + return nil } repos := make([]*repo_model.Repository, 0) cond := builder.NewCond(). @@ -115,7 +118,7 @@ func GetTopLevelGroupItemList(ctx context.Context, orgID int64, doer *user_model sess := db.GetEngine(ctx) err = sess.Table("repository").Where(cond).Find(&repos) if err != nil { - return + return nil } slices.SortStableFunc(groups, func(a, b *group_model.Group) int { return a.SortOrder - b.SortOrder @@ -129,12 +132,12 @@ func GetTopLevelGroupItemList(ctx context.Context, orgID int64, doer *user_model for _, r := range repos { rootItems = append(rootItems, &groupItemRepo{r}) } - return + return rootItems } -func GroupItemHasChild(it GroupItem, other int64, ctx context.Context, doer *user_model.User) bool { +func ItemHasChild(ctx context.Context, it Item, other int64, doer *user_model.User) bool { for _, item := range it.Children(doer) { - if GroupItemHasChild(item, other, ctx, doer) { + if ItemHasChild(ctx, item, other, doer) { return true } } diff --git a/models/shared/group/repo_item.go b/models/shared/group/repo_item.go index ff67fca52f..4a06b3a376 100644 --- a/models/shared/group/repo_item.go +++ b/models/shared/group/repo_item.go @@ -1,11 +1,12 @@ package group import ( + "context" + "code.gitea.io/gitea/models/db" group_model "code.gitea.io/gitea/models/group" repo_model "code.gitea.io/gitea/models/repo" user_model "code.gitea.io/gitea/models/user" - "context" ) type groupItemRepo struct { @@ -20,7 +21,7 @@ func (repo *groupItemRepo) Title() string { return repo.Repo.Name } -func (repo *groupItemRepo) Parent() GroupItem { +func (repo *groupItemRepo) Parent() Item { if repo.Repo.GroupID == 0 { return nil } @@ -28,8 +29,8 @@ func (repo *groupItemRepo) Parent() GroupItem { return &groupItemGroup{group} } -func (repo *groupItemRepo) Children(doer *user_model.User) []GroupItem { - return []GroupItem{} +func (repo *groupItemRepo) Children(doer *user_model.User) []Item { + return []Item{} } func (repo *groupItemRepo) Avatar(ctx context.Context) string { diff --git a/package.json b/package.json index 10195ae468..2147dcde8b 100644 --- a/package.json +++ b/package.json @@ -90,6 +90,8 @@ "@types/js-yaml": "4.0.9", "@types/katex": "0.16.8", "@types/node": "25.5.0", + "@types/license-checker-webpack-plugin": "0.2.5", + "@types/object-hash": "3.0.6", "@types/pdfobject": "2.2.5", "@types/sortablejs": "1.15.9", "@types/swagger-ui-dist": "3.30.6", diff --git a/routers/web/group/home.go b/routers/web/group/home.go index feb6ccb9ff..e908828847 100644 --- a/routers/web/group/home.go +++ b/routers/web/group/home.go @@ -1,6 +1,8 @@ package group import ( + "net/http" + "code.gitea.io/gitea/models/db" "code.gitea.io/gitea/models/organization" repo_model "code.gitea.io/gitea/models/repo" @@ -8,7 +10,6 @@ import ( "code.gitea.io/gitea/modules/setting" shared_group "code.gitea.io/gitea/routers/web/shared/group" "code.gitea.io/gitea/services/context" - "net/http" ) const ( diff --git a/routers/web/group/new.go b/routers/web/group/new.go index 34bb8fbe29..7b47bfc927 100644 --- a/routers/web/group/new.go +++ b/routers/web/group/new.go @@ -1,11 +1,11 @@ package group import ( - "code.gitea.io/gitea/models/perm" "net/http" "code.gitea.io/gitea/models/db" group_model "code.gitea.io/gitea/models/group" + "code.gitea.io/gitea/models/perm" unit_model "code.gitea.io/gitea/models/unit" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/optional" @@ -59,6 +59,7 @@ func NewGroup(ctx *context.Context) { ctx.Data["Groups"] = groups ctx.HTML(http.StatusOK, tplGroupNew) } + func NewGroupPost(ctx *context.Context) { form := web.GetForm(ctx).(*forms.CreateGroupForm) log.GetLogger(log.DEFAULT).Info("what? %+v", form) diff --git a/routers/web/group/search.go b/routers/web/group/search.go index 783e4d497c..ef160eb2e0 100644 --- a/routers/web/group/search.go +++ b/routers/web/group/search.go @@ -14,9 +14,9 @@ import ( group_service "code.gitea.io/gitea/services/group" ) -func toSearchRepoOptions(ctx *context.Context) (opts *repo_model.SearchRepoOptions) { +func toSearchRepoOptions(ctx *context.Context) *repo_model.SearchRepoOptions { page := ctx.FormInt("page") - opts = &repo_model.SearchRepoOptions{ + opts := &repo_model.SearchRepoOptions{ ListOptions: db.ListOptions{ Page: page, PageSize: convert.ToCorrectPageSize(ctx.FormInt("limit")), @@ -91,7 +91,7 @@ func toSearchRepoOptions(ctx *context.Context) (opts *repo_model.SearchRepoOptio return nil } } - return + return opts } func SearchGroup(ctx *context.Context) { @@ -99,8 +99,8 @@ func SearchGroup(ctx *context.Context) { var ( group *group_model.Group err error - canSee bool = true - oid int64 = ctx.FormInt64("uid") + canSee = true + oid = ctx.FormInt64("uid") ) if gid > 0 { group, err = group_model.GetGroupByID(ctx, gid) diff --git a/routers/web/group/setting.go b/routers/web/group/setting.go index d80f61a1d4..e769754401 100644 --- a/routers/web/group/setting.go +++ b/routers/web/group/setting.go @@ -1,6 +1,11 @@ package group import ( + "errors" + "fmt" + "io" + "net/http" + group_model "code.gitea.io/gitea/models/group" repo_model "code.gitea.io/gitea/models/repo" "code.gitea.io/gitea/modules/log" @@ -15,10 +20,6 @@ import ( group_service "code.gitea.io/gitea/services/group" repo_service "code.gitea.io/gitea/services/repository" user_service "code.gitea.io/gitea/services/user" - "errors" - "fmt" - "io" - "net/http" ) const ( diff --git a/routers/web/group/team.go b/routers/web/group/team.go index 415933830f..80478470e5 100644 --- a/routers/web/group/team.go +++ b/routers/web/group/team.go @@ -1,6 +1,9 @@ package group import ( + "net/http" + "strings" + "code.gitea.io/gitea/models/db" group_model "code.gitea.io/gitea/models/group" org_model "code.gitea.io/gitea/models/organization" @@ -14,8 +17,6 @@ import ( "code.gitea.io/gitea/services/convert" "code.gitea.io/gitea/services/forms" group_service "code.gitea.io/gitea/services/group" - "net/http" - "strings" ) const ( diff --git a/routers/web/web.go b/routers/web/web.go index 36cf7f5200..1859ed369f 100644 --- a/routers/web/web.go +++ b/routers/web/web.go @@ -4,7 +4,6 @@ package web import ( - "code.gitea.io/gitea/routers/web/group" "net/http" "strings" @@ -31,6 +30,7 @@ import ( "code.gitea.io/gitea/routers/web/events" "code.gitea.io/gitea/routers/web/explore" "code.gitea.io/gitea/routers/web/feed" + "code.gitea.io/gitea/routers/web/group" "code.gitea.io/gitea/routers/web/healthcheck" "code.gitea.io/gitea/routers/web/misc" "code.gitea.io/gitea/routers/web/org" diff --git a/services/context/group.go b/services/context/group.go index 2213637df7..027417257c 100644 --- a/services/context/group.go +++ b/services/context/group.go @@ -4,6 +4,9 @@ package context import ( + "context" + "strings" + group_model "code.gitea.io/gitea/models/group" "code.gitea.io/gitea/models/organization" "code.gitea.io/gitea/models/perm" @@ -15,8 +18,6 @@ import ( "code.gitea.io/gitea/modules/markup/markdown" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/structs" - "context" - "strings" ) type RepoGroup struct { @@ -39,6 +40,7 @@ func (g *RepoGroup) CanWriteUnit(ctx *Context, unitType unit.Type) bool { func (g *RepoGroup) CanReadUnit(ctx *Context, unitType unit.Type) bool { return g.UnitPermission(ctx, ctx.Doer, unitType) >= perm.AccessModeRead } + func (g *RepoGroup) UnitPermission(ctx context.Context, doer *user_model.User, unitType unit.Type) perm.AccessMode { if doer != nil { teams, err := organization.GetUserGroupTeams(ctx, g.Group.ID, doer.ID) @@ -198,7 +200,7 @@ func GroupAssignment(args GroupAssignmentOptions) func(ctx *Context) { if len(teamName) > 0 { teamExists := false for _, team := range ctx.RepoGroup.Teams { - if team.LowerName == strings.ToLower(teamName) { + if strings.EqualFold(team.LowerName, strings.ToLower(teamName)) { teamExists = true var groupTeam *group_model.RepoGroupTeam groupTeam, err = group_model.FindGroupTeamByTeamID(ctx, group.ID, team.ID) diff --git a/services/context/org.go b/services/context/org.go index cdd2624352..19efaa7804 100644 --- a/services/context/org.go +++ b/services/context/org.go @@ -5,11 +5,11 @@ package context import ( - shared_group "code.gitea.io/gitea/models/shared/group" "strings" "code.gitea.io/gitea/models/organization" "code.gitea.io/gitea/models/perm" + shared_group "code.gitea.io/gitea/models/shared/group" "code.gitea.io/gitea/models/unit" user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/markup" @@ -254,19 +254,19 @@ func OrgAssignment(orgAssignmentOpts OrgAssignmentOptions) func(ctx *Context) { } ctx.Data["RenderedDescription"] = content } - ctx.Data["AsGroupItem"] = func(v any) shared_group.GroupItem { - if gi, ok := v.(shared_group.GroupItem); ok { + ctx.Data["AsGroupItem"] = func(v any) shared_group.Item { + if gi, ok := v.(shared_group.Item); ok { return gi } return nil } ctx.Data["GroupNavItems"] = shared_group.GetTopLevelGroupItemList(ctx, ctx.ContextUser.ID, ctx.Doer) ctx.Data["GroupIsCurrent"] = groupIsCurrent(ctx) - ctx.Data["GroupHasChild"] = func(it shared_group.GroupItem) bool { + ctx.Data["GroupHasChild"] = func(it shared_group.Item) bool { if ctx.RepoGroup == nil || ctx.RepoGroup.Group == nil { return false } - return shared_group.GroupItemHasChild(it, ctx.RepoGroup.Group.ID, ctx, ctx.Doer) + return shared_group.ItemHasChild(ctx, it, ctx.RepoGroup.Group.ID, ctx.Doer) } } } diff --git a/templates/group/create.tmpl b/templates/group/create.tmpl index bd00cfebbb..03e0236aee 100644 --- a/templates/group/create.tmpl +++ b/templates/group/create.tmpl @@ -14,7 +14,7 @@ {{ctx.Locale.Tr "group.group_name_helper"}} - {{ template "group/selector" . }} + {{template "group/selector" .}}