Esempio n. 1
0
        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));
        }