code.gitea.io/gitea@v1.21.7/routers/web/org/home.go (about)

     1  // Copyright 2019 The Gitea Authors. All rights reserved.
     2  // SPDX-License-Identifier: MIT
     3  
     4  package org
     5  
     6  import (
     7  	"net/http"
     8  	"strings"
     9  
    10  	"code.gitea.io/gitea/models/db"
    11  	"code.gitea.io/gitea/models/organization"
    12  	repo_model "code.gitea.io/gitea/models/repo"
    13  	user_model "code.gitea.io/gitea/models/user"
    14  	"code.gitea.io/gitea/modules/base"
    15  	"code.gitea.io/gitea/modules/context"
    16  	"code.gitea.io/gitea/modules/markup"
    17  	"code.gitea.io/gitea/modules/markup/markdown"
    18  	"code.gitea.io/gitea/modules/setting"
    19  	shared_user "code.gitea.io/gitea/routers/web/shared/user"
    20  )
    21  
    22  const (
    23  	tplOrgHome base.TplName = "org/home"
    24  )
    25  
    26  // Home show organization home page
    27  func Home(ctx *context.Context) {
    28  	uname := ctx.Params(":username")
    29  
    30  	if strings.HasSuffix(uname, ".keys") || strings.HasSuffix(uname, ".gpg") {
    31  		ctx.NotFound("", nil)
    32  		return
    33  	}
    34  
    35  	ctx.SetParams(":org", uname)
    36  	context.HandleOrgAssignment(ctx)
    37  	if ctx.Written() {
    38  		return
    39  	}
    40  
    41  	org := ctx.Org.Organization
    42  
    43  	ctx.Data["PageIsUserProfile"] = true
    44  	ctx.Data["Title"] = org.DisplayName()
    45  	if len(org.Description) != 0 {
    46  		desc, err := markdown.RenderString(&markup.RenderContext{
    47  			Ctx:   ctx,
    48  			Metas: map[string]string{"mode": "document"},
    49  		}, org.Description)
    50  		if err != nil {
    51  			ctx.ServerError("RenderString", err)
    52  			return
    53  		}
    54  		ctx.Data["RenderedDescription"] = desc
    55  	}
    56  
    57  	var orderBy db.SearchOrderBy
    58  	ctx.Data["SortType"] = ctx.FormString("sort")
    59  	switch ctx.FormString("sort") {
    60  	case "newest":
    61  		orderBy = db.SearchOrderByNewest
    62  	case "oldest":
    63  		orderBy = db.SearchOrderByOldest
    64  	case "recentupdate":
    65  		orderBy = db.SearchOrderByRecentUpdated
    66  	case "leastupdate":
    67  		orderBy = db.SearchOrderByLeastUpdated
    68  	case "reversealphabetically":
    69  		orderBy = db.SearchOrderByAlphabeticallyReverse
    70  	case "alphabetically":
    71  		orderBy = db.SearchOrderByAlphabetically
    72  	case "moststars":
    73  		orderBy = db.SearchOrderByStarsReverse
    74  	case "feweststars":
    75  		orderBy = db.SearchOrderByStars
    76  	case "mostforks":
    77  		orderBy = db.SearchOrderByForksReverse
    78  	case "fewestforks":
    79  		orderBy = db.SearchOrderByForks
    80  	default:
    81  		ctx.Data["SortType"] = "recentupdate"
    82  		orderBy = db.SearchOrderByRecentUpdated
    83  	}
    84  
    85  	keyword := ctx.FormTrim("q")
    86  	ctx.Data["Keyword"] = keyword
    87  
    88  	language := ctx.FormTrim("language")
    89  	ctx.Data["Language"] = language
    90  
    91  	page := ctx.FormInt("page")
    92  	if page <= 0 {
    93  		page = 1
    94  	}
    95  
    96  	var (
    97  		repos []*repo_model.Repository
    98  		count int64
    99  		err   error
   100  	)
   101  	repos, count, err = repo_model.SearchRepository(ctx, &repo_model.SearchRepoOptions{
   102  		ListOptions: db.ListOptions{
   103  			PageSize: setting.UI.User.RepoPagingNum,
   104  			Page:     page,
   105  		},
   106  		Keyword:            keyword,
   107  		OwnerID:            org.ID,
   108  		OrderBy:            orderBy,
   109  		Private:            ctx.IsSigned,
   110  		Actor:              ctx.Doer,
   111  		Language:           language,
   112  		IncludeDescription: setting.UI.SearchRepoDescription,
   113  	})
   114  	if err != nil {
   115  		ctx.ServerError("SearchRepository", err)
   116  		return
   117  	}
   118  
   119  	opts := &organization.FindOrgMembersOpts{
   120  		OrgID:       org.ID,
   121  		PublicOnly:  ctx.Org.PublicMemberOnly,
   122  		ListOptions: db.ListOptions{Page: 1, PageSize: 25},
   123  	}
   124  	members, _, err := organization.FindOrgMembers(ctx, opts)
   125  	if err != nil {
   126  		ctx.ServerError("FindOrgMembers", err)
   127  		return
   128  	}
   129  
   130  	var isFollowing bool
   131  	if ctx.Doer != nil {
   132  		isFollowing = user_model.IsFollowing(ctx, ctx.Doer.ID, ctx.ContextUser.ID)
   133  	}
   134  
   135  	ctx.Data["Repos"] = repos
   136  	ctx.Data["Total"] = count
   137  	ctx.Data["Members"] = members
   138  	ctx.Data["Teams"] = ctx.Org.Teams
   139  	ctx.Data["DisableNewPullMirrors"] = setting.Mirror.DisableNewPull
   140  	ctx.Data["PageIsViewRepositories"] = true
   141  	ctx.Data["IsFollowing"] = isFollowing
   142  
   143  	err = shared_user.LoadHeaderCount(ctx)
   144  	if err != nil {
   145  		ctx.ServerError("LoadHeaderCount", err)
   146  		return
   147  	}
   148  
   149  	pager := context.NewPagination(int(count), setting.UI.User.RepoPagingNum, page, 5)
   150  	pager.SetDefaultParams(ctx)
   151  	pager.AddParam(ctx, "language", "Language")
   152  	ctx.Data["Page"] = pager
   153  
   154  	ctx.Data["ShowMemberAndTeamTab"] = ctx.Org.IsMember || len(members) > 0
   155  
   156  	ctx.HTML(http.StatusOK, tplOrgHome)
   157  }