コード例 #1
0
 public List<Assessment> GetAllNonTestBankAssessments(CourseTerm courseTerm, bool includeExtraCredit, AssessmentType filterby, CourseTermMember member)
 {
     var assessments = from asmt in (courseTerm != null)? courseTerm.Assessments.AsQueryable() : dc.Assessments.AsQueryable()
             where !asmt.AssessmentType.QuestionBank && asmt.IsVisible
             select asmt;
     if (!includeExtraCredit)
         assessments = assessments.Where(a => !a.IsExtraCredit);
     if (filterby != null)
         assessments = assessments.Where(a => a.AssessmentType == filterby);
     if (member.AccessLevel == 1 )
         assessments = assessments.Where(a => a.Section == null || (member.Section.HasValue && a.Section.Value == member.Section.Value));
     return assessments.OrderBy(a => a.Name).ToList();
 }
コード例 #2
0
        public void CreateCourseTerm(CourseTerm courseTerm)
        {
            using (TransactionScope scope = new TransactionScope())
            {
                Guid userid = GetLoggedInProfile().MembershipID;
                dc.CourseTerms.InsertOnSubmit(courseTerm);
                CourseTermMember member = new CourseTermMember()
                {
                    CourseTerm = courseTerm,
                    MembershipID = userid,
                    AccessLevel = 10
                };
                dc.CourseTermMembers.InsertOnSubmit(member);
                dc.SubmitChanges();

                scope.Complete();
            }
        }
コード例 #3
0
 public bool JoinCourseTerm(CourseTerm courseTerm)
 {
     Profile profile = GetLoggedInProfile();
     if (IsCourseTermMember(courseTerm, profile))
         return false;
     CourseTermMember member = new CourseTermMember()
     {
         CourseTerm = courseTerm,
         Profile = profile,
         AccessLevel = 1
     };
     dc.CourseTermMembers.InsertOnSubmit(member);
     dc.SubmitChanges();
     return true;
 }
コード例 #4
0
        public ActionResult AcceptInvite(Guid id, string userName, string password, string confirmPassword)
        {
            Invitation invite = dataRepository.Single<Invitation>(inv => inv.InvitationID == id);

            if (invite == null)
            {
                FlashMessageHelper.AddMessage("Invite not found.");
                return RedirectToRoute(new { action = "Index", controller = "Home" });
            }
            using (TransactionScope scope = new TransactionScope())
            {
                string email = invite.Email;
                ViewData["PasswordLength"] = MembershipService.MinPasswordLength;

                if (ValidateRegistration(userName, email, password, confirmPassword))
                {
                    // Attempt to register the user
                    MembershipCreateStatus createStatus = MembershipService.CreateUser(userName, password, email);

                    if (createStatus == MembershipCreateStatus.Success)
                    {
                        Guid membershipID = UserHelpers.GetIDFromUsername(userName);
                        Profile profile = new Profile();
                        UpdateModel(profile);
                        if (ModelState.IsValid)
                        {
                            try
                            {
                                profile.MembershipID = membershipID;
                                dataRepository.CreateProfile(profile);

                                //Create site membership
                                SiteMember sitemember = new SiteMember()
                                {
                                    AccessLevel = invite.SiteAccessLevel,
                                    Site = invite.Site,
                                    Profile = profile
                                };

                                //Create courseterm member
                                if (invite.CourseTerm != null)
                                {
                                    CourseTermMember ctmember = new CourseTermMember()
                                    {
                                        AccessLevel = invite.CourseTermAccessLevel.Value,
                                        CourseTerm = invite.CourseTerm,
                                        Profile = profile
                                    };
                                }

                                invite.Accepted = true;
                                dataRepository.Save();
                                FormsAuth.SignIn(userName, false /* createPersistentCookie */);
                                scope.Complete();
                                return RedirectToAction("Index", "Home");
                            }
                            catch
                            {
                                ModelState.AddModelErrors(profile.GetRuleViolations());
                            }

                        }
                    }
                    else
                    {
                        ModelState.AddModelError("_FORM", ErrorCodeToString(createStatus));
                    }
                }

            }
            // If we got this far, something failed, redisplay form
            return View(invite);
        }
コード例 #5
0
        public double GetFinalGrade(CourseTermMember member)
        {
            if (member.AccessLevel != 1)
            {
                throw new Exception("Only Students have Final Grades.");
            }

            var loadOptions = new DataLoadOptions();
            loadOptions.LoadWith<AssessmentType>(at => at.Assessments);
            loadOptions.LoadWith<Assessment>(asmt => asmt.SubmissionRecords);
            loadOptions.LoadWith<Assessment>(asmt => asmt.Questions);
            loadOptions.LoadWith<SubmissionRecord>(sr => sr.Responses);
            dc.LoadOptions = loadOptions;
            double finalgrade = 0.0;
            double coursTermPoints = 0.0;
            double courseTermMaxPoints = 0.0;
            var assessmentTypes = from asmntType in dc.AssessmentTypes
                                  where asmntType.CourseTermID == member.CourseTermID
                                  && !asmntType.QuestionBank
                                  select asmntType;
            foreach (AssessmentType asmtType in assessmentTypes)
            {
                double typePoints = 0.0; //total points scored by student
                double typeMaxPoints = 0.0; //maximum points achievable

                foreach (Assessment assessment in asmtType.Assessments)
                {

                    SubmissionRecord record = (from s in assessment.SubmissionRecords
                                               where s.StudentID == member.MembershipID
                                               orderby s.SubmissionDate descending
                                               select s).FirstOrDefault();
                    if (record != null)
                    {
                        typePoints += record.Score;
                    }

                    typeMaxPoints += assessment.Weight;
                }
                if (typeMaxPoints > 0.0)
                {
                    courseTermMaxPoints += asmtType.Weight;
                }
                else if (typePoints > 0.0)
                //if all Assessments are extra credit,
                //set typeMaxPoints to 1 so we have something to divide by
                {
                    courseTermMaxPoints += asmtType.Weight;
                    typeMaxPoints = 1.0;
                }
                else
                {
                    // no scores to add, so continue
                    continue;
                }

                coursTermPoints += ((typePoints / typeMaxPoints) * asmtType.Weight);

            }
            finalgrade = ((coursTermPoints / courseTermMaxPoints) * 100);
            return finalgrade;
        }
