PageRenderTime 45ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/Backup/AssessTrack/Models/Managers/TagManager.cs

https://github.com/robperson/AssessTrack
C# | 311 lines | 270 code | 41 blank | 0 comment | 30 complexity | 20cad6de94653ea4cc25d3ef06ab40fb MD5 | raw file
  1. using System;
  2. using System.Data;
  3. using System.Configuration;
  4. using System.Linq;
  5. using System.Web;
  6. using System.Web.Security;
  7. using System.Web.UI;
  8. using System.Web.UI.HtmlControls;
  9. using System.Web.UI.WebControls;
  10. using System.Web.UI.WebControls.WebParts;
  11. using System.Xml.Linq;
  12. using System.Web.Mvc;
  13. using System.Collections.Generic;
  14. using AssessTrack.Helpers;
  15. using AssessTrack.Models.ViewModels;
  16. namespace AssessTrack.Models
  17. {
  18. public partial class AssessTrackDataRepository
  19. {
  20. public Tag GetTagByName(CourseTerm courseTerm, string name)
  21. {
  22. return courseTerm.Tags.SingleOrDefault(t => t.Name == name);
  23. }
  24. public List<Tag> GetTags(CourseTerm courseTerm, bool includeEmptyTags)
  25. {
  26. var tags = courseTerm.Tags.ToList();
  27. if (!includeEmptyTags)
  28. {
  29. tags = tags.Where(t => GetTaggedItems(t).Count > 0).ToList();
  30. }
  31. return tags.OrderBy(t => t.Name).ToList();
  32. }
  33. public List<Tag> GetCourseOutcomes(CourseTerm courseTerm, bool includeEmptyTags)
  34. {
  35. var tags = courseTerm.Tags.Where(t => t.IsCourseOutcome).ToList();
  36. if (!includeEmptyTags)
  37. {
  38. tags = tags.Where(t => GetTaggedItems(t).Count > 0).ToList();
  39. }
  40. return tags.OrderBy(t => t.Name).ToList();
  41. }
  42. public List<Tag> GetNonCourseOutcomes(CourseTerm courseTerm, bool includeEmptyTags)
  43. {
  44. var tags = courseTerm.Tags.Where(t => !t.IsCourseOutcome).ToList();
  45. if (!includeEmptyTags)
  46. {
  47. tags = tags.Where(t => GetTaggedItems(t).Count > 0).ToList();
  48. }
  49. return tags.OrderBy(t => t.Name).ToList();
  50. }
  51. public Tag GetTagByID(CourseTerm courseTerm, Guid id)
  52. {
  53. return courseTerm.Tags.SingleOrDefault(t => t.TagID == id);
  54. }
  55. public SelectList GetTagsSelectList(CourseTerm courseTerm)
  56. {
  57. return GetTagsSelectList(courseTerm,null);
  58. }
  59. public SelectList GetTagsSelectList(CourseTerm courseTerm, object selectedValue)
  60. {
  61. return new SelectList(courseTerm.Tags, "TagID", "Name", selectedValue);
  62. }
  63. public List<Assessment> GetTaggedAssessments(Tag tag)
  64. {
  65. var Assessments = from aTag in dc.AssessmentTags
  66. join a in dc.Assessments on aTag.AssessmentID equals a.AssessmentID
  67. where aTag.TagID == tag.TagID
  68. select a;
  69. return Assessments.ToList();
  70. }
  71. public void AddTagToAssessment(Tag tag, Assessment assessment)
  72. {
  73. AddTagToAssessment(tag.TagID,assessment.AssessmentID);
  74. }
  75. public void AddTagToAssessment(Guid tagid, Guid assessmentid)
  76. {
  77. dc.sp_AddAssessmentTag(tagid, assessmentid);
  78. }
  79. public bool AssessmentHasTag(Assessment assessment, Tag tag)
  80. {
  81. int tagCount = dc.AssessmentTags.Count(at => at.TagID == tag.TagID && at.AssessmentID == assessment.AssessmentID);
  82. return tagCount > 0;
  83. }
  84. public void DeleteTagFromAssessment(Assessment assessment, Tag tag)
  85. {
  86. dc.sp_DeleteTagFromAssessment(tag.TagID, assessment.AssessmentID);
  87. }
  88. public void DeleteAllTagsFromAssessment(Assessment assessment)
  89. {
  90. List<Tag> tags = GetTagsForAssessment(assessment);
  91. foreach (Tag tag in tags)
  92. {
  93. DeleteTagFromAssessment(assessment, tag);
  94. }
  95. }
  96. public List<Tag> GetTagsForAssessment(Assessment assessment)
  97. {
  98. var tags = from aTag in dc.AssessmentTags
  99. join a in dc.Assessments on aTag.AssessmentID equals a.AssessmentID
  100. join t in dc.Tags on aTag.TagID equals t.TagID
  101. where a.AssessmentID == assessment.AssessmentID
  102. select t;
  103. return tags.ToList();
  104. }
  105. public List<Question> GetTaggedQuestions(Tag tag)
  106. {
  107. var Questions = from qTag in dc.QuestionTags
  108. join q in dc.Questions on qTag.QuestionID equals q.QuestionID
  109. where qTag.TagID == tag.TagID
  110. select q;
  111. return Questions.ToList();
  112. }
  113. public void AddTagToQuestion(Tag tag, Question question)
  114. {
  115. dc.sp_AddQuestionTag(tag.TagID, question.QuestionID);
  116. }
  117. public bool QuestionHasTag(Question question, Tag tag)
  118. {
  119. QuestionTag qTag = dc.QuestionTags.SingleOrDefault(qt => qt.TagID == tag.TagID && qt.QuestionID == question.QuestionID);
  120. return (qTag != null);
  121. }
  122. public void DeleteTagFromQuestion(Question question, Tag tag)
  123. {
  124. dc.sp_DeleteTagFromQuestion(tag.TagID, question.QuestionID);
  125. }
  126. public void DeleteAllTagsFromQuestion(Question question)
  127. {
  128. List<Tag> tags = GetTagsForQuestion(question);
  129. foreach (Tag tag in tags)
  130. {
  131. DeleteTagFromQuestion(question, tag);
  132. }
  133. }
  134. public List<Tag> GetTagsForQuestion(Question question)
  135. {
  136. var tags = from qTag in dc.QuestionTags
  137. join q in dc.Questions on qTag.QuestionID equals q.QuestionID
  138. join t in dc.Tags on qTag.TagID equals t.TagID
  139. where q.QuestionID == question.QuestionID
  140. select t;
  141. return tags.ToList();
  142. }
  143. public List<Answer> GetTaggedAnswers(Tag tag)
  144. {
  145. var Answers = from aTag in dc.AnswerTags
  146. join a in dc.Answers on aTag.AnswerID equals a.AnswerID
  147. where aTag.TagID == tag.TagID
  148. select a;
  149. return Answers.ToList();
  150. }
  151. public void AddTagToAnswer(Tag tag, Answer answer)
  152. {
  153. dc.sp_AddAnswerTag(tag.TagID, answer.AnswerID);
  154. }
  155. public bool AnswerHasTag(Answer answer, Tag tag)
  156. {
  157. AnswerTag aTag = dc.AnswerTags.SingleOrDefault(at => at.TagID == tag.TagID && at.AnswerID == answer.AnswerID);
  158. return (aTag != null);
  159. }
  160. public void DeleteTagFromAnswer(Answer answer, Tag tag)
  161. {
  162. dc.sp_DeleteTagFromAnswer(tag.TagID, answer.AnswerID);
  163. }
  164. public void DeleteAllTagsFromAnswer(Answer answer)
  165. {
  166. List<Tag> tags = GetTagsForAnswer(answer);
  167. foreach (Tag tag in tags)
  168. {
  169. DeleteTagFromAnswer(answer, tag);
  170. }
  171. }
  172. public List<Tag> GetTagsForAnswer(Answer answer)
  173. {
  174. var tags = from ansTag in dc.AnswerTags
  175. join a in dc.Answers on ansTag.AnswerID equals a.AnswerID
  176. join t in dc.Tags on ansTag.TagID equals t.TagID
  177. where a.AnswerID == answer.AnswerID
  178. select t;
  179. return tags.ToList();
  180. }
  181. public List<ITaggable> GetTaggedItems(Tag tag)
  182. {
  183. List<ITaggable> items = new List<ITaggable>();
  184. foreach (var answer in GetTaggedAnswers(tag))
  185. {
  186. items.Add(answer);
  187. }
  188. foreach (var question in GetTaggedQuestions(tag))
  189. {
  190. items.Add(question);
  191. }
  192. foreach (var assessment in GetTaggedAssessments(tag))
  193. {
  194. items.Add(assessment);
  195. }
  196. return items;
  197. }
  198. public double GetStudentPfmeForTag(Tag tag, Profile profile)
  199. {
  200. double totalweight = 0.0;
  201. double totalpoints = 0.0;
  202. List<ITaggable> items = GetTaggedItems(tag);
  203. foreach (var taggeditem in items)
  204. {
  205. totalpoints += taggeditem.Score(profile);
  206. totalweight += taggeditem.Weight;
  207. }
  208. double avg = totalpoints / totalweight * 100;
  209. double pfme = GradeHelpers.GetPfme(avg);
  210. return pfme;
  211. }
  212. public double GetStudentScoreForTag(Tag tag, Profile profile)
  213. {
  214. double totalweight = 0.0;
  215. double totalpoints = 0.0;
  216. List<ITaggable> items = GetTaggedItems(tag);
  217. foreach (var taggeditem in items)
  218. {
  219. totalpoints += taggeditem.Score(profile);
  220. totalweight += taggeditem.Weight;
  221. }
  222. double avg = totalpoints / totalweight * 100;
  223. if (double.IsNaN(avg))
  224. {
  225. avg = -100.0;
  226. }
  227. return avg;
  228. }
  229. public List<TagViewModel> GetStrugglingTags(Profile p, CourseTerm t)
  230. {
  231. var tags = from tag in t.Tags
  232. let score = GetStudentScoreForTag(tag, p)
  233. where score <= 65.0 && score >= 0.0
  234. select new TagViewModel() { Tag = tag, Score = GetStudentScoreForTag(tag, p) };
  235. return tags.ToList();
  236. }
  237. public void DeleteTagFromTaggable(Tag tag, ITaggable taggable)
  238. {
  239. if (taggable is Answer)
  240. {
  241. DeleteTagFromAnswer(taggable as Answer, tag);
  242. }
  243. else if (taggable is Question)
  244. {
  245. DeleteTagFromQuestion(taggable as Question, tag);
  246. }
  247. else if (taggable is Assessment)
  248. {
  249. DeleteTagFromAssessment(taggable as Assessment, tag);
  250. }
  251. else
  252. {
  253. throw new Exception("Cannot delete unsupported ITaggable object.");
  254. }
  255. }
  256. public void DeleteTag(Tag tag)
  257. {
  258. List<ITaggable> items = GetTaggedItems(tag);
  259. foreach (var item in items)
  260. {
  261. DeleteTagFromTaggable(tag, item);
  262. }
  263. var progOutcomeRelationships = from tpo in dc.TagProgramOutcomes
  264. where tpo.Tag == tag
  265. select tpo;
  266. dc.TagProgramOutcomes.DeleteAllOnSubmit(progOutcomeRelationships);
  267. dc.Tags.DeleteOnSubmit(tag);
  268. }
  269. }
  270. }