private HtmlContentWidget GetHtmlContentWidgetFromRequest(EditHtmlContentWidgetViewModel request)
        {
            HtmlContentWidget content = new HtmlContentWidget();

            content.Id = request.Id;

            if (request.CategoryId.HasValue && !request.CategoryId.Value.HasDefaultValue())
            {
                content.Category = Repository.AsProxy <Category>(request.CategoryId.Value);
            }
            else
            {
                content.Category = null;
            }

            content.Name             = request.Name;
            content.Html             = request.PageContent ?? string.Empty;
            content.UseHtml          = request.EnableCustomHtml;
            content.UseCustomCss     = request.EnableCustomCSS;
            content.CustomCss        = request.CustomCSS;
            content.UseCustomJs      = request.EnableCustomJS;
            content.CustomJs         = request.CustomJS;
            content.Version          = request.Version;
            content.EditInSourceMode = request.EditInSourceMode;

            return(content);
        }
Beispiel #2
0
        private HtmlContentWidget GetHtmlContentWidgetFromRequest(EditHtmlContentWidgetViewModel request, bool treatNullsAsLists, bool isNew)
        {
            HtmlContentWidget content = new HtmlContentWidget();

            content.Id = request.Id;

            if (request.CategoryId.HasValue && !request.CategoryId.Value.HasDefaultValue())
            {
                content.Category = repository.AsProxy <CategoryEntity>(request.CategoryId.Value);
            }
            else
            {
                content.Category = null;
            }

            SetWidgetOptions(request, content, treatNullsAsLists, isNew);

            content.Name             = request.Name;
            content.Html             = request.PageContent ?? string.Empty;
            content.UseHtml          = request.EnableCustomHtml;
            content.UseCustomCss     = request.EnableCustomCSS;
            content.CustomCss        = request.CustomCSS;
            content.UseCustomJs      = request.EnableCustomJS;
            content.CustomJs         = request.CustomJS;
            content.Version          = request.Version;
            content.EditInSourceMode = request.EditInSourceMode;

            return(content);
        }
Beispiel #3
0
        public HtmlContentWidget CreateNewHtmlContentWidget()
        {
            var entity         = new HtmlContentWidget();
            var categoryTree   = CreateNewCategoryTree();
            var widgetCategory = CreateWidgetCategory(entity, CreateNewCategory(categoryTree));

            PopulateBaseFields(entity);
            PopulateBaseFields(widgetCategory);

            entity.Categories = new List <WidgetCategory>()
            {
                widgetCategory
            };
            entity.Name            = ProvideRandomString(MaxLength.Name);
            entity.Html            = ProvideRandomString(100);
            entity.UseCustomCss    = true;
            entity.CustomCss       = ProvideRandomString(100);
            entity.UseCustomJs     = true;
            entity.CustomJs        = ProvideRandomString(100);
            entity.Status          = ContentStatus.Published;
            entity.Original        = null;
            entity.PublishedByUser = ProvideRandomString(MaxLength.Name);
            entity.PublishedOn     = ProvideRandomDateTime();

            return(entity);
        }
        public void Should_Return_Widgets_List_Successfully()
        {
            RunActionInTransaction(
                session =>
            {
                ServerControlWidget control1 = TestDataProvider.CreateNewServerControlWidget();
                HtmlContentWidget control2   = TestDataProvider.CreateNewHtmlContentWidget();

                control1.Id   = Guid.NewGuid();
                control1.Name = Guid.NewGuid().ToString().Replace("-", string.Empty);

                session.SaveOrUpdate(control1);
                session.SaveOrUpdate(control2);
                session.Flush();

                var unitOfWork       = new DefaultUnitOfWork(session);
                var repository       = new DefaultRepository(unitOfWork);
                var categoryService  = new Mock <ICategoryService>();
                var cmsConfiguration = new Mock <ICmsConfiguration>().Object;
                var widgetService    = new DefaultWidgetService(repository, unitOfWork, null, null, null, categoryService.Object, cmsConfiguration);
                var command          = new GetSiteSettingsWidgetsCommand(widgetService);

                var response = command.Execute(new WidgetsFilter {
                    SearchQuery = control1.Name.Substring(1, control1.Name.Length - 1)
                });

                Assert.IsNotNull(response);
                Assert.IsNotNull(response.Items);
                Assert.GreaterOrEqual(response.Items.Count(), 1);

                var widget = response.Items.FirstOrDefault(w => control1.Id == w.Id);
                Assert.IsNotNull(widget);
                Assert.AreEqual(control1.Name, widget.WidgetName);
            });
        }
Beispiel #5
0
        private HtmlContentWidget GetHtmlContentWidgetFromRequest(EditHtmlContentWidgetViewModel request)
        {
            HtmlContentWidget content = new HtmlContentWidget();

            content.Id = request.Id;

            if (request.CategoryId.HasValue && !request.CategoryId.Value.HasDefaultValue())
            {
                content.Category = Repository.AsProxy <CategoryEntity>(request.CategoryId.Value);
            }
            else
            {
                content.Category = null;
            }

            if (request.Options != null)
            {
                content.ContentOptions = new List <ContentOption>();

                // NOTE: Loading custom options before saving.
                // In other case, when loading custom options from option service, nHibernate updates version number (nHibernate bug)
                var customOptionsIdentifiers = request.Options
                                               .Where(o => o.Type == OptionType.Custom)
                                               .Select(o => o.CustomOption.Identifier)
                                               .Distinct()
                                               .ToArray();
                var customOptions = OptionService.GetCustomOptionsById(customOptionsIdentifiers);

                foreach (var requestContentOption in request.Options)
                {
                    var contentOption = new ContentOption
                    {
                        Content      = content,
                        Key          = requestContentOption.OptionKey,
                        DefaultValue = OptionService.ClearFixValueForSave(requestContentOption.OptionKey, requestContentOption.Type, requestContentOption.OptionDefaultValue),
                        Type         = requestContentOption.Type,
                        CustomOption = requestContentOption.Type == OptionType.Custom
                          ? customOptions.First(o => o.Identifier == requestContentOption.CustomOption.Identifier)
                          : null
                    };

                    OptionService.ValidateOptionValue(contentOption);

                    content.ContentOptions.Add(contentOption);
                }
            }

            content.Name             = request.Name;
            content.Html             = request.PageContent ?? string.Empty;
            content.UseHtml          = request.EnableCustomHtml;
            content.UseCustomCss     = request.EnableCustomCSS;
            content.CustomCss        = request.CustomCSS;
            content.UseCustomJs      = request.EnableCustomJS;
            content.CustomJs         = request.CustomJS;
            content.Version          = request.Version;
            content.EditInSourceMode = request.EditInSourceMode;

            return(content);
        }
        private WidgetViewModel CreateWidgetViewModel(Root.Models.Widget widget, Root.Models.Widget draft)
        {
            WidgetViewModel result;

            if (widget is HtmlContentWidget)
            {
                HtmlContentWidget htmlContentWidget = (HtmlContentWidget)widget;
                result = new HtmlContentWidgetViewModel
                {
                    Name            = htmlContentWidget.Name,
                    PageContent     = htmlContentWidget.Html,
                    CustomCSS       = htmlContentWidget.CustomCss,
                    EnableCustomCSS = htmlContentWidget.UseCustomCss,
                    CustomJS        = htmlContentWidget.CustomJs,
                    EnableCustomJS  = htmlContentWidget.UseCustomJs,
                    WidgetType      = WidgetType.HtmlContent
                };
            }
            else if (widget is ServerControlWidget)
            {
                ServerControlWidget serverControlWidget = (ServerControlWidget)widget;
                result = new ServerControlWidgetViewModel
                {
                    Url        = serverControlWidget.Url,
                    WidgetType = WidgetType.ServerControl
                };
            }
            else
            {
                result = new WidgetViewModel
                {
                    WidgetType = null
                };
            }

            result.PreviewImageUrl = widget.PreviewUrl;
            result.Status          = Status(widget, draft);
            result.OriginalId      = widget.Id;
            result.OriginalVersion = widget.Version;

            if (draft != null && !result.Status.Equals(ContentStatus.Published.ToString()))
            {
                result.Name       = draft.Name;
                result.CategoryId = draft.Category != null ? draft.Category.Id : (Guid?)null;
                result.Id         = draft.Id;
                result.Version    = draft.Version;
            }
            else
            {
                result.Name       = widget.Name;
                result.CategoryId = widget.Category != null ? widget.Category.Id : (Guid?)null;
                result.Id         = widget.Id;
                result.Version    = widget.Version;
            }

            return(result);
        }
Beispiel #7
0
        /// <summary>
        /// Executes the specified request.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns></returns>
        /// <exception cref="System.NotImplementedException"></exception>
        public override SaveWidgetResponse Execute(EditHtmlContentWidgetViewModel request)
        {
            if (request.Options != null)
            {
                OptionService.ValidateOptionKeysUniqueness(request.Options);
            }

            UnitOfWork.BeginTransaction();

            var widgetContent = GetHtmlContentWidgetFromRequest(request);

            HtmlContentWidget widget = (HtmlContentWidget)ContentService.SaveContentWithStatusUpdate(widgetContent, request.DesirableStatus);

            Repository.Save(widget);

            UnitOfWork.Commit();

            // Notify.
            if (widget.Status != ContentStatus.Preview)
            {
                if (request.Id == default(Guid))
                {
                    Events.PageEvents.Instance.OnWidgetCreated(widget);
                }
                else
                {
                    Events.PageEvents.Instance.OnWidgetUpdated(widget);
                }
            }

            HtmlContentWidget modifiedWidget = widget;

            if (request.DesirableStatus == ContentStatus.Draft && widget.History != null)
            {
                var draft = widget.History.FirstOrDefault(h => h is HtmlContentWidget && !h.IsDeleted && h.Status == ContentStatus.Draft) as HtmlContentWidget;
                if (draft != null)
                {
                    modifiedWidget = draft;
                }
            }

            return(new SaveWidgetResponse
            {
                Id = modifiedWidget.Id,
                OriginalId = widget.Id,
                WidgetName = modifiedWidget.Name,
                CategoryName = modifiedWidget.Category != null ? modifiedWidget.Category.Name : null,
                Version = modifiedWidget.Version,
                OriginalVersion = widget.Version,
                WidgetType = WidgetType.HtmlContent.ToString(),
                IsPublished = widget.Status == ContentStatus.Published,
                HasDraft = widget.Status == ContentStatus.Draft || widget.History != null && widget.History.Any(f => f.Status == ContentStatus.Draft),
                DesirableStatus = request.DesirableStatus,
                PreviewOnPageContentId = request.PreviewOnPageContentId
            });
        }
        private static void AddDefaultPage(PagesApiContext pagesApi, Layout layout, HtmlContentWidget header, HtmlContentWidget footer)
        {
            var pageRequest = new CreatePageRequest()
            {
                LayoutId        = layout.Id,
                PageUrl         = Urls.DefaultPage,
                Title           = "Better CMS",
                Description     = "Better CMS main page.",
                Status          = PageStatus.Published,
                MetaTitle       = "Better CMS main page meta title",
                MetaDescription = "Better CMS main page meta description.",
                MetaKeywords    = "Better CMS"
            };
            var page = pagesApi.CreatePage(pageRequest);

            AddPageContent(pagesApi, page, header, footer, "<p>Hello world!</p>");
        }
        private static void Add500ErrorPage(PagesApiContext pagesApi, Layout layout, HtmlContentWidget header, HtmlContentWidget footer)
        {
            var pageRequest = new CreatePageRequest()
            {
                LayoutId        = layout.Id,
                PageUrl         = Urls.Page500,
                Title           = "Internal server error",
                Description     = "Internal server error",
                Status          = PageStatus.Published,
                MetaTitle       = "Better CMS internal server error meta title",
                MetaDescription = "Better CMS internal server error meta description.",
                MetaKeywords    = "Better CMS"
            };
            var page = pagesApi.CreatePage(pageRequest);

            AddPageContent(pagesApi, page, header, footer, "<p>Oops! The Web server encountered an unexpected condition that prevented it from fulfilling your request. Please try again later or contact the administrator.</p>");
        }
        private static void Add404ErrorPage(PagesApiContext pagesApi, Layout layout, HtmlContentWidget header, HtmlContentWidget footer)
        {
            var pageRequest = new CreatePageRequest()
            {
                LayoutId        = layout.Id,
                PageUrl         = Urls.Page404,
                Title           = "Page Not Found",
                Description     = "Page Not Found",
                Status          = PageStatus.Published,
                MetaTitle       = "Better CMS page not found meta title",
                MetaDescription = "Better CMS page not found meta description.",
                MetaKeywords    = "Better CMS"
            };
            var page = pagesApi.CreatePage(pageRequest);

            AddPageContent(pagesApi, page, header, footer, "<p>Oops! The page you are looking for can not be found.</p>");
        }
Beispiel #11
0
        public void SaveHtmlContentWidget(EditHtmlContentWidgetViewModel model, IList <ContentOptionValuesViewModel> childContentOptionValues,
                                          out HtmlContentWidget widget, out HtmlContentWidget originalWidget,
                                          bool treatNullsAsLists = true, bool createIfNotExists = false)
        {
            if (model.Options != null)
            {
                optionService.ValidateOptionKeysUniqueness(model.Options);
            }

            unitOfWork.BeginTransaction();

            bool isCreatingNew;

            var widgetContent = GetHtmlContentWidgetFromRequest(model, treatNullsAsLists, !model.Id.HasDefaultValue());

            widget = GetWidgetForSave(widgetContent, model, createIfNotExists, out isCreatingNew);

            optionService.SaveChildContentOptions(widget, childContentOptionValues, model.DesirableStatus);

            repository.Save(widget);
            unitOfWork.Commit();

            // Notify
            if (widget.Status != ContentStatus.Preview)
            {
                if (isCreatingNew)
                {
                    Events.PageEvents.Instance.OnWidgetCreated(widget);
                }
                else
                {
                    Events.PageEvents.Instance.OnWidgetUpdated(widget);
                }
            }

            originalWidget = widget;
            if (model.DesirableStatus == ContentStatus.Draft && widget.History != null)
            {
                var draft = widget.History.FirstOrDefault(h => h is HtmlContentWidget && !h.IsDeleted && h.Status == ContentStatus.Draft) as HtmlContentWidget;
                if (draft != null)
                {
                    widget = draft;
                }
            }
        }
        /// <summary>
        /// Creates the HTML content widget.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns>
        /// Created widget entity
        /// </returns>
        /// <exception cref="CmsApiException"></exception>
        /// <exception cref="BetterCms.Core.Exceptions.Api.CmsApiException"></exception>
        public HtmlContentWidget CreateHtmlContentWidget(CreateHtmlContentWidgetRequest request)
        {
            ValidateRequest(request);

            try
            {
                UnitOfWork.BeginTransaction();

                var htmlWidget = new HtmlContentWidget
                {
                    Name         = request.Name,
                    Html         = request.Html,
                    CustomCss    = request.Css,
                    CustomJs     = request.JavaScript,
                    UseHtml      = !string.IsNullOrWhiteSpace(request.Html),
                    UseCustomCss = !string.IsNullOrWhiteSpace(request.Css),
                    UseCustomJs  = !string.IsNullOrWhiteSpace(request.JavaScript)
                };

                if (request.CategoryId.HasValue && !request.CategoryId.Value.HasDefaultValue())
                {
                    htmlWidget.Category = Repository.AsProxy <Category>(request.CategoryId.Value);
                }

                var service      = Resolve <IContentService>();
                var widgetToSave = (HtmlContentWidget)service.SaveContentWithStatusUpdate(htmlWidget, ContentStatus.Published);

                Repository.Save(widgetToSave);
                UnitOfWork.Commit();

                // Notify
                Events.OnWidgetCreated(widgetToSave);

                return(widgetToSave);
            }
            catch (Exception inner)
            {
                var message = string.Format("Failed to create HTML content widget.");
                Logger.Error(message, inner);
                throw new CmsApiException(message, inner);
            }
        }
Beispiel #13
0
        private HtmlContentWidget GetHtmlContentWidgetFromRequest(EditHtmlContentWidgetViewModel request, bool treatNullsAsLists, bool isNew)
        {
            HtmlContentWidget content = new HtmlContentWidget();

            content.Id = request.Id;

            SetWidgetCategories(request, content, treatNullsAsLists, isNew);
            SetWidgetOptions(request, content, treatNullsAsLists, isNew);

            content.Name             = request.Name;
            content.Html             = request.PageContent ?? string.Empty;
            content.UseHtml          = request.EnableCustomHtml;
            content.UseCustomCss     = request.EnableCustomCSS;
            content.CustomCss        = request.CustomCSS;
            content.UseCustomJs      = request.EnableCustomJS;
            content.CustomJs         = request.CustomJS;
            content.Version          = request.Version;
            content.EditInSourceMode = request.EditInSourceMode;

            return(content);
        }
        private WidgetViewModel CreateWidgetViewModel(Root.Models.Widget widget, Root.Models.Widget draft)
        {
            WidgetViewModel result;

            if (widget is HtmlContentWidget)
            {
                HtmlContentWidget htmlContentWidget = (HtmlContentWidget)widget;
                result = new HtmlContentWidgetViewModel
                {
                    Name            = htmlContentWidget.Name,
                    PageContent     = htmlContentWidget.Html,
                    CustomCSS       = htmlContentWidget.CustomCss,
                    EnableCustomCSS = htmlContentWidget.UseCustomCss,
                    CustomJS        = htmlContentWidget.CustomJs,
                    EnableCustomJS  = htmlContentWidget.UseCustomJs,
                    WidgetType      = WidgetType.HtmlContent
                };
            }
            else if (widget is ServerControlWidget)
            {
                ServerControlWidget serverControlWidget = (ServerControlWidget)widget;
                result = new ServerControlWidgetViewModel
                {
                    Url        = serverControlWidget.Url,
                    WidgetType = WidgetType.ServerControl
                };
            }
            else
            {
                result = new WidgetViewModel
                {
                    WidgetType = null
                };
            }

            result.PreviewImageUrl = widget.PreviewUrl;
            result.Status          = Status(widget, draft);
            result.OriginalId      = widget.Id;
            result.OriginalVersion = widget.Version;

            if (draft != null && !result.Status.Equals(ContentStatus.Published.ToString()))
            {
                result.Name       = draft.Name;
                result.Categories = draft.Categories != null?draft.Categories.Select(c => new LookupKeyValue()
                {
                    Key   = c.Category.Id.ToLowerInvariantString(),
                    Value = c.Category.Name
                }).ToList() : new List <LookupKeyValue>();

                result.Id      = draft.Id;
                result.Version = draft.Version;
            }
            else
            {
                result.Name       = widget.Name;
                result.Categories = widget.Categories != null?widget.Categories.Select(c => new LookupKeyValue()
                {
                    Key   = c.Category.Id.ToLowerInvariantString(),
                    Value = c.Category.Name
                }).ToList() : new List <LookupKeyValue>();

                result.Id      = widget.Id;
                result.Version = widget.Version;
            }

            return(result);
        }
        private static void AddPageContent(PagesApiContext pagesApi, PageProperties page, HtmlContentWidget header, HtmlContentWidget footer, string mainHtml)
        {
            pagesApi.AddHtmlContentWidgetToPage(new AddWidgetToPageRequest()
            {
                PageId = page.Id, ContentId = header.Id, RegionIdentifier = Template.Regions.Header
            });
            pagesApi.AddHtmlContentWidgetToPage(new AddWidgetToPageRequest()
            {
                PageId = page.Id, ContentId = footer.Id, RegionIdentifier = Template.Regions.Footer
            });

            var contentRequest = new CreatePageHtmlContentRequest()
            {
                PageId           = page.Id,
                RegionIdentifier = Template.Regions.Main,
                Name             = "Main Content",
                Html             = mainHtml,
                ContentStatus    = ContentStatus.Published
            };

            pagesApi.CreatePageHtmlContent(contentRequest);
        }