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)); }
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)); }
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)); }