2019-12-14 09:36:59 +03:00
// Copyright 2019 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package org
import (
"strings"
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/base"
"code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/setting"
)
const (
tplOrgHome base . TplName = "org/home"
)
// Home show organization home page
func Home ( ctx * context . Context ) {
ctx . SetParams ( ":org" , ctx . Params ( ":username" ) )
context . HandleOrgAssignment ( ctx )
if ctx . Written ( ) {
return
}
org := ctx . Org . Organization
if ! models . HasOrgVisible ( org , ctx . User ) {
ctx . NotFound ( "HasOrgVisible" , nil )
return
}
2020-09-11 09:41:43 +03:00
ctx . Data [ "PageIsUserProfile" ] = true
2019-12-14 09:36:59 +03:00
ctx . Data [ "Title" ] = org . DisplayName ( )
var orderBy models . SearchOrderBy
ctx . Data [ "SortType" ] = ctx . Query ( "sort" )
switch ctx . Query ( "sort" ) {
case "newest" :
orderBy = models . SearchOrderByNewest
case "oldest" :
orderBy = models . SearchOrderByOldest
case "recentupdate" :
orderBy = models . SearchOrderByRecentUpdated
case "leastupdate" :
orderBy = models . SearchOrderByLeastUpdated
case "reversealphabetically" :
orderBy = models . SearchOrderByAlphabeticallyReverse
case "alphabetically" :
orderBy = models . SearchOrderByAlphabetically
case "moststars" :
orderBy = models . SearchOrderByStarsReverse
case "feweststars" :
orderBy = models . SearchOrderByStars
case "mostforks" :
orderBy = models . SearchOrderByForksReverse
case "fewestforks" :
orderBy = models . SearchOrderByForks
default :
ctx . Data [ "SortType" ] = "recentupdate"
orderBy = models . SearchOrderByRecentUpdated
}
keyword := strings . Trim ( ctx . Query ( "q" ) , " " )
ctx . Data [ "Keyword" ] = keyword
page := ctx . QueryInt ( "page" )
if page <= 0 {
page = 1
}
var (
repos [ ] * models . Repository
count int64
err error
)
repos , count , err = models . SearchRepository ( & models . SearchRepoOptions {
2020-01-24 22:00:29 +03:00
ListOptions : models . ListOptions {
PageSize : setting . UI . User . RepoPagingNum ,
Page : page ,
} ,
2019-12-14 09:36:59 +03:00
Keyword : keyword ,
OwnerID : org . ID ,
OrderBy : orderBy ,
Private : ctx . IsSigned ,
2020-01-13 20:33:46 +03:00
Actor : ctx . User ,
2019-12-14 09:36:59 +03:00
IncludeDescription : setting . UI . SearchRepoDescription ,
} )
if err != nil {
ctx . ServerError ( "SearchRepository" , err )
return
}
var opts = models . FindOrgMembersOpts {
2020-01-24 22:00:29 +03:00
OrgID : org . ID ,
PublicOnly : true ,
ListOptions : models . ListOptions { Page : 1 , PageSize : 25 } ,
2019-12-14 09:36:59 +03:00
}
if ctx . User != nil {
isMember , err := org . IsOrgMember ( ctx . User . ID )
if err != nil {
ctx . Error ( 500 , "IsOrgMember" )
return
}
opts . PublicOnly = ! isMember && ! ctx . User . IsAdmin
}
2020-01-24 22:00:29 +03:00
members , _ , err := models . FindOrgMembers ( & opts )
2019-12-14 09:36:59 +03:00
if err != nil {
ctx . ServerError ( "FindOrgMembers" , err )
return
}
membersCount , err := models . CountOrgMembers ( opts )
if err != nil {
ctx . ServerError ( "CountOrgMembers" , err )
return
}
2020-09-11 09:41:43 +03:00
ctx . Data [ "Owner" ] = org
2019-12-14 09:36:59 +03:00
ctx . Data [ "Repos" ] = repos
ctx . Data [ "Total" ] = count
ctx . Data [ "MembersTotal" ] = membersCount
ctx . Data [ "Members" ] = members
ctx . Data [ "Teams" ] = org . Teams
pager := context . NewPagination ( int ( count ) , setting . UI . User . RepoPagingNum , page , 5 )
pager . SetDefaultParams ( ctx )
ctx . Data [ "Page" ] = pager
ctx . HTML ( 200 , tplOrgHome )
}