From 157a25e645936d4bc199b8897c0f97a481f6eabf Mon Sep 17 00:00:00 2001 From: mohammad Date: Wed, 12 Jul 2023 23:55:26 +0330 Subject: [PATCH 1/6] change update visiblity ux --- options/locale/locale_en-US.ini | 1 + routers/web/repo/setting/setting.go | 41 +++++++++++++++++++ templates/repo/settings/options.tmpl | 60 ++++++++++++++++++++++++++-- 3 files changed, 98 insertions(+), 4 deletions(-) diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index c4c9d32e1d4ac..9a6e4e3a497e8 100644 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -929,6 +929,7 @@ visibility_description = Only the owner or the organization members if they have visibility_helper = Make Repository Private visibility_helper_forced = Your site administrator forces new repositories to be private. visibility_fork_helper = (Changing this will affect all forks.) +visibility.update_error = For making repository private go to danger zone clone_helper = Need help cloning? Visit Help. fork_repo = Fork Repository fork_from = Fork From diff --git a/routers/web/repo/setting/setting.go b/routers/web/repo/setting/setting.go index b33660ffc9cc6..772e87e50c650 100644 --- a/routers/web/repo/setting/setting.go +++ b/routers/web/repo/setting/setting.go @@ -168,6 +168,10 @@ func SettingsPost(ctx *context.Context) { form.Private = repo.BaseRepo.IsPrivate || repo.BaseRepo.Owner.Visibility == structs.VisibleTypePrivate } + if form.Private { + ctx.RenderWithErr(ctx.Tr("repo.visibility.update_error"), tplSettingsOptions, form) + } + visibilityChanged := repo.IsPrivate != form.Private // when ForcePrivate enabled, you could change public repo to private, but only admin users can change private to public if visibilityChanged && setting.Repository.ForcePrivate && !form.Private && !ctx.Doer.IsAdmin { @@ -815,6 +819,43 @@ func SettingsPost(ctx *context.Context) { ctx.Flash.Success(ctx.Tr("repo.settings.wiki_deletion_success")) ctx.Redirect(ctx.Repo.RepoLink + "/settings") + case "make-private": + if ctx.HasError() { + ctx.HTML(http.StatusOK, tplSettingsOptions) + return + } + if !ctx.Repo.IsOwner() { + ctx.Error(http.StatusNotFound) + return + } + if repo.Name != form.RepoName { + ctx.RenderWithErr(ctx.Tr("form.enterred_invalid_repo_name"), tplSettingsOptions, nil) + return + } + + private := true + + if repo.IsFork { + private = repo.BaseRepo.IsPrivate || repo.BaseRepo.Owner.Visibility == structs.VisibleTypePrivate + } + + visibilityChanged := repo.IsPrivate != private + if visibilityChanged && setting.Repository.ForcePrivate && !private && !ctx.Doer.IsAdmin { + ctx.RenderWithErr(ctx.Tr("form.repository_force_private"), tplSettingsOptions, form) + return + } + + repo.IsPrivate = private + if err := repo_service.UpdateRepository(ctx, repo, visibilityChanged); err != nil { + ctx.ServerError("UpdateRepository", err) + return + } + + log.Trace("Repository visibility settings updated: %s/%s", ctx.Repo.Owner.Name, repo.Name) + + ctx.Flash.Success(ctx.Tr("repo.settings.update_settings_success")) + ctx.Redirect(ctx.Repo.RepoLink + "/settings") + case "archive": if !ctx.Repo.IsOwner() { ctx.Error(http.StatusForbidden) diff --git a/templates/repo/settings/options.tmpl b/templates/repo/settings/options.tmpl index ef72c0eadc5f9..56258f0889de9 100644 --- a/templates/repo/settings/options.tmpl +++ b/templates/repo/settings/options.tmpl @@ -26,13 +26,13 @@ {{if not .Repository.IsFork}}
-
+
{{if .IsAdmin}} - + {{else}} - + {{end}} - +
{{end}} @@ -753,6 +753,25 @@
{{end}} + {{if and (not .Repository.IsFork) (not .Repository.IsPrivate)}} +
+ +
+
+ +
+
+
{{.locale.Tr "repo.visibility_helper" | Safe}}
+ {{if and (not .Repository.IsPrivate) (gt .Repository.NumStars 0)}} +

{{.locale.Tr "repo.stars_remove_warning"}}

+ {{end}} + {{if .Repository.NumForks}} +

{{.locale.Tr "repo.visibility_fork_helper"}}

+ {{end}} +
+
+ {{end}} +
@@ -960,6 +979,39 @@
{{end}} + {{if and (not .Repository.IsFork) (not .Repository.IsPrivate)}} + + {{end}} + {{if not .Repository.IsMirror}}