/5 semester/MvсTester/MvсTester/Controllers/TestController.cs

https://github.com/Lesssnik/Labs · C# · 263 lines · 241 code · 22 blank · 0 comment · 89 complexity · 9635bae17cbac2224783bbb1458c218f MD5 · raw file

  1. using System;
  2. using System.Linq;
  3. using System.Web.Mvc;
  4. using System.Web.Script.Serialization;
  5. using MvсTester.Models;
  6. namespace MvсTester.Controllers
  7. {
  8. public class TestController : Controller
  9. {
  10. TesterEntities testerDB = new TesterEntities();
  11. public ActionResult Search() { return View(testerDB.Tests.ToList()); }
  12. [HttpPost]
  13. public ActionResult Search(FormCollection values)
  14. {
  15. string text = values["SearchText"];
  16. return View(testerDB.Tests.Where(t => t.Name.Contains(text)).ToList());
  17. }
  18. public ActionResult AddTest() { return View(); }
  19. [HttpPost]
  20. public ActionResult AddTest(TestModel model)
  21. {
  22. if (ModelState.IsValid)
  23. {
  24. Test test = new Test();
  25. test.Author = Session["UserLogin"].ToString();
  26. test.Description = model.Description;
  27. test.Name = model.Name;
  28. testerDB.Tests.Add(test);
  29. testerDB.SaveChanges();
  30. return RedirectToAction("AddQuestions", new { testId = test.Id });
  31. }
  32. return View();
  33. }
  34. public ActionResult AddQuestions(QuestionsModel model)
  35. {
  36. if (model.Name != null)
  37. {
  38. var question = new Question();
  39. question.Text = model.Name;
  40. if (model.Question1 != null)
  41. question.Answers.Add(new Answer() { Text = model.Question1, IsTrue = model.Question1Check });
  42. if (model.Question2 != null)
  43. question.Answers.Add(new Answer() { Text = model.Question2, IsTrue = model.Question2Check });
  44. if (model.Question3 != null)
  45. question.Answers.Add(new Answer() { Text = model.Question3, IsTrue = model.Question3Check });
  46. if (model.Question4 != null)
  47. question.Answers.Add(new Answer() { Text = model.Question4, IsTrue = model.Question4Check });
  48. if (model.Question5 != null)
  49. question.Answers.Add(new Answer() { Text = model.Question5, IsTrue = model.Question5Check });
  50. if (model.Question6 != null)
  51. question.Answers.Add(new Answer() { Text = model.Question6, IsTrue = model.Question6Check });
  52. var Id = Guid.Empty;
  53. bool res = true;
  54. if (model.Id != Guid.Empty)
  55. Id = model.Id;
  56. else
  57. res = Guid.TryParse(Request["testId"], out Id);
  58. if (res)
  59. {
  60. var test = testerDB.Tests.Where(t => t.Id.CompareTo(Id) == 0).First();
  61. test.Questions.Add(question);
  62. testerDB.SaveChanges();
  63. return View(model);
  64. }
  65. else return RedirectToAction("404");
  66. }
  67. return View(model);
  68. }
  69. public ActionResult Clear()
  70. {
  71. return null;
  72. }
  73. public ActionResult EditTest(string id)
  74. {
  75. Guid Id = Guid.Empty;
  76. bool res = Guid.TryParse(id, out Id);
  77. if (res)
  78. {
  79. var test = testerDB.Tests.Where(t => t.Id.CompareTo(Id) == 0).First();
  80. return View(test);
  81. }
  82. else return RedirectToAction("404");
  83. }
  84. [HttpPost]
  85. public ActionResult EditTest(Test model)
  86. {
  87. if (ModelState.IsValid)
  88. {
  89. Test test = testerDB.Tests.Where(t => t.Id.CompareTo(model.Id) == 0).First();
  90. test.Description = model.Description;
  91. test.Name = model.Name;
  92. testerDB.SaveChanges();
  93. return RedirectToAction("EditQuestions", new { testId = test.Id });
  94. }
  95. return View();
  96. }
  97. public ActionResult EditQuestions(FormCollection values)
  98. {
  99. ViewBag.Id = Request["testId"];
  100. Guid Id = Guid.Empty;
  101. bool res = Guid.TryParse(Request["testId"], out Id);
  102. if (res)
  103. {
  104. var lst = testerDB.Tests.Where(t => t.Id.CompareTo(Id) == 0).First().Questions.Select(q => q.Text);
  105. ViewBag.Questions = new SelectList(lst);
  106. if (values["add"] != null)
  107. {
  108. var question = new Question();
  109. question.Text = values["Name"];
  110. if (values["Question1"] != string.Empty)
  111. question.Answers.Add(new Answer() { Text = values["Question1"], IsTrue = bool.Parse(values["Question1Check"]) });
  112. if (values["Question2"] != string.Empty)
  113. question.Answers.Add(new Answer() { Text = values["Question2"], IsTrue = bool.Parse(values["Question2Check"]) });
  114. if (values["Question3"] != string.Empty)
  115. question.Answers.Add(new Answer() { Text = values["Question3"], IsTrue = bool.Parse(values["Question3Check"]) });
  116. if (values["Question4"] != string.Empty)
  117. question.Answers.Add(new Answer() { Text = values["Question4"], IsTrue = bool.Parse(values["Question4Check"]) });
  118. if (values["Question5"] != string.Empty)
  119. question.Answers.Add(new Answer() { Text = values["Question5"], IsTrue = bool.Parse(values["Question5Check"]) });
  120. if (values["Question6"] != string.Empty)
  121. question.Answers.Add(new Answer() { Text = values["Question6"], IsTrue = bool.Parse(values["Question6Check"]) });
  122. testerDB.Tests.Where(t => t.Id.ToString().CompareTo(values["testId"]) == 0).First().Questions.Add(question);
  123. return View("AddQuestions", values["testId"]);
  124. }
  125. else if (values["save"] != null)
  126. return RedirectToAction("Index", "Home");
  127. else return View();
  128. }
  129. else return RedirectToAction("404");
  130. }
  131. public ActionResult GetQuestion(string testid, string question)
  132. {
  133. Guid Id = Guid.Empty;
  134. bool res = Guid.TryParse(testid, out Id);
  135. if (res)
  136. {
  137. var test = testerDB.Tests.Where(t => t.Id.CompareTo(Id) == 0).First();
  138. var result = test.Questions.Where(q => q.Text.Trim().CompareTo(question) == 0).First();
  139. return Json(new JavaScriptSerializer().Serialize(result));
  140. }
  141. else return Json(null);
  142. }
  143. public ActionResult Test(FormCollection values)
  144. {
  145. if (values.AllKeys.Count() == 0)
  146. {
  147. Guid Id = Guid.Empty;
  148. bool res = Guid.TryParse(Request["testId"], out Id);
  149. if (res)
  150. return View(testerDB.Tests.Where(t => t.Id.CompareTo(Id) == 0).First());
  151. else return RedirectToAction("404", "Home");
  152. }
  153. else
  154. {
  155. Guid Id = Guid.Empty;
  156. bool res = Guid.TryParse(Request["testId"], out Id);
  157. if (res)
  158. {
  159. var test = testerDB.Tests.Where(t => t.Id.CompareTo(Id) == 0).First();
  160. var questions = test.Questions;
  161. int trueAns = 0, realTrueAns = 0, selectTrue = 0;
  162. Guid userId = Guid.Empty;
  163. if (Session["UserLogin"] != null)
  164. {
  165. string login = Session["UserLogin"].ToString();
  166. userId = testerDB.Users.Where(u => u.Login.CompareTo(login) == 0).First().ID;
  167. }
  168. var stat = new Statistic() { TestName = test.Name, UserId = userId };
  169. int number = 0;
  170. bool b = false;
  171. int index = 0;
  172. for (int i = 0; i < questions.Count; i++)
  173. {
  174. realTrueAns = 0;
  175. foreach (var ans in questions[i].Answers)
  176. if (ans.IsTrue == true)
  177. realTrueAns++;
  178. selectTrue = 0;
  179. for (int k = 0; k < questions[i].Answers.Count; k++)
  180. {
  181. if (values[index][0] == 't')
  182. selectTrue++;
  183. index++;
  184. }
  185. if (selectTrue == realTrueAns)
  186. {
  187. for (int j = 0; j < questions[i].Answers.Count; j++)
  188. {
  189. trueAns = 0;
  190. if (questions[i].Answers[j].IsTrue == true)
  191. {
  192. number = 0;
  193. foreach (var val in values)
  194. {
  195. if (val.ToString().CompareTo(questions[i].Text + '_' + questions[i].Answers[j].Text) == 0)
  196. {
  197. var temp = values[number];
  198. if (temp[0] == 't')
  199. b = true;
  200. else b = false;
  201. number = 0;
  202. break;
  203. }
  204. number++;
  205. }
  206. if (b == true)
  207. trueAns++;
  208. }
  209. }
  210. if (realTrueAns == trueAns)
  211. {
  212. stat.CorrectQuestions.Add(new StatisticItem() { Correct = questions[i].Text });
  213. }
  214. }
  215. }
  216. testerDB.Statistics.Add(stat);
  217. testerDB.SaveChanges();
  218. return RedirectToAction("Result", new { statId = stat.ID });
  219. }
  220. else return RedirectToAction("404");
  221. }
  222. }
  223. public ActionResult Result()
  224. {
  225. Guid Id = Guid.Empty;
  226. bool res = Guid.TryParse(Request["statId"], out Id);
  227. if (res)
  228. {
  229. var stats = testerDB.Statistics.Where(s => s.ID.CompareTo(Id) == 0);
  230. if (stats.Count() != 0)
  231. {
  232. var stat = stats.First();
  233. var test = testerDB.Tests.Where(t => t.Name.CompareTo(stat.TestName) == 0).First();
  234. return View(new Tuple<Statistic, Test>(stat, test));
  235. }
  236. else return View();
  237. }
  238. else return View();
  239. }
  240. }
  241. }