public IHttpActionResult GetCommentHeaderForSection(int section_id) { using (WebhostEntities db = new WebhostEntities()) { Section section = db.Sections.Find(section_id); if (section == null) { return(ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.BadRequest, new ArgumentException("Invalid Section Id.")))); } WebhostUserPrinciple principal = (WebhostUserPrinciple)ActionContext.RequestContext.Principal; int id = ((WebhostIdentity)principal.Identity).User.Id; Faculty self = db.Faculties.Find(id); if (!self.Sections.Contains(section)) { return(ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.Unauthorized, new UnauthorizedAccessException("You are not a teacher for this class.")))); } int termId = DateRange.GetCurrentOrLastTerm(); if (section.CommentHeaders.Where(h => h.TermIndex == termId).Count() <= 0) { return(ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.NoContent, new ArgumentException("No Comment Header for this Term is saved.")))); } return(ResponseMessage(Request.CreateResponse(HttpStatusCode.OK, new CommentHeaderInfo(section.CommentHeaders.Where(h => h.TermIndex == termId).Single().id), "text/json"))); } }
public IHttpActionResult GetCurrentCommentHeaders([FromUri] bool includeComments = false) { List <CommentHeaderInfo> commentHeaders = new List <CommentHeaderInfo>(); using (WebhostEntities db = new WebhostEntities()) { WebhostUserPrinciple principal = (WebhostUserPrinciple)ActionContext.RequestContext.Principal; int id = ((WebhostIdentity)principal.Identity).User.Id; Faculty self = db.Faculties.Find(id); int termId = DateRange.GetCurrentOrLastTerm(); List <int> headers = new List <int>(); foreach (Section section in self.Sections.Where(s => s.Terms.Where(t => t.id == termId).Count() > 0).ToList()) { if (section.CommentHeaders.Where(h => h.TermIndex == termId).Count() > 0) { headers.Add(section.CommentHeaders.Where(h => h.TermIndex == termId).Single().id); } } foreach (int headerId in headers) { commentHeaders.Add(new RequestHandlers.CommentHeaderInfo(headerId, includeComments)); } } HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, commentHeaders, "text/json"); return(ResponseMessage(response)); }
public IHttpActionResult CreateNewCommentHeader(int section_id, [FromBody] String content) { using (WebhostEntities db = new WebhostEntities()) { Section section = db.Sections.Find(section_id); if (section == null) { return(ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.BadRequest, new ArgumentException("Invalid Section Id.")))); } WebhostUserPrinciple principal = (WebhostUserPrinciple)ActionContext.RequestContext.Principal; int id = ((WebhostIdentity)principal.Identity).User.Id; Faculty self = db.Faculties.Find(id); if (!self.Sections.Contains(section)) { return(ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.Unauthorized, new UnauthorizedAccessException("You are not a teacher for this class.")))); } int termId = DateRange.GetCurrentOrLastTerm(); if (section.CommentHeaders.Where(h => h.TermIndex == termId).Count() > 0) { return(ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.BadRequest, new ArgumentException("Header Already Exists. Use PUT to Update.")))); } CommentHeader newHeader = new CommentHeader() { id = db.CommentHeaders.OrderBy(h => h.id).ToList().Last().id + 1, SectionIndex = section_id, TermIndex = termId, HTML = "" }; content = CommentLetter.ConvertFromBase64String(content); newHeader.HTML = CommentLetter.CleanTags(content); try { db.CommentHeaders.Add(newHeader); db.SaveChanges(); } catch (Exception e) { return(ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.Conflict, e))); } return(ResponseMessage(Request.CreateResponse(HttpStatusCode.Created, new CommentHeaderInfo(newHeader.id), "text/json"))); } }
public IHttpActionResult PutSignupRequest(int activity_id, [FromUri] bool isRescend = false) { if (!DateRange.WeekendSignupsAreOpen) { return(ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.NotAcceptable, new MethodAccessException("Weekend Signups will be available at 11:30 on Friday.")))); } using (WebhostEntities db = new WebhostAPI.WebhostEntities()) { WebhostUserPrinciple principal = (WebhostUserPrinciple)ActionContext.RequestContext.Principal; int id = ((WebhostIdentity)principal.Identity).User.Id; WeekendActivity activity = db.WeekendActivities.Find(activity_id); if (activity == null) { return(ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.BadRequest, new InvalidOperationException("Invalid Activity Id.")))); } StudentSignup signup = db.StudentSignups.Find(activity_id, id); if (signup == null) // New Signup! { signup = new WebhostAPI.StudentSignup() { ActivityId = activity_id, Attended = false, IsBanned = false, IsRescended = isRescend, StudentId = id, TimeStamp = DateTime.Now }; db.StudentSignups.Add(signup); db.SaveChanges(); return(ResponseMessage(Request.CreateResponse(HttpStatusCode.Created, new StudentSignupInfo(activity_id, id), "text/json"))); } signup.IsRescended = isRescend; signup.TimeStamp = DateTime.Now; db.SaveChanges(); return(ResponseMessage(Request.CreateResponse(HttpStatusCode.OK, new StudentSignupInfo(activity_id, id), "text/json"))); } }
public IHttpActionResult GetStudentAttendance() { using (WebhostEntities db = new WebhostAPI.WebhostEntities()) { WebhostUserPrinciple principal = (WebhostUserPrinciple)ActionContext.RequestContext.Principal; int id = ((WebhostIdentity)principal.Identity).User.Id; Student self = db.Students.Find(id); DateRange thisWeek = DateRange.ThisAttendanceWeek; List <AttendanceInfo> output = new List <RequestHandlers.AttendanceInfo>(); foreach (AttendanceMarking mark in self.AttendanceMarkings.Where(a => a.AttendanceDate >= thisWeek.Start && a.AttendanceDate <= thisWeek.End).ToList()) { output.Add(new RequestHandlers.AttendanceInfo(mark.id)); } return(ResponseMessage(Request.CreateResponse(HttpStatusCode.OK, output, "text/json"))); } }
public IHttpActionResult GetAdvisees([FromUri] bool active = true) { List <StudentInfo> advisees = new List <StudentInfo>(); using (WebhostEntities db = new WebhostEntities()) { WebhostUserPrinciple principal = (WebhostUserPrinciple)ActionContext.RequestContext.Principal; int id = ((WebhostIdentity)principal.Identity).User.Id; Faculty self = db.Faculties.Find(id); foreach (Student student in self.Students.Where(s => s.isActive || !active).ToList()) { advisees.Add(new RequestHandlers.StudentInfo(student.ID)); } } HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, advisees, "text/json"); return(ResponseMessage(response)); }
public IHttpActionResult GetAttendances(int section_id, [FromUri] long datebinary = -1) { DateTime date = DateTime.Today; if (datebinary != -1) { date = DateTime.FromBinary(datebinary); } using (WebhostEntities db = new WebhostAPI.WebhostEntities()) { WebhostUserPrinciple principal = (WebhostUserPrinciple)ActionContext.RequestContext.Principal; int tid = ((WebhostIdentity)principal.Identity).User.Id; Faculty self = db.Faculties.Find(tid); Section section = db.Sections.Find(section_id); if (section == null) { return(ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.BadRequest, new ArgumentException("Invalid Section Id.")))); } if (!section.Teachers.Contains(self)) { return(ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.NotAcceptable, new InvalidOperationException("That is not your class.")))); } List <int> ids = section.AttendanceMarkings.Where(a => a.AttendanceDate.Equals(date)).Select(a => a.id).ToList(); List <AttendanceInfo> output = new List <AttendanceInfo>(); foreach (int id in ids) { output.Add(new RequestHandlers.AttendanceInfo(id)); } return(ResponseMessage(Request.CreateResponse(HttpStatusCode.OK, output, "text/json"))); } }
public IHttpActionResult GetCurrentSections([FromUri] bool detailed = false) { List <SectionInfo> sectionInfo = new List <SectionInfo>(); using (WebhostEntities db = new WebhostEntities()) { WebhostUserPrinciple principal = (WebhostUserPrinciple)ActionContext.RequestContext.Principal; int tid = ((WebhostIdentity)principal.Identity).User.Id; Faculty self = db.Faculties.Find(tid); int termId = DateRange.GetCurrentOrLastTerm(); List <int> sectionIds = self.Sections.Where(s => s.Terms.Where(t => t.id == termId).Count() > 0).Select(s => s.id).ToList(); foreach (int id in sectionIds) { sectionInfo.Add(new SectionInfo(id, detailed)); } } HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, sectionInfo, "text/json"); return(ResponseMessage(response)); }
public IHttpActionResult PutUpdatedStudentComment(int section_id, int student_id, [FromBody] StudentCommentInfo info, [FromUri] String format = "rtf") { using (WebhostEntities db = new WebhostEntities()) { Section section = db.Sections.Find(section_id); if (section == null) { return(ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.BadRequest, new ArgumentException("Invalid Section Id.")))); } if (section.Students.Where(s => s.ID == student_id).Count() <= 0) { return(ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.BadRequest, new ArgumentException("Invalid Student Id.")))); } WebhostUserPrinciple principal = (WebhostUserPrinciple)ActionContext.RequestContext.Principal; int id = ((WebhostIdentity)principal.Identity).User.Id; Faculty self = db.Faculties.Find(id); if (!self.Sections.Contains(section)) { return(ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.Unauthorized, new UnauthorizedAccessException("You are not a teacher for this class.")))); } int termId = DateRange.GetCurrentOrLastTerm(); if (section.CommentHeaders.Where(h => h.TermIndex == termId).Count() <= 0) { return(ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.NoContent, new ArgumentException("No Comment Header for this Term is saved.")))); } CommentHeader header = section.CommentHeaders.Where(h => h.TermIndex == termId).Single(); if (header.StudentComments.Where(com => com.StudentID == student_id).Count() <= 0) { return(ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.Conflict, new ArgumentException("No Comment for this student saved.")))); } StudentComment comment = header.StudentComments.Where(com => com.StudentID == student_id).Single(); Dictionary <String, int> GradeEntries = CommentLetter.GetGradeTableEntryData(); comment.EffortGradeID = GradeEntries[info.Grades.EngagementGrade]; comment.ExamGradeID = GradeEntries[info.Grades.ExamGrade]; comment.TermGradeID = GradeEntries[info.Grades.TrimesterGrade]; comment.FinalGradeID = GradeEntries[info.Grades.FinalGrade]; if (format.Equals("html")) { comment.HTML = CommentLetter.ConvertFromBase64String(info.HtmlContent); } else { comment.RTF = info.RtfContent; } try { db.SaveChanges(); } catch (Exception e) { return(ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.Conflict, e))); } return(ResponseMessage(Request.CreateResponse(HttpStatusCode.OK, new StudentCommentInfo(header.StudentComments.Where(com => com.StudentID == student_id).Single().id)))); } }
public IHttpActionResult PutUpdatedCommentHeader(int section_id, [FromBody] String content, [FromUri] String format = "rtf") { using (WebhostEntities db = new WebhostEntities()) { Section section = db.Sections.Find(section_id); if (section == null) { return(ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.BadRequest, new ArgumentException("Invalid Section Id.")))); } WebhostUserPrinciple principal = (WebhostUserPrinciple)ActionContext.RequestContext.Principal; int id = ((WebhostIdentity)principal.Identity).User.Id; Faculty self = db.Faculties.Find(id); if (!self.Sections.Contains(section)) { return(ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.Unauthorized, new UnauthorizedAccessException("You are not a teacher for this class.")))); } int termId = DateRange.GetCurrentOrLastTerm(); CommentHeader header; if (section.CommentHeaders.Where(h => h.TermIndex == termId).Count() <= 0) { header = new CommentHeader() { id = db.CommentHeaders.OrderBy(h => h.id).ToList().Last().id + 1, HTML = "", SectionIndex = section_id, TermIndex = termId }; db.CommentHeaders.Add(header); } else { header = section.CommentHeaders.Where(h => h.TermIndex == termId).Single(); } content = CommentLetter.ConvertFromBase64String(content); if (format.Equals("html")) { header.HTML = CommentLetter.ConvertFromBase64String(content); } else { header.RTF = Convert.FromBase64String(content); } try { db.SaveChanges(); } catch (Exception e) { return(ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.Conflict, e))); } return(ResponseMessage(Request.CreateResponse(HttpStatusCode.OK, new CommentHeaderInfo(header.id), "text/json"))); } }
public IHttpActionResult GetMyComments(string term, int year) { if (!(new List <String>() { "Fall", "Winter", "Spring" }).Contains(term)) { return(ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.NotAcceptable, new ArgumentOutOfRangeException(nameof(term))))); } using (WebhostEntities db = new WebhostAPI.WebhostEntities()) { Term theTerm = null; try { theTerm = db.Terms.Where(t => t.Name.Equals(term) && t.StartDate.Year == year).Single(); } catch (Exception e) { // Invalid term. return(ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.BadRequest, e))); } WebhostUserPrinciple principal = (WebhostUserPrinciple)ActionContext.RequestContext.Principal; int id = ((WebhostIdentity)principal.Identity).User.Id; byte[] zipData = null; using (MemoryStream ms = new MemoryStream()) { using (ZipArchive archive = new ZipArchive(ms, ZipArchiveMode.Create, true)) { List <int> CommentIds = new List <int>(); if (((WebhostIdentity)(principal.Identity)).User.IsTeacher()) { Faculty teacher = db.Faculties.Find(((WebhostIdentity)(principal.Identity)).User.Id); foreach (Section section in teacher.Sections.Where(s => s.CommentHeaders.Where(ch => ch.TermIndex == theTerm.id).Count() > 0).ToList()) { CommentHeader header = section.CommentHeaders.Where(ch => ch.TermIndex == theTerm.id).Single(); CommentIds.AddRange(header.StudentComments.Select(c => c.id).ToList()); } } else { Student student = db.Students.Find(((WebhostIdentity)(principal.Identity)).User.Id); CommentIds.AddRange(student.StudentComments.Where(com => com.CommentHeader.TermIndex == theTerm.id).Select(com => com.id).ToList()); } foreach (int cid in CommentIds) { CommentLetter letter = new CommentLetter(cid); byte[] pdfData = letter.Publish().Save(); ZipArchiveEntry entry = archive.CreateEntry(CommentLetter.EncodeSafeFileName(letter.Title) + ".pdf"); using (Stream stream = entry.Open()) { stream.Write(pdfData, 0, pdfData.Length); } } } ms.Seek(0, SeekOrigin.Begin); zipData = new byte[ms.Length]; for (long i = 0; i < ms.Length; i++) { zipData[i] = (byte)ms.ReadByte(); } } HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK); response.Content = new ByteArrayContent(zipData); response.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("inline") { FileName = "comments.zip" }; response.Content.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/octet-stream"); return(ResponseMessage(response)); } }
public IHttpActionResult PutMyAttendance(int section_id, [FromBody] List <AttendanceInfo> content) { using (WebhostEntities db = new WebhostAPI.WebhostEntities()) { WebhostUserPrinciple principal = (WebhostUserPrinciple)ActionContext.RequestContext.Principal; int tid = ((WebhostIdentity)principal.Identity).User.Id; Faculty self = db.Faculties.Find(tid); Section section = db.Sections.Find(section_id); if (section == null) { return(ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.BadRequest, new ArgumentException("Invalid Section Id.")))); } if (!section.Teachers.Contains(self)) { return(ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.NotAcceptable, new InvalidOperationException("That is not your class.")))); } List <int> outputIds = new List <int>(); int nextId = db.AttendanceMarkings.OrderBy(m => m.id).ToList().Last().id; foreach (AttendanceInfo info in content) { if (info.SectionId != section_id) { continue; } AttendanceMarking marking = null; if (section.AttendanceMarkings.Where(s => s.AttendanceDate.Equals(info.Date) && s.StudentID == info.StudentId).Count() > 0) { marking = section.AttendanceMarkings.Where(s => s.AttendanceDate.Equals(info.Date) && s.StudentID == info.StudentId).Single(); marking.MarkingIndex = AttendanceInfo.LookUpAttendanceMarking(info.Marking); marking.SubmittedBy = tid; if (!String.IsNullOrEmpty(info.Notes)) { marking.Notes += String.Format("[{0} {1}] {2}", self.FirstName, self.LastName, info.Notes); } marking.SubmissionTime = DateTime.Now; outputIds.Add(marking.id); } else { marking = new WebhostAPI.AttendanceMarking() { id = ++nextId, AttendanceDate = info.Date, MarkingIndex = AttendanceInfo.LookUpAttendanceMarking(info.Marking), SubmittedBy = tid, Notes = String.Format("[{0} {1}] {2}", self.FirstName, self.LastName, String.IsNullOrEmpty(info.Notes) ? "" : info.Notes), StudentID = info.StudentId, SectionIndex = info.SectionId, SubmissionTime = DateTime.Now }; db.AttendanceMarkings.Add(marking); outputIds.Add(marking.id); } } List <AttendanceInfo> output = new List <AttendanceInfo>(); foreach (int iid in outputIds) { output.Add(new RequestHandlers.AttendanceInfo(iid, true)); } return(ResponseMessage(Request.CreateResponse(HttpStatusCode.OK, output, "text/json"))); } }