コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
        /// <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);
        }
コード例 #4
0
        /// <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);
        }