mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 21:28:11 +09:00 
			
		
		
		
	[Feature] Private README.md for organization (#32872)
Implemented #29503 --------- Co-authored-by: Ben Chang <ben_chang@htc.com> Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
		| @@ -12,6 +12,7 @@ import ( | ||||
| 	"code.gitea.io/gitea/models/organization" | ||||
| 	"code.gitea.io/gitea/models/renderhelper" | ||||
| 	repo_model "code.gitea.io/gitea/models/repo" | ||||
| 	"code.gitea.io/gitea/modules/git" | ||||
| 	"code.gitea.io/gitea/modules/log" | ||||
| 	"code.gitea.io/gitea/modules/markup/markdown" | ||||
| 	"code.gitea.io/gitea/modules/setting" | ||||
| @@ -21,9 +22,7 @@ import ( | ||||
| 	"code.gitea.io/gitea/services/context" | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| 	tplOrgHome templates.TplName = "org/home" | ||||
| ) | ||||
| const tplOrgHome templates.TplName = "org/home" | ||||
|  | ||||
| // Home show organization home page | ||||
| func Home(ctx *context.Context) { | ||||
| @@ -110,15 +109,19 @@ func home(ctx *context.Context, viewRepositories bool) { | ||||
| 	ctx.Data["DisableNewPullMirrors"] = setting.Mirror.DisableNewPull | ||||
| 	ctx.Data["ShowMemberAndTeamTab"] = ctx.Org.IsMember || len(members) > 0 | ||||
|  | ||||
| 	if !prepareOrgProfileReadme(ctx, viewRepositories) { | ||||
| 		ctx.Data["PageIsViewRepositories"] = true | ||||
| 	prepareResult, err := shared_user.PrepareOrgHeader(ctx) | ||||
| 	if err != nil { | ||||
| 		ctx.ServerError("PrepareOrgHeader", err) | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	var ( | ||||
| 		repos []*repo_model.Repository | ||||
| 		count int64 | ||||
| 	) | ||||
| 	repos, count, err = repo_model.SearchRepository(ctx, &repo_model.SearchRepoOptions{ | ||||
| 	// if no profile readme, it still means "view repositories" | ||||
| 	isViewOverview := !viewRepositories && prepareOrgProfileReadme(ctx, prepareResult) | ||||
| 	ctx.Data["PageIsViewRepositories"] = !isViewOverview | ||||
| 	ctx.Data["PageIsViewOverview"] = isViewOverview | ||||
| 	ctx.Data["ShowOrgProfileReadmeSelector"] = isViewOverview && prepareResult.ProfilePublicReadmeBlob != nil && prepareResult.ProfilePrivateReadmeBlob != nil | ||||
|  | ||||
| 	repos, count, err := repo_model.SearchRepository(ctx, &repo_model.SearchRepoOptions{ | ||||
| 		ListOptions: db.ListOptions{ | ||||
| 			PageSize: setting.UI.User.RepoPagingNum, | ||||
| 			Page:     page, | ||||
| @@ -151,28 +154,45 @@ func home(ctx *context.Context, viewRepositories bool) { | ||||
| 	ctx.HTML(http.StatusOK, tplOrgHome) | ||||
| } | ||||
|  | ||||
| func prepareOrgProfileReadme(ctx *context.Context, viewRepositories bool) bool { | ||||
| 	profileDbRepo, profileGitRepo, profileReadme, profileClose := shared_user.FindUserProfileReadme(ctx, ctx.Doer) | ||||
| 	defer profileClose() | ||||
| 	ctx.Data["HasProfileReadme"] = profileReadme != nil | ||||
| func prepareOrgProfileReadme(ctx *context.Context, prepareResult *shared_user.PrepareOrgHeaderResult) bool { | ||||
| 	viewAs := ctx.FormString("view_as", util.Iif(ctx.Org.IsMember, "member", "public")) | ||||
| 	viewAsMember := viewAs == "member" | ||||
|  | ||||
| 	if profileGitRepo == nil || profileReadme == nil || viewRepositories { | ||||
| 	var profileRepo *repo_model.Repository | ||||
| 	var readmeBlob *git.Blob | ||||
| 	if viewAsMember { | ||||
| 		if prepareResult.ProfilePrivateReadmeBlob != nil { | ||||
| 			profileRepo, readmeBlob = prepareResult.ProfilePrivateRepo, prepareResult.ProfilePrivateReadmeBlob | ||||
| 		} else { | ||||
| 			profileRepo, readmeBlob = prepareResult.ProfilePublicRepo, prepareResult.ProfilePublicReadmeBlob | ||||
| 			viewAsMember = false | ||||
| 		} | ||||
| 	} else { | ||||
| 		if prepareResult.ProfilePublicReadmeBlob != nil { | ||||
| 			profileRepo, readmeBlob = prepareResult.ProfilePublicRepo, prepareResult.ProfilePublicReadmeBlob | ||||
| 		} else { | ||||
| 			profileRepo, readmeBlob = prepareResult.ProfilePrivateRepo, prepareResult.ProfilePrivateReadmeBlob | ||||
| 			viewAsMember = true | ||||
| 		} | ||||
| 	} | ||||
| 	if readmeBlob == nil { | ||||
| 		return false | ||||
| 	} | ||||
|  | ||||
| 	if bytes, err := profileReadme.GetBlobContent(setting.UI.MaxDisplayFileSize); err != nil { | ||||
| 		log.Error("failed to GetBlobContent: %v", err) | ||||
| 	} else { | ||||
| 		rctx := renderhelper.NewRenderContextRepoFile(ctx, profileDbRepo, renderhelper.RepoFileOptions{ | ||||
| 			CurrentRefPath: path.Join("branch", util.PathEscapeSegments(profileDbRepo.DefaultBranch)), | ||||
| 		}) | ||||
| 		if profileContent, err := markdown.RenderString(rctx, bytes); err != nil { | ||||
| 			log.Error("failed to RenderString: %v", err) | ||||
| 		} else { | ||||
| 			ctx.Data["ProfileReadme"] = profileContent | ||||
| 		} | ||||
| 	readmeBytes, err := readmeBlob.GetBlobContent(setting.UI.MaxDisplayFileSize) | ||||
| 	if err != nil { | ||||
| 		log.Error("failed to GetBlobContent for profile %q (view as %q) readme: %v", profileRepo.FullName(), viewAs, err) | ||||
| 		return false | ||||
| 	} | ||||
|  | ||||
| 	ctx.Data["PageIsViewOverview"] = true | ||||
| 	rctx := renderhelper.NewRenderContextRepoFile(ctx, profileRepo, renderhelper.RepoFileOptions{ | ||||
| 		CurrentRefPath: path.Join("branch", util.PathEscapeSegments(profileRepo.DefaultBranch)), | ||||
| 	}) | ||||
| 	ctx.Data["ProfileReadmeContent"], err = markdown.RenderString(rctx, readmeBytes) | ||||
| 	if err != nil { | ||||
| 		log.Error("failed to GetBlobContent for profile %q (view as %q) readme: %v", profileRepo.FullName(), viewAs, err) | ||||
| 		return false | ||||
| 	} | ||||
| 	ctx.Data["IsViewingOrgAsMember"] = viewAsMember | ||||
| 	return true | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user