public ActionResult Course(RenderModel model) { Course coursePublishedContentViewModel = new Course(); _mapper.AddCustomMapping(typeof(ImageViewModel).FullName, UmbracoMapperMappings.MapMediaFile) .AddCustomMapping(typeof(int).FullName, UmbracoMapperMappings.MapPicker, nameof(Models.Umbraco.DocumentTypes.Course.CourseId)) .Map(model.Content, coursePublishedContentViewModel); List <FileViewModel> files = new List <FileViewModel>(); string[] fileIds = model.Content.GetPropertyValue <string>(nameof(Models.Umbraco.DocumentTypes.Course.Files)).Split(','); IEnumerable <IPublishedContent> fileContent = Umbraco.TypedMedia(fileIds); _mapper.MapCollection(fileContent, files, new Dictionary <string, PropertyMapping> { { nameof(FileViewModel.Size), new PropertyMapping { SourceProperty = global::Umbraco.Core.Constants.Conventions.Media.Bytes } }, { nameof(FileViewModel.FileExtension), new PropertyMapping { SourceProperty = global::Umbraco.Core.Constants.Conventions.Media.Extension } } }); AcademyPlatform.Models.Courses.Course course = _courses.GetById(coursePublishedContentViewModel.CourseId); string joinCourseUrl = Url.RouteUrl("JoinCourse", new { courseNiceUrl = model.Content.UrlName }); string assessmentUrl = Url.RouteUrl("Assessment", new { courseNiceUrl = model.Content.UrlName }); string profileUrl = Url.RouteUrl("Profile"); CourseDetailsViewModel courseDetailsViewModel = new CourseDetailsViewModel { CourseId = course.Id, Category = course.Category, Title = course.Title, ImageUrl = coursePublishedContentViewModel.CoursePicture.Url, Files = files, CoursesPageUrl = model.Content.Parent.Url, JoinCourseUrl = joinCourseUrl, AssessmentUrl = assessmentUrl, ProfileUrl = profileUrl, AssessmentEligibilityStatus = _assessmentsService.GetEligibilityStatus(User.Identity.Name, coursePublishedContentViewModel.CourseId), DetailedDescription = coursePublishedContentViewModel.DetailedDescription, ShortDescription = coursePublishedContentViewModel.ShortDescription, Features = coursePublishedContentViewModel.Features, SampleCertificate = coursePublishedContentViewModel.SampleCertificate, Status = course.Status }; //======================================================================================== List <Module> modulesPublishedContent = new List <Module>(); List <IPublishedContent> modulesContent = model.Content.DescendantsOrSelf(nameof(Module)).ToList(); _mapper.Map(model.Content, coursePublishedContentViewModel) .MapCollection(modulesContent, modulesPublishedContent); foreach (IPublishedContent moduleContent in modulesContent) { ModuleViewModel module = new ModuleViewModel { Name = moduleContent.Name }; List <IPublishedContent> lecturesContent = moduleContent.DescendantsOrSelf(nameof(Lecture)).ToList(); foreach (IPublishedContent lectureContent in lecturesContent) { LectureLinkViewModel lecture = new LectureLinkViewModel(); _mapper.Map(lectureContent, lecture); lecture.IsVisited = _lectures.IsLectureVisited(User.Identity.Name, lectureContent.Id); module.LectureLinks.Add(lecture); } courseDetailsViewModel.Modules.Add(module); } //==================================================================== courseDetailsViewModel.HasActiveSubscription = User.Identity.IsAuthenticated && _subscriptions.HasActiveSubscription( User.Identity.Name, courseDetailsViewModel.CourseId); if (TempData.ContainsKey("ErrorMessage")) { courseDetailsViewModel.ErrorMessage = (string)TempData["ErrorMessage"]; } return(CurrentTemplate(courseDetailsViewModel)); }
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)); }