示例#1
0
        public IEnumerable<RuleViolation> GetRuleViolations()
        {
            AssessTrackDataRepository dataRepository = new AssessTrackDataRepository();

            if (String.IsNullOrEmpty(Name))
                yield return new RuleViolation("Name is required", "Name");

            if (Name.Equals("courses", StringComparison.CurrentCultureIgnoreCase))
                yield return new RuleViolation(@"Course cannot be named ""Courses""", "Name");

            if (ShortName.Equals("courses", StringComparison.CurrentCultureIgnoreCase))
                yield return new RuleViolation(@"Course cannot have Short Name ""Courses""", "ShortName");

            if (!Regex.IsMatch(ShortName, @"\A[a-zA-Z0-9_-]+\Z"))
                yield return new RuleViolation("Short Name can only contain letters, numbers, underscores (_) and dashes (-)", "ShortName");
            //TODO update this check to include Site constraint
            //Course nameCheckCourse = dataRepository.GetCourseByName(Name);
            //if (nameCheckCourse != null && nameCheckCourse.CourseID != CourseID)
            //{
            //    yield return new RuleViolation(Name + " already exists", "Name");
            //}

            //Course shortnameCheckCourse = dataRepository.GetCourseByShortName(ShortName);
            //if (shortnameCheckCourse != null && shortnameCheckCourse.CourseID != CourseID)
            //{
            //    yield return new RuleViolation(@"Short Name """ + ShortName + @""" already exists", "ShortName");
            //}

            yield break;
        }
 public ActionResult GetAssessmentImportForm(Guid id)
 {
     AssessTrackDataRepository repo = new AssessTrackDataRepository();
     Assessment assessment = repo.GetAssessmentByID(id);
     string importform = SubmissionFormHelpers.RenderImportForm(assessment);
     return Content(importform);
 }
示例#3
0
        public GradeSection(AssessmentType assessmentType, Profile profile, AssessTrackDataRepository repo, bool includeExtraCredit, DateTime date)
        {
            AssessmentType = assessmentType;
            TotalPoints = MaxPoints = 0;
            Grades = new List<Grade>();
            CourseTermMember member = repo.GetCourseTermMemberByMembershipID(assessmentType.CourseTerm, profile.MembershipID);
            List<Assessment> assessments = repo.GetAllNonTestBankAssessments(assessmentType.CourseTerm, includeExtraCredit, assessmentType, member).Where(test => test.DueDate.CompareTo(date) < 0).ToList();
            foreach (Assessment assessment in assessments)
            {
                Grade grade = new Grade(assessment, profile);
                Grades.Add(grade);

                if ((grade.SubmissionRecord != null && grade.SubmissionRecord.GradedBy != null) ||
                    (DateTime.Now.CompareTo(assessment.DueDate) > 0 && grade.SubmissionRecord == null))
                {
                    MaxPoints += assessment.Weight;
                    TotalPoints += grade.Points;
                }
            }
            //if (TotalPoints > 0 && MaxPoints == 0) //if everything is extra credit
            //{
            //    MaxPoints = 1; //to avoid division by zero
            //}

            if (MaxPoints == 0)
            {
                Percentage = 0;
                Weight = 0;
            }
            else
            {
                Percentage = (TotalPoints / MaxPoints) * 100;
                Weight = assessmentType.Weight;
            }
        }
示例#4
0
        public static string CurrentSiteLink(this HtmlHelper html, string before, string after)
        {
            AssessTrackDataRepository data = new AssessTrackDataRepository();
            if (html.ViewContext.RouteData.Values["siteShortName"] != null)
            {
                string siteShortName = html.ViewContext.RouteData.Values["siteShortName"].ToString();
                Site site = data.GetSiteByShortName(siteShortName);
                if (site == null)
                {
                    return string.Empty;
                }
                string sitelink = HtmlHelper.GenerateRouteLink(html.ViewContext.RequestContext,
                    html.RouteCollection, site.Title, null,
                    new System.Web.Routing.RouteValueDictionary(
                        new {
                            action = "Details",
                            controller = "Site",
                            siteShortName = siteShortName
                        }), null);

                if (site != null)
                {
                    string finallink = before + sitelink + after;
                    return finallink;

                }
            }
            return string.Empty;
        }
示例#5
0
        public double GetFinalGrade(bool includeExtraCredit)
        {
            if (this.AccessLevel != 1)
            {
                throw new Exception("Only Students have Final Grades.");
            }

            double finalgrade = 0.0;
            double coursTermPoints = 0.0;
            double courseTermMaxPoints = 0.0;
            AssessTrackDataRepository repo = new AssessTrackDataRepository();
            foreach (AssessmentType asmtType in this.CourseTerm.AssessmentTypes.Where(type => !type.QuestionBank))
            {

                GradeSection section = new GradeSection(asmtType, this.Profile,repo,includeExtraCredit);
                if (section.Weight > 0)
                {
                    coursTermPoints += ((section.TotalPoints / section.MaxPoints) * asmtType.Weight);
                    courseTermMaxPoints += section.Weight;
                }
            }
            finalgrade = ((coursTermPoints / courseTermMaxPoints) * 100);
            if (finalgrade >= 0)
            {
                return finalgrade;
            }
            return 0.0;
        }
 //
 // GET: /QuizBuilderImport/
 public ActionResult GetCourseOfferings()
 {
     AssessTrackDataRepository repo = new AssessTrackDataRepository();
     List<CourseTerm> courseTerms = repo.GetUserCourseTerms(5);
     var jsonCourseTerms = from ct in courseTerms select new { name = ct.Name, id = ct.CourseTermID };
     return Json(jsonCourseTerms);
 }
示例#7
0
        public IEnumerable<RuleViolation> GetRuleViolations()
        {
            AssessTrackDataRepository dataRepository = new AssessTrackDataRepository();
            if (String.IsNullOrEmpty(Name))
                yield return new RuleViolation("Name is required", "Name");

            if (Regex.IsMatch(Name,"assessmentTypes|terms|Details|Edit|Delete",RegexOptions.IgnoreCase))
                yield return new RuleViolation(@"Term cannot be named """+ Name +"\"", "Name");

            if (this.Site != null)
            {
                int nameCount = Site.Terms.Count(t => t.Name == Name);
                if (nameCount > 1)
                {
                    yield return new RuleViolation(@"A Term named """ + Name + "\" already exists for this Site", "Name");
                }
            }

            if (StartDate == null)
                yield return new RuleViolation("Start Date is required", "StartDate");

            if (EndDate == null)
                yield return new RuleViolation("End Date is required", "EndDate");

            if ((EndDate != null && StartDate != null)
                && (EndDate.CompareTo(StartDate) < 0))
            {
                yield return new RuleViolation("End Date must be later than Start Date", "EndDate");
            }

            yield break;
        }
 public IEnumerable<RuleViolation> GetRuleViolations()
 {
     AssessTrackDataRepository dataRepository = new AssessTrackDataRepository();
     if (DueDate.CompareTo(DateTime.Now) < 1)
     {
         yield return new RuleViolation("DueDate must be in the future!", "DueDate");
     }
     yield break;
 }
        public ActionResult GetAssessments(Guid id)
        {
            AssessTrackDataRepository repo = new AssessTrackDataRepository();
            CourseTerm term = repo.GetCourseTermByID(id);
            var assessments = from assessment in term.Assessments
                              orderby assessment.Name
                              select new { name = assessment.Name, id = assessment.AssessmentID };

            return Json(assessments);
        }
示例#10
0
 public static string GetFullNameForID(Guid? id)
 {
     try
     {
         AssessTrackDataRepository repo = new AssessTrackDataRepository();
         Profile user = repo.GetProfileByID(id.Value);
         return user.FirstName + " " + user.LastName;
     }
     catch
     {
         return "N/A";
     }
 }
 public ActionResult GetQuestion(Guid id)
 {
     AssessTrackDataRepository repo = new AssessTrackDataRepository();
     Question question = repo.GetQuestionByID(id);
     //Strip id attributes from the question and its answers
     XElement questionXml = XElement.Parse(question.Data);
     questionXml.SetAttributeValue("id", null);
     foreach (XElement answer in questionXml.Elements("answer"))
     {
         answer.SetAttributeValue("id", null);
     }
     string questiondata = DesignerHelper.GetQuestionMarkupFromXml(questionXml);
     return Content(questiondata);
 }
示例#12
0
        public IEnumerable<RuleViolation> GetRuleViolations()
        {
            AssessTrackDataRepository dataRepository = new AssessTrackDataRepository();

            if (String.IsNullOrEmpty(Title))
                yield return new RuleViolation("Title is required", "Title");
            if (String.IsNullOrEmpty(ShortName))
                yield return new RuleViolation("Short Name is required", "ShortName");

            if (!Regex.IsMatch(ShortName, @"\A[a-zA-Z0-9_-]+\Z"))
                yield return new RuleViolation("Short Name can only contain letters, numbers, underscores (_) and dashes (-)", "ShortName");

            yield break;
        }
示例#13
0
 public static bool CheckAuthorization(HttpContext httpContext, Site site, CourseTerm courseTerm, AuthScope scope, int minLevel, int maxLevel)
 {
     AssessTrackDataRepository data = new AssessTrackDataRepository();
     if (httpContext == null)
     {
         throw new ArgumentNullException("httpContext");
     }
     IPrincipal user = httpContext.User;
     if (!user.Identity.IsAuthenticated)
     {
         return false;
     }
     //Get the user's profile and see if they have
     //the required access level
     Profile profile = data.GetLoggedInProfile();
     switch (scope)
     {
         case AuthScope.Application:
             {
                 if (profile.AccessLevel < minLevel || profile.AccessLevel > maxLevel)
                     return false;
                 break;
             }
         case AuthScope.Site:
             {
                 SiteMember member = data.GetSiteMemberByMembershipID(site,profile.MembershipID);
                 if (member == null ||
                     (member.AccessLevel < minLevel || member.AccessLevel > maxLevel))
                     return false;
             }
             break;
         case AuthScope.CourseTerm:
             {
                 CourseTermMember member = data.GetCourseTermMemberByMembershipID(courseTerm, profile.MembershipID);
                 if (member == null ||
                     (member.AccessLevel < minLevel || member.AccessLevel > maxLevel))
                     return false;
             }
             break;
         default:
             //TODO Do some logging here maybe?
             return false;
     }
     return true;
 }
示例#14
0
        public IEnumerable<RuleViolation> GetRuleViolations()
        {
            AssessTrackDataRepository dataRepository = new AssessTrackDataRepository();
            if (String.IsNullOrEmpty(FirstName))
                yield return new RuleViolation("First Name is required", "FirstName");
            if (String.IsNullOrEmpty(LastName))
                yield return new RuleViolation("Last Name is required", "LastName");

            if (FirstName != null && FirstName.Length > 50)
                yield return new RuleViolation("First Name cannot be longer than 50 characters", "FirstName");
            if (LastName != null && LastName.Length > 50)
                yield return new RuleViolation("Last Name cannot be longer than 50 characters", "LastName");

            if (Major != null && Major.Length > 100)
                yield return new RuleViolation("Major cannot be longer than 100 characters", "Major");

            yield break;
        }
示例#15
0
        public IEnumerable<RuleViolation> GetRuleViolations()
        {
            AssessTrackDataRepository dataRepository = new AssessTrackDataRepository();

            if (String.IsNullOrEmpty(Name))
                yield return new RuleViolation("Name is required", "Name");

            if (CourseTerm != null)
            {
                int nameCount = CourseTerm.AssessmentTypes.Count(at => at.Name == Name);
                if (nameCount > 1)
                {
                    yield return new RuleViolation(@"An AssessmentType named """ + Name + "\" already exists for this course/term", "Name");
                }
            }

            if (Weight < 0)
                yield return new RuleViolation("Weight cannot be negative", "Weight");

            yield break;
        }
示例#16
0
 public double Score()
 {
     AssessTrackDataRepository repo = new AssessTrackDataRepository();
     return Score(repo.GetLoggedInProfile());
 }
示例#17
0
        public IEnumerable<RuleViolation> GetRuleViolations()
        {
            AssessTrackDataRepository dataRepository = new AssessTrackDataRepository();

            if (String.IsNullOrEmpty(Name))
                yield return new RuleViolation("Name is required", "Name");

            if (!Regex.IsMatch(ShortName, @"\A[a-zA-Z0-9_-]+\Z"))
                yield return new RuleViolation("Short Name can only contain letters, numbers, underscores (_) and dashes (-)", "ShortName");

            if (this.Site != null)
            {
                int nameCount = Site.CourseTerms.Count(t => t.ShortName == ShortName);
                if (nameCount > 1)
                {
                    yield return new RuleViolation(@"A Course Offering with Short Name """ + ShortName + "\" already exists for this Site", "ShortName");
                }
            }

            yield break;
        }
示例#18
0
        //Will return false if routeData points to non-existant site or courseterm
        public static bool CheckAuthorization(AuthScope scope, int minLevel, int maxLevel, RouteValueDictionary routeData)
        {
            //RouteData routeData = RouteTable.Routes.GetRouteData(new HttpContextWrapper(HttpContext.Current));
            AssessTrackDataRepository data = new AssessTrackDataRepository();
            string siteShortName;
            Site site = null;
            string courseTermShortName;
            CourseTerm courseTerm = null;
            //HttpContext.Current.

            if (scope != AuthScope.Application)
            {
                //Try to get the site by shortName
                if (routeData["siteShortName"] != null)
                {
                    siteShortName = routeData["siteShortName"].ToString();
                    site = data.GetSiteByShortName(siteShortName);
                }
                //if scope is Site, then {id} should refer to SiteID
                else if (scope != AuthScope.CourseTerm && routeData["id"] != null)
                {
                    try
                    {

                        Guid siteID = new Guid(routeData["id"].ToString());
                        site = data.GetSiteByID(siteID);
                    }
                    catch
                    {
                        //Do nothing here
                        //if this fails, site will be null and the following code will
                        //return SiteNotFound
                    }
                }

                if (site == null)
                {
                    return false;
                }
                if (scope == AuthScope.CourseTerm)
                {
                    //Try to get the site by shortName
                    if (routeData["courseTermShortName"] != null)
                    {
                        courseTermShortName = routeData["courseTermShortName"].ToString();
                        courseTerm = data.GetCourseTermByShortName(site, courseTermShortName);
                    }
                    //if scope is CourseTerm, then {id} should refer to CourseTermID
                    else if (routeData["id"].ToString() != null)
                    {
                        try
                        {

                            Guid courseTermID = new Guid(routeData["id"].ToString());
                            courseTerm = data.GetCourseTermByID(site, courseTermID);
                        }
                        catch
                        {
                            //Do nothing here
                            //if this fails, courseTerm will be null and the following code will
                            //return CourseTermNotFound
                        }
                    }
                    if (courseTerm == null)
                    {

                        return false;
                    }
                }
            }
            //Set up is complete, now check if the user is authorized
            if (CheckAuthorization(HttpContext.Current, site, courseTerm, scope, minLevel, maxLevel))
            {
                return true;
            }
            else
            {
                return false;

            }
        }
示例#19
0
        public static bool IsCurrentStudentOrUserIsAdmin(CourseTerm ct, Guid requestedID)
        {
            try
            {
                AssessTrackDataRepository repo = new AssessTrackDataRepository();

                CourseTermMember member = repo.GetCourseTermMemberByMembershipID(ct, UserHelpers.GetCurrentUserID());

                if (member == null)
                {
                    return false;
                }
                else if (member.AccessLevel < 2 && member.MembershipID != requestedID)
                {
                    return false;
                }
                else
                {
                    return true;
                }
            }
            catch
            {
                return false;
            }
        }
示例#20
0
        public IEnumerable<RuleViolation> GetRuleViolations()
        {
            AssessTrackDataRepository dataRepository = new AssessTrackDataRepository();
            if (String.IsNullOrEmpty(Name))
                yield return new RuleViolation("Name is required", "Name");

            if (string.IsNullOrEmpty(Data))
                yield return new RuleViolation("Data cannot be empty", "Data");

            if (CourseTerm != null)
            {
                int nameCount = CourseTerm.Assessments.Count(a => a.Name == Name);
                if (nameCount > 1)
                {
                    yield return new RuleViolation(@"An Assessment named """ + Name + "\" already exists for this course/term", "Name");
                }
            }

            yield break;
        }
示例#21
0
 double ITaggable.Score()
 {
     AssessTrackDataRepository repo = new AssessTrackDataRepository();
     return (this as ITaggable).Score(repo.GetLoggedInProfile());
 }
示例#22
0
 public static void SaveFile(AssessTrackDataRepository repo, AssessTrack.Models.File file)
 {
     if (file == null)
         return;
     repo.SaveFile(file);
 }
示例#23
0
 public IEnumerable<RuleViolation> GetRuleViolations()
 {
     AssessTrackDataRepository dataRepository = new AssessTrackDataRepository();
     //TODO: Confirm that score is not negative
     yield break;
 }