aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--modules/structs/org.go3
-rw-r--r--options/locale/locale_en-US.ini1
-rw-r--r--routers/api/v1/org/org.go12
-rw-r--r--routers/web/org/setting.go1
-rw-r--r--services/convert/convert.go1
-rw-r--r--services/forms/org.go1
-rw-r--r--templates/org/home.tmpl7
-rw-r--r--templates/org/settings/options.tmpl4
-rw-r--r--templates/swagger/v1_json.tmpl12
-rw-r--r--tests/integration/api_user_orgs_test.go4
-rw-r--r--web_src/css/org.css12
11 files changed, 48 insertions, 10 deletions
diff --git a/modules/structs/org.go b/modules/structs/org.go
index 7c83dcdee7..c0a545ac1c 100644
--- a/modules/structs/org.go
+++ b/modules/structs/org.go
@@ -8,6 +8,7 @@ type Organization struct {
ID int64 `json:"id"`
Name string `json:"name"`
FullName string `json:"full_name"`
+ Email string `json:"email"`
AvatarURL string `json:"avatar_url"`
Description string `json:"description"`
Website string `json:"website"`
@@ -32,6 +33,7 @@ type CreateOrgOption struct {
// required: true
UserName string `json:"username" binding:"Required;Username;MaxSize(40)"`
FullName string `json:"full_name" binding:"MaxSize(100)"`
+ Email string `json:"email" binding:"MaxSize(255)"`
Description string `json:"description" binding:"MaxSize(255)"`
Website string `json:"website" binding:"ValidUrl;MaxSize(255)"`
Location string `json:"location" binding:"MaxSize(50)"`
@@ -46,6 +48,7 @@ type CreateOrgOption struct {
// EditOrgOption options for editing an organization
type EditOrgOption struct {
FullName string `json:"full_name" binding:"MaxSize(100)"`
+ Email string `json:"email" binding:"MaxSize(255)"`
Description string `json:"description" binding:"MaxSize(255)"`
Website string `json:"website" binding:"ValidUrl;MaxSize(255)"`
Location string `json:"location" binding:"MaxSize(50)"`
diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini
index 8784ab6878..4eb60e5c9b 100644
--- a/options/locale/locale_en-US.ini
+++ b/options/locale/locale_en-US.ini
@@ -2532,6 +2532,7 @@ form.create_org_not_allowed = You are not allowed to create an organization.
settings = Settings
settings.options = Organization
settings.full_name = Full Name
+settings.email = Contact Email
settings.website = Website
settings.location = Location
settings.permission = Permissions
diff --git a/routers/api/v1/org/org.go b/routers/api/v1/org/org.go
index 4e30ad1762..b0666c87f8 100644
--- a/routers/api/v1/org/org.go
+++ b/routers/api/v1/org/org.go
@@ -255,6 +255,7 @@ func Create(ctx *context.APIContext) {
org := &organization.Organization{
Name: form.UserName,
FullName: form.FullName,
+ Email: form.Email,
Description: form.Description,
Website: form.Website,
Location: form.Location,
@@ -299,7 +300,15 @@ func Get(ctx *context.APIContext) {
ctx.NotFound("HasOrgOrUserVisible", nil)
return
}
- ctx.JSON(http.StatusOK, convert.ToOrganization(ctx, ctx.Org.Organization))
+
+ org := convert.ToOrganization(ctx, ctx.Org.Organization)
+
+ // Don't show Mail, when User is not logged in
+ if ctx.Doer == nil {
+ org.Email = ""
+ }
+
+ ctx.JSON(http.StatusOK, org)
}
// Edit change an organization's information
@@ -328,6 +337,7 @@ func Edit(ctx *context.APIContext) {
form := web.GetForm(ctx).(*api.EditOrgOption)
org := ctx.Org.Organization
org.FullName = form.FullName
+ org.Email = form.Email
org.Description = form.Description
org.Website = form.Website
org.Location = form.Location
diff --git a/routers/web/org/setting.go b/routers/web/org/setting.go
index bd558f78b8..f63b2e9f06 100644
--- a/routers/web/org/setting.go
+++ b/routers/web/org/setting.go
@@ -100,6 +100,7 @@ func SettingsPost(ctx *context.Context) {
}
org.FullName = form.FullName
+ org.Email = form.Email
org.Description = form.Description
org.Website = form.Website
org.Location = form.Location
diff --git a/services/convert/convert.go b/services/convert/convert.go
index cb246a8b4b..a7a777e8bd 100644
--- a/services/convert/convert.go
+++ b/services/convert/convert.go
@@ -289,6 +289,7 @@ func ToOrganization(ctx context.Context, org *organization.Organization) *api.Or
Name: org.Name,
UserName: org.Name,
FullName: org.FullName,
+ Email: org.Email,
Description: org.Description,
Website: org.Website,
Location: org.Location,
diff --git a/services/forms/org.go b/services/forms/org.go
index c333bead31..6e2d787516 100644
--- a/services/forms/org.go
+++ b/services/forms/org.go
@@ -38,6 +38,7 @@ func (f *CreateOrgForm) Validate(req *http.Request, errs binding.Errors) binding
type UpdateOrgSettingForm struct {
Name string `binding:"Required;Username;MaxSize(40)" locale:"org.org_name_holder"`
FullName string `binding:"MaxSize(100)"`
+ Email string `binding:"MaxSize(255)"`
Description string `binding:"MaxSize(255)"`
Website string `binding:"ValidUrl;MaxSize(255)"`
Location string `binding:"MaxSize(50)"`
diff --git a/templates/org/home.tmpl b/templates/org/home.tmpl
index 967b31e7a8..445df520a9 100644
--- a/templates/org/home.tmpl
+++ b/templates/org/home.tmpl
@@ -15,8 +15,11 @@
</div>
{{if $.RenderedDescription}}<div class="render-content markup">{{$.RenderedDescription|Str2html}}</div>{{end}}
<div class="text grey meta">
- {{if .Org.Location}}<div class="item">{{svg "octicon-location"}} <span>{{.Org.Location}}</span></div>{{end}}
- {{if .Org.Website}}<div class="item">{{svg "octicon-link"}} <a target="_blank" rel="noopener noreferrer me" href="{{.Org.Website}}">{{.Org.Website}}</a></div>{{end}}
+ {{if .Org.Location}}<div class="flex-text-block">{{svg "octicon-location"}} <span>{{.Org.Location}}</span></div>{{end}}
+ {{if .Org.Website}}<div class="flex-text-block">{{svg "octicon-link"}} <a target="_blank" rel="noopener noreferrer me" href="{{.Org.Website}}">{{.Org.Website}}</a></div>{{end}}
+ {{if $.IsSigned}}
+ {{if .Org.Email}}<div class="flex-text-block">{{svg "octicon-mail"}} <a class="muted" href="mailto:{{.Org.Email}}">{{.Org.Email}}</a></div>{{end}}
+ {{end}}
</div>
</div>
<div class="right menu">
diff --git a/templates/org/settings/options.tmpl b/templates/org/settings/options.tmpl
index 846ebaee1a..683b886467 100644
--- a/templates/org/settings/options.tmpl
+++ b/templates/org/settings/options.tmpl
@@ -18,6 +18,10 @@
<label for="full_name">{{.locale.Tr "org.org_full_name_holder"}}</label>
<input id="full_name" name="full_name" value="{{.Org.FullName}}" maxlength="100">
</div>
+ <div class="field {{if .Err_Email}}error{{end}}">
+ <label for="email">{{.locale.Tr "org.settings.email"}}</label>
+ <input id="email" name="email" type="email" value="{{.Org.Email}}" maxlength="255">
+ </div>
<div class="field {{if .Err_Description}}error{{end}}">
<label for="description">{{$.locale.Tr "org.org_desc"}}</label>
<textarea id="description" name="description" rows="2" maxlength="255">{{.Org.Description}}</textarea>
diff --git a/templates/swagger/v1_json.tmpl b/templates/swagger/v1_json.tmpl
index 69874bdc75..7cb9bac95d 100644
--- a/templates/swagger/v1_json.tmpl
+++ b/templates/swagger/v1_json.tmpl
@@ -17125,6 +17125,10 @@
"type": "string",
"x-go-name": "Description"
},
+ "email": {
+ "type": "string",
+ "x-go-name": "Email"
+ },
"full_name": {
"type": "string",
"x-go-name": "FullName"
@@ -18043,6 +18047,10 @@
"type": "string",
"x-go-name": "Description"
},
+ "email": {
+ "type": "string",
+ "x-go-name": "Email"
+ },
"full_name": {
"type": "string",
"x-go-name": "FullName"
@@ -20100,6 +20108,10 @@
"type": "string",
"x-go-name": "Description"
},
+ "email": {
+ "type": "string",
+ "x-go-name": "Email"
+ },
"full_name": {
"type": "string",
"x-go-name": "FullName"
diff --git a/tests/integration/api_user_orgs_test.go b/tests/integration/api_user_orgs_test.go
index 323facaf48..f76c61f818 100644
--- a/tests/integration/api_user_orgs_test.go
+++ b/tests/integration/api_user_orgs_test.go
@@ -36,6 +36,7 @@ func TestUserOrgs(t *testing.T) {
Name: user17.Name,
UserName: user17.Name,
FullName: user17.FullName,
+ Email: user17.Email,
AvatarURL: user17.AvatarLink(db.DefaultContext),
Description: "",
Website: "",
@@ -47,6 +48,7 @@ func TestUserOrgs(t *testing.T) {
Name: user3.Name,
UserName: user3.Name,
FullName: user3.FullName,
+ Email: user3.Email,
AvatarURL: user3.AvatarLink(db.DefaultContext),
Description: "",
Website: "",
@@ -106,6 +108,7 @@ func TestMyOrgs(t *testing.T) {
Name: user17.Name,
UserName: user17.Name,
FullName: user17.FullName,
+ Email: user17.Email,
AvatarURL: user17.AvatarLink(db.DefaultContext),
Description: "",
Website: "",
@@ -117,6 +120,7 @@ func TestMyOrgs(t *testing.T) {
Name: user3.Name,
UserName: user3.Name,
FullName: user3.FullName,
+ Email: user3.Email,
AvatarURL: user3.AvatarLink(db.DefaultContext),
Description: "",
Website: "",
diff --git a/web_src/css/org.css b/web_src/css/org.css
index d579443ce1..9e1fa38941 100644
--- a/web_src/css/org.css
+++ b/web_src/css/org.css
@@ -118,13 +118,11 @@
margin-bottom: 10px;
}
-.organization.profile #org-info .meta .item {
- display: inline-block;
- margin-right: 10px;
-}
-
-.organization.profile #org-info .meta .item .icon {
- margin-right: 5px;
+.organization.profile #org-info .meta {
+ display: flex;
+ align-items: center;
+ flex-wrap: wrap;
+ gap: 8px;
}
.organization.profile .ui.top.header .ui.right {