| @@ -105,6 +105,7 @@ There are 5 ways to install Gogs: | |||||
| - [Puppet](https://forge.puppetlabs.com/Siteminds/gogs) (IT) | - [Puppet](https://forge.puppetlabs.com/Siteminds/gogs) (IT) | ||||
| - [Kanboard](http://kanboard.net/plugin/gogs-webhook) (Project Management) | - [Kanboard](http://kanboard.net/plugin/gogs-webhook) (Project Management) | ||||
| - [BearyChat](https://bearychat.com/) (Team Communication) | - [BearyChat](https://bearychat.com/) (Team Communication) | ||||
| - [HiWork](http://www.hiwork.cc/) (Team Communication) | |||||
| ### Product Support | ### Product Support | ||||
| @@ -77,6 +77,7 @@ Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自 | |||||
| - [Puppet](https://forge.puppetlabs.com/Siteminds/gogs)(IT) | - [Puppet](https://forge.puppetlabs.com/Siteminds/gogs)(IT) | ||||
| - [Kanboard](http://kanboard.net/plugin/gogs-webhook)(项目管理) | - [Kanboard](http://kanboard.net/plugin/gogs-webhook)(项目管理) | ||||
| - [BearyChat](https://bearychat.com/)(团队交流) | - [BearyChat](https://bearychat.com/)(团队交流) | ||||
| - [HiWork](http://www.hiwork.cc/)(团队交流) | |||||
| ### 产品支持 | ### 产品支持 | ||||
| @@ -0,0 +1,22 @@ | |||||
| // Copyright 2016 The Gogs 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 context | |||||
| import ( | |||||
| "gopkg.in/macaron.v1" | |||||
| ) | |||||
| type APIContext struct { | |||||
| *Context | |||||
| } | |||||
| func APIContexter() macaron.Handler { | |||||
| return func(c *Context) { | |||||
| ctx := &APIContext{ | |||||
| Context: c, | |||||
| } | |||||
| c.Map(ctx) | |||||
| } | |||||
| } | |||||
| @@ -18,8 +18,6 @@ import ( | |||||
| "github.com/go-macaron/session" | "github.com/go-macaron/session" | ||||
| "gopkg.in/macaron.v1" | "gopkg.in/macaron.v1" | ||||
| "github.com/gogits/git-module" | |||||
| "github.com/gogits/gogs/models" | "github.com/gogits/gogs/models" | ||||
| "github.com/gogits/gogs/modules/auth" | "github.com/gogits/gogs/modules/auth" | ||||
| "github.com/gogits/gogs/modules/base" | "github.com/gogits/gogs/modules/base" | ||||
| @@ -27,56 +25,6 @@ import ( | |||||
| "github.com/gogits/gogs/modules/setting" | "github.com/gogits/gogs/modules/setting" | ||||
| ) | ) | ||||
| type PullRequest struct { | |||||
| BaseRepo *models.Repository | |||||
| Allowed bool | |||||
| SameRepo bool | |||||
| HeadInfo string // [<user>:]<branch> | |||||
| } | |||||
| type Repository struct { | |||||
| AccessMode models.AccessMode | |||||
| IsWatching bool | |||||
| IsViewBranch bool | |||||
| IsViewTag bool | |||||
| IsViewCommit bool | |||||
| Repository *models.Repository | |||||
| Owner *models.User | |||||
| Commit *git.Commit | |||||
| Tag *git.Tag | |||||
| GitRepo *git.Repository | |||||
| BranchName string | |||||
| TagName string | |||||
| TreeName string | |||||
| CommitID string | |||||
| RepoLink string | |||||
| CloneLink models.CloneLink | |||||
| CommitsCount int64 | |||||
| Mirror *models.Mirror | |||||
| PullRequest *PullRequest | |||||
| } | |||||
| // IsOwner returns true if current user is the owner of repository. | |||||
| func (r *Repository) IsOwner() bool { | |||||
| return r.AccessMode >= models.ACCESS_MODE_OWNER | |||||
| } | |||||
| // IsAdmin returns true if current user has admin or higher access of repository. | |||||
| func (r *Repository) IsAdmin() bool { | |||||
| return r.AccessMode >= models.ACCESS_MODE_ADMIN | |||||
| } | |||||
| // IsWriter returns true if current user has write or higher access of repository. | |||||
| func (r *Repository) IsWriter() bool { | |||||
| return r.AccessMode >= models.ACCESS_MODE_WRITE | |||||
| } | |||||
| // HasAccess returns true if the current user has at least read access for this repository | |||||
| func (r *Repository) HasAccess() bool { | |||||
| return r.AccessMode >= models.ACCESS_MODE_READ | |||||
| } | |||||
| // Context represents context of a request. | // Context represents context of a request. | ||||
| type Context struct { | type Context struct { | ||||
| *macaron.Context | *macaron.Context | ||||
| @@ -90,17 +38,7 @@ type Context struct { | |||||
| IsBasicAuth bool | IsBasicAuth bool | ||||
| Repo *Repository | Repo *Repository | ||||
| Org struct { | |||||
| IsOwner bool | |||||
| IsMember bool | |||||
| IsTeamMember bool // Is member of team. | |||||
| IsTeamAdmin bool // In owner team or team that has admin permission level. | |||||
| Organization *models.User | |||||
| OrgLink string | |||||
| Team *models.Team | |||||
| } | |||||
| Org *Organization | |||||
| } | } | ||||
| // HasError returns true if error occurs in form validation. | // HasError returns true if error occurs in form validation. | ||||
| @@ -223,6 +161,7 @@ func Contexter() macaron.Handler { | |||||
| Repo: &Repository{ | Repo: &Repository{ | ||||
| PullRequest: &PullRequest{}, | PullRequest: &PullRequest{}, | ||||
| }, | }, | ||||
| Org: &Organization{}, | |||||
| } | } | ||||
| // Compute current URL for real-time change language. | // Compute current URL for real-time change language. | ||||
| ctx.Data["Link"] = setting.AppSubUrl + strings.TrimSuffix(ctx.Req.URL.Path, "/") | ctx.Data["Link"] = setting.AppSubUrl + strings.TrimSuffix(ctx.Req.URL.Path, "/") | ||||
| @@ -13,6 +13,17 @@ import ( | |||||
| "github.com/gogits/gogs/modules/setting" | "github.com/gogits/gogs/modules/setting" | ||||
| ) | ) | ||||
| type Organization struct { | |||||
| IsOwner bool | |||||
| IsMember bool | |||||
| IsTeamMember bool // Is member of team. | |||||
| IsTeamAdmin bool // In owner team or team that has admin permission level. | |||||
| Organization *models.User | |||||
| OrgLink string | |||||
| Team *models.Team | |||||
| } | |||||
| func HandleOrgAssignment(ctx *Context, args ...bool) { | func HandleOrgAssignment(ctx *Context, args ...bool) { | ||||
| var ( | var ( | ||||
| requireMember bool | requireMember bool | ||||
| @@ -18,6 +18,56 @@ import ( | |||||
| "github.com/gogits/gogs/modules/setting" | "github.com/gogits/gogs/modules/setting" | ||||
| ) | ) | ||||
| type PullRequest struct { | |||||
| BaseRepo *models.Repository | |||||
| Allowed bool | |||||
| SameRepo bool | |||||
| HeadInfo string // [<user>:]<branch> | |||||
| } | |||||
| type Repository struct { | |||||
| AccessMode models.AccessMode | |||||
| IsWatching bool | |||||
| IsViewBranch bool | |||||
| IsViewTag bool | |||||
| IsViewCommit bool | |||||
| Repository *models.Repository | |||||
| Owner *models.User | |||||
| Commit *git.Commit | |||||
| Tag *git.Tag | |||||
| GitRepo *git.Repository | |||||
| BranchName string | |||||
| TagName string | |||||
| TreeName string | |||||
| CommitID string | |||||
| RepoLink string | |||||
| CloneLink models.CloneLink | |||||
| CommitsCount int64 | |||||
| Mirror *models.Mirror | |||||
| PullRequest *PullRequest | |||||
| } | |||||
| // IsOwner returns true if current user is the owner of repository. | |||||
| func (r *Repository) IsOwner() bool { | |||||
| return r.AccessMode >= models.ACCESS_MODE_OWNER | |||||
| } | |||||
| // IsAdmin returns true if current user has admin or higher access of repository. | |||||
| func (r *Repository) IsAdmin() bool { | |||||
| return r.AccessMode >= models.ACCESS_MODE_ADMIN | |||||
| } | |||||
| // IsWriter returns true if current user has write or higher access of repository. | |||||
| func (r *Repository) IsWriter() bool { | |||||
| return r.AccessMode >= models.ACCESS_MODE_WRITE | |||||
| } | |||||
| // HasAccess returns true if the current user has at least read access for this repository | |||||
| func (r *Repository) HasAccess() bool { | |||||
| return r.AccessMode >= models.ACCESS_MODE_READ | |||||
| } | |||||
| func RetrieveBaseRepo(ctx *Context, repo *models.Repository) { | func RetrieveBaseRepo(ctx *Context, repo *models.Repository) { | ||||
| // Non-fork repository will not return error in this method. | // Non-fork repository will not return error in this method. | ||||
| if err := repo.GetBaseRepo(); err != nil { | if err := repo.GetBaseRepo(); err != nil { | ||||
| @@ -2376,6 +2376,9 @@ footer .container .links > *:first-child { | |||||
| .user.settings .email.list .item:not(:first-child) .button { | .user.settings .email.list .item:not(:first-child) .button { | ||||
| margin-top: -10px; | margin-top: -10px; | ||||
| } | } | ||||
| .user.profile .ui.card #profile-avatar { | |||||
| height: 290px; | |||||
| } | |||||
| .user.profile .ui.card .username { | .user.profile .ui.card .username { | ||||
| display: block; | display: block; | ||||
| } | } | ||||
| @@ -23,6 +23,9 @@ | |||||
| &.profile { | &.profile { | ||||
| .ui.card { | .ui.card { | ||||
| #profile-avatar { | |||||
| height: 290px; | |||||
| } | |||||
| .username { | .username { | ||||
| display: block; | display: block; | ||||
| } | } | ||||