コード例 #6
0
        public List<Assessment> GetUpcomingAssessments(CourseTerm courseTerm, CourseTermMember member)
        {
            var assessments = (from asmt in courseTerm.Assessments
                    where asmt.DueDate.CompareTo(DateTime.Now) >= 0
                    && asmt.IsVisible
                    && !asmt.AssessmentType.QuestionBank

                    select asmt);
            if (member.AccessLevel == 1)
            {
                var filteredAssessments = assessments.Where(a => a.Section == null || (member.Section.HasValue && a.Section.Value == member.Section));
                return filteredAssessments.OrderByDescending(a => a.DueDate).ToList();
            }

            return assessments.OrderByDescending(asmt => asmt.DueDate).ToList();
        }
コード例 #7
0
        public ActionResult Create(FormCollection input)
        {
            InviteModel invite = new InviteModel();
            UpdateModel(invite, "InviteModel");
            if (ModelState.IsValid)
            {
                //If a user is already registered with this email
                //create the appropriate membership
                if (UserHelpers.IsEmailRegistered(invite.Email))
                {
                    Guid profileid = UserHelpers.GetIDFromEmail(invite.Email);
                    Profile profile = dataRepository.GetProfileByID(profileid);
                    //Create site membership if user is not a site member already
                    SiteMember existingSiteMember = dataRepository.Single<SiteMember>(sm => sm.SiteID == site.SiteID && sm.MembershipID == profileid);
                    if (existingSiteMember == null)
                    {
                        SiteMember sitemember = new SiteMember()
                        {
                            AccessLevel = (byte)invite.SiteAccessLevel,
                            Site = site,
                            Profile = profile
                        };

                    }
                    else
                    {
                        existingSiteMember.AccessLevel = (byte)invite.SiteAccessLevel;
                    }

                    //Create courseterm member if user is not already a member
                    if (invite.CourseTermID != null)
                    {
                        CourseTermMember existingCourseTermMember = dataRepository.Single<CourseTermMember>(ctm => ctm.CourseTermID == invite.CourseTermID && ctm.MembershipID == profileid);
                        if (existingCourseTermMember == null)
                        {
                            CourseTermMember ctmember = new CourseTermMember()
                            {
                                AccessLevel = (byte)invite.CourseTermAccessLevel.Value,
                                CourseTermID = invite.CourseTermID.Value,
                                Profile = profile
                            };
                        }
                        else
                        {
                            existingCourseTermMember.AccessLevel = (byte)invite.CourseTermAccessLevel;
                        }
                    }

                    dataRepository.Save();
                    FlashMessageHelper.AddMessage(string.Format(@"""{0}"" is already registered. They have been granted the requested permissions.", invite.Email));
                    return RedirectToAction("Index", new { siteShortName = site.ShortName });
                }
                Invitation inv = new Invitation();
                try
                {
                    inv = new Invitation()
                    {
                        Accepted = false,
                        CourseTermAccessLevel = (byte?)invite.CourseTermAccessLevel,
                        CourseTermID = (Guid?)invite.CourseTermID,
                        Email = invite.Email,
                        Site = site,
                        SiteAccessLevel = (byte)invite.SiteAccessLevel
                    };

                    site.Invitations.Add(inv);
                    dataRepository.Save();
                    if (!inv.CourseTermID.HasValue)
                    {
                        EmailHelper.SendInvitationEmail(inv.Email, site.Title, inv.InvitationID);
                    }
                    else
                    {
                        CourseTerm ct = dataRepository.GetCourseTermByID(inv.CourseTermID.Value);
                        //If the CourseTerm can't be found, an exception should be raised when we try to save
                        //the Invitation
                        EmailHelper.SendInvitationEmail(inv.Email, site.Title, ct.Name, inv.InvitationID);

                    }
                    FlashMessageHelper.AddMessage("Invite created successfully.");
                    return RedirectToAction("Index", new { siteShortName = site.ShortName });
                }
                catch (RuleViolationException)
                {
                    ModelState.AddModelErrors(inv.GetRuleViolations());
                }
                catch (Exception ex)
                {
                    ModelState.AddModelError("_FORM", ex);
                }
            }
            IEnumerable<CourseTerm> courseTerms = dataRepository.GetAllCourseTerms(site);
            invite.SetCourseTermList(courseTerms);
            return View(invite);
        }