fix: adapt to upstream refactor changes
This commit is contained in:
@@ -337,20 +337,6 @@ func SetDefaultColumn(ctx context.Context, projectID, columnID int64) error {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetColumnsByIDs(ctx context.Context, projectID int64, columnsIDs []int64) (ColumnList, error) {
|
|
||||||
columns := make([]*Column, 0, 5)
|
|
||||||
if len(columnsIDs) == 0 {
|
|
||||||
return columns, nil
|
|
||||||
}
|
|
||||||
if err := db.GetEngine(ctx).
|
|
||||||
Where("project_id =?", projectID).
|
|
||||||
In("id", columnsIDs).
|
|
||||||
OrderBy("sorting").Find(&columns); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return columns, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// MoveColumnsOnProject sorts columns in a project
|
// MoveColumnsOnProject sorts columns in a project
|
||||||
func MoveColumnsOnProject(ctx context.Context, project *Project, sortedColumnIDs map[int64]int64) error {
|
func MoveColumnsOnProject(ctx context.Context, project *Project, sortedColumnIDs map[int64]int64) error {
|
||||||
return db.WithTx(ctx, func(ctx context.Context) error {
|
return db.WithTx(ctx, func(ctx context.Context) error {
|
||||||
|
|||||||
@@ -691,8 +691,7 @@ func ListProjectColumnIssues(ctx *context.APIContext) {
|
|||||||
issuesOpts := &issues_model.IssuesOptions{
|
issuesOpts := &issues_model.IssuesOptions{
|
||||||
Paginator: &listOptions,
|
Paginator: &listOptions,
|
||||||
RepoIDs: []int64{ctx.Repo.Repository.ID},
|
RepoIDs: []int64{ctx.Repo.Repository.ID},
|
||||||
ProjectID: column.ProjectID,
|
ProjectIDs: []int64{column.ProjectID},
|
||||||
ProjectColumnID: column.ID,
|
|
||||||
SortType: issues_model.SortTypeProjectColumnSorting,
|
SortType: issues_model.SortTypeProjectColumnSorting,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -853,7 +852,7 @@ func assignIssueToProjectColumn(ctx *context.APIContext, add bool) {
|
|||||||
}
|
}
|
||||||
projectID = 0
|
projectID = 0
|
||||||
}
|
}
|
||||||
if err := issues_model.IssueAssignOrRemoveProject(ctx, issue, ctx.Doer, projectID, column.ID); err != nil {
|
if err := issues_model.IssueAssignOrRemoveProject(ctx, issue, ctx.Doer, []int64{projectID}); err != nil {
|
||||||
ctx.APIErrorInternal(err)
|
ctx.APIErrorInternal(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,12 +33,15 @@ type issueSidebarAssigneesData struct {
|
|||||||
CandidateAssignees []*user_model.User
|
CandidateAssignees []*user_model.User
|
||||||
}
|
}
|
||||||
|
|
||||||
type issueSidebarProjectsData struct {
|
type issueSidebarProjectCardData struct {
|
||||||
SelectedProjectIDs []int64 // TODO: support multiple projects in the future
|
Project *project_model.Project
|
||||||
|
Columns []*project_model.Column
|
||||||
|
SelectedColumn *project_model.Column
|
||||||
|
}
|
||||||
|
|
||||||
// the "selected" fields are only valid when len(SelectedProjectIDs)==1
|
type issueSidebarProjectsData struct {
|
||||||
SelectedProjectColumns []*project_model.Column
|
SelectedProjectIDs []int64
|
||||||
SelectedProjectColumn *project_model.Column
|
ProjectCards []*issueSidebarProjectCardData
|
||||||
|
|
||||||
OpenProjects []*project_model.Project
|
OpenProjects []*project_model.Project
|
||||||
ClosedProjects []*project_model.Project
|
ClosedProjects []*project_model.Project
|
||||||
@@ -107,7 +110,7 @@ func retrieveRepoIssueMetaData(ctx *context.Context, repo *repo_model.Repository
|
|||||||
// A reader(creator) could update some meta (eg: target branch), but can't change assignees anymore.
|
// A reader(creator) could update some meta (eg: target branch), but can't change assignees anymore.
|
||||||
// For non-creator users, only writers could update some meta (eg: assignees, milestone, project)
|
// For non-creator users, only writers could update some meta (eg: assignees, milestone, project)
|
||||||
// Need to clarify the logic and add some tests in the future
|
// Need to clarify the logic and add some tests in the future
|
||||||
data.CanModifyIssueOrPull = ctx.Repo.CanWriteIssuesOrPulls(isPull) && !ctx.Repo.Repository.IsArchived
|
data.CanModifyIssueOrPull = ctx.Repo.Permission.CanWriteIssuesOrPulls(isPull) && !ctx.Repo.Repository.IsArchived
|
||||||
if !data.CanModifyIssueOrPull {
|
if !data.CanModifyIssueOrPull {
|
||||||
return data
|
return data
|
||||||
}
|
}
|
||||||
@@ -168,34 +171,80 @@ func (d *IssuePageMetaData) retrieveAssigneesData(ctx *context.Context) {
|
|||||||
ctx.Data["Assignees"] = d.AssigneesData.CandidateAssignees
|
ctx.Data["Assignees"] = d.AssigneesData.CandidateAssignees
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *IssuePageMetaData) retrieveProjectData(ctx *context.Context) {
|
func (d *IssuePageMetaData) retrieveProjectCardsForExistingIssue(ctx *context.Context) {
|
||||||
if d.Issue == nil || d.Issue.Project == nil {
|
if err := d.Issue.LoadProjects(ctx); err != nil {
|
||||||
|
ctx.ServerError("LoadProjects", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
d.ProjectsData.SelectedProjectIDs = []int64{d.Issue.Project.ID}
|
|
||||||
columns, err := project_model.GetProjectColumns(ctx, d.Issue.Project.ID, db.ListOptionsAll)
|
// Load column mappings for all projects
|
||||||
|
projectColumnMap, err := d.Issue.ProjectColumnMap(ctx)
|
||||||
|
if err != nil {
|
||||||
|
ctx.ServerError("ProjectColumnMap", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Build project cards for each project
|
||||||
|
d.ProjectsData.ProjectCards = make([]*issueSidebarProjectCardData, 0, len(d.Issue.Projects))
|
||||||
|
for _, project := range d.Issue.Projects {
|
||||||
|
columns, err := project.GetColumns(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.ServerError("GetProjectColumns", err)
|
ctx.ServerError("GetProjectColumns", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
d.ProjectsData.SelectedProjectColumns = columns
|
|
||||||
columnID, err := d.Issue.ProjectColumnID(ctx)
|
var selectedColumn *project_model.Column
|
||||||
if err != nil {
|
columnID := projectColumnMap[project.ID]
|
||||||
ctx.ServerError("ProjectColumnID", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
for _, col := range columns {
|
for _, col := range columns {
|
||||||
if col.ID == columnID {
|
if col.ID == columnID {
|
||||||
d.ProjectsData.SelectedProjectColumn = col
|
selectedColumn = col
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if selectedColumn == nil {
|
||||||
|
selectedColumn, err = project.MustDefaultColumn(ctx)
|
||||||
|
if err != nil {
|
||||||
|
ctx.ServerError("MustDefaultColumn", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
d.ProjectsData.ProjectCards = append(d.ProjectsData.ProjectCards, &issueSidebarProjectCardData{
|
||||||
|
Project: project,
|
||||||
|
Columns: columns,
|
||||||
|
SelectedColumn: selectedColumn,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
d.ProjectsData.SelectedProjectIDs = make([]int64, 0, len(d.ProjectsData.ProjectCards))
|
||||||
|
for _, card := range d.ProjectsData.ProjectCards {
|
||||||
|
d.ProjectsData.SelectedProjectIDs = append(d.ProjectsData.SelectedProjectIDs, card.Project.ID)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *IssuePageMetaData) retrieveProjectData(ctx *context.Context) {
|
||||||
|
if d.Issue == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
d.retrieveProjectCardsForExistingIssue(ctx)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *IssuePageMetaData) SetSelectedProjectIDs(ids []int64) {
|
||||||
|
allProjects := map[int64]*project_model.Project{}
|
||||||
|
for _, p := range d.ProjectsData.OpenProjects {
|
||||||
|
allProjects[p.ID] = p
|
||||||
|
}
|
||||||
|
for _, p := range d.ProjectsData.ClosedProjects {
|
||||||
|
allProjects[p.ID] = p
|
||||||
|
}
|
||||||
|
for _, id := range ids {
|
||||||
|
if project, ok := allProjects[id]; ok {
|
||||||
|
d.ProjectsData.ProjectCards = append(d.ProjectsData.ProjectCards, &issueSidebarProjectCardData{Project: project})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
d.ProjectsData.SelectedProjectIDs = ids
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *IssuePageMetaData) retrieveProjectsDataForIssueWriter(ctx *context.Context) {
|
func (d *IssuePageMetaData) retrieveProjectsDataForIssueWriter(ctx *context.Context) {
|
||||||
if d.Issue != nil && d.Issue.Project != nil {
|
|
||||||
d.ProjectsData.SelectedProjectIDs = []int64{d.Issue.Project.ID}
|
|
||||||
}
|
|
||||||
d.ProjectsData.OpenProjects, d.ProjectsData.ClosedProjects = retrieveProjectsInternal(ctx, ctx.Repo.Repository)
|
d.ProjectsData.OpenProjects, d.ProjectsData.ClosedProjects = retrieveProjectsInternal(ctx, ctx.Repo.Repository)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -99,7 +99,7 @@ func toIssue(ctx context.Context, doer *user_model.User, issue *issues_model.Iss
|
|||||||
return &api.Issue{}
|
return &api.Issue{}
|
||||||
}
|
}
|
||||||
if len(issue.Projects) > 0 {
|
if len(issue.Projects) > 0 {
|
||||||
apiIssue.Projects = ToAPIProjectList(issue.Projects)
|
apiIssue.Projects = ToProjectList(ctx, issue.Projects, doer)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := issue.LoadAssignees(ctx); err != nil {
|
if err := issue.LoadAssignees(ctx); err != nil {
|
||||||
|
|||||||
@@ -63,10 +63,11 @@ func MoveIssuesOnProjectColumn(ctx context.Context, doer *user_model.User, colum
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
projectColumnID, err := curIssue.ProjectColumnID(ctx)
|
projectColumnMap, err := curIssue.ProjectColumnMap(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
projectColumnID := projectColumnMap[column.ProjectID]
|
||||||
|
|
||||||
if projectColumnID != column.ID {
|
if projectColumnID != column.ID {
|
||||||
// add timeline to issue
|
// add timeline to issue
|
||||||
@@ -121,7 +122,7 @@ func LoadIssuesAssigneesForProject(ctx context.Context, issuesMap map[int64]issu
|
|||||||
// LoadIssuesFromProject load issues assigned to each project column inside the given project
|
// LoadIssuesFromProject load issues assigned to each project column inside the given project
|
||||||
func LoadIssuesFromProject(ctx context.Context, project *project_model.Project, opts *issues_model.IssuesOptions) (results map[int64]issues_model.IssueList, _ error) {
|
func LoadIssuesFromProject(ctx context.Context, project *project_model.Project, opts *issues_model.IssuesOptions) (results map[int64]issues_model.IssueList, _ error) {
|
||||||
issueList, err := issues_model.Issues(ctx, opts.Copy(func(o *issues_model.IssuesOptions) {
|
issueList, err := issues_model.Issues(ctx, opts.Copy(func(o *issues_model.IssuesOptions) {
|
||||||
o.ProjectID = project.ID
|
o.ProjectIDs = []int64{project.ID}
|
||||||
o.SortType = issues_model.SortTypeProjectColumnSorting
|
o.SortType = issues_model.SortTypeProjectColumnSorting
|
||||||
}))
|
}))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -215,7 +216,7 @@ func LoadIssueNumbersForProject(ctx context.Context, project *project_model.Proj
|
|||||||
|
|
||||||
// for user or org projects, we need to check access permissions
|
// for user or org projects, we need to check access permissions
|
||||||
opts := issues_model.IssuesOptions{
|
opts := issues_model.IssuesOptions{
|
||||||
ProjectID: project.ID,
|
ProjectIDs: []int64{project.ID},
|
||||||
Doer: doer,
|
Doer: doer,
|
||||||
AllPublic: doer == nil,
|
AllPublic: doer == nil,
|
||||||
Owner: project.Owner,
|
Owner: project.Owner,
|
||||||
|
|||||||
Reference in New Issue
Block a user