pageReportBug.go 6.6 KB
Newer Older
aaronchen2k2k's avatar
aaronchen2k2k 已提交
1 2 3 4 5 6 7
package page

import (
	"github.com/easysoft/zentaoatf/src/model"
	zentaoService "github.com/easysoft/zentaoatf/src/service/zentao"
	"github.com/easysoft/zentaoatf/src/ui"
	"github.com/easysoft/zentaoatf/src/ui/widget"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
8
	i118Utils "github.com/easysoft/zentaoatf/src/utils/i118"
9
	"github.com/easysoft/zentaoatf/src/utils/log"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
	"github.com/easysoft/zentaoatf/src/utils/vari"
	"github.com/fatih/color"
	"github.com/jroimartin/gocui"
	"strings"
)

var (
	bug      model.Bug
	idInTask string
	stepIds  string
)

var filedValMap map[string]int

func InitReportBugPage() error {
	DestoryReportBugPage()

27 28
	zentaoService.GetBugFiledOptions()

aaronchen2k2k's avatar
aaronchen2k2k 已提交
29 30 31
	bug, idInTask, stepIds = zentaoService.GenBug()

	maxX, maxY := vari.Cui.Size()
32 33 34
	pageWidth := 120
	pageHeight := 27
	x := maxX/2 - 60
aaronchen2k2k's avatar
aaronchen2k2k 已提交
35 36 37
	y := maxY/2 - 14

	var bugVersion string
38
	for _, val := range bug.OpenedBuild { // 取字符串值显示
aaronchen2k2k's avatar
aaronchen2k2k 已提交
39
		bugVersion = val
aaronchen2k2k's avatar
aaronchen2k2k 已提交
40 41
	}

42 43
	// panel
	reportBugPanel := widget.NewPanelWidget("reportBugPanel", x, y, pageWidth, pageHeight, "")
aaronchen2k2k's avatar
aaronchen2k2k 已提交
44 45 46
	ui.ViewMap["reportBug"] = append(ui.ViewMap["reportBug"], reportBugPanel.Name())

	// title
47
	y += 1
aaronchen2k2k's avatar
aaronchen2k2k 已提交
48
	left := x + 2
49 50 51
	right := left + widget.TextWidthFull - 5
	titleInput := widget.NewTextWidget("titleInput", left, y, widget.TextWidthFull-5, bug.Title)
	ui.ViewMap["reportBug"] = append(ui.ViewMap["reportBug"], titleInput.Name())
aaronchen2k2k's avatar
aaronchen2k2k 已提交
52

53
	// steps
aaronchen2k2k's avatar
aaronchen2k2k 已提交
54
	left = right + ui.Space
55
	stepsWidth := pageWidth - left - ui.Space + x
56
	stepsInput := widget.NewTextareaWidget("stepsInput", left, y, stepsWidth, pageHeight-2, bug.Steps)
57 58
	stepsInput.Title = "Steps"
	ui.ViewMap["reportBug"] = append(ui.ViewMap["reportBug"], stepsInput.Name())
aaronchen2k2k's avatar
aaronchen2k2k 已提交
59 60

	// module
aaronchen2k2k's avatar
aaronchen2k2k 已提交
61
	y += 3
62
	left = x + 2
aaronchen2k2k's avatar
aaronchen2k2k 已提交
63
	right = left + widget.SelectWidth
aaronchen2k2k's avatar
aaronchen2k2k 已提交
64 65
	moduleInput := widget.NewSelectWidgetWithDefault("module", left, y, widget.SelectWidth, 6,
		i118Utils.I118Prt.Sprintf("module"),
66
		vari.ZentaoBugFileds.Modules, zentaoService.GetNameById(bug.Module, vari.ZentaoBugFileds.Modules),
aaronchen2k2k's avatar
aaronchen2k2k 已提交
67
		bugSelectFieldCheckEvent())
aaronchen2k2k's avatar
aaronchen2k2k 已提交
68 69 70 71 72
	ui.ViewMap["reportBug"] = append(ui.ViewMap["reportBug"], moduleInput.Name())

	// type
	left = right + ui.Space
	right = left + widget.SelectWidth
aaronchen2k2k's avatar
aaronchen2k2k 已提交
73 74
	typeInput := widget.NewSelectWidgetWithDefault("type", left, y, widget.SelectWidth, 6,
		i118Utils.I118Prt.Sprintf("category"),
75
		vari.ZentaoBugFileds.Categories, zentaoService.GetNameById(bug.Type, vari.ZentaoBugFileds.Categories),
aaronchen2k2k's avatar
aaronchen2k2k 已提交
76
		bugSelectFieldCheckEvent())
aaronchen2k2k's avatar
aaronchen2k2k 已提交
77 78 79 80 81
	ui.ViewMap["reportBug"] = append(ui.ViewMap["reportBug"], typeInput.Name())

	// version
	left = right + ui.Space
	right = left + widget.SelectWidth
aaronchen2k2k's avatar
aaronchen2k2k 已提交
82 83
	versionInput := widget.NewSelectWidgetWithDefault("version", left, y, widget.SelectWidth, 6,
		i118Utils.I118Prt.Sprintf("version"),
84
		vari.ZentaoBugFileds.Versions, zentaoService.GetNameById(bugVersion, vari.ZentaoBugFileds.Versions),
aaronchen2k2k's avatar
aaronchen2k2k 已提交
85
		bugSelectFieldCheckEvent())
aaronchen2k2k's avatar
aaronchen2k2k 已提交
86 87 88
	ui.ViewMap["reportBug"] = append(ui.ViewMap["reportBug"], versionInput.Name())

	// severity
aaronchen2k2k's avatar
aaronchen2k2k 已提交
89
	y += 7
90
	left = x + 2
aaronchen2k2k's avatar
aaronchen2k2k 已提交
91
	right = left + widget.SelectWidth
aaronchen2k2k's avatar
aaronchen2k2k 已提交
92 93
	severityInput := widget.NewSelectWidgetWithDefault("severity", left, y, widget.SelectWidth, 6,
		i118Utils.I118Prt.Sprintf("severity"),
94
		vari.ZentaoBugFileds.Severities, zentaoService.GetNameById(bug.Severity, vari.ZentaoBugFileds.Severities),
aaronchen2k2k's avatar
aaronchen2k2k 已提交
95
		bugSelectFieldCheckEvent())
aaronchen2k2k's avatar
aaronchen2k2k 已提交
96 97 98 99 100
	ui.ViewMap["reportBug"] = append(ui.ViewMap["reportBug"], severityInput.Name())

	// priority
	left = right + ui.Space
	right = left + widget.SelectWidth
aaronchen2k2k's avatar
aaronchen2k2k 已提交
101 102
	priorityInput := widget.NewSelectWidgetWithDefault("priority", left, y, widget.SelectWidth, 6,
		i118Utils.I118Prt.Sprintf("priority"),
103
		vari.ZentaoBugFileds.Priorities, zentaoService.GetNameById(bug.Pri, vari.ZentaoBugFileds.Priorities),
aaronchen2k2k's avatar
aaronchen2k2k 已提交
104
		bugSelectFieldCheckEvent())
aaronchen2k2k's avatar
aaronchen2k2k 已提交
105 106 107
	ui.ViewMap["reportBug"] = append(ui.ViewMap["reportBug"], priorityInput.Name())

	// msg
108 109 110
	y += 7
	left = x + 2
	reportBugMsg := widget.NewPanelWidget("reportBugMsg", left, y, widget.TextWidthFull-5, 2, "")
aaronchen2k2k's avatar
aaronchen2k2k 已提交
111 112 113 114
	reportBugMsg.Frame = false
	ui.ViewMap["reportBug"] = append(ui.ViewMap["reportBug"], reportBugMsg.Name())

	// buttons
115 116
	y += 6
	buttonX := maxX/2 - 49 + widget.LabelWidthSmall + ui.Space
aaronchen2k2k's avatar
aaronchen2k2k 已提交
117 118
	submitInput := widget.NewButtonWidgetAutoWidth("submitInput", buttonX, y,
		i118Utils.I118Prt.Sprintf("submit"), reportBug)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
119 120 121
	ui.ViewMap["reportBug"] = append(ui.ViewMap["reportBug"], submitInput.Name())

	cancelReportBugInput := widget.NewButtonWidgetAutoWidth("cancelReportBugInput",
aaronchen2k2k's avatar
aaronchen2k2k 已提交
122
		buttonX+11, y, i118Utils.I118Prt.Sprintf("cancel"), cancelReportBug)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
123 124
	ui.ViewMap["reportBug"] = append(ui.ViewMap["reportBug"], cancelReportBugInput.Name())

125
	ui.AddEventForInputWidgets(ui.ViewMap["reportBug"])
aaronchen2k2k's avatar
aaronchen2k2k 已提交
126

127 128
	vari.Cui.SetCurrentView("titleInput")

aaronchen2k2k's avatar
aaronchen2k2k 已提交
129 130 131 132 133
	return nil
}

func reportBug(g *gocui.Gui, v *gocui.View) error {
	titleView, _ := g.View("titleInput")
134
	stepsView, _ := g.View("stepsInput")
aaronchen2k2k's avatar
aaronchen2k2k 已提交
135 136 137 138 139 140 141
	moduleView, _ := g.View("module")
	typeView, _ := g.View("type")
	versionView, _ := g.View("version")
	severityView, _ := g.View("severity")
	priorityView, _ := g.View("priority")

	title := strings.TrimSpace(titleView.Buffer())
142 143
	stepsStr := strings.TrimSpace(stepsView.Buffer())

144 145 146 147 148
	moduleStr := strings.TrimSpace(ui.GetSelectedRowVal(moduleView))
	typeStr := strings.TrimSpace(ui.GetSelectedRowVal(typeView))
	versionStr := strings.TrimSpace(ui.GetSelectedRowVal(versionView))
	severityStr := strings.TrimSpace(ui.GetSelectedRowVal(severityView))
	priorityStr := strings.TrimSpace(ui.GetSelectedRowVal(priorityView))
aaronchen2k2k's avatar
aaronchen2k2k 已提交
149 150 151

	if title == "" {
		v, _ := vari.Cui.View("reportBugMsg")
aaronchen2k2k's avatar
aaronchen2k2k 已提交
152
		color.New(color.FgMagenta).Fprintf(v, i118Utils.ReadI18nJson("title_cannot_be_empty"))
aaronchen2k2k's avatar
aaronchen2k2k 已提交
153 154 155 156
		return nil
	}

	bug.Title = title
157
	bug.Steps = strings.Replace(stepsStr, "\n", "<br/>", -1)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
158
	bug.Type = zentaoService.GetIdByName(typeStr, vari.ZentaoBugFileds.Categories)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
159

160
	bug.Module = zentaoService.GetIdByName(moduleStr, vari.ZentaoBugFileds.Modules)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
161 162 163 164 165 166 167

	versionKey := zentaoService.GetIdByName(versionStr, vari.ZentaoBugFileds.Versions)
	build := make(map[string]string)
	if versionKey == "trunk" {
		build["0"] = "trunk"
	} else {
		build[versionKey] = versionStr
aaronchen2k2k's avatar
aaronchen2k2k 已提交
168
	}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
169 170
	bug.OpenedBuild = build

171 172
	bug.Severity = zentaoService.GetIdByName(severityStr, vari.ZentaoBugFileds.Severities)
	bug.Pri = zentaoService.GetIdByName(priorityStr, vari.ZentaoBugFileds.Priorities)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
173

174
	logUtils.PrintStructToCmd(bug)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
175 176 177 178 179
	ret := zentaoService.SubmitBug(bug, idInTask, stepIds)

	if ret {
		DestoryReportBugPage()
	}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
180 181 182 183

	return nil
}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
184
func bugSelectFieldCheckEvent() func(g *gocui.Gui, v *gocui.View) error {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208
	return func(g *gocui.Gui, v *gocui.View) error {
		name := v.Name()

		g.SetCurrentView(name)

		return nil
	}
}

func init() {
	filedValMap = make(map[string]int)
}

func cancelReportBug(g *gocui.Gui, v *gocui.View) error {
	DestoryReportBugPage()
	return nil
}

func DestoryReportBugPage() {
	for _, v := range ui.ViewMap["reportBug"] {
		vari.Cui.DeleteView(v)
		vari.Cui.DeleteKeybindings(v)
	}
}