Browse Source

Выводятся компетенции и ресурсы для сообщества #9

лучше было бы вынести getRenderedTextField в services.
Но так не получилось сделать, см. комментарий в org/home.go:182.
pull/100/head
Artur Galyamov 3 years ago
parent
commit
911317c4be
  1. 64
      routers/web/org/home.go
  2. 4
      routers/web/user/profile.go
  3. 2
      templates/org/home.tmpl

64
routers/web/org/home.go

@ -5,7 +5,11 @@
package org package org
import ( import (
"code.gitea.io/gitea/modules/markup"
"code.gitea.io/gitea/modules/markup/markdown"
"fmt"
"net/http" "net/http"
"reflect"
"strings" "strings"
"code.gitea.io/gitea/models" "code.gitea.io/gitea/models"
@ -13,8 +17,6 @@ import (
repo_model "code.gitea.io/gitea/models/repo" repo_model "code.gitea.io/gitea/models/repo"
"code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/base"
"code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/markup"
"code.gitea.io/gitea/modules/markup/markdown"
"code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/setting"
) )
@ -46,17 +48,24 @@ func Home(ctx *context.Context) {
ctx.Data["PageIsUserProfile"] = true ctx.Data["PageIsUserProfile"] = true
ctx.Data["Title"] = org.DisplayName() ctx.Data["Title"] = org.DisplayName()
if len(org.Description) != 0 {
desc, err := markdown.RenderString(&markup.RenderContext{ var renderErr error
URLPrefix: ctx.Repo.RepoLink, renderErr = getRenderedTextField(ctx, org, "Description")
Metas: map[string]string{"mode": "document"}, if renderErr != nil {
GitRepo: ctx.Repo.GitRepo, ctx.ServerError("RenderString", renderErr)
}, org.Description) return
if err != nil { }
ctx.ServerError("RenderString", err)
return renderErr = getRenderedTextField(ctx, org, "Competences")
} if renderErr != nil {
ctx.Data["RenderedDescription"] = desc ctx.ServerError("RenderString", renderErr)
return
}
renderErr = getRenderedTextField(ctx, org, "Resources")
if renderErr != nil {
ctx.ServerError("RenderString", renderErr)
return
} }
var orderBy db.SearchOrderBy var orderBy db.SearchOrderBy
@ -159,3 +168,32 @@ func Home(ctx *context.Context) {
ctx.HTML(http.StatusOK, tplOrgHome) ctx.HTML(http.StatusOK, tplOrgHome)
} }
func getTextField(user *models.Organization, fieldName string) string {
reflectedObj := reflect.ValueOf(user)
dynamicField := reflect.Indirect(reflectedObj).FieldByName(fieldName)
return dynamicField.String()
}
/**
Приходится дублировать код, т.к. не получилось вынести эту функцию и функцию getTextField в services,
т.к. modules/context/context.go зависит от models/user.
*/
func getRenderedTextField(ctx *context.Context, ctxUser *models.Organization, fieldName string) error {
var err error = nil
var content string
fieldVal := getTextField(ctxUser, fieldName)
if len(fieldVal) != 0 {
content, err = markdown.RenderString(&markup.RenderContext{
URLPrefix: ctx.Repo.RepoLink,
Metas: map[string]string{"mode": "document"},
GitRepo: ctx.Repo.GitRepo,
Ctx: ctx,
}, fieldVal)
if err == nil {
renderedFieldName := fmt.Sprintf("Rendered%s", fieldName)
ctx.Data[renderedFieldName] = content
}
}
return err
}

4
routers/web/user/profile.go

@ -6,6 +6,8 @@
package user package user
import ( import (
"code.gitea.io/gitea/modules/markup"
"code.gitea.io/gitea/modules/markup/markdown"
"fmt" "fmt"
"net/http" "net/http"
"path" "path"
@ -17,8 +19,6 @@ import (
repo_model "code.gitea.io/gitea/models/repo" repo_model "code.gitea.io/gitea/models/repo"
user_model "code.gitea.io/gitea/models/user" user_model "code.gitea.io/gitea/models/user"
"code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/markup"
"code.gitea.io/gitea/modules/markup/markdown"
"code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/modules/util"
"code.gitea.io/gitea/routers/web/feed" "code.gitea.io/gitea/routers/web/feed"

2
templates/org/home.tmpl

@ -11,6 +11,8 @@
</span> </span>
</div> </div>
{{if $.RenderedDescription}}<p class="render-content markup">{{$.RenderedDescription|Str2html}}</p>{{end}} {{if $.RenderedDescription}}<p class="render-content markup">{{$.RenderedDescription|Str2html}}</p>{{end}}
{{if $.RenderedCompetences}}<p class="render-content markup">{{$.RenderedCompetences|Str2html}}</p>{{end}}
{{if $.RenderedResources}}<p class="render-content markup">{{$.RenderedResources|Str2html}}</p>{{end}}
<div class="text grey meta"> <div class="text grey meta">
{{if .Org.Location}}<div class="item">{{svg "octicon-location"}} <span>{{.Org.Location}}</span> <span>({{.Org.LocationCoordinate}})</span></div>{{end}} {{if .Org.Location}}<div class="item">{{svg "octicon-location"}} <span>{{.Org.Location}}</span> <span>({{.Org.LocationCoordinate}})</span></div>{{end}}
{{if .Org.Website}}<div class="item">{{svg "octicon-link"}} <a target="_blank" rel="noopener noreferrer" href="{{.Org.Website}}">{{.Org.Website}}</a></div>{{end}} {{if .Org.Website}}<div class="item">{{svg "octicon-link"}} <a target="_blank" rel="noopener noreferrer" href="{{.Org.Website}}">{{.Org.Website}}</a></div>{{end}}

Loading…
Cancel
Save