コード例 #1
0
ファイル: problem.go プロジェクト: NUOG/GoOnlineJudge
//@URL: /admin/problems/ @method: GET
func (pc *AdminProblem) List() {
	restweb.Logger.Debug("Admin Problem List")

	problemModel := model.ProblemModel{}
	qry := make(map[string]string)

	qry["page"] = "1"
	if v, ok := pc.Input["page"]; ok { //指定页码
		qry["page"] = v[0]
	}
	count, err := problemModel.Count(qry)
	if err != nil {
		pc.Error(err.Error(), 500)
		return
	}

	restweb.Logger.Debug(count)
	var pageCount = (count-1)/config.ProblemPerPage + 1
	page, err := strconv.Atoi(qry["page"])
	if err != nil {
		pc.Error("args error", 400)
		return
	}
	if page > pageCount {
		pc.Error("args error", 400)
		return
	}

	qry["offset"] = strconv.Itoa((page - 1) * config.ProblemPerPage) //偏移位置
	qry["limit"] = strconv.Itoa(config.ProblemPerPage)               //每页问题数量
	pageData := pc.GetPage(page, pageCount)
	for k, v := range pageData {
		pc.Output[k] = v
	}

	proList, err := problemModel.List(qry)
	if err != nil {
		pc.Error(err.Error(), 400)
		return
	}

	pc.Output["Problem"] = proList
	pc.Output["Title"] = "Admin - Problem List"
	pc.Output["IsProblem"] = true
	pc.Output["IsList"] = true

	pc.RenderTemplate("view/admin/layout.tpl", "view/admin/problem_list.tpl")
}
コード例 #2
0
ファイル: problem.go プロジェクト: B88000005/GoOnlineJudge
// 列出特定数量的问题?pid=<pid>&titile=<titile>&source=<source>&page=<page>
//@URL:/problems @method:GET
func (pc *ProblemController) List() {
	restweb.Logger.Debug(pc.R.RemoteAddr + "visit Problem List")

	qry := make(map[string]string)
	url := "/problems?"

	// Search
	if v, ok := pc.Input["pid"]; ok { //按pid查找
		qry["pid"] = v[0]
		url += "pid=" + v[0] + "&"
		pc.Output["SearchPid"] = true
		pc.Output["SearchValue"] = v[0]
	} else if v, ok := pc.Input["title"]; ok { //按问题标题查找
		url += "title=" + v[0] + "&"
		pc.Output["SearchTitle"] = true
		pc.Output["SearchValue"] = v[0]
		for _, ep := range "+.?$|*^ " {
			v[0] = strings.Replace(v[0], string(ep), "\\"+string(ep), -1)
		}
		qry["title"] = v[0]
	} else if v, ok := pc.Input["source"]; ok { //按问题来源查找
		url += "source=" + v[0] + "&"
		pc.Output["SearchSource"] = true
		pc.Output["SearchValue"] = v[0]
		for _, ep := range "+.?$|*^ " {
			v[0] = strings.Replace(v[0], string(ep), "\\"+string(ep), -1)
		}
		qry["source"] = v[0]
	}
	pc.Output["URL"] = url

	// Page
	qry["page"] = "1"
	if v, ok := pc.Input["page"]; ok { //指定页码
		qry["page"] = v[0]
	}

	if pc.Privilege <= config.PrivilegePU {
		qry["status"] = "2" //strconv.Itoa(config.StatusAvailable)
	}

	problemModel := model.ProblemModel{}
	count, err := problemModel.Count(qry)
	if err != nil {
		pc.Error(err.Error(), 500)
		return
	}

	restweb.Logger.Debug(count)
	var pageCount = (count-1)/config.ProblemPerPage + 1
	page, err := strconv.Atoi(qry["page"])
	if err != nil {
		pc.Error("args error", 400)
		return
	}
	if page > pageCount {
		pc.Error("args error", 400)
		return
	}

	qry["offset"] = strconv.Itoa((page - 1) * config.ProblemPerPage) //偏移位置
	qry["limit"] = strconv.Itoa(config.ProblemPerPage)               //每页问题数量
	pageData := pc.GetPage(page, pageCount)
	for k, v := range pageData {
		pc.Output[k] = v
	}

	problemList, err := problemModel.List(qry)
	if err != nil {
		pc.Error("post error", 500)
		return
	}
	restweb.Logger.Debug(len(problemList))

	solutionModel := &model.SolutionModel{}
	achieve, _ := solutionModel.Achieve(pc.Uid, config.ModuleP, config.ModuleP)
	for _, p := range problemList {
		p.Flag = config.FlagNA
		for _, i := range achieve {
			if p.Pid == i {
				p.Flag = config.FLagAC
				break
			}
		}
		if p.Flag == config.FlagNA {
			args := make(map[string]string)
			args["pid"] = strconv.Itoa(p.Pid)
			args["module"] = strconv.Itoa(config.ModuleP)
			args["uid"] = pc.Uid
			l, _ := solutionModel.List(args)
			if len(l) > 0 {
				p.Flag = config.FLagER
			}
		}
	}

	pc.Output["Problem"] = problemList
	pc.Output["Privilege"] = pc.Privilege
	pc.Output["Time"] = restweb.GetTime()
	pc.Output["Title"] = "Problem List"
	pc.Output["IsProblem"] = true
	pc.RenderTemplate("view/layout.tpl", "view/problem_list.tpl")
}
コード例 #3
0
ファイル: problem.go プロジェクト: netyum/GoOnlineJudge
// 列出特定数量的问题,URL,/problem?list/pid?<pid>/titile?<titile>/source?<source>/page?<page>
func (this *ProblemController) List(w http.ResponseWriter, r *http.Request) {
	class.Logger.Debug(r.RemoteAddr + "visit Problem List")
	this.Init(w, r)

	args := this.ParseURL(r.URL.String())
	url := "/problem?list"

	// Search
	if v, ok := args["pid"]; ok { //按pid查找
		url += "/pid?" + v
		this.Data["SearchPid"] = true
		this.Data["SearchValue"] = v
	}
	if v, ok := args["title"]; ok { //按问题标题查找
		url += "/title?" + v
		this.Data["SearchTitle"] = true
		this.Data["SearchValue"] = v
	}
	if v, ok := args["source"]; ok { //按问题来源查找
		v = strings.Replace(v, "%20", " ", -1)
		args["source"] = v
		url += "/source?" + v
		this.Data["SearchSource"] = true
		this.Data["SearchValue"] = v
	}
	this.Data["URL"] = url

	// Page
	if _, ok := args["page"]; !ok { //指定页码
		args["page"] = "1"
	}

	problemModel := model.ProblemModel{}
	count, err := problemModel.Count(args)
	if err != nil {
		http.Error(w, err.Error(), 500)
		return
	}

	var pageCount = (count-1)/config.ProblemPerPage + 1
	page, err := strconv.Atoi(args["page"])
	if err != nil {
		http.Error(w, "args error", 400)
		return
	}
	if page > pageCount {
		http.Error(w, "args error", 400)
		return
	}

	args["offset"] = strconv.Itoa((page - 1) * config.ProblemPerPage) //偏移位置
	args["limit"] = strconv.Itoa(config.ProblemPerPage)               //每页问题数量
	pageData := this.GetPage(page, pageCount)
	for k, v := range pageData {
		this.Data[k] = v
	}

	problemList, err := problemModel.List(args)
	if err != nil {
		http.Error(w, "post error", 500)
		return
	}

	this.Data["Problem"] = problemList
	this.Data["Privilege"] = this.Privilege
	this.Data["Time"] = this.GetTime()
	this.Data["Title"] = "Problem List"
	this.Data["IsProblem"] = true
	err = this.Execute(w, "view/layout.tpl", "view/problem_list.tpl")
	if err != nil {
		http.Error(w, "tpl error", 500)
		return
	}
}