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); }
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); }
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); }); }
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); }
/// <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>"); }
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); } }
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); }