diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go index e718355f8349f..38ef30b7caea3 100644 --- a/models/migrations/migrations.go +++ b/models/migrations/migrations.go @@ -414,7 +414,7 @@ var migrations = []Migration{ // v222 -> v223 NewMigration("Drop old CredentialID column", v1_17.DropOldCredentialIDColumn), // v223 -> v224 - NewMigration("Rename CredentialIDBytes column to CredentialID", v1_17.RenameCredentialIDBytes), + NewMigration("Rename CredentialIDBytes column to CredentialID", renameCredentialIDBytes), // Gitea 1.17.0 ends at v224 @@ -442,6 +442,8 @@ var migrations = []Migration{ NewMigration("Add package cleanup rule table", v1_19.CreatePackageCleanupRuleTable), // v235 -> v236 NewMigration("Add index for access_token", v1_19.AddIndexForAccessToken), + + NewMigration("Add container repository property", addDescriptionAndReadmeColsForPackage), } // GetCurrentDBVersion returns the current db version diff --git a/models/migrations/v224.go b/models/migrations/v224.go new file mode 100644 index 0000000000000..9e5a653f16b8f --- /dev/null +++ b/models/migrations/v224.go @@ -0,0 +1,18 @@ +// 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 addDescriptionAndReadmeColsForPackage(x *xorm.Engine) error { + type Package struct { + Description string `xorm:"TEXT"` + Readme string `xorm:"LONGBLOB"` + } + + return x.Sync(new(Package)) +} diff --git a/models/packages/package.go b/models/packages/package.go index 5c4837d98b0c8..8891db17ccf10 100644 --- a/models/packages/package.go +++ b/models/packages/package.go @@ -130,6 +130,8 @@ type Package struct { Name string `xorm:"NOT NULL"` LowerName string `xorm:"UNIQUE(s) INDEX NOT NULL"` SemverCompatible bool `xorm:"NOT NULL DEFAULT false"` + Description string `xorm:"VARCHAR(255)"` + Readme string `xorm:"LONGBLOB"` } // TryInsertPackage inserts a package. If a package exists already, ErrDuplicatePackage is returned @@ -167,6 +169,15 @@ func SetRepositoryLink(ctx context.Context, packageID, repoID int64) error { return err } +// SetDescriptions sets descriptions +func SetDescriptions(ctx context.Context, packageID int64, description, readme string) error { + _, err := db.GetEngine(ctx).ID(packageID).Update(&Package{ + Description: description, + Readme: readme, + }) + return err +} + // UnlinkRepositoryFromAllPackages unlinks every package from the repository func UnlinkRepositoryFromAllPackages(ctx context.Context, repoID int64) error { _, err := db.GetEngine(ctx).Where("repo_id = ?", repoID).Cols("repo_id").Update(&Package{}) diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index 70f982b8dcc59..519460db611a6 100644 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -3192,6 +3192,13 @@ settings.delete.description = Deleting a package is permanent and cannot be undo settings.delete.notice = You are about to delete %s (%s). This operation is irreversible, are you sure? settings.delete.success = The package has been deleted. settings.delete.error = Failed to delete the package. +settings.descriptions.success = Descriptions were successfully updated +settings.descriptions.error = Failed to update descriptions +settings.descriptions = Descriptions +settings.description.description = Description +settings.readme.description = Readme +settings.descriptions.button = Update descriptions +readme = Readme owner.settings.cleanuprules.title = Manage Cleanup Rules owner.settings.cleanuprules.add = Add Cleanup Rule owner.settings.cleanuprules.edit = Edit Cleanup Rule diff --git a/options/locale/locale_fr-FR.ini b/options/locale/locale_fr-FR.ini index c5c140404a5c6..ddce6e53c4b79 100644 --- a/options/locale/locale_fr-FR.ini +++ b/options/locale/locale_fr-FR.ini @@ -2824,7 +2824,13 @@ error.unit_not_allowed=Vous n'êtes pas autorisé à accéder à cette section d [packages] empty.repo=Avez-vous téléchargé un paquet, mais il n'est pas affiché ici? Allez dans les paramètres du paquet et liez le à ce dépôt. +settings.descriptions.success = Les descriptifs ont été mises à jour +settings.descriptions.error = Échec de la mise à jour des descriptifs +settings.descriptions = Descriptifs +settings.description.description = Description +settings.readme.description = Readme +settings.descriptions.button = Mettre à jour les descriptifs +readme = Readme published_by_in=%[1]s publié par %[3]s en %[5]s rubygems.required.ruby=Nécessite la version de Ruby rubygems.required.rubygems=Nécessite la version de RubyGem - diff --git a/routers/web/user/package.go b/routers/web/user/package.go index 3782f46b42420..13bf9225071d0 100644 --- a/routers/web/user/package.go +++ b/routers/web/user/package.go @@ -363,6 +363,19 @@ func PackageSettingsPost(ctx *context.Context) { ctx.Flash.Error(ctx.Tr("packages.settings.link.error")) } + ctx.Redirect(ctx.Link) + return + case "update": + description := form.Description + readme := form.Readme + + if err := packages_model.SetDescriptions(ctx, pd.Package.ID, description, readme); err != nil { + log.Error("Error updating package: %v", err) + ctx.Flash.Error(ctx.Tr("packages.settings.descriptions.error")) + } else { + ctx.Flash.Success(ctx.Tr("packages.settings.descriptions.success")) + } + ctx.Redirect(ctx.Link) return case "delete": diff --git a/routers/web/web.go b/routers/web/web.go index 889a89f0d4ae4..52b4f59b8f23e 100644 --- a/routers/web/web.go +++ b/routers/web/web.go @@ -821,6 +821,7 @@ func RegisterRoutes(m *web.Route) { m.Group("/{type}/{name}", func() { m.Get("", user.RedirectToLastVersion) m.Get("/versions", user.ListPackageVersions) + m.Post("/markdown", bindIgnErr(structs.MarkdownOption{}), misc.Markdown) m.Group("/{version}", func() { m.Get("", user.ViewPackageVersion) m.Get("/files/{fileid}", user.DownloadPackageFile) diff --git a/services/forms/user_form.go b/services/forms/user_form.go index cd2c45261b90e..2675815224f54 100644 --- a/services/forms/user_form.go +++ b/services/forms/user_form.go @@ -433,8 +433,10 @@ func (f *WebauthnDeleteForm) Validate(req *http.Request, errs binding.Errors) bi // PackageSettingForm form for package settings type PackageSettingForm struct { - Action string - RepoID int64 `form:"repo_id"` + Action string + RepoID int64 `form:"repo_id"` + Description string `form:"description"` + Readme string `form:"readme"` } // Validate validates the fields diff --git a/templates/package/content/composer.tmpl b/templates/package/content/composer.tmpl index 8cc18f8ba8fb7..3900885493a80 100644 --- a/templates/package/content/composer.tmpl +++ b/templates/package/content/composer.tmpl @@ -22,6 +22,8 @@ + {{template "package/content/readme" .}} + {{if .PackageDescriptor.Metadata.Description}}
{{- .Package.Description -}}
+ {{end}} + {{$timeStr := TimeSinceUnix .Version.CreatedUnix $.locale}} {{$hasRepositoryAccess := false}} {{if .Repository}} diff --git a/templates/package/view.tmpl b/templates/package/view.tmpl index a5b2a2ef68a39..9e8c2aab35bc4 100644 --- a/templates/package/view.tmpl +++ b/templates/package/view.tmpl @@ -7,6 +7,12 @@+ {{if .PackageDescriptor.Package.Description}} + {{- .PackageDescriptor.Package.Description -}} + {{end}} +