/// <summary> /// Executes the specified request. /// </summary> /// <param name="id">The page id.</param> /// <returns></returns> public EditPagePropertiesViewModel Execute(Guid id) { var modelQuery = Repository .AsQueryable <PageProperties>() .Where(p => p.Id == id) .Select(page => new { Model = new EditPagePropertiesViewModel { Id = page.Id, Version = page.Version, PageName = page.Title, PageUrl = page.PageUrl, ForceAccessProtocol = page.ForceAccessProtocol, PageCSS = page.CustomCss, PageJavascript = page.CustomJS, UseNoFollow = page.UseNoFollow, UseNoIndex = page.UseNoIndex, UseCanonicalUrl = page.UseCanonicalUrl, IsPagePublished = page.Status == PageStatus.Published, IsArchived = page.IsArchived, IsMasterPage = page.IsMasterPage, TemplateId = page.Layout.Id, MasterPageId = page.MasterPage.Id, CategoryId = page.Category.Id, LanguageId = page.Language.Id, AccessControlEnabled = cmsConfiguration.Security.AccessControlEnabled, IsInSitemap = page.PagesView.IsInSitemap, Image = page.Image == null || page.Image.IsDeleted ? null : new ImageSelectorViewModel { ImageId = page.Image.Id, ImageVersion = page.Image.Version, ImageUrl = fileUrlResolver.EnsureFullPathUrl(page.Image.PublicUrl), ThumbnailUrl = fileUrlResolver.EnsureFullPathUrl(page.Image.PublicThumbnailUrl), ImageTooltip = page.Image.Caption, FolderId = page.Image.Folder != null ? page.Image.Folder.Id : (Guid?)null }, SecondaryImage = page.SecondaryImage == null || page.SecondaryImage.IsDeleted ? null : new ImageSelectorViewModel { ImageId = page.SecondaryImage.Id, ImageVersion = page.SecondaryImage.Version, ImageUrl = fileUrlResolver.EnsureFullPathUrl(page.SecondaryImage.PublicUrl), ThumbnailUrl = fileUrlResolver.EnsureFullPathUrl(page.SecondaryImage.PublicThumbnailUrl), ImageTooltip = page.SecondaryImage.Caption, FolderId = page.SecondaryImage.Folder != null ? page.SecondaryImage.Folder.Id : (Guid?)null }, FeaturedImage = page.FeaturedImage == null || page.FeaturedImage.IsDeleted ? null : new ImageSelectorViewModel { ImageId = page.FeaturedImage.Id, ImageVersion = page.FeaturedImage.Version, ImageUrl = fileUrlResolver.EnsureFullPathUrl(page.FeaturedImage.PublicUrl), ThumbnailUrl = fileUrlResolver.EnsureFullPathUrl(page.FeaturedImage.PublicThumbnailUrl), ImageTooltip = page.FeaturedImage.Caption, FolderId = page.FeaturedImage.Folder != null ? page.FeaturedImage.Folder.Id : (Guid?)null } }, LanguageGroupIdentifier = page.LanguageGroupIdentifier }) .ToFuture(); var tagsFuture = tagService.GetPageTagNames(id); var categories = categoryService.GetCategories(); var languagesFuture = (cmsConfiguration.EnableMultilanguage) ? languageService.GetLanguages() : null; IEnumerable <AccessRule> userAccessFuture; if (cmsConfiguration.Security.AccessControlEnabled) { userAccessFuture = Repository .AsQueryable <Root.Models.Page>() .Where(x => x.Id == id && !x.IsDeleted) .SelectMany(x => x.AccessRules) .OrderBy(x => x.IsForRole) .ThenBy(x => x.Identity) .ToFuture(); } else { userAccessFuture = null; } var model = modelQuery.ToList().FirstOrDefault(); if (model != null && model.Model != null) { if (model.Model.IsMasterPage) { AccessControlService.DemandAccess(Context.Principal, RootModuleConstants.UserRoles.Administration); } else { AccessControlService.DemandAccess(Context.Principal, RootModuleConstants.UserRoles.MultipleRoles(RootModuleConstants.UserRoles.EditContent, RootModuleConstants.UserRoles.PublishContent)); } model.Model.Tags = tagsFuture.ToList(); model.Model.RedirectFromOldUrl = true; model.Model.Categories = categories; model.Model.PageAccessProtocols = this.GetProtocolForcingTypes(); model.Model.UpdateSitemap = true; model.Model.CustomOptions = optionService.GetCustomOptions(); model.Model.ShowTranslationsTab = cmsConfiguration.EnableMultilanguage && !model.Model.IsMasterPage; if (model.Model.ShowTranslationsTab) { model.Model.Languages = languagesFuture.ToList(); if (!model.Model.Languages.Any()) { model.Model.TranslationMessages = new UserMessages(); model.Model.TranslationMessages.AddInfo(PagesGlobalization.EditPageProperties_TranslationsTab_NoLanguagesCreated_Message); } if (model.LanguageGroupIdentifier.HasValue) { model.Model.Translations = pageService.GetPageTranslations(model.LanguageGroupIdentifier.Value).ToList(); } } // Get layout options, page options and merge them model.Model.OptionValues = optionService.GetMergedMasterPagesOptionValues(model.Model.Id, model.Model.MasterPageId, model.Model.TemplateId); if (userAccessFuture != null) { model.Model.UserAccessList = userAccessFuture.Select(x => new UserAccessViewModel(x)).ToList(); var rules = model.Model.UserAccessList.Cast <IAccessRule>().ToList(); SetIsReadOnly(model.Model, rules); } model.Model.CanPublishPage = SecurityService.IsAuthorized(Context.Principal, RootModuleConstants.UserRoles.PublishContent); // Get templates model.Model.Templates = layoutService.GetAvailableLayouts(id, model.Model.MasterPageId).ToList(); model.Model.Templates .Where(x => x.TemplateId == model.Model.TemplateId || x.TemplateId == model.Model.MasterPageId) .Take(1).ToList() .ForEach(x => x.IsActive = true); } return(model != null ? model.Model : null); }
/// <summary> /// Executes the specified request. /// </summary> /// <param name="id">The page id.</param> /// <returns></returns> public EditPagePropertiesViewModel Execute(Guid id) { var model = Repository .AsQueryable <PageProperties>() .Where(p => p.Id == id) .Select(page => new { Model = new EditPagePropertiesViewModel { Id = page.Id, Version = page.Version, PageName = page.Title, PageUrl = page.PageUrl, PageCSS = page.CustomCss, PageJavascript = page.CustomJS, UseNoFollow = page.UseNoFollow, UseNoIndex = page.UseNoIndex, UseCanonicalUrl = page.UseCanonicalUrl, IsPagePublished = page.Status == PageStatus.Published, IsInSitemap = page.NodeCountInSitemap > 0, IsArchived = page.IsArchived, TemplateId = page.Layout.Id, CategoryId = page.Category.Id, AccessControlEnabled = cmsConfiguration.Security.AccessControlEnabled, Image = page.Image == null || page.Image.IsDeleted ? null : new ImageSelectorViewModel { ImageId = page.Image.Id, ImageVersion = page.Image.Version, ImageUrl = fileUrlResolver.EnsureFullPathUrl(page.Image.PublicUrl), ThumbnailUrl = fileUrlResolver.EnsureFullPathUrl(page.Image.PublicThumbnailUrl), ImageTooltip = page.Image.Caption, FolderId = page.Image.Folder != null ? page.Image.Folder.Id : (Guid?)null }, SecondaryImage = page.SecondaryImage == null || page.SecondaryImage.IsDeleted ? null : new ImageSelectorViewModel { ImageId = page.SecondaryImage.Id, ImageVersion = page.SecondaryImage.Version, ImageUrl = fileUrlResolver.EnsureFullPathUrl(page.SecondaryImage.PublicUrl), ThumbnailUrl = fileUrlResolver.EnsureFullPathUrl(page.SecondaryImage.PublicThumbnailUrl), ImageTooltip = page.SecondaryImage.Caption, FolderId = page.SecondaryImage.Folder != null ? page.SecondaryImage.Folder.Id : (Guid?)null }, FeaturedImage = page.FeaturedImage == null || page.FeaturedImage.IsDeleted ? null : new ImageSelectorViewModel { ImageId = page.FeaturedImage.Id, ImageVersion = page.FeaturedImage.Version, ImageUrl = fileUrlResolver.EnsureFullPathUrl(page.FeaturedImage.PublicUrl), ThumbnailUrl = fileUrlResolver.EnsureFullPathUrl(page.FeaturedImage.PublicThumbnailUrl), ImageTooltip = page.FeaturedImage.Caption, FolderId = page.FeaturedImage.Folder != null ? page.FeaturedImage.Folder.Id : (System.Guid?)null } } }) .FirstOne(); if (model != null && model.Model != null) { model.Model.Tags = tagService.GetPageTagNames(id); model.Model.RedirectFromOldUrl = true; model.Model.Categories = categoryService.GetCategories(); model.Model.UpdateSitemap = true; // Get layout options, page options and merge them var layoutOptions = Repository.AsQueryable <LayoutOption>(lo => lo.Layout.Id == model.Model.TemplateId).Fetch(o => o.CustomOption).ToList(); var pageOptions = Repository.AsQueryable <PageOption>(p => p.Page.Id == id).Fetch(o => o.CustomOption).ToList(); model.Model.OptionValues = optionService.GetMergedOptionValuesForEdit(layoutOptions, pageOptions); model.Model.CustomOptions = optionService.GetCustomOptions(); if (cmsConfiguration.Security.AccessControlEnabled) { model.Model.UserAccessList = Repository.AsQueryable <Root.Models.Page>() .Where(x => x.Id == id && !x.IsDeleted) .SelectMany(x => x.AccessRules) .OrderBy(x => x.Identity) .ToList() .Select(x => new UserAccessViewModel(x)).ToList(); var rules = model.Model.UserAccessList.Cast <IAccessRule>().ToList(); SetIsReadOnly(model.Model, rules); } model.Model.CanPublishPage = SecurityService.IsAuthorized(Context.Principal, RootModuleConstants.UserRoles.PublishContent); // Get templates model.Model.Templates = layoutService.GetLayouts(); if (!model.Model.TemplateId.HasDefaultValue()) { model.Model.Templates.Where(x => x.TemplateId == model.Model.TemplateId).ToList().ForEach(x => x.IsActive = true); } } return(model != null ? model.Model : null); }
/// <summary> /// Executes the specified request. /// </summary> /// <param name="id">The page id.</param> /// <returns></returns> /// <exception cref="System.NotImplementedException"></exception> public BlogPostViewModel Execute(Guid id) { var model = new BlogPostViewModel(); var categoriesFilterKey = BlogPost.CategorizableItemKeyForBlogs; if (!id.HasDefaultValue()) { var result = Repository.AsQueryable <BlogPost>() .Where(bp => bp.Id == id) .Select(bp => new { Entity = bp, AccessRules = bp.AccessRules, Model = new BlogPostViewModel { Id = bp.Id, Version = bp.Version, Title = bp.Title, BlogUrl = bp.PageUrl, UseCanonicalUrl = bp.UseCanonicalUrl, IntroText = bp.Description, AuthorId = bp.Author != null ? bp.Author.Id : (Guid?)null, Image = bp.Image == null || bp.Image.IsDeleted ? null : new ImageSelectorViewModel { ImageId = bp.Image.Id, ImageVersion = bp.Image.Version, ImageUrl = fileUrlResolver.EnsureFullPathUrl(bp.Image.PublicUrl), ThumbnailUrl = fileUrlResolver.EnsureFullPathUrl(bp.Image.PublicThumbnailUrl), ImageTooltip = bp.Image.Caption, FolderId = bp.Image.Folder != null ? bp.Image.Folder.Id : (Guid?)null } } }) .ToList() .FirstOne(); model = result.Model; if (model != null) { categoriesFilterKey = result.Entity.GetCategorizableItemKey(); if (cmsConfiguration.Security.AccessControlEnabled) { SetIsReadOnly(model, result.AccessRules.Cast <IAccessRule>().ToList()); } var pageContentId = Repository.AsQueryable <PageContent>() .Where(pageContent => pageContent.Page.Id == id && !pageContent.Page.IsDeleted && pageContent.Content is BlogPostContent) .Select(pageContent => pageContent.Id) .FirstOrDefault(); BlogPostContent content = null; if (!pageContentId.HasDefaultValue()) { var pageContent = contentService.GetPageContentForEdit(pageContentId); if (pageContent != null) { content = pageContent.Item2 as BlogPostContent; } } if (content != null) { model.Content = content.Html; model.ContentId = content.Id; model.ContentVersion = content.Version; model.LiveFromDate = content.ActivationDate; model.LiveToDate = content.ExpirationDate; model.EditInSourceMode = content.EditInSourceMode; model.CurrentStatus = content.Status; model.HasPublishedContent = content.Original != null; } else { model.LiveFromDate = DateTime.Today; } model.Categories = categoryService.GetSelectedCategories <BlogPost, PageCategory>(id).ToList(); model.Tags = tagService.GetPageTagNames(id).ToList(); } else { model = new BlogPostViewModel(); } } else { model.LiveFromDate = DateTime.Today; } model.Authors = authorService.GetAuthors(); model.RedirectFromOldUrl = true; model.CategoriesFilterKey = categoriesFilterKey; return(model); }
/// <summary> /// Executes the specified request. /// </summary> /// <param name="id">The page id.</param> /// <returns></returns> /// <exception cref="System.NotImplementedException"></exception> public BlogPostViewModel Execute(Guid id) { var model = new BlogPostViewModel(); if (!id.HasDefaultValue()) { model = Repository.AsQueryable <BlogPost>() .Where(bp => bp.Id == id) .Select(bp => new BlogPostViewModel { Id = bp.Id, Version = bp.Version, Title = bp.Title, BlogUrl = bp.PageUrl, UseCanonicalUrl = bp.UseCanonicalUrl, IntroText = bp.Description, AuthorId = bp.Author.Id, CategoryId = bp.Category.Id, Image = bp.Image == null || bp.Image.IsDeleted ? null : new ImageSelectorViewModel { ImageId = bp.Image.Id, ImageVersion = bp.Image.Version, ImageUrl = fileUrlResolver.EnsureFullPathUrl(bp.Image.PublicUrl), ThumbnailUrl = fileUrlResolver.EnsureFullPathUrl(bp.Image.PublicThumbnailUrl), ImageTooltip = bp.Image.Caption, FolderId = bp.Image.Folder != null ? bp.Image.Folder.Id : (Guid?)null } }) .FirstOne(); if (model != null) { var regionId = UnitOfWork.Session .QueryOver <Region>() .Where(r => r.RegionIdentifier == BlogModuleConstants.BlogPostMainContentRegionIdentifier) .Select(r => r.Id) .FutureValue <Guid>(); PageContent pageContentAlias = null; BlogPostContent blogPostContentAlias = null; var pageContentId = UnitOfWork.Session .QueryOver(() => pageContentAlias) .Inner.JoinAlias(c => c.Content, () => blogPostContentAlias) .Where(() => pageContentAlias.Page.Id == id && !pageContentAlias.IsDeleted && pageContentAlias.Region.Id == regionId.Value) .OrderBy(() => pageContentAlias.CreatedOn).Asc .Select(c => c.Id) .Take(1) .List <Guid>() .FirstOrDefault(); BlogPostContent content = null; if (!pageContentId.HasDefaultValue()) { var pageContent = contentService.GetPageContentForEdit(pageContentId); if (pageContent != null) { content = pageContent.Item2 as BlogPostContent; } } if (content != null) { model.Content = content.Html; model.ContentId = content.Id; model.ContentVersion = content.Version; model.LiveFromDate = content.ActivationDate; model.LiveToDate = content.ExpirationDate; model.EditInSourceMode = content.EditInSourceMode; model.CurrentStatus = content.Status; model.HasPublishedContent = content.Original != null; } else { model.LiveFromDate = DateTime.Today; } model.Tags = tagService.GetPageTagNames(id); } else { model = new BlogPostViewModel(); } } else { model.LiveFromDate = DateTime.Today; } model.Authors = authorService.GetAuthors(); model.Categories = categoryService.GetCategories(); model.RedirectFromOldUrl = true; return(model); }