code.gitea.io/gitea@v1.21.7/routers/web/repo/packages.go (about)

     1  // Copyright 2021 The Gitea Authors. All rights reserved.
     2  // SPDX-License-Identifier: MIT
     3  
     4  package repo
     5  
     6  import (
     7  	"net/http"
     8  
     9  	"code.gitea.io/gitea/models/db"
    10  	"code.gitea.io/gitea/models/packages"
    11  	"code.gitea.io/gitea/models/unit"
    12  	"code.gitea.io/gitea/modules/base"
    13  	"code.gitea.io/gitea/modules/context"
    14  	"code.gitea.io/gitea/modules/setting"
    15  	"code.gitea.io/gitea/modules/util"
    16  )
    17  
    18  const (
    19  	tplPackagesList base.TplName = "repo/packages"
    20  )
    21  
    22  // Packages displays a list of all packages in the repository
    23  func Packages(ctx *context.Context) {
    24  	page := ctx.FormInt("page")
    25  	if page <= 1 {
    26  		page = 1
    27  	}
    28  	query := ctx.FormTrim("q")
    29  	packageType := ctx.FormTrim("type")
    30  
    31  	pvs, total, err := packages.SearchLatestVersions(ctx, &packages.PackageSearchOptions{
    32  		Paginator: &db.ListOptions{
    33  			PageSize: setting.UI.PackagesPagingNum,
    34  			Page:     page,
    35  		},
    36  		OwnerID:    ctx.ContextUser.ID,
    37  		RepoID:     ctx.Repo.Repository.ID,
    38  		Type:       packages.Type(packageType),
    39  		Name:       packages.SearchValue{Value: query},
    40  		IsInternal: util.OptionalBoolFalse,
    41  	})
    42  	if err != nil {
    43  		ctx.ServerError("SearchLatestVersions", err)
    44  		return
    45  	}
    46  
    47  	pds, err := packages.GetPackageDescriptors(ctx, pvs)
    48  	if err != nil {
    49  		ctx.ServerError("GetPackageDescriptors", err)
    50  		return
    51  	}
    52  
    53  	hasPackages, err := packages.HasRepositoryPackages(ctx, ctx.Repo.Repository.ID)
    54  	if err != nil {
    55  		ctx.ServerError("HasRepositoryPackages", err)
    56  		return
    57  	}
    58  
    59  	ctx.Data["Title"] = ctx.Tr("packages.title")
    60  	ctx.Data["IsPackagesPage"] = true
    61  	ctx.Data["Query"] = query
    62  	ctx.Data["PackageType"] = packageType
    63  	ctx.Data["AvailableTypes"] = packages.TypeList
    64  	ctx.Data["HasPackages"] = hasPackages
    65  	if ctx.Repo != nil {
    66  		ctx.Data["CanWritePackages"] = ctx.IsUserRepoWriter([]unit.Type{unit.TypePackages}) || ctx.IsUserSiteAdmin()
    67  	}
    68  	ctx.Data["PackageDescriptors"] = pds
    69  	ctx.Data["Total"] = total
    70  	ctx.Data["RepositoryAccessMap"] = map[int64]bool{ctx.Repo.Repository.ID: true} // There is only the current repository
    71  
    72  	pager := context.NewPagination(int(total), setting.UI.PackagesPagingNum, page, 5)
    73  	pager.AddParam(ctx, "q", "Query")
    74  	pager.AddParam(ctx, "type", "PackageType")
    75  	ctx.Data["Page"] = pager
    76  
    77  	ctx.HTML(http.StatusOK, tplPackagesList)
    78  }