Example #1
0
        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")));
            }
        }
Example #2
0
        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));
        }
Example #3
0
        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")));
            }
        }
Example #4
0
        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")));
            }
        }
Example #6
0
        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));
        }
Example #9
0
        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))));
            }
        }
Example #10
0
        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")));
            }
        }