| @@ -649,53 +649,41 @@ func (repo *Repository) GetAssignees() (_ []*User, err error) { | |||||
| return repo.getAssignees(x) | return repo.getAssignees(x) | ||||
| } | } | ||||
| func (repo *Repository) getReviewersPrivate(e Engine, doerID, posterID int64) (users []*User, err error) { | |||||
| users = make([]*User, 0, 20) | |||||
| if err = e. | |||||
| SQL("SELECT * FROM `user` WHERE id in (SELECT user_id FROM `access` WHERE repo_id = ? AND mode >= ? "+ | |||||
| " UNION SELECT owner_id FROM `repository` WHERE id = ?) AND id NOT IN ( ?, ?) ORDER BY name", | |||||
| repo.ID, AccessModeWrite, repo.ID, | |||||
| doerID, posterID). | |||||
| Find(&users); err != nil { | |||||
| return nil, err | |||||
| } | |||||
| return users, nil | |||||
| } | |||||
| func (repo *Repository) getReviewersPublic(e Engine, doerID, posterID int64) (_ []*User, err error) { | |||||
| users := make([]*User, 0) | |||||
| const SQLCmd = "SELECT * FROM `user` WHERE id IN ( " + | |||||
| "SELECT user_id FROM `access` WHERE repo_id = ? AND mode >= ? " + | |||||
| " UNION" + | |||||
| " SELECT owner_id FROM `repository` WHERE id = ?)" + | |||||
| " AND id NOT IN ( ?, ?) ORDER BY name " | |||||
| if err = e. | |||||
| SQL(SQLCmd, | |||||
| repo.ID, AccessModeWrite, repo.ID, doerID, posterID). | |||||
| Find(&users); err != nil { | |||||
| return nil, err | |||||
| } | |||||
| return users, nil | |||||
| } | |||||
| func (repo *Repository) getReviewers(e Engine, doerID, posterID int64) (users []*User, err error) { | func (repo *Repository) getReviewers(e Engine, doerID, posterID int64) (users []*User, err error) { | ||||
| if err = repo.getOwner(e); err != nil { | if err = repo.getOwner(e); err != nil { | ||||
| return nil, err | return nil, err | ||||
| } | } | ||||
| if repo.IsPrivate || | |||||
| (repo.Owner.IsOrganization() && repo.Owner.Visibility == api.VisibleTypePrivate) { | |||||
| users, err = repo.getReviewersPrivate(x, doerID, posterID) | |||||
| if repo.Owner.IsOrganization() { | |||||
| const SQLCmd = "SELECT * FROM `user` WHERE id IN (" + | |||||
| "SELECT DISTINCT(t3.user_id) FROM ( " + | |||||
| "SELECT user_id FROM `access` WHERE repo_id = ? AND mode >= ?" + | |||||
| "UNION select t2.uid as user_id from team t1 left join team_user t2 on t1.id = t2.team_id where t1.org_id = ? and t1.authorize = 4) t3)" + | |||||
| " AND id NOT IN ( ?, ?) ORDER BY name " | |||||
| if err = e. | |||||
| SQL(SQLCmd, | |||||
| repo.ID, AccessModeWrite, repo.ID, doerID, posterID). | |||||
| Find(&users); err != nil { | |||||
| return nil, err | |||||
| } | |||||
| } else { | } else { | ||||
| users, err = repo.getReviewersPublic(x, doerID, posterID) | |||||
| const SQLCmd = "SELECT * FROM `user` WHERE id IN ( " + | |||||
| "SELECT DISTINCT(t3.user_id) FROM ( " + | |||||
| "SELECT user_id FROM `access` WHERE repo_id = ? AND mode >= ? " + | |||||
| " UNION" + | |||||
| " SELECT owner_id as user_id FROM `repository` WHERE id = ?) t3)" + | |||||
| " AND id NOT IN ( ?, ?) ORDER BY name " | |||||
| if err = e. | |||||
| SQL(SQLCmd, | |||||
| repo.ID, AccessModeWrite, repo.ID, doerID, posterID). | |||||
| Find(&users); err != nil { | |||||
| return nil, err | |||||
| } | |||||
| } | } | ||||
| return | |||||
| return users, nil | |||||
| } | } | ||||
| // GetReviewers get all users can be requested to review | // GetReviewers get all users can be requested to review | ||||
| @@ -97,16 +97,21 @@ | |||||
| <span>{{svg "octicon-code" 16}} {{.i18n.Tr "repo.code"}} <i class="dropdown icon"></i></span> | <span>{{svg "octicon-code" 16}} {{.i18n.Tr "repo.code"}} <i class="dropdown icon"></i></span> | ||||
| </a> | </a> | ||||
| <div class="dropdown-content"> | <div class="dropdown-content"> | ||||
| {{if and (.Permission.CanRead $.UnitTypeReleases) (not .IsEmptyRepo) }} | |||||
| <a style="border: none;" class="{{if .PageIsReleaseList}}active{{end}} item" href="{{.RepoLink}}/releases"> | <a style="border: none;" class="{{if .PageIsReleaseList}}active{{end}} item" href="{{.RepoLink}}/releases"> | ||||
| {{svg "octicon-tag" 16}} {{.i18n.Tr "repo.releases"}} <span class="ui {{if not .NumReleases}}gray{{else}}blue{{end}} small label">{{.NumReleases}}</span> | {{svg "octicon-tag" 16}} {{.i18n.Tr "repo.releases"}} <span class="ui {{if not .NumReleases}}gray{{else}}blue{{end}} small label">{{.NumReleases}}</span> | ||||
| </a> | </a> | ||||
| {{end}} | |||||
| {{if or (.Permission.CanRead $.UnitTypeWiki) (.Permission.CanRead $.UnitTypeExternalWiki)}} | |||||
| <a style="border: none;" class="{{if .PageIsWiki}}active{{end}} item" href="{{.RepoLink}}/wiki" {{if (.Permission.CanRead $.UnitTypeExternalWiki)}} target="_blank" rel="noopener noreferrer" {{end}}> | <a style="border: none;" class="{{if .PageIsWiki}}active{{end}} item" href="{{.RepoLink}}/wiki" {{if (.Permission.CanRead $.UnitTypeExternalWiki)}} target="_blank" rel="noopener noreferrer" {{end}}> | ||||
| {{svg "octicon-book" 16}} {{.i18n.Tr "repo.wiki"}} | {{svg "octicon-book" 16}} {{.i18n.Tr "repo.wiki"}} | ||||
| </a> | </a> | ||||
| {{end}} | |||||
| {{if and (.Permission.CanReadAny $.UnitTypePullRequests $.UnitTypeIssues $.UnitTypeReleases) (not .IsEmptyRepo)}} | |||||
| <a style="border: none;" class="{{if .PageIsActivity}}active{{end}} item" href="{{.RepoLink}}/activity"> | <a style="border: none;" class="{{if .PageIsActivity}}active{{end}} item" href="{{.RepoLink}}/activity"> | ||||
| {{svg "octicon-pulse" 16}} {{.i18n.Tr "repo.activity"}} | {{svg "octicon-pulse" 16}} {{.i18n.Tr "repo.activity"}} | ||||
| </a> | </a> | ||||
| {{end}} | |||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| @@ -93,7 +93,7 @@ | |||||
| <tr> | <tr> | ||||
| <td class="ti-text-form-label text-width80">标签</td> | <td class="ti-text-form-label text-width80">标签</td> | ||||
| <td class="ti-text-form-content"> | <td class="ti-text-form-content"> | ||||
| <div id="Label"> | |||||
| <div id="Label" style="overflow: hidden;width: 95%;"> | |||||
| </div> | </div> | ||||
| @@ -258,7 +258,7 @@ function renderInfo(obj,accObj,id){ | |||||
| let labelArray = obj[key].trim().replace(/ +/g,' ').split(' ') | let labelArray = obj[key].trim().replace(/ +/g,' ').split(' ') | ||||
| let html='' | let html='' | ||||
| for(let i=0;i<labelArray.length;i++){ | for(let i=0;i<labelArray.length;i++){ | ||||
| html += `<a class="ui label">${labelArray[i]}</a>` | |||||
| html += `<a class="ui label" title="${labelArray[i]}">${labelArray[i]}</a>` | |||||
| } | } | ||||
| $('#Label').append(html) | $('#Label').append(html) | ||||
| } | } | ||||
| @@ -458,7 +458,7 @@ export default { | |||||
| margin-right: 3px; | margin-right: 3px; | ||||
| font-size: 12px; | font-size: 12px; | ||||
| } | } | ||||
| /deep/ .el-table_1_column_1.is-left .cell {padding-right: 0px !important;} | |||||
| /deep/ .el-table_1_column_1.is-left .cell {padding-right: 0px !important;white-space: nowrap;} | |||||
| /deep/ .el-table__expand-icon .el-icon-arrow-right{ | /deep/ .el-table__expand-icon .el-icon-arrow-right{ | ||||
| font-family: element-icons!important; | font-family: element-icons!important; | ||||
| speak: none; | speak: none; | ||||