mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-04 09:44:21 +00:00 
			
		
		
		
	Allow Organisations to have a E-Mail (#25082)
Resolves #25057 This adds a E-Mail field to Organisations. The E-Mail is just shown on the Profile when it is visited by a logged in User. The E-mail is not used for something else. **Screenshots:**   --------- Co-authored-by: Denys Konovalov <kontakt@denyskon.de> Co-authored-by: Denys Konovalov <privat@denyskon.de> Co-authored-by: wxiaoguang <wxiaoguang@gmail.com> Co-authored-by: Giteabot <teabot@gitea.io>
This commit is contained in:
		@@ -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)"`
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
@@ -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,
 | 
			
		||||
 
 | 
			
		||||
@@ -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)"`
 | 
			
		||||
 
 | 
			
		||||
@@ -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">
 | 
			
		||||
 
 | 
			
		||||
@@ -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>
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										12
									
								
								templates/swagger/v1_json.tmpl
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										12
									
								
								templates/swagger/v1_json.tmpl
									
									
									
										generated
									
									
									
								
							@@ -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"
 | 
			
		||||
 
 | 
			
		||||
@@ -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:     "",
 | 
			
		||||
 
 | 
			
		||||
@@ -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 {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user