From 0b12abcfb563f797a93125b8f31ab99986c07bf2 Mon Sep 17 00:00:00 2001
From: 6543 <6543@obermui.de>
Date: Sun, 31 Jul 2022 14:32:51 +0200
Subject: [PATCH] Add missing Tabs on organisation/package view (Frontport
 #20539) (#20540)

hotfix #20106
---
 routers/web/user/package.go         | 16 ++++++++++
 templates/user/overview/header.tmpl | 48 ++++++++++++++++++++++++-----
 2 files changed, 57 insertions(+), 7 deletions(-)

diff --git a/routers/web/user/package.go b/routers/web/user/package.go
index aa379152b3..59aaf07ff2 100644
--- a/routers/web/user/package.go
+++ b/routers/web/user/package.go
@@ -8,6 +8,7 @@ import (
 	"net/http"
 
 	"code.gitea.io/gitea/models/db"
+	org_model "code.gitea.io/gitea/models/organization"
 	packages_model "code.gitea.io/gitea/models/packages"
 	container_model "code.gitea.io/gitea/models/packages/container"
 	"code.gitea.io/gitea/models/perm"
@@ -93,6 +94,21 @@ func ListPackages(ctx *context.Context) {
 	ctx.Data["Total"] = total
 	ctx.Data["RepositoryAccessMap"] = repositoryAccessMap
 
+	// TODO: context/org -> HandleOrgAssignment() can not be used
+	if ctx.ContextUser.IsOrganization() {
+		org := org_model.OrgFromUser(ctx.ContextUser)
+		ctx.Data["Org"] = org
+		ctx.Data["OrgLink"] = ctx.ContextUser.OrganisationLink()
+
+		if ctx.Doer != nil {
+			ctx.Data["IsOrganizationMember"], _ = org_model.IsOrganizationMember(ctx, org.ID, ctx.Doer.ID)
+			ctx.Data["IsOrganizationOwner"], _ = org_model.IsOrganizationOwner(ctx, org.ID, ctx.Doer.ID)
+		} else {
+			ctx.Data["IsOrganizationMember"] = false
+			ctx.Data["IsOrganizationOwner"] = false
+		}
+	}
+
 	pager := context.NewPagination(int(total), setting.UI.PackagesPagingNum, page, 5)
 	pager.AddParam(ctx, "q", "Query")
 	pager.AddParam(ctx, "type", "PackageType")
diff --git a/templates/user/overview/header.tmpl b/templates/user/overview/header.tmpl
index 8f9ad1d6cc..edd4375e08 100644
--- a/templates/user/overview/header.tmpl
+++ b/templates/user/overview/header.tmpl
@@ -1,14 +1,22 @@
 <div class="header-wrapper">
-	<div class="ui container">
-		<div class="repo-header">
-			<div class="repo-title-wrap df fc">
-				<div class="repo-title">
-					{{avatar .ContextUser 32}}
-					<a href="{{.ContextUser.HTMLURL}}">{{.ContextUser.Name}}</a>
+	<!-- TODO: make template org and user can share -->
+	{{with .ContextUser}}
+		<div class="ui container">
+			<div class="ui vertically grid head">
+				<div class="column">
+					<div class="ui header">
+						{{avatar . 100}}
+						<span class="text thin grey"><a href="{{.HomeLink}}">{{.DisplayName}}</a></span>
+						<span class="org-visibility">
+							{{if .Visibility.IsLimited}}<div class="ui medium orange horizontal label">{{$.locale.Tr "org.settings.visibility.limited_shortname"}}</div>{{end}}
+							{{if .Visibility.IsPrivate}}<div class="ui medium red horizontal label">{{$.locale.Tr "org.settings.visibility.private_shortname"}}</div>{{end}}
+						</span>
+					</div>
 				</div>
 			</div>
 		</div>
-	</div>
+	{{end}}
+
 	<div class="ui tabs container">
 		<div class="ui tabular stackable menu navbar">
 			<a class="item" href="{{.ContextUser.HomeLink}}">
@@ -19,6 +27,32 @@
 					{{svg "octicon-package"}} {{.locale.Tr "packages.title"}}
 				</a>
 			{{end}}
+
+			{{if .ContextUser.IsOrganization}}
+				{{if .IsOrganizationMember}}
+					<a class="item" href="{{$.OrgLink}}/members">
+						{{svg "octicon-organization"}}&nbsp;{{$.locale.Tr "org.people"}}
+						{{if .NumMembers}}
+							<div class="ui primary label">{{.NumMembers}}</div>
+						{{end}}
+					</a>
+					<a class="item" href="{{$.OrgLink}}/teams">
+						{{svg "octicon-people"}}&nbsp;{{$.locale.Tr "org.teams"}}
+						{{if .NumTeams}}
+							<div class="ui black label">{{.NumTeams}}</div>
+						{{end}}
+					</a>
+				{{end}}
+
+				{{if .IsOrganizationOwner}}
+					<div class="right menu">
+						<a class="item" href="{{.OrgLink}}/settings">
+						{{svg "octicon-tools"}} {{.locale.Tr "repo.settings"}}
+						</a>
+					</div>
+				{{end}}
+			{{end}}
+
 		</div>
 	</div>
 	<div class="ui tabs divider"></div>