Browse Source

Выводятся поля компетенции, ресурсы и интересы в профиле пользователя #9

решено использовать рефлексию, для того, чтобы код был более читабельным.
Хотя для MVP это избыточно.
pull/100/head
Artur Galyamov 2 years ago
parent
commit
c79bea9808
  1. 62
      routers/web/user/profile.go
  2. 15
      templates/user/profile.tmpl

62
routers/web/user/profile.go

@ -9,6 +9,7 @@ import (
"fmt"
"net/http"
"path"
"reflect"
"strings"
"code.gitea.io/gitea/models"
@ -158,18 +159,30 @@ func Profile(ctx *context.Context) {
ctx.Data["HeatmapData"] = data
}
if len(ctxUser.Description) != 0 {
content, err := markdown.RenderString(&markup.RenderContext{
URLPrefix: ctx.Repo.RepoLink,
Metas: map[string]string{"mode": "document"},
GitRepo: ctx.Repo.GitRepo,
Ctx: ctx,
}, ctxUser.Description)
if err != nil {
ctx.ServerError("RenderString", err)
return
}
ctx.Data["RenderedDescription"] = content
var renderErr error
renderErr = getRenderedTextField(ctx, ctxUser, "Description")
if renderErr != nil {
ctx.ServerError("RenderString", renderErr)
return
}
renderErr = getRenderedTextField(ctx, ctxUser, "Competences")
if renderErr != nil {
ctx.ServerError("RenderString", renderErr)
return
}
renderErr = getRenderedTextField(ctx, ctxUser, "Resources")
if renderErr != nil {
ctx.ServerError("RenderString", renderErr)
return
}
renderErr = getRenderedTextField(ctx, ctxUser, "Interests")
if renderErr != nil {
ctx.ServerError("RenderString", renderErr)
return
}
showPrivate := ctx.IsSigned && (ctx.User.IsAdmin || ctx.User.ID == ctxUser.ID)
@ -377,3 +390,28 @@ func Action(ctx *context.Context) {
// FIXME: We should check this URL and make sure that it's a valid Gitea URL
ctx.RedirectToFirst(ctx.FormString("redirect_to"), u.HomeLink())
}
func getTextField(user *user_model.User, fieldName string) string {
reflectedObj := reflect.ValueOf(user)
dynamicField := reflect.Indirect(reflectedObj).FieldByName(fieldName)
return dynamicField.String()
}
func getRenderedTextField(ctx *context.Context, ctxUser *user_model.User, 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
}

15
templates/user/profile.tmpl

@ -39,6 +39,21 @@
<div class="render-content markup">{{$.RenderedDescription|Str2html}}</div>
</li>
{{end}}
{{if $.RenderedCompetences}}
<li>
<div class="render-content markup">{{$.RenderedCompetences|Str2html}}</div>
</li>
{{end}}
{{if $.RenderedResources}}
<li>
<div class="render-content markup">{{$.RenderedResources|Str2html}}</div>
</li>
{{end}}
{{if $.RenderedInterests}}
<li>
<div class="render-content markup">{{$.RenderedInterests|Str2html}}</div>
</li>
{{end}}
{{range .OpenIDs}}
{{if .Show}}
<li>

Loading…
Cancel
Save