コード例 #1
0
        public ActionResult Feedback()
        {
            int    courseId = _coursesContentService.GetCourseId(Umbraco.AssignedContentItem);
            string username = User.Identity.Name;

            if (!_subscriptionsService.HasActiveSubscription(username, courseId))
            {
                return(Redirect(Umbraco.AssignedContentItem.Url));
            }

            if (_feedbackService.UserHasSentFeedback(username, courseId))
            {
                return(RedirectToRoute("Assessment", new { courseNiceUrl = Umbraco.AssignedContentItem.UrlName }));
            }

            FeedbackViewModel feedbackViewModel = GetFeedbackViewModel();

            return(View(feedbackViewModel));
        }
コード例 #2
0
        public override ActionResult Index(RenderModel model)
        {
            IPublishedContent course = model.Content.AncestorOrSelf(nameof(Course));
            int  courseId            = _coursesContentService.GetCourseId(course);
            bool isDemoLecture       = model.Content.GetPropertyValue <bool>(nameof(Lecture.IsDemo));

            if (!isDemoLecture && !_subscriptions.HasActiveSubscription(User.Identity.Name, courseId))
            {
                TempData["ErrorMessage"] = "Моля, запишете се за курса, за да имате достъп до лекциите";
                return(Redirect(course.Url));
            }

            IPublishedContent[] lectures         = model.Content.AncestorsOrSelf(nameof(Course)).DescendantsOrSelf(nameof(Lecture)).ToArray();
            LectureViewModel    lectureViewModel = new LectureViewModel();
            IPublishedContent   precedingLecture = null;
            IPublishedContent   followingLecture = null;

            for (int i = 0; i < lectures.Length; i++)
            {
                if (lectures[i].Id == model.Content.Id)
                {
                    if (i > 0)
                    {
                        precedingLecture = lectures[i - 1];
                    }
                    if (i < lectures.Length - 1)
                    {
                        followingLecture = lectures[i + 1];
                    }
                    break;
                }
            }

            if (precedingLecture != null)
            {
                lectureViewModel.PreviousLecture = new LectureLinkViewModel();
                _mapper.Map(precedingLecture, lectureViewModel.PreviousLecture);
            }

            if (followingLecture != null)
            {
                lectureViewModel.NextLecture = new LectureLinkViewModel();
                _mapper.Map(followingLecture, lectureViewModel.NextLecture);
            }

            lectureViewModel.Content = model.Content.GetPropertyValue <string>(nameof(Lecture.Content));
            lectureViewModel.Id      = model.Content.Id;

            Dictionary <int, ModuleViewModel> modulesDictionary = new Dictionary <int, ModuleViewModel>();

            foreach (IPublishedContent lectureContent in lectures)
            {
                int currentModuleId = lectureContent.Parent.Id;
                if (!modulesDictionary.ContainsKey(currentModuleId))
                {
                    modulesDictionary.Add(currentModuleId, new ModuleViewModel {
                        Name = lectureContent.Parent.Name
                    });
                }
                LectureLinkViewModel lecture = new LectureLinkViewModel();
                _mapper.Map(lectureContent, lecture);

                if (lectureContent.Id == model.Content.Id)
                {
                    lecture.IsCurrent = true;
                }

                modulesDictionary[currentModuleId].LectureLinks.Add(lecture);
            }

            lectureViewModel.Modules      = modulesDictionary.Values;
            lectureViewModel.AssesmentUrl = Url.RouteUrl("Assessment", new { courseNiceUrl = model.Content.Parent.Parent.UrlName });


            if (User.Identity.IsAuthenticated)
            {
                _lectures.TrackLectureVisit(User.Identity.Name, model.Content.Id);
            }

            return(CurrentTemplate(lectureViewModel));
        }
コード例 #3
0
        public ActionResult Assessment()
        {
            int    courseId = _coursesContentService.GetCourseId(Umbraco.AssignedContentItem);
            string username = User.Identity.Name;

            if (!_feedbackService.UserHasSentFeedback(username, courseId))
            {
                return(RedirectToRoute("Feedback", new { courseNiceUrl = Umbraco.AssignedContentItem.UrlName }));
            }

            if (_assessments.GetEligibilityStatus(username, courseId) != AssessmentEligibilityStatus.Eligible)
            {
                TempData["ErrorMessage"] = $"В момента нямате достъп до изпита за този курс. Моля посетете <a href=\"{Url.RouteUrl("Profile")}\" title=\"Профил\">Вашия профил </a> за повече информация.";
                return(Redirect(Umbraco.AssignedContentItem.Url));
            }

            object            assessmentId      = Umbraco.AssignedContentItem.GetPropertyValue <Picker>(nameof(Course.Assessment)).SavedValue;
            IPublishedContent assessmentContnet = Umbraco.TypedContent(assessmentId);
            var user = _users.GetByUsername(username);
            AssessmentViewModel             assessment        = new AssessmentViewModel();
            List <QuestionViewModel>        questionViewModel = new List <QuestionViewModel>();
            IEnumerable <IPublishedContent> questions;
            var assessmentRequest = _assessments.GetLatestForUser(user.Username, assessmentContnet.Id);

            if (assessmentRequest == null)
            {
                var numberOfQuestions =
                    assessmentContnet.GetPropertyValue <int>(
                        nameof(Models.Umbraco.DocumentTypes.Assessment.NumberOfQuestions));
                if (numberOfQuestions == default(int))
                {
                    throw new ArgumentException($"Number of questions is not set for assessment with ID: {assessmentId}");
                }

                questions = assessmentContnet.Descendants(1).OrderBy(x => Guid.NewGuid()).Take(numberOfQuestions).ToList();

                assessmentRequest = new AssessmentRequest
                {
                    AssessmentExternalId = assessmentContnet.Id,
                    QuestionIds          = string.Join(",", questions.Select(x => x.Id)),
                    IsCompleted          = false,
                    UserId = user.Id
                };
                _assessments.CreateAssesmentRequest(assessmentRequest);
            }
            else
            {
                questions = Umbraco.TypedContent(assessmentRequest.QuestionIds.Split(',')).ToList();
            }

            _mapper.AddCustomMapping(
                typeof(IEnumerable <QuestionAnswer>).FullName,
                UmbracoMapperMappings.MapQuestionAnswer)
            .MapCollection(questions, questionViewModel)
            .Map(assessmentContnet, assessment);

            assessment.Questions           = questionViewModel;
            assessment.AssessmentRequestId = assessmentRequest.Id;

            return(View(assessment));
        }