forked from sdnuacmicpc/sdnuoj
/
SolutionController.cs
106 lines (92 loc) · 3.42 KB
/
SolutionController.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
using System;
using System.Collections.Generic;
using System.Web.Mvc;
using SDNUOJ.Configuration;
using SDNUOJ.Controllers.Attributes;
using SDNUOJ.Controllers.Core;
using SDNUOJ.Entity;
namespace SDNUOJ.Controllers
{
public class SolutionController : BaseController
{
/// <summary>
/// 代码显示页面
/// </summary>
/// <param name="id">提交ID</param>
/// <returns>操作后的结果</returns>
[Function(PageType.SourceView)]
[Authorize]
[OutputCache(CacheProfile = "DynamicPageCache", VaryByParam = "id", VaryByCustom = "nm")]
public ActionResult View(Int32 id = -1)
{
return View(SolutionManager.GetSourceCode(id));
}
/// <summary>
/// 代码错误信息显示页面
/// </summary>
/// <param name="id">提交ID</param>
/// <returns>操作后的结果</returns>
[Function(PageType.MainStatus)]
[OutputCache(CacheProfile = "DynamicPageCache", VaryByParam = "id")]
public ActionResult Info(Int32 id = -1)
{
return View(SolutionErrorManager.GetSolutionError(id));
}
/// <summary>
/// 获取当前用户所有题目提交列表
/// </summary>
/// <returns>题目列表Json</returns>
[Authorize]
public ActionResult SubmitList()
{
Tuple<List<Int32>, List<Int32>> list = SolutionManager.GetUserSubmitList();
var obj = (list == null ? null : new
{
solved = list.Item1,
unsolved = list.Item2
});
return Json(obj, JsonRequestBehavior.AllowGet);
}
/// <summary>
/// 获取当前用户所有通过的源代码下载
/// </summary>
/// <returns>源代码压缩包</returns>
[Authorize]
public ActionResult SourceCodes()
{
Byte[] data = SolutionManager.GetAcceptedSourceCodeList();
return File(data, "application/zip", "SourceCodes.zip");
}
/// <summary>
/// 代码提交
/// </summary>
/// <param name="id">题目ID</param>
/// <param name="form">Form集合</param>
/// <returns>操作后的结果</returns>
[Function(PageType.MainSubmit)]
[HttpPost]
[Authorize]
[ValidateAntiForgeryToken]
[ValidateInput(false)]
public ActionResult Submit(Int32 id, FormCollection form)
{
SolutionEntity entity = new SolutionEntity()
{
ProblemID = id,
SourceCode = form["code"],
LanguageType = LanguageType.FromLanguageID(form["lang"])
};
Dictionary<String, Byte> supportLanguages = LanguageManager.MainSubmitSupportLanguages;
if (!supportLanguages.ContainsValue(entity.LanguageType.ID))
{
return RedirectToErrorMessagePage("This problem does not support this programming language.");
}
String userip = this.GetCurrentUserIP();
if (!SolutionManager.InsertSolution(entity, userip))
{
return RedirectToErrorMessagePage("Failed to submit your solution!");
}
return RedirectToAction("List", "Status");
}
}
}