private static void CreateBackendFormToolbar(DetailFormViewElement detailView, string resourceClassId, bool isCreateMode, string itemName, bool showPreview, string backToItems = "BackToItems") { var toolbarSectionElement = new WidgetBarSectionElement(detailView.Toolbar.Sections) { Name = "BackendForm", WrapperTagKey = HtmlTextWriterTag.Div, CssClass = "sfWorkflowMenuWrp" }; // Create toolbarSectionElement.Items.Add(new CommandWidgetElement(toolbarSectionElement.Items) { Name = "SaveChangesWidgetElement", ButtonType = CommandButtonType.Save, CommandName = DefinitionsHelper.SaveCommandName, Text = (isCreateMode) ? String.Concat("Create", itemName) : "SaveChanges", ResourceClassId = resourceClassId, WrapperTagKey = HtmlTextWriterTag.Span, WidgetType = typeof(CommandWidget) }); if (!isCreateMode) { var actionsMenuWidget = new ActionMenuWidgetElement(toolbarSectionElement.Items) { Name = "moreActions", Text = "MoreActions", ResourceClassId = resourceClassId, WrapperTagKey = HtmlTextWriterTag.Div, WidgetType = typeof(ActionMenuWidget), CssClass = "sfInlineBlock sfAlignMiddle" }; actionsMenuWidget.MenuItems.Add(new CommandWidgetElement(actionsMenuWidget.MenuItems) { Name = DeleteCommandName, Text = "DeleteThisJobApplication", CommandName = DefinitionsHelper.DeleteCommandName, ResourceClassId = resourceClassId, WidgetType = typeof(CommandWidget), CssClass = "sfDeleteItm" }); toolbarSectionElement.Items.Add(actionsMenuWidget); } // Cancel toolbarSectionElement.Items.Add(new CommandWidgetElement(toolbarSectionElement.Items) { Name = "CancelWidgetElement", ButtonType = CommandButtonType.Cancel, CommandName = DefinitionsHelper.CancelCommandName, Text = backToItems, ResourceClassId = resourceClassId, WrapperTagKey = HtmlTextWriterTag.Span, WidgetType = typeof(CommandWidget) }); detailView.Toolbar.Sections.Add(toolbarSectionElement); }
/// <summary> /// Defines the products backend content view. /// </summary> /// <param name="parent">The parent.</param> /// <returns></returns> public static ContentViewControlElement DefineProductsBackendContentView(ConfigElement parent) { // define content view control var backendContentView = new ContentViewControlElement(parent) { ControlDefinitionName = BackendDefinitionName, ContentType = typeof(ProductItem) }; // *** define views *** #region products backend list view var productsGridView = new MasterGridViewElement(backendContentView.ViewsConfig) { ViewName = ProductsDefinitions.BackendListViewName, ViewType = typeof(MasterGridView), AllowPaging = true, DisplayMode = FieldDisplayMode.Read, ItemsPerPage = 50, ResourceClassId = typeof(ProductsResources).Name, SearchFields = "Title", SortExpression = "Title ASC", Title = "ProductsViewTitle", WebServiceBaseUrl = "~/Sitefinity/Services/Content/Products.svc/" }; #region Toolbar definition WidgetBarSectionElement masterViewToolbarSection = new WidgetBarSectionElement(productsGridView.ToolbarConfig.Sections) { Name = "toolbar" }; var createproductsWidget = new CommandWidgetElement(masterViewToolbarSection.Items) { Name = "CreateproductsWidget", ButtonType = CommandButtonType.Create, CommandName = DefinitionsHelper.CreateCommandName, Text = "CreateItem", ResourceClassId = typeof(ProductsResources).Name, CssClass = "sfMainAction", WidgetType = typeof(CommandWidget), PermissionSet = ProductsConstants.Security.PermissionSetName, ActionName = ProductsConstants.Security.Create }; masterViewToolbarSection.Items.Add(createproductsWidget); var deleteproductsWidget = new CommandWidgetElement(masterViewToolbarSection.Items) { Name = "DeleteproductsWidget", ButtonType = CommandButtonType.Standard, CommandName = DefinitionsHelper.GroupDeleteCommandName, Text = "Delete", ResourceClassId = typeof(ProductsResources).Name, WidgetType = typeof(CommandWidget), CssClass = "sfGroupBtn" }; masterViewToolbarSection.Items.Add(deleteproductsWidget); masterViewToolbarSection.Items.Add(DefinitionsHelper.CreateSearchButtonWidget(masterViewToolbarSection.Items, typeof(ProductItem))); productsGridView.ToolbarConfig.Sections.Add(masterViewToolbarSection); #endregion #region Sidebar definition var languagesSection = new LocalizationWidgetBarSectionElement(productsGridView.SidebarConfig.Sections) { Name = "Languages", Title = "Languages", ResourceClassId = typeof(LocalizationResources).Name, CssClass = "sfFirst sfSeparator sfLangSelector", WrapperTagId = "languagesSection" }; languagesSection.Items.Add(new LanguagesDropDownListWidgetElement(languagesSection.Items) { Name = "Languages", Text = "Languages", ResourceClassId = typeof(LocalizationResources).Name, CssClass = string.Empty, WidgetType = typeof(LanguagesDropDownListWidget), IsSeparator = false, LanguageSource = LanguageSource.Frontend, AddAllLanguagesOption = false, CommandName = DefinitionsHelper.ChangeLanguageCommandName }); WidgetBarSectionElement sidebarSection = new WidgetBarSectionElement(productsGridView.SidebarConfig.Sections) { Name = "Filter", Title = "FilterProducts", ResourceClassId = typeof(ProductsResources).Name, CssClass = "sfFirst sfWidgetsList sfSeparator sfModules", WrapperTagId = "filterSection" }; sidebarSection.Items.Add(new CommandWidgetElement(sidebarSection.Items) { Name = "AllProducts", CommandName = DefinitionsHelper.ShowAllItemsCommandName, ButtonType = CommandButtonType.SimpleLinkButton, Text = "AllProducts", ResourceClassId = typeof(ProductsResources).Name, CssClass = String.Empty, WidgetType = typeof(CommandWidget), IsSeparator = false, ButtonCssClass = "sfSel", }); sidebarSection.Items.Add(new CommandWidgetElement(sidebarSection.Items) { Name = "MyProducts", CommandName = DefinitionsHelper.ShowMyItemsCommandName, ButtonType = CommandButtonType.SimpleLinkButton, Text = "MyProducts", ResourceClassId = typeof(ProductsResources).Name, CssClass = String.Empty, WidgetType = typeof(CommandWidget), IsSeparator = false }); sidebarSection.Items.Add(new CommandWidgetElement(sidebarSection.Items) { Name = "DraftProducts", CommandName = DefinitionsHelper.ShowMasterItemsCommandName, ButtonType = CommandButtonType.SimpleLinkButton, Text = "DraftProducts", ResourceClassId = typeof(ProductsResources).Name, CssClass = String.Empty, WidgetType = typeof(CommandWidget), IsSeparator = false }); sidebarSection.Items.Add(new CommandWidgetElement(sidebarSection.Items) { Name = "PublishedProducts", CommandName = DefinitionsHelper.ShowPublishedItemsCommandName, ButtonType = CommandButtonType.SimpleLinkButton, Text = "PublishedProducts", ResourceClassId = typeof(ProductsResources).Name, CssClass = String.Empty, WidgetType = typeof(CommandWidget), IsSeparator = false }); sidebarSection.Items.Add(new CommandWidgetElement(sidebarSection.Items) { Name = "ScheduledProducts", CommandName = DefinitionsHelper.ShowScheduledItemsCommandName, ButtonType = CommandButtonType.SimpleLinkButton, Text = "ScheduledProducts", ResourceClassId = typeof(ProductsResources).Name, CssClass = String.Empty, WidgetType = typeof(CommandWidget), IsSeparator = false }); sidebarSection.Items.Add(new CommandWidgetElement(sidebarSection.Items) { Name = "PendingApprovalProducts", CommandName = DefinitionsHelper.PendingApprovalItemsCommandName, ButtonType = CommandButtonType.SimpleLinkButton, Text = "WaitingForApproval", ResourceClassId = typeof(ProductsResources).Name, CssClass = String.Empty, WidgetType = typeof(CommandWidget), IsSeparator = false }); sidebarSection.Items.Add(new LiteralWidgetElement(sidebarSection.Items) { Name = "Separator", WrapperTagKey = HtmlTextWriterTag.Li, WidgetType = typeof(LiteralWidget), CssClass = "sfSeparator", Text = " ", IsSeparator = true }); var categoryFilterSection = new WidgetBarSectionElement(productsGridView.SidebarConfig.Sections) { Name = "Category", Title = "ProductItemsByCategory", ResourceClassId = typeof(ProductsResources).Name, CssClass = "sfFilterBy sfSeparator", WrapperTagId = "categoryFilterSection", Visible = false }; productsGridView.SidebarConfig.Sections.Add(categoryFilterSection); var tagFilterSection = new WidgetBarSectionElement(productsGridView.SidebarConfig.Sections) { Name = "ByTag", Title = "ProductItemsByTag", ResourceClassId = typeof(ProductsResources).Name, CssClass = "sfFilterBy sfSeparator", WrapperTagId = "tagFilterSection", Visible = false }; productsGridView.SidebarConfig.Sections.Add(tagFilterSection); var dateFilterSection = new WidgetBarSectionElement(productsGridView.SidebarConfig.Sections) { Name = "UpdatedProducts", Title = "DisplayLastUpdatedProducts", ResourceClassId = typeof(ProductsResources).Name, CssClass = "sfFilterBy sfFilterByDate sfSeparator", WrapperTagId = "dateFilterSection", Visible = false }; productsGridView.SidebarConfig.Sections.Add(dateFilterSection); categoryFilterSection.Items.Add(new CommandWidgetElement(categoryFilterSection.Items) { Name = "CloseCategories", CommandName = DefinitionsHelper.ShowSectionsExceptCommandName, CommandArgument = DefinitionsHelper.ConstructDisplaySectionsCommandArgument( categoryFilterSection.WrapperTagId, tagFilterSection.WrapperTagId, dateFilterSection.WrapperTagId), ButtonType = CommandButtonType.SimpleLinkButton, Text = "CloseCategories", ResourceClassId = typeof(Labels).Name, CssClass = "sfCloseFilter", WidgetType = typeof(CommandWidget), IsSeparator = false }); var categoryFilterWidget = new DynamicCommandWidgetElement(categoryFilterSection.Items) { Name = "CategoryFilter", CommandName = "filterByCategory", PageSize = 10, WidgetType = typeof(DynamicCommandWidget), IsSeparator = false, BindTo = BindCommandListTo.HierarchicalData, BaseServiceUrl = String.Format("~/Sitefinity/Services/Taxonomies/HierarchicalTaxon.svc/{0}/", TaxonomyManager.CategoriesTaxonomyId), ChildItemsServiceUrl = "~/Sitefinity/Services/Taxonomies/HierarchicalTaxon.svc/subtaxa/", PredecessorServiceUrl = "~/Sitefinity/Services/Taxonomies/HierarchicalTaxon.svc/predecessor/", ClientItemTemplate = @"<a href='javascript:void(0);' class='sf_binderCommand_filterByCategory'>{{ Title }}</a> <span class='sfCount'>({{ItemsCount}})</span>" }; categoryFilterWidget.UrlParameters.Add("itemType", typeof(ProductItem).AssemblyQualifiedName); categoryFilterSection.Items.Add(categoryFilterWidget); tagFilterSection.Items.Add(new CommandWidgetElement(tagFilterSection.Items) { Name = "CloseTags", CommandName = DefinitionsHelper.ShowSectionsExceptCommandName, CommandArgument = DefinitionsHelper.ConstructDisplaySectionsCommandArgument( tagFilterSection.WrapperTagId, categoryFilterSection.WrapperTagId, dateFilterSection.WrapperTagId), ButtonType = CommandButtonType.SimpleLinkButton, Text = "CloseTags", ResourceClassId = typeof(Labels).Name, CssClass = "sfCloseFilter", WidgetType = typeof(CommandWidget), IsSeparator = false }); var clientTemplateBuilder = new System.Text.StringBuilder(); clientTemplateBuilder.Append(@"<a href=""javascript:void(0);"" class=""sf_binderCommand_filterByTag"); clientTemplateBuilder.Append(@""">{{Title}}</a> <span class='sfCount'>({{ItemsCount}})</span>"); var tagFilterWidget = new DynamicCommandWidgetElement(tagFilterSection.Items) { Name = "TagFilter", CommandName = "filterByTag", PageSize = 10, WidgetType = typeof(DynamicCommandWidget), IsSeparator = false, BindTo = BindCommandListTo.Client, BaseServiceUrl = String.Format("~/Sitefinity/Services/Taxonomies/FlatTaxon.svc/{0}/", TaxonomyManager.TagsTaxonomyId), ResourceClassId = typeof(Labels).Name, MoreLinkText = "ShowMoreTags", MoreLinkCssClass = "sfShowMore", LessLinkText = "ShowLessTags", LessLinkCssClass = "sfShowMore", SelectedItemCssClass = "sfSel", ClientItemTemplate = clientTemplateBuilder.ToString() }; tagFilterWidget.UrlParameters.Add("itemType", typeof(ProductItem).AssemblyQualifiedName); tagFilterSection.Items.Add(tagFilterWidget); DefinitionsHelper.CreateTaxonomyLink( TaxonomyManager.CategoriesTaxonomyId, DefinitionsHelper.HideSectionsExceptCommandName, DefinitionsHelper.ConstructDisplaySectionsCommandArgument(categoryFilterSection.WrapperTagId), sidebarSection); DefinitionsHelper.CreateTaxonomyLink( TaxonomyManager.TagsTaxonomyId, DefinitionsHelper.HideSectionsExceptCommandName, DefinitionsHelper.ConstructDisplaySectionsCommandArgument(tagFilterSection.WrapperTagId), sidebarSection); #region Filter by date var closeDateFilterWidget = (new CommandWidgetElement(dateFilterSection.Items) { Name = "CloseDateFilter", CommandName = DefinitionsHelper.ShowSectionsExceptCommandName, CommandArgument = DefinitionsHelper.ConstructDisplaySectionsCommandArgument( tagFilterSection.WrapperTagId, categoryFilterSection.WrapperTagId, dateFilterSection.WrapperTagId), ButtonType = CommandButtonType.SimpleLinkButton, Text = "CloseDateFilter", ResourceClassId = typeof(ProductsResources).Name, CssClass = "sfCloseFilter", WidgetType = typeof(CommandWidget), IsSeparator = false }); dateFilterSection.Items.Add(closeDateFilterWidget); var dateFilterWidget = new DateFilteringWidgetDefinitionElement(dateFilterSection.Items) { Name = "DateFilter", WidgetType = typeof(DateFilteringWidget), IsSeparator = false, PropertyNameToFilter = "LastModified" }; DefinitionsHelper.GetPredefinedDateFilteringRanges(dateFilterWidget.PredefinedFilteringRanges); dateFilterSection.Items.Add(dateFilterWidget); sidebarSection.Items.Add(new CommandWidgetElement(sidebarSection.Items) { Name = "FilterByDate", CommandName = DefinitionsHelper.HideSectionsExceptCommandName, CommandArgument = DefinitionsHelper.ConstructDisplaySectionsCommandArgument(dateFilterSection.WrapperTagId), ButtonType = CommandButtonType.SimpleLinkButton, Text = "ByDateModified", ResourceClassId = typeof(ProductsResources).Name, WidgetType = typeof(CommandWidget), IsSeparator = false }); #endregion Filter by date WidgetBarSectionElement manageAlso = new WidgetBarSectionElement(productsGridView.SidebarConfig.Sections) { Name = "ManageAlso", Title = "ManageAlso", ResourceClassId = typeof(ProductsResources).Name, CssClass = "sfWidgetsList sfSeparator", WrapperTagId = "manageAlsoSection" }; CommandWidgetElement productsComments = new CommandWidgetElement(manageAlso.Items) { Name = "productsComments", CommandName = DefinitionsHelper.CommentsCommandName, ButtonType = CommandButtonType.SimpleLinkButton, Text = "CommentsForProducts", ResourceClassId = typeof(ProductsResources).Name, CssClass = "sfComments", WidgetType = typeof(CommandWidget), IsSeparator = false }; manageAlso.Items.Add(productsComments); WidgetBarSectionElement settings = new WidgetBarSectionElement(productsGridView.SidebarConfig.Sections) { Name = "Settings", Title = "Settings", ResourceClassId = typeof(ProductsResources).Name, CssClass = "sfWidgetsList sfSettings", WrapperTagId = "settingsSection" }; CommandWidgetElement productsPermissions = new CommandWidgetElement(settings.Items) { Name = "productsPermissions", CommandName = DefinitionsHelper.PermissionsCommandName, ButtonType = CommandButtonType.SimpleLinkButton, Text = "PermissionsForProducts", ResourceClassId = typeof(ProductsResources).Name, WidgetType = typeof(CommandWidget), IsSeparator = false }; settings.Items.Add(productsPermissions); CommandWidgetElement newsCustomFields = new CommandWidgetElement(settings.Items) { Name = "ProductsCustomFields", CommandName = DefinitionsHelper.ModuleEditor, ButtonType = CommandButtonType.SimpleLinkButton, Text = "CustomFields", ResourceClassId = typeof(ProductsResources).Name, WidgetType = typeof(CommandWidget), IsSeparator = false }; settings.Items.Add(newsCustomFields); CommandWidgetElement productsSettings = new CommandWidgetElement(settings.Items) { Name = "productsSettings", CommandName = DefinitionsHelper.SettingsCommandName, ButtonType = CommandButtonType.SimpleLinkButton, Text = "SettingsForProducts", ResourceClassId = typeof(ProductsResources).Name, WidgetType = typeof(CommandWidget), IsSeparator = false }; settings.Items.Add(productsSettings); productsGridView.SidebarConfig.Title = "ManageProducts"; productsGridView.SidebarConfig.ResourceClassId = typeof(ProductsResources).Name; productsGridView.SidebarConfig.Sections.Add(languagesSection); productsGridView.SidebarConfig.Sections.Add(sidebarSection); productsGridView.SidebarConfig.Sections.Add(manageAlso); productsGridView.SidebarConfig.Sections.Add(settings); #endregion #region ContextBar definition var translationsContextBarSection = new LocalizationWidgetBarSectionElement(productsGridView.ContextBarConfig.Sections) { Name = "Languages", WrapperTagKey = HtmlTextWriterTag.Div, CssClass = "sfContextWidgetWrp", MinLanguagesCountTreshold = DefinitionsHelper.LanguageItemsPerRow }; translationsContextBarSection.Items.Add(new CommandWidgetElement(translationsContextBarSection.Items) { Name = "ShowMoreTranslations", CommandName = DefinitionsHelper.ShowMoreTranslationsCommandName, ButtonType = CommandButtonType.SimpleLinkButton, Text = "ShowAllTranslations", ResourceClassId = typeof(LocalizationResources).Name, WidgetType = typeof(CommandWidget), IsSeparator = false, CssClass = "sfShowHideLangVersions", WrapperTagKey = HtmlTextWriterTag.Div }); translationsContextBarSection.Items.Add(new CommandWidgetElement(translationsContextBarSection.Items) { Name = "HideMoreTranslations", CommandName = DefinitionsHelper.HideMoreTranslationsCommandName, ButtonType = CommandButtonType.SimpleLinkButton, Text = "ShowBasicTranslationsOnly", ResourceClassId = typeof(LocalizationResources).Name, WidgetType = typeof(CommandWidget), IsSeparator = false, CssClass = "sfDisplayNone sfShowHideLangVersions", WrapperTagKey = HtmlTextWriterTag.Div }); productsGridView.ContextBarConfig.Sections.Add(translationsContextBarSection); #endregion #region Grid View Mode var gridMode = new GridViewModeElement(productsGridView.ViewModesConfig) { Name = "Grid" }; productsGridView.ViewModesConfig.Add(gridMode); DataColumnElement titleColumn = new DataColumnElement(gridMode.ColumnsConfig) { Name = "Title", HeaderText = Res.Get<Labels>().Title, HeaderCssClass = "sfTitleCol", ItemCssClass = "sfTitleCol", ClientTemplate = @"<a sys:href='javascript:void(0);' sys:class=""{{ 'sf_binderCommand_edit sfItemTitle sf' + UIStatus.toLowerCase()}}""> <strong>{{Title}}</strong> <span class='sfStatusLocation'>{{Status}}</span></a>" }; gridMode.ColumnsConfig.Add(titleColumn); DataColumnElement qtyColumn = new DataColumnElement(gridMode.ColumnsConfig) { Name = "QuantityInStock", HeaderText = "QuantityInStock", ResourceClassId = typeof(ProductsResources).Name, ClientTemplate = "<span>{{QuantityInStock}}</span>", HeaderCssClass = "sfRegular", ItemCssClass = "sfRegular" }; gridMode.ColumnsConfig.Add(qtyColumn); DataColumnElement priceColumn = new DataColumnElement(gridMode.ColumnsConfig) { Name = "Price", HeaderText = "Price", ResourceClassId = typeof(ProductsResources).Name, ClientTemplate = "<span>{{Price}}</span>", HeaderCssClass = "sfRegular", ItemCssClass = "sfRegular" }; gridMode.ColumnsConfig.Add(priceColumn); var translationsColumn = new DynamicColumnElement(gridMode.ColumnsConfig) { Name = "Translations", HeaderText = "Translations", ResourceClassId = typeof(LocalizationResources).Name, DynamicMarkupGenerator = typeof(LanguagesColumnMarkupGenerator), ItemCssClass = "sfLanguagesCol", HeaderCssClass = "sfLanguagesCol" }; translationsColumn.GeneratorSettingsElement = new LanguagesColumnMarkupGeneratorElement(translationsColumn) { LanguageSource = LanguageSource.Frontend, ItemsInGroupCount = DefinitionsHelper.LanguageItemsPerRow, ContainerTag = "div", GroupTag = "div", ItemTag = "div", ContainerClass = string.Empty, GroupClass = string.Empty, ItemClass = string.Empty }; gridMode.ColumnsConfig.Add(translationsColumn); ActionMenuColumnElement actionsColumn = new ActionMenuColumnElement(gridMode.ColumnsConfig) { Name = "Actions", HeaderText = Res.Get<Labels>().Actions, HeaderCssClass = "sfMoreActions", ItemCssClass = "sfMoreActions" }; FillActionMenuItems(actionsColumn.MenuItems, actionsColumn, typeof(ProductsResources).Name); gridMode.ColumnsConfig.Add(actionsColumn); DataColumnElement authorColumn = new DataColumnElement(gridMode.ColumnsConfig) { Name = "Author", HeaderText = Res.Get<Labels>().Author, ClientTemplate = "<span>{{Author}}</span>", HeaderCssClass = "sfRegular", ItemCssClass = "sfRegular" }; gridMode.ColumnsConfig.Add(authorColumn); DataColumnElement dateColumn = new DataColumnElement(gridMode.ColumnsConfig) { Name = "Date", HeaderText = Res.Get<Labels>().Date, ClientTemplate = "<span>{{ (DateCreated) ? DateCreated.sitefinityLocaleFormat('dd MMM, yyyy hh:mm:ss'): '-' }}</span>", HeaderCssClass = "sfDate", ItemCssClass = "sfDate" }; gridMode.ColumnsConfig.Add(dateColumn); #endregion #region DecisionScreens definition DecisionScreenElement dsElement = new DecisionScreenElement(productsGridView.DecisionScreensConfig) { Name = "NoItemsExistScreen", DecisionType = DecisionType.NoItemsExist, MessageType = MessageType.Neutral, Displayed = false, Title = "WhatDoYouWantToDoNow", MessageText = "NoProductItems", ResourceClassId = typeof(ProductsResources).Name }; CommandWidgetElement actionCreateNew = new CommandWidgetElement(dsElement.Actions) { Name = "Create", ButtonType = CommandButtonType.Create, CommandName = DefinitionsHelper.CreateCommandName, Text = "CreateItem", ResourceClassId = typeof(ProductsResources).Name, CssClass = "sfCreateItem", PermissionSet = ProductsConstants.Security.PermissionSetName, ActionName = ProductsConstants.Security.Create }; dsElement.Actions.Add(actionCreateNew); productsGridView.DecisionScreensConfig.Add(dsElement); #endregion #region Dialogs definition var parameters = string.Concat( "?ControlDefinitionName=", ProductsDefinitions.BackendDefinitionName, "&ViewName=", ProductsDefinitions.BackendInsertViewName); DialogElement createDialogElement = DefinitionsHelper.CreateDialogElement( productsGridView.DialogsConfig, DefinitionsHelper.CreateCommandName, "ContentViewInsertDialog", parameters); productsGridView.DialogsConfig.Add(createDialogElement); parameters = string.Concat( "?ControlDefinitionName=", ProductsDefinitions.BackendDefinitionName, "&ViewName=", ProductsDefinitions.BackendEditViewName); DialogElement editDialogElement = DefinitionsHelper.CreateDialogElement( productsGridView.DialogsConfig, DefinitionsHelper.EditCommandName, "ContentViewEditDialog", parameters); productsGridView.DialogsConfig.Add(editDialogElement); parameters = string.Concat( "?ControlDefinitionName=", ProductsDefinitions.BackendDefinitionName, "&ViewName=", ProductsDefinitions.BackendPreviewViewName, "&backLabelText=", Res.Get<ProductsResources>().BackToItems, "&SuppressBackToButtonLabelModify=true"); DialogElement previewDialogElement = DefinitionsHelper.CreateDialogElement( productsGridView.DialogsConfig, DefinitionsHelper.PreviewCommandName, "ContentViewEditDialog", parameters); productsGridView.DialogsConfig.Add(previewDialogElement); string permissionsParams = string.Concat( "?moduleName=", ProductsModule.ModuleName, "&typeName=", typeof(ProductItem).AssemblyQualifiedName, "&backLabelText=", Res.Get<ProductsResources>().BackToItems, "&title=", Res.Get<ProductsResources>().PermissionsForProducts); DialogElement permissionsDialogElement = DefinitionsHelper.CreateDialogElement( productsGridView.DialogsConfig, DefinitionsHelper.PermissionsCommandName, "ModulePermissionsDialog", permissionsParams); productsGridView.DialogsConfig.Add(permissionsDialogElement); string versioningParams = string.Concat( "?ControlDefinitionName=", ProductsDefinitions.BackendDefinitionName, "&moduleName=", ProductsModule.ModuleName, "&typeName=", typeof(ProductItem).AssemblyQualifiedName, "&title=", Res.Get<ProductsResources>().PermissionsForProducts, "&backLabelText=", Res.Get<ProductsResources>().BackToItems, "&" + ProductsDefinitions.ComparisonViewHistoryScreenQueryParameter + "=" + ProductsDefinitions.BackendVersionComapreViewName); DialogElement versioningDialogElement = DefinitionsHelper.CreateDialogElement( productsGridView.DialogsConfig, DefinitionsHelper.HistoryCommandName, "VersionHistoryDialog", versioningParams); productsGridView.DialogsConfig.Add(versioningDialogElement); string versioningGridParams = string.Concat( "?ControlDefinitionName=", ProductsDefinitions.BackendDefinitionName, "&moduleName=", ProductsModule.ModuleName, "&typeName=", typeof(ProductItem).AssemblyQualifiedName, "&title=", Res.Get<ProductsResources>().PermissionsForProducts, "&backLabelText=", Res.Get<ProductsResources>().BackToItems, "&" + ProductsDefinitions.ComparisonViewHistoryScreenQueryParameter + "=" + ProductsDefinitions.BackendVersionComapreViewName); DialogElement versioningGridDialogElement = DefinitionsHelper.CreateDialogElement( productsGridView.DialogsConfig, ProductsDefinitions.HistoryGridCommandName, "VersionHistoryDialog", versioningGridParams); productsGridView.DialogsConfig.Add(versioningGridDialogElement); parameters = string.Concat( "?ControlDefinitionName=", ProductsDefinitions.BackendDefinitionName, "&ViewName=", ProductsDefinitions.BackendVersionPreviewViewName, "&backLabelText=", Res.Get<Labels>().BackToRevisionHistory, "&SuppressBackToButtonLabelModify=true"); DialogElement previewVersionDialogElement = DefinitionsHelper.CreateDialogElement( productsGridView.DialogsConfig, DefinitionsHelper.VersionPreviewCommandName, "ContentViewEditDialog", parameters); productsGridView.DialogsConfig.Add(previewVersionDialogElement); parameters = string.Concat("?TypeName=ProductCatalogSample.Model.ProductItem&Title=", "Product Fields", "&BackLabelText=", Res.Get<ProductsResources>().BackToItems, "&ItemsName=", "Products"); DialogElement moduleEditorDialogElement = DefinitionsHelper.CreateDialogElement( productsGridView.DialogsConfig, DefinitionsHelper.ModuleEditor, "ModuleEditorDialog", parameters); productsGridView.DialogsConfig.Add(moduleEditorDialogElement); #endregion #region Links definition productsGridView.LinksConfig.Add(new LinkElement(productsGridView.LinksConfig) { Name = "viewComments", CommandName = DefinitionsHelper.CommentsCommandName, NavigateUrl = RouteHelper.CreateNodeReference(ProductsModule.CommentsPageId) }); productsGridView.LinksConfig.Add(new LinkElement(productsGridView.LinksConfig) { Name = "viewSettings", CommandName = DefinitionsHelper.SettingsCommandName, NavigateUrl = RouteHelper.CreateNodeReference(SiteInitializer.AdvancedSettingsNodeId) + "/products" }); DefinitionsHelper.CreateNotImplementedLink(productsGridView); #endregion backendContentView.ViewsConfig.Add(productsGridView); #endregion #region products backend details view var productsEditDetailView = new DetailFormViewElement(backendContentView.ViewsConfig) { Title = "EditItem", ViewName = ProductsDefinitions.BackendEditViewName, ViewType = typeof(DetailFormView), ShowSections = true, DisplayMode = FieldDisplayMode.Write, ShowTopToolbar = true, ResourceClassId = typeof(ProductsResources).Name, WebServiceBaseUrl = "~/Sitefinity/Services/Content/Products.svc/", IsToRenderTranslationView = true }; backendContentView.ViewsConfig.Add(productsEditDetailView); #region Versioning Comparison Screen var versionComparisonView = new ComparisonViewElement(backendContentView.ViewsConfig) { Title = "VersionComparison", ViewName = ProductsDefinitions.BackendVersionComapreViewName, ViewType = typeof(VersionComparisonView), DisplayMode = FieldDisplayMode.Read, ResourceClassId = typeof(ProductsResources).Name, UseWorkflow = false }; backendContentView.ViewsConfig.Add(versionComparisonView); versionComparisonView.Fields.Add(new ComparisonFieldElement(versionComparisonView.Fields) { FieldName = "Title", Title = "lTitle", ResourceClassId = typeof(ProductsResources).Name }); versionComparisonView.Fields.Add(new ComparisonFieldElement(versionComparisonView.Fields) { FieldName = "Content", Title = "Content", ResourceClassId = typeof(ProductsResources).Name }); versionComparisonView.Fields.Add(new ComparisonFieldElement(versionComparisonView.Fields) { FieldName = "WhatIsInTheBox", Title = "WhatIsInTheBox", ResourceClassId = typeof(ProductsResources).Name }); versionComparisonView.Fields.Add(new ComparisonFieldElement(versionComparisonView.Fields) { FieldName = "Price", Title = "Price", ResourceClassId = typeof(ProductsResources).Name }); versionComparisonView.Fields.Add(new ComparisonFieldElement(versionComparisonView.Fields) { FieldName = "QuantityInStock", Title = "QuantityInStock", ResourceClassId = typeof(ProductsResources).Name }); versionComparisonView.Fields.Add(new ComparisonFieldElement(versionComparisonView.Fields) { FieldName = "Category", Title = "Category", ResourceClassId = typeof(ProductsResources).Name }); versionComparisonView.Fields.Add(new ComparisonFieldElement(versionComparisonView.Fields) { FieldName = "Tags", Title = "Tags", ResourceClassId = typeof(ProductsResources).Name }); versionComparisonView.Fields.Add(new ComparisonFieldElement(versionComparisonView.Fields) { FieldName = "UrlName", Title = "UrlName", ResourceClassId = typeof(ProductsResources).Name }); #endregion var productsInsertDetailView = new DetailFormViewElement(backendContentView.ViewsConfig) { Title = "CreateNewItem", ViewName = ProductsDefinitions.BackendInsertViewName, ViewType = typeof(DetailFormView), ShowSections = true, DisplayMode = FieldDisplayMode.Write, ShowTopToolbar = true, ResourceClassId = typeof(ProductsResources).Name, WebServiceBaseUrl = "~/Sitefinity/Services/Content/Products.svc/", IsToRenderTranslationView = false }; backendContentView.ViewsConfig.Add(productsInsertDetailView); var previewExternalScripts = DefinitionsHelper.GetExtenalClientScripts( "Telerik.Sitefinity.Versioning.Web.UI.Scripts.VersionHistoryExtender.js, Telerik.Sitefinity", "OnDetailViewLoaded"); var productsPreviewDetailView = new DetailFormViewElement(backendContentView.ViewsConfig) { ViewName = ProductsDefinitions.BackendPreviewViewName, ViewType = typeof(DetailFormView), ShowSections = true, DisplayMode = FieldDisplayMode.Read, ShowTopToolbar = true, ResourceClassId = typeof(ProductsResources).Name, ShowNavigation = false, WebServiceBaseUrl = "~/Sitefinity/Services/Content/Products.svc/", UseWorkflow = false, ExternalClientScripts = previewExternalScripts }; backendContentView.ViewsConfig.Add(productsPreviewDetailView); #region products backend forms definition #region Insert Form ProductsDefinitions.CreateBackendSections(productsInsertDetailView, FieldDisplayMode.Write); ProductsDefinitions.CreateBackendFormToolbar(productsInsertDetailView, typeof(ProductsResources).Name, true); #endregion #region Edit Form ProductsDefinitions.CreateBackendSections(productsEditDetailView, FieldDisplayMode.Write); ProductsDefinitions.CreateBackendFormToolbar(productsEditDetailView, typeof(ProductsResources).Name, false); #endregion #region Preview History Form var previewLocalization = new Dictionary<string, string>() { { "ItemVersionOfClientTemplate", Res.Get<VersionResources>().ItemVersionOfClientTemplate }, { "PreviouslyPublished", Res.Get<VersionResources>().PreviouslyPublishedBrackets }, { "CannotDeleteLastPublishedVersion", Res.Get<VersionResources>().CannotDeleteLastPublishedVersion } }; //var previewExternalScripts = DefinitionsHelper.GetExtenalClientScripts( // "Telerik.Sitefinity.Versioning.Web.UI.Scripts.VersionHistoryExtender.js, Telerik.Sitefinity", // "OnDetailViewLoaded"); var productsHistoryPreviewDetailView = new DetailFormViewElement(backendContentView.ViewsConfig) { Title = "EditItem", ViewName = ProductsDefinitions.BackendVersionPreviewViewName, ViewType = typeof(DetailFormView), ShowSections = true, DisplayMode = FieldDisplayMode.Read, ShowTopToolbar = false, ResourceClassId = typeof(ProductsResources).Name, ExternalClientScripts = previewExternalScripts, WebServiceBaseUrl = "~/Sitefinity/Services/Content/Products.svc/", ShowNavigation = true, Localization = previewLocalization, UseWorkflow = false }; CreateHistoryPreviewToolbar(productsHistoryPreviewDetailView); backendContentView.ViewsConfig.Add(productsHistoryPreviewDetailView); ProductsDefinitions.CreateBackendSections(productsHistoryPreviewDetailView, FieldDisplayMode.Read); #endregion #region Preview Form ProductsDefinitions.CreateBackendSections(productsPreviewDetailView, FieldDisplayMode.Read); //TODO: add the preview screen toolbar widgets -->Edit,etc... #endregion #endregion #endregion return backendContentView; }
private static void CreateBackendSections(DetailFormViewElement detailView, FieldDisplayMode displayMode) { #region Toolbar section if (detailView.ViewName == ProductsDefinitions.BackendEditViewName) { var toolbarSection = new ContentViewSectionElement(detailView.Sections) { Name = DefinitionsHelper.ToolbarSectionName }; var languageListFieldElement = new LanguageListFieldElement(toolbarSection.Fields) { ID = "languageListField", FieldType = typeof(LanguageListField), ResourceClassId = typeof(LocalizationResources).Name, Title = "OtherTranslationsColon", DisplayMode = displayMode, FieldName = "languageListField", DataFieldName = "AvailableLanguages" }; toolbarSection.Fields.Add(languageListFieldElement); detailView.Sections.Add(toolbarSection); } #endregion #region Main section var mainSection = new ContentViewSectionElement(detailView.Sections) { Name = "MainSection", CssClass = "sfFirstForm" }; var titleField = new TextFieldDefinitionElement(mainSection.Fields) { ID = "titleFieldControl", DataFieldName = (displayMode == FieldDisplayMode.Write) ? "Title.PersistedValue" : "Title", DisplayMode = displayMode, Title = "lTitle", CssClass = "sfTitleField", ResourceClassId = typeof(ProductsResources).Name, WrapperTag = HtmlTextWriterTag.Li, }; titleField.ValidatorConfig = new ValidatorDefinitionElement(titleField) { Required = true, MessageCssClass = "sfError", RequiredViolationMessage = "TitleCannotBeEmpty", ResourceClassId = typeof(ProductsResources).Name }; mainSection.Fields.Add(titleField); if (detailView.ViewName == ProductsDefinitions.BackendEditViewName || detailView.ViewName == ProductsDefinitions.BackendInsertViewName) { var languageChoiceField = new ChoiceFieldElement(mainSection.Fields) { ID = "languageChoiceField", FieldType = typeof(LanguageChoiceField), ResourceClassId = typeof(ProductsResources).Name, Title = "Language", DisplayMode = displayMode, FieldName = "languageField", RenderChoiceAs = RenderChoicesAs.DropDown, MutuallyExclusive = true, DataFieldName = "AvailableLanguages" }; mainSection.Fields.Add(languageChoiceField); } var dropDownTaxonomyField = new TaxonFieldDefinitionElement(mainSection.Fields) { ID = "testTaxonomyField", Title = "Colors", DataFieldName = "Colors", TaxonomyId = ProductsModule.ColorsTaxonomyId, FieldType = typeof(TaxonomyDropDownField), DisplayMode = displayMode, }; mainSection.Fields.Add(dropDownTaxonomyField); var contentField = new HtmlFieldElement(mainSection.Fields) { ID = "contentFieldControl", DataFieldName = (displayMode == FieldDisplayMode.Write) ? "Content.PersistedValue" : "Content", DisplayMode = displayMode, CssClass = "sfFormSeparator sfContentField", ResourceClassId = typeof(ProductsResources).Name, WrapperTag = HtmlTextWriterTag.Li, EditorContentFilters = Telerik.Web.UI.EditorFilters.DefaultFilters, EditorStripFormattingOptions = (Telerik.Web.UI.EditorStripFormattingOptions?)(Telerik.Web.UI.EditorStripFormattingOptions.MSWord | Telerik.Web.UI.EditorStripFormattingOptions.Css | Telerik.Web.UI.EditorStripFormattingOptions.Font | Telerik.Web.UI.EditorStripFormattingOptions.Span | Telerik.Web.UI.EditorStripFormattingOptions.ConvertWordLists) }; mainSection.Fields.Add(contentField); //Product Image var productImageField = new ImageFieldElement(mainSection.Fields) { ID = "avatarField", DataFieldName = "ProductImage", DisplayMode = displayMode, UploadMode = ImageFieldUploadMode.Dialog, Title = "ProductImageFieldTitle", WrapperTag = HtmlTextWriterTag.Li, CssClass = "sfUserAvatar", ResourceClassId = typeof(ProductsResources).Name, DataFieldType = typeof(ContentLink), DefaultSrc = "~/SFRes/images/ProductCatalogSample/Images.NoProductImage.png", // put your default image location example: SizeInPx = 100 }; mainSection.Fields.Add(productImageField); var summaryField = new TextFieldDefinitionElement(mainSection.Fields) { ID = "whatsInTheBoxFieldControl", DataFieldName = (displayMode == FieldDisplayMode.Write) ? "WhatIsInTheBox.PersistedValue" : "WhatIsInTheBox", DisplayMode = displayMode, Title = "WhatIsInTheBox", CssClass = "sfFormSeparator", WrapperTag = HtmlTextWriterTag.Li, ResourceClassId = typeof(ProductsResources).Name, Rows = 5 }; summaryField.ExpandableDefinitionConfig = new ExpandableControlElement(summaryField) { Expanded = false, ExpandText = "ClickToAddSummary", ResourceClassId = typeof(ProductsResources).Name }; summaryField.ValidatorConfig.Required = false; mainSection.Fields.Add(summaryField); var quantityField = new TextFieldDefinitionElement(mainSection.Fields) { ID = "quantityFieldControl", DataFieldName = "QuantityInStock", DisplayMode = displayMode, Title = "QuantityInStock", CssClass = "sfTitleField", ResourceClassId = typeof(ProductsResources).Name, WrapperTag = HtmlTextWriterTag.Li }; quantityField.ValidatorConfig = new ValidatorDefinitionElement(quantityField) { Required = true, MessageCssClass = "sfError", RequiredViolationMessage = "TitleCannotBeEmpty", ResourceClassId = typeof(ProductsResources).Name, RegularExpression = "^[0-9]+[.]*[0-9]*$", RegularExpressionViolationMessage = "TheQuantityMustBeAPositiveNumber" }; mainSection.Fields.Add(quantityField); var priceField = new TextFieldDefinitionElement(mainSection.Fields) { ID = "priceFieldControl", DataFieldName = "Price", DisplayMode = displayMode, Title = "Price", CssClass = "sfTitleField", ResourceClassId = typeof(ProductsResources).Name, WrapperTag = HtmlTextWriterTag.Li, }; priceField.ValidatorConfig = new ValidatorDefinitionElement(priceField) { Required = true, MessageCssClass = "sfError", RequiredViolationMessage = "TitleCannotBeEmpty", ResourceClassId = typeof(ProductsResources).Name, RegularExpression = "^[0-9]+[.]*[0-9]*$", RegularExpressionViolationMessage = "ThePriceMustBeAPositiveNumber" }; mainSection.Fields.Add(priceField); detailView.Sections.Add(mainSection); #endregion #region Categories and Tags var taxonSection = new ContentViewSectionElement(detailView.Sections) { Name = "TaxonSection", Title = "CategoriesAndTags", ResourceClassId = typeof(ProductsResources).Name, CssClass = "sfExpandableForm", ExpandableDefinitionConfig = { Expanded = false } }; var categories = DefinitionTemplates.CategoriesFieldWriteMode(taxonSection.Fields); categories.DisplayMode = displayMode; taxonSection.Fields.Add(categories); var tags = DefinitionTemplates.TagsFieldWriteMode(taxonSection.Fields); tags.DisplayMode = displayMode; tags.CssClass = "sfFormSeparator"; tags.ExpandableDefinition.Expanded = true; tags.Description = "TagsFieldInstructions"; taxonSection.Fields.Add(tags); detailView.Sections.Add(taxonSection); #endregion #region More options section var moreOptionsSection = new ContentViewSectionElement(detailView.Sections) { Name = "MoreOptionsSection", Title = "MoreOptionsURL", ResourceClassId = typeof(ProductsResources).Name, CssClass = "sfExpandableForm", ExpandableDefinitionConfig = { Expanded = false } }; if (displayMode == FieldDisplayMode.Write) { var urlName = new MirrorTextFieldElement(moreOptionsSection.Fields) { Title = "UrlName", ResourceClassId = typeof(ProductsResources).Name, ID = "urlName", MirroredControlId = titleField.ID, DataFieldName = (displayMode == FieldDisplayMode.Write) ? "UrlName.PersistedValue" : "UrlName", DisplayMode = displayMode, RegularExpressionFilter = DefinitionsHelper.UrlRegularExpressionFilter, WrapperTag = HtmlTextWriterTag.Li, ReplaceWith = "-" }; var validationDef = new ValidatorDefinitionElement(urlName) { Required = true, MessageCssClass = "sfError", RequiredViolationMessage = Res.Get<ProductsResources>().UrlNameCannotBeEmpty, RegularExpression = DefinitionsHelper.UrlRegularExpressionFilterForValidator, RegularExpressionViolationMessage = Res.Get<PageResources>().UrlNameInvalidSymbols }; urlName.ValidatorConfig = validationDef; moreOptionsSection.Fields.Add(urlName); } var allowCommentsFieldElement = new ChoiceFieldElement(moreOptionsSection.Fields) { ID = "allowCommentsField", Title = (displayMode == FieldDisplayMode.Read) ? "AllowComments" : string.Empty, DataFieldName = "AllowComments", DisplayMode = displayMode, RenderChoiceAs = RenderChoicesAs.SingleCheckBox, CssClass = "sfCheckBox sfFormSeparator", WrapperTag = HtmlTextWriterTag.Li, ResourceClassId = typeof(ProductsResources).Name }; allowCommentsFieldElement.ChoicesConfig.Add( new ChoiceElement(allowCommentsFieldElement.ChoicesConfig) { Text = "AllowComments", ResourceClassId = typeof(ProductsResources).Name }); moreOptionsSection.Fields.Add(allowCommentsFieldElement); detailView.Sections.Add(moreOptionsSection); #endregion #region Sidebar if (displayMode == FieldDisplayMode.Write) { var sidebar = new ContentViewSectionElement(detailView.Sections) { Name = DefinitionsHelper.SidebarSectionName, CssClass = "sfItemReadOnlyInfo" }; sidebar.Fields.Add(new ContentWorkflowStatusInfoFieldElement(sidebar.Fields) { DisplayMode = displayMode, FieldName = "NewsWorkflowStatusInfoField", ResourceClassId = typeof(ProductsResources).Name, WrapperTag = HtmlTextWriterTag.Li, FieldType = typeof(ContentWorkflowStatusInfoField) }); detailView.Sections.Add(sidebar); } #endregion }
/// <summary> /// Creates the toolbar in the backend details form for preview mode. /// </summary> /// <param name="detailView">The detail view.</param> private static void CreateHistoryPreviewToolbar(DetailFormViewElement detailView) { var toolbarSectionElement = new WidgetBarSectionElement(detailView.Toolbar.Sections) { Name = "History", WrapperTagKey = HtmlTextWriterTag.Div, CssClass = "sfDetachedBtnArea" }; // Copy as New toolbarSectionElement.Items.Add(new CommandWidgetElement(toolbarSectionElement.Items) { Name = "CopyAsNewestWidgetElement", ButtonType = CommandButtonType.Standard, CommandName = DefinitionsHelper.RestoreVersionAsNewCommandName, Text = "CopyAsNewest", ResourceClassId = typeof(Labels).Name, WrapperTagKey = HtmlTextWriterTag.Span, WidgetType = typeof(CommandWidget) }); // Delete toolbarSectionElement.Items.Add(new CommandWidgetElement(toolbarSectionElement.Items) { Name = "DeleteVersionWidgetElement", ButtonType = CommandButtonType.Standard, CommandName = DefinitionsHelper.DeleteCommandName, Text = "Delete", ResourceClassId = typeof(ProductsResources).Name, WrapperTagKey = HtmlTextWriterTag.Span, WidgetType = typeof(CommandWidget) }); //Cancel toolbarSectionElement.Items.Add(new CommandWidgetElement(toolbarSectionElement.Items) { Name = "CancelWidgetElement", ButtonType = CommandButtonType.Cancel, CommandName = DefinitionsHelper.CancelCommandName, Text = "BackToRevisionHistory", WrapperTagKey = HtmlTextWriterTag.Span, WidgetType = typeof(CommandWidget), ResourceClassId = typeof(Labels).Name }); detailView.Toolbar.Sections.Add(toolbarSectionElement); }
private static void CreateBackendFormToolbar(DetailFormViewElement detailView, string resourceClassId, bool isCreateMode, string itemName, bool showPreview, string backToItems = "BackToItems") { var toolbarSectionElement = new WidgetBarSectionElement(detailView.Toolbar.Sections) { Name = "BackendForm", WrapperTagKey = HtmlTextWriterTag.Div, CssClass = "sfWorkflowMenuWrp" }; // Create toolbarSectionElement.Items.Add(new CommandWidgetElement(toolbarSectionElement.Items) { Name = "SaveChangesWidgetElement", ButtonType = CommandButtonType.Save, CommandName = DefinitionsHelper.SaveCommandName, Text = (isCreateMode) ? String.Concat("Create", itemName) : "SaveChanges", ResourceClassId = resourceClassId, WrapperTagKey = HtmlTextWriterTag.Span, WidgetType = typeof(CommandWidget) }); // Preview if (showPreview == true) { toolbarSectionElement.Items.Add(new CommandWidgetElement(toolbarSectionElement.Items) { Name = "PreviewWidgetElement", ButtonType = CommandButtonType.Standard, CommandName = DefinitionsHelper.PreviewCommandName, Text = "Preview", ResourceClassId = typeof(Labels).Name, WrapperTagKey = HtmlTextWriterTag.Span, WidgetType = typeof(CommandWidget) }); } if (!isCreateMode) { var actionsMenuWidget = new ActionMenuWidgetElement(toolbarSectionElement.Items) { Name = "moreActions", Text = Res.Get<Labels>().MoreActionsLink, ResourceClassId = resourceClassId, WrapperTagKey = HtmlTextWriterTag.Div, WidgetType = typeof(ActionMenuWidget), CssClass = "sfInlineBlock sfAlignMiddle" }; actionsMenuWidget.MenuItems.Add(new CommandWidgetElement(actionsMenuWidget.MenuItems) { Name = DeleteCommandName, Text = "DeleteThisItem", CommandName = DefinitionsHelper.DeleteCommandName, ResourceClassId = resourceClassId, WidgetType = typeof(CommandWidget), CssClass = "sfDeleteItm" }); actionsMenuWidget.MenuItems.Add(new CommandWidgetElement(actionsMenuWidget.MenuItems) { Name = PermissionsCommandName, ButtonType = CommandButtonType.SimpleLinkButton, Text = "SetPermissions", CommandName = DefinitionsHelper.PermissionsCommandName, ResourceClassId = resourceClassId, WidgetType = typeof(CommandWidget) }); toolbarSectionElement.Items.Add(actionsMenuWidget); } // Cancel toolbarSectionElement.Items.Add(new CommandWidgetElement(toolbarSectionElement.Items) { Name = "CancelWidgetElement", ButtonType = CommandButtonType.Cancel, CommandName = DefinitionsHelper.CancelCommandName, Text = backToItems, ResourceClassId = resourceClassId, WrapperTagKey = HtmlTextWriterTag.Span, WidgetType = typeof(CommandWidget) }); detailView.Toolbar.Sections.Add(toolbarSectionElement); }
/// <summary> /// Creates the toolbar in the backend details form. /// </summary> /// <param name="detailView">The detail view.</param> /// <param name="resourceClassId">The resource class pageId.</param> /// <param name="isCreateMode">if set to <c>true</c> the form is in Create mode.</param> private static void CreateBackendFormToolbar(DetailFormViewElement detailView, string resourceClassId, bool isCreateMode) { ProductsDefinitions.CreateBackendFormToolbar(detailView, resourceClassId, isCreateMode, "ThisItem", true); }
/// <summary> /// Defines the jobs backend content view. /// </summary> /// <param name="parent">The parent.</param> /// <returns></returns> public static ContentViewControlElement DefineJobsBackendContentView(ConfigElement parent) { // define content view control var backendContentView = new ContentViewControlElement(parent) { ControlDefinitionName = BackendDefinitionName, ContentType = typeof(JobApplication) }; // define views var jobsGridView = new MasterGridViewElement(backendContentView.ViewsConfig) { ViewName = JobsDefinitions.BackendListViewName, ViewType = typeof(MasterGridView), AllowPaging = true, DisplayMode = FieldDisplayMode.Read, ItemsPerPage = 50, ResourceClassId = typeof(JobsResources).Name, Title = "JobsViewTitle", WebServiceBaseUrl = "~/Sitefinity/Services/Content/Jobs.svc/", }; // define columns var gridMode = new GridViewModeElement(jobsGridView.ViewModesConfig) { Name = "Grid", }; jobsGridView.ViewModesConfig.Add(gridMode); DataColumnElement firstNameColumn = new DataColumnElement(gridMode.ColumnsConfig) { Name = "FirstName", HeaderText = Res.Get <JobsResources>().FirstName, ClientTemplate = "<span>{{FirstName}}</span>", HeaderCssClass = "sfRegular", ItemCssClass = "sfRegular" }; gridMode.ColumnsConfig.Add(firstNameColumn); DataColumnElement lastNameColumn = new DataColumnElement(gridMode.ColumnsConfig) { Name = "LastName", HeaderText = Res.Get <JobsResources>().LastName, ClientTemplate = "<span>{{LastName}}</span>", HeaderCssClass = "sfRegular", ItemCssClass = "sfRegular" }; gridMode.ColumnsConfig.Add(lastNameColumn); DataColumnElement phoneColumn = new DataColumnElement(gridMode.ColumnsConfig) { Name = "Phone", HeaderText = Res.Get <JobsResources>().PhoneNumber, ClientTemplate = "<span>{{Phone}}</span>", HeaderCssClass = "sfRegular", ItemCssClass = "sfRegular" }; gridMode.ColumnsConfig.Add(phoneColumn); DataColumnElement refferalColumn = new DataColumnElement(gridMode.ColumnsConfig) { Name = "Refferal", HeaderText = Res.Get <JobsResources>().Referrer, ClientTemplate = "<span>{{Referral}}</span>", HeaderCssClass = "sfRegular", ItemCssClass = "sfRegular" }; gridMode.ColumnsConfig.Add(refferalColumn); ActionMenuColumnElement actionsColumn = new ActionMenuColumnElement(gridMode.ColumnsConfig) { Name = "Actions", HeaderText = Res.Get <Labels>().Actions, HeaderCssClass = "sfMoreActions", ItemCssClass = "sfMoreActions" }; FillActionMenuItems(actionsColumn.MenuItems, actionsColumn, typeof(JobsResources).Name); gridMode.ColumnsConfig.Add(actionsColumn); DataColumnElement authorColumn = new DataColumnElement(gridMode.ColumnsConfig) { Name = "Author", HeaderText = Res.Get <Labels>().Author, ClientTemplate = "<span>{{Author}}</span>", HeaderCssClass = "sfRegular", ItemCssClass = "sfRegular" }; gridMode.ColumnsConfig.Add(authorColumn); DataColumnElement dateColumn = new DataColumnElement(gridMode.ColumnsConfig) { Name = "Date", HeaderText = Res.Get <Labels>().Date, ClientTemplate = "<span>{{ (DateCreated) ? DateCreated.sitefinityLocaleFormat('dd MMM, yyyy hh:mm:ss'): '-' }}</span>", HeaderCssClass = "sfDate", ItemCssClass = "sfDate" }; gridMode.ColumnsConfig.Add(dateColumn); backendContentView.ViewsConfig.Add(jobsGridView); var parameters = string.Concat( "?ControlDefinitionName=", JobsDefinitions.BackendDefinitionName, "&ViewName=", JobsDefinitions.BackendEditViewName); DialogElement editDialogElement = DefinitionsHelper.CreateDialogElement( jobsGridView.DialogsConfig, DefinitionsHelper.EditCommandName, "ContentViewEditDialog", parameters); jobsGridView.DialogsConfig.Add(editDialogElement); var jobsEditDetailView = new DetailFormViewElement(backendContentView.ViewsConfig) { Title = "EditItem", ViewName = JobsDefinitions.BackendEditViewName, ViewType = typeof(DetailFormView), ShowSections = true, DisplayMode = FieldDisplayMode.Write, ShowTopToolbar = true, ResourceClassId = typeof(JobsResources).Name, WebServiceBaseUrl = "~/Sitefinity/Services/Content/Jobs.svc/", IsToRenderTranslationView = false, UseWorkflow = false }; backendContentView.ViewsConfig.Add(jobsEditDetailView); JobsDefinitions.CreateBackendSections(jobsEditDetailView, FieldDisplayMode.Write); JobsDefinitions.CreateBackendFormToolbar(jobsEditDetailView, typeof(JobsResources).Name, false); return(backendContentView); }
private static void CreateBackendSections(DetailFormViewElement detailView, FieldDisplayMode displayMode) { var mainSection = new ContentViewSectionElement(detailView.Sections) { Name = "MainSection", CssClass = "sfFirstForm" }; var firstNameField = new TextFieldDefinitionElement(mainSection.Fields) { ID = "firstNameFieldControl", DataFieldName = "FirstName", DisplayMode = displayMode, Title = "FirstName", CssClass = "sfTitleField", ResourceClassId = typeof(JobsResources).Name, WrapperTag = HtmlTextWriterTag.Li, }; firstNameField.ValidatorConfig = new ValidatorDefinitionElement(firstNameField) { Required = true, MessageCssClass = "sfError", RequiredViolationMessage = Res.Get <JobsResources>().FirstNameCannotBeEmpty, MaxLength = 40, MaxLengthViolationMessage = Res.Get <JobsResources>().TextFieldMaximumLength }; mainSection.Fields.Add(firstNameField); var lastNameField = new TextFieldDefinitionElement(mainSection.Fields) { ID = "lastNameFieldControl", DataFieldName = "LastName", DisplayMode = displayMode, Title = "LastName", CssClass = "sfTitleField", ResourceClassId = typeof(JobsResources).Name, WrapperTag = HtmlTextWriterTag.Li, }; lastNameField.ValidatorConfig = new ValidatorDefinitionElement(lastNameField) { Required = true, MessageCssClass = "sfError", RequiredViolationMessage = Res.Get <JobsResources>().LastNameCannotBeEmpty, MaxLength = 40, MaxLengthViolationMessage = Res.Get <JobsResources>().TextFieldMaximumLength }; mainSection.Fields.Add(lastNameField); var phoneNumberField = new TextFieldDefinitionElement(mainSection.Fields) { ID = "phoneNumberFieldControl", DataFieldName = "Phone", DisplayMode = displayMode, Title = "PhoneNumber", CssClass = "sfTitleField", ResourceClassId = typeof(JobsResources).Name, WrapperTag = HtmlTextWriterTag.Li, }; phoneNumberField.ValidatorConfig = new ValidatorDefinitionElement(phoneNumberField) { Required = true, MessageCssClass = "sfError", RequiredViolationMessage = Res.Get <JobsResources>().PhoneNumberCannotBeEmpty, RegularExpression = "^[0-9]+[.]*[0-9]*$", RegularExpressionViolationMessage = Res.Get <JobsResources>().InvalidPhoneNumber, MaxLength = 40, MaxLengthViolationMessage = Res.Get <JobsResources>().TextFieldMaximumLength }; mainSection.Fields.Add(phoneNumberField); var textField = new TextFieldDefinitionElement(mainSection.Fields) { ID = "motivationalTextFieldControl", DataFieldName = "Text", DisplayMode = displayMode, Title = "MotivationalText", CssClass = "sfTitleField", WrapperTag = HtmlTextWriterTag.Li, ResourceClassId = typeof(JobsResources).Name, Rows = 5 }; textField.ExpandableDefinitionConfig = new ExpandableControlElement(textField) { Expanded = false, ExpandText = Res.Get <JobsResources>().ClickToAddSummary }; textField.ValidatorConfig = new ValidatorDefinitionElement(textField) { Required = true, MessageCssClass = "sfError", RequiredViolationMessage = Res.Get <JobsResources>().MotivationalTextCannotBeEmpty, MaxLength = 200, MaxLengthViolationMessage = Res.Get <JobsResources>().TextAreaMaximumLength }; mainSection.Fields.Add(textField); var referrer = new ChoiceFieldElement(mainSection.Fields) { RenderChoiceAs = Telerik.Sitefinity.Web.UI.Fields.Enums.RenderChoicesAs.DropDown, ID = "referrerChoices", DataFieldName = "Referral", DisplayMode = displayMode, Title = "HowDidYouHear", CssClass = "sfTitleField", WrapperTag = HtmlTextWriterTag.Li, ResourceClassId = typeof(JobsResources).Name, }; var internetAdField = new ChoiceElement(referrer.ChoicesConfig) { Text = Res.Get <JobsResources>().InternetAd, Value = Res.Get <JobsResources>().InternetAd, }; referrer.ChoicesConfig.Add(internetAdField); var mobilePhoneAdField = new ChoiceElement(referrer.ChoicesConfig) { Text = Res.Get <JobsResources>().MobilePhoneAd, Value = Res.Get <JobsResources>().MobilePhoneAd, }; referrer.ChoicesConfig.Add(mobilePhoneAdField); var socialNetworkField = new ChoiceElement(referrer.ChoicesConfig) { Text = Res.Get <JobsResources>().SocialNetwork, Value = Res.Get <JobsResources>().SocialNetwork, }; referrer.ChoicesConfig.Add(socialNetworkField); var televisionAdField = new ChoiceElement(referrer.ChoicesConfig) { Text = Res.Get <JobsResources>().TelevisionAd, Value = Res.Get <JobsResources>().TelevisionAd, }; referrer.ChoicesConfig.Add(televisionAdField); var webLinkField = new ChoiceElement(referrer.ChoicesConfig) { Text = Res.Get <JobsResources>().WebLink, Value = Res.Get <JobsResources>().WebLink, }; referrer.ChoicesConfig.Add(webLinkField); var webSearchField = new ChoiceElement(referrer.ChoicesConfig) { Text = Res.Get <JobsResources>().WebSearch, Value = Res.Get <JobsResources>().WebSearch, }; referrer.ChoicesConfig.Add(webSearchField); var magazineAdField = new ChoiceElement(referrer.ChoicesConfig) { Text = Res.Get <JobsResources>().MagazineAd, Value = Res.Get <JobsResources>().MagazineAd, }; referrer.ChoicesConfig.Add(magazineAdField); var otherField = new ChoiceElement(referrer.ChoicesConfig) { Text = Res.Get <JobsResources>().Other, Value = Res.Get <JobsResources>().Other, }; referrer.ChoicesConfig.Add(otherField); mainSection.Fields.Add(referrer); detailView.Sections.Add(mainSection); }
private static void CreateBackendSections(DetailFormViewElement detailView, FieldDisplayMode displayMode) { #region Toolbar section if (detailView.ViewName == AgentsDefinitions.BackendEditViewName) { var toolbarSection = new ContentViewSectionElement(detailView.Sections) { Name = DefinitionsHelper.ToolbarSectionName }; var languageListFieldElement = new LanguageListFieldElement(toolbarSection.Fields) { ID = "languageListField", FieldType = typeof(LanguageListField), ResourceClassId = typeof(LocalizationResources).Name, Title = "OtherTranslationsColon", DisplayMode = displayMode, FieldName = "languageListField", DataFieldName = "AvailableLanguages" }; toolbarSection.Fields.Add(languageListFieldElement); detailView.Sections.Add(toolbarSection); } #endregion #region Main section var mainSection = new ContentViewSectionElement(detailView.Sections) { Name = "MainSection", CssClass = "sfFirstForm" }; var titleField = new TextFieldDefinitionElement(mainSection.Fields) { ID = "titleFieldControl", DataFieldName = (displayMode == FieldDisplayMode.Write) ? "Title.PersistedValue" : "Title", DisplayMode = displayMode, Title = "lTitle", CssClass = "sfTitleField", ResourceClassId = typeof(AgentsResources).Name, WrapperTag = HtmlTextWriterTag.Li, }; titleField.ValidatorConfig = new ValidatorDefinitionElement(titleField) { Required = true, MessageCssClass = "sfError", RequiredViolationMessage = "TitleCannotBeEmpty", ResourceClassId = typeof(AgentsResources).Name }; mainSection.Fields.Add(titleField); if (detailView.ViewName == AgentsDefinitions.BackendEditViewName || detailView.ViewName == AgentsDefinitions.BackendInsertViewName) { var languageChoiceField = new ChoiceFieldElement(mainSection.Fields) { ID = "languageChoiceField", FieldType = typeof(LanguageChoiceField), ResourceClassId = typeof(AgentsResources).Name, Title = "Language", DisplayMode = displayMode, FieldName = "languageField", RenderChoiceAs = RenderChoicesAs.DropDown, MutuallyExclusive = true, DataFieldName = "AvailableLanguages" }; mainSection.Fields.Add(languageChoiceField); } var emailField = new TextFieldDefinitionElement(mainSection.Fields) { ID = "emailFieldControl", DataFieldName = "Email", DisplayMode = displayMode, Title = "Email", CssClass = "sfTitleField", ResourceClassId = typeof(AgentsResources).Name, WrapperTag = HtmlTextWriterTag.Li }; emailField.ValidatorConfig = new ValidatorDefinitionElement(emailField) { Required = true, MessageCssClass = "sfError", RequiredViolationMessage = "EmailCannotBeEmpty", RegularExpression = @"^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$", RegularExpressionViolationMessage = "EmailMustBeValid", ResourceClassId = typeof(AgentsResources).Name }; mainSection.Fields.Add(emailField); var phoneNumberField = new TextFieldDefinitionElement(mainSection.Fields) { ID = "phoneNumberFieldControl", DataFieldName = "PhoneNumber", DisplayMode = displayMode, Title = "PhoneNumber", CssClass = "sfTitleField", ResourceClassId = typeof(AgentsResources).Name, WrapperTag = HtmlTextWriterTag.Li }; mainSection.Fields.Add(phoneNumberField); var addressField = new TextFieldDefinitionElement(mainSection.Fields) { ID = "addressFieldControl", DataFieldName = "Address", DisplayMode = displayMode, Title = "Address", CssClass = "sfTitleField", ResourceClassId = typeof(AgentsResources).Name, WrapperTag = HtmlTextWriterTag.Li }; mainSection.Fields.Add(addressField); var postalCodeField = new TextFieldDefinitionElement(mainSection.Fields) { ID = "postalCodeFieldControl", DataFieldName = "PostalCode", DisplayMode = displayMode, Title = "PostalCode", CssClass = "sfTitleField", ResourceClassId = typeof(AgentsResources).Name, WrapperTag = HtmlTextWriterTag.Li }; mainSection.Fields.Add(postalCodeField); detailView.Sections.Add(mainSection); #endregion #region Categories and Tags var taxonSection = new ContentViewSectionElement(detailView.Sections) { Name = "TaxonSection", Title = "CategoriesAndTags", ResourceClassId = typeof(AgentsResources).Name, CssClass = "sfExpandableForm", ExpandableDefinitionConfig = { Expanded = false } }; var categories = DefinitionTemplates.CategoriesFieldWriteMode(taxonSection.Fields); categories.DisplayMode = displayMode; taxonSection.Fields.Add(categories); var tags = DefinitionTemplates.TagsFieldWriteMode(taxonSection.Fields); tags.DisplayMode = displayMode; tags.CssClass = "sfFormSeparator"; tags.ExpandableDefinition.Expanded = true; tags.Description = "TagsFieldInstructions"; taxonSection.Fields.Add(tags); detailView.Sections.Add(taxonSection); #endregion #region More options section var moreOptionsSection = new ContentViewSectionElement(detailView.Sections) { Name = "MoreOptionsSection", Title = "MoreOptionsURL", ResourceClassId = typeof(AgentsResources).Name, CssClass = "sfExpandableForm", ExpandableDefinitionConfig = { Expanded = false } }; if (displayMode == FieldDisplayMode.Write) { var urlName = new MirrorTextFieldElement(moreOptionsSection.Fields) { Title = "UrlName", ID = "urlName", MirroredControlId = titleField.ID, DataFieldName = "UrlName.PersistedValue", DisplayMode = displayMode, RegularExpressionFilter = DefinitionsHelper.UrlRegularExpressionFilter, WrapperTag = HtmlTextWriterTag.Li, ReplaceWith = "-", ResourceClassId = typeof(AgentsResources).Name }; var validationDef = new ValidatorDefinitionElement(urlName) { Required = true, MessageCssClass = "sfError", RequiredViolationMessage = "UrlNameCannotBeEmpty", RegularExpression = DefinitionsHelper.UrlRegularExpressionFilterForValidator, RegularExpressionViolationMessage = "UrlNameInvalid", ResourceClassId = typeof(AgentsResources).Name }; urlName.ValidatorConfig = validationDef; moreOptionsSection.Fields.Add(urlName); } detailView.Sections.Add(moreOptionsSection); #endregion #region Sidebar if (displayMode == FieldDisplayMode.Write) { var sidebar = new ContentViewSectionElement(detailView.Sections) { Name = DefinitionsHelper.SidebarSectionName, CssClass = "sfItemReadOnlyInfo" }; sidebar.Fields.Add(new ContentWorkflowStatusInfoFieldElement(sidebar.Fields) { DisplayMode = displayMode, FieldName = "NewsWorkflowStatusInfoField", ResourceClassId = typeof(AgentsResources).Name, WrapperTag = HtmlTextWriterTag.Li, FieldType = typeof(ContentWorkflowStatusInfoField) }); detailView.Sections.Add(sidebar); } #endregion }
private static void CreateBackendFormToolbar(DetailFormViewElement detailView, string resourceClassId, bool isCreateMode) { JobsDefinitions.CreateBackendFormToolbar(detailView, resourceClassId, isCreateMode, "ThisItem", true); }
/// <summary> /// Defines the locations backend content view (control panel and views). /// </summary> /// <param name="parent">The parent element hosting the backend content view.</param> /// <returns></returns> public static ContentViewControlElement DefineLocationsBackendContentView(ConfigElement parent) { // initialize the content view; this is the element that will be returned to the page and holds all views of the admin panel var backendContentView = new ContentViewControlElement(parent) { ControlDefinitionName = BackendDefinitionName, ContentType = typeof(LocationItem), UseWorkflow = false }; // GridView element serves as the "List View" for the item list. Grid columns are defined later var locationsGridView = new MasterGridViewElement(backendContentView.ViewsConfig) { ViewName = LocationsDefinitions.BackendListViewName, ViewType = typeof(MasterGridView), AllowPaging = true, DisplayMode = FieldDisplayMode.Read, ItemsPerPage = 50, SearchFields = "Title", SortExpression = "Title ASC", Title = "Locations", WebServiceBaseUrl = "~/Sitefinity/Services/Content/Locations.svc/" }; backendContentView.ViewsConfig.Add(locationsGridView); #region Module Main Toolbar definition // Toolbar is the top menu with action buttons such as Create, Delete, Search, etc. var masterViewToolbarSection = new WidgetBarSectionElement(locationsGridView.ToolbarConfig.Sections) { Name = "Toolbar" }; // "Create" Button for Toolbar var createLocationsWidget = new CommandWidgetElement(masterViewToolbarSection.Items) { Name = "CreateLocationsCommandWidget", ButtonType = CommandButtonType.Create, CommandName = DefinitionsHelper.CreateCommandName, Text = "Create Location", CssClass = "sfMainAction", WidgetType = typeof(CommandWidget) }; masterViewToolbarSection.Items.Add(createLocationsWidget); // "Delete" button for Toolbar var deleteLocationsWidget = new CommandWidgetElement(masterViewToolbarSection.Items) { Name = "DeleteLocationsCommandWidget", ButtonType = CommandButtonType.Standard, CommandName = DefinitionsHelper.GroupDeleteCommandName, Text = "Delete", WidgetType = typeof(CommandWidget), CssClass = "sfGroupBtn" }; masterViewToolbarSection.Items.Add(deleteLocationsWidget); // "Search" button for toolbar masterViewToolbarSection.Items.Add(DefinitionsHelper.CreateSearchButtonWidget(masterViewToolbarSection.Items, typeof(LocationItem))); locationsGridView.ToolbarConfig.Sections.Add(masterViewToolbarSection); #endregion #region Locations Grid (List View) // Define GridView mode var gridMode = new GridViewModeElement(locationsGridView.ViewModesConfig) { Name = "Grid" }; locationsGridView.ViewModesConfig.Add(gridMode); #region Locations Grid Columns // Title column DataColumnElement titleColumn = new DataColumnElement(gridMode.ColumnsConfig) { Name = "Title", HeaderText = "Title", HeaderCssClass = "sfTitleCol", ItemCssClass = "sfTitleCol", ClientTemplate = @"<a sys:href='javascript:void(0);' sys:class=""{{ 'sf_binderCommand_edit sfItemTitle sfpublished""> <strong>{{Title}}</strong></a>" }; gridMode.ColumnsConfig.Add(titleColumn); ActionMenuColumnElement actionsColumn = new ActionMenuColumnElement(gridMode.ColumnsConfig) { Name = "Actions", HeaderText = "Actions", HeaderCssClass = "sfMoreActions", ItemCssClass = "sfMoreActions" }; actionsColumn.MenuItems.Add(DefinitionsHelper.CreateActionMenuCommand(actionsColumn.MenuItems, "View", HtmlTextWriterTag.Li, "preview", "View", string.Empty)); actionsColumn.MenuItems.Add(DefinitionsHelper.CreateActionMenuCommand(actionsColumn.MenuItems, "Delete", HtmlTextWriterTag.Li, "delete", "Delete", string.Empty)); gridMode.ColumnsConfig.Add(actionsColumn); #endregion #endregion #region Dialog Window definitions #region Insert Item Dialog // Insert Item Parameters var parameters = string.Concat( "?ControlDefinitionName=", LocationsDefinitions.BackendDefinitionName, "&ViewName=", LocationsDefinitions.BackendInsertViewName); // Insert Item Dialog DialogElement createDialogElement = DefinitionsHelper.CreateDialogElement( locationsGridView.DialogsConfig, DefinitionsHelper.CreateCommandName, "ContentViewInsertDialog", parameters); // add dialog to Backend locationsGridView.DialogsConfig.Add(createDialogElement); #endregion #region Edit Item Dialog // "Edit Item" Parameters parameters = string.Concat( "?ControlDefinitionName=", LocationsDefinitions.BackendDefinitionName, "&ViewName=", LocationsDefinitions.BackendEditViewName); // "Edit Item" Dialog DialogElement editDialogElement = DefinitionsHelper.CreateDialogElement( locationsGridView.DialogsConfig, DefinitionsHelper.EditCommandName, "ContentViewEditDialog", parameters); // Add Dialog to Backend locationsGridView.DialogsConfig.Add(editDialogElement); #endregion #region Preview Item Dialog // "Preview Item" parameters parameters = string.Concat( "?ControlDefinitionName=", LocationsDefinitions.BackendDefinitionName, "&ViewName=", LocationsDefinitions.BackendPreviewName, "&backLabelText=", "BacktoItems", "&SuppressBackToButtonLabelModify=true"); // Preview Item Dialog DialogElement previewDialogElement = DefinitionsHelper.CreateDialogElement( locationsGridView.DialogsConfig, DefinitionsHelper.PreviewCommandName, "ContentViewEditDialog", parameters); // Add Dialog to Backend locationsGridView.DialogsConfig.Add(previewDialogElement); #endregion #endregion #region Admin Forms Views #region Create Item Form View // bind create item view to web service var locationsInsertDetailView = new DetailFormViewElement(backendContentView.ViewsConfig) { Title = "Create Location", ViewName = LocationsDefinitions.BackendInsertViewName, ViewType = typeof(DetailFormView), ShowSections = true, DisplayMode = FieldDisplayMode.Write, ShowTopToolbar = true, WebServiceBaseUrl = "~/Sitefinity/Services/Content/locations.svc/", IsToRenderTranslationView = false, UseWorkflow = false }; backendContentView.ViewsConfig.Add(locationsInsertDetailView); #endregion #region Edit Item Form View // bind Edit item form to web service var locationsEditDetailView = new DetailFormViewElement(backendContentView.ViewsConfig) { Title = "Edit Location", ViewName = LocationsDefinitions.BackendEditViewName, ViewType = typeof(DetailFormView), ShowSections = true, DisplayMode = FieldDisplayMode.Write, ShowTopToolbar = true, WebServiceBaseUrl = "~/Sitefinity/Services/Content/Locations.svc/", IsToRenderTranslationView = false, UseWorkflow = false }; backendContentView.ViewsConfig.Add(locationsEditDetailView); #endregion #region Preview Item Form View // bind Preview Form to web service var locationsPreviewDetailView = new DetailFormViewElement(backendContentView.ViewsConfig) { Title = "Location Preview", ViewName = LocationsDefinitions.BackendPreviewName, ViewType = typeof(DetailFormView), ShowSections = true, DisplayMode = FieldDisplayMode.Read, ShowTopToolbar = true, ShowNavigation = true, WebServiceBaseUrl = "~/Sitefinity/Services/Content/Locations.svc/", UseWorkflow = false }; backendContentView.ViewsConfig.Add(locationsPreviewDetailView); #endregion #endregion #region Locations Backend Forms Definition #region Insert Form LocationsDefinitions.CreateBackendSections(locationsInsertDetailView, FieldDisplayMode.Write); LocationsDefinitions.CreateBackendFormToolbar(locationsInsertDetailView, true, true); #endregion #region Edit Form LocationsDefinitions.CreateBackendSections(locationsEditDetailView, FieldDisplayMode.Write); LocationsDefinitions.CreateBackendFormToolbar(locationsEditDetailView, false, true); #endregion #region Preview Form CreateBackendSections(locationsPreviewDetailView, FieldDisplayMode.Read); #endregion #endregion return backendContentView; }
/// <summary> /// Creates the backend sections. Adds edit/preview controls to the detailView /// </summary> /// <param name="detailView">The detail view.</param> /// <param name="displayMode">The display mode.</param> private static void CreateBackendSections(DetailFormViewElement detailView, FieldDisplayMode displayMode) { // define main content section var mainSection = new ContentViewSectionElement(detailView.Sections) { Name = "MainSection", CssClass = "sfFirstForm" }; #region Title Field // define title field element var titleField = new TextFieldDefinitionElement(mainSection.Fields) { ID = "titleFieldControl", DataFieldName = displayMode == FieldDisplayMode.Write ? "Title.PersistedValue" : "Title", DisplayMode = displayMode, Title = "Title", CssClass = "sfTitleField", WrapperTag = HtmlTextWriterTag.Li, }; // add validation titleField.ValidatorConfig = new ValidatorDefinitionElement(titleField) { Required = true, MessageCssClass = "sfError", RequiredViolationMessage = "Title field is required" }; // add field to section mainSection.Fields.Add(titleField); #endregion #region Content var contentField = new HtmlFieldElement(mainSection.Fields) { ID = "contentFieldControl", DataFieldName = displayMode == FieldDisplayMode.Write ? "Content.PersistedValue" : "Content", DisplayMode = displayMode, CssClass = "sfFormSeparator sfContentField", WrapperTag = HtmlTextWriterTag.Li, EditorContentFilters = Telerik.Web.UI.EditorFilters.DefaultFilters, EditorStripFormattingOptions = (EditorStripFormattingOptions?)(EditorStripFormattingOptions.MSWord | EditorStripFormattingOptions.Css | EditorStripFormattingOptions.Font | EditorStripFormattingOptions.Span | EditorStripFormattingOptions.ConvertWordLists) }; mainSection.Fields.Add(contentField); #endregion #region Address fields // Address field var addressField = new TextFieldDefinitionElement(mainSection.Fields) { ID = "addressFieldControl", DataFieldName = "Address", DisplayMode = displayMode, Title = "Address", CssClass = "sfTitleField", WrapperTag = HtmlTextWriterTag.Li }; addressField.ValidatorConfig = new ValidatorDefinitionElement(addressField) { Required = true, MessageCssClass = "sfError", RequiredViolationMessage = "Location address is required" }; mainSection.Fields.Add(addressField); // City field var cityField = new TextFieldDefinitionElement(mainSection.Fields) { ID = "cityFieldControl", DataFieldName = "City", DisplayMode = displayMode, Title = "City", CssClass = "sfTitleField", WrapperTag = HtmlTextWriterTag.Li }; mainSection.Fields.Add(cityField); // State / Region field var regionField = new TextFieldDefinitionElement(mainSection.Fields) { ID = "regionFieldControl", DataFieldName = "Region", DisplayMode = displayMode, Title = "State / Region", CssClass = "sfTitleField", WrapperTag = HtmlTextWriterTag.Li }; regionField.ValidatorConfig = new ValidatorDefinitionElement(regionField) { Required = true, MessageCssClass = "sfError", RequiredViolationMessage = "State / Region is a required field" }; mainSection.Fields.Add(regionField); // Postal Code field var postalCodeField = new TextFieldDefinitionElement(mainSection.Fields) { ID = "postalCodeFieldControl", DataFieldName = "PostalCode", DisplayMode = displayMode, Title = "Postal Code", CssClass = "sfTitleField", WrapperTag = HtmlTextWriterTag.Li }; postalCodeField.ValidatorConfig = new ValidatorDefinitionElement(postalCodeField) { Required = true, MessageCssClass = "sfError", RequiredViolationMessage = "Postal code is a required field" }; mainSection.Fields.Add(postalCodeField); // Country field var countryField = new TextFieldDefinitionElement(mainSection.Fields) { ID = "countryFieldControl", DataFieldName = "Country", DisplayMode = displayMode, Title = "Country", CssClass = "sfTitleField", WrapperTag = HtmlTextWriterTag.Li }; countryField.ValidatorConfig = new ValidatorDefinitionElement(countryField) { Required = true, MessageCssClass = "sfError", RequiredViolationMessage = "Country is a required field" }; mainSection.Fields.Add(countryField); // add section to view detailView.Sections.Add(mainSection); #endregion #region Categories and Tags Section // define new section var taxonSection = new ContentViewSectionElement(detailView.Sections) { Name = "TaxonSection", Title = "Categories and Tags", CssClass = "sfExpandableForm", ExpandableDefinitionConfig = { Expanded = false } }; // add categories field to section var categories = DefinitionTemplates.CategoriesFieldWriteMode(taxonSection.Fields); categories.DisplayMode = displayMode; // add categories section to view taxonSection.Fields.Add(categories); // add tags field to section var tags = DefinitionTemplates.TagsFieldWriteMode(taxonSection.Fields); tags.DisplayMode = displayMode; tags.CssClass = "sfFormSeparator"; tags.ExpandableDefinition.Expanded = true; tags.Description = "TagsFieldInstructions"; taxonSection.Fields.Add(tags); // add tags section to view detailView.Sections.Add(taxonSection); #endregion #region More options Section // define new section var moreOptionsSection = new ContentViewSectionElement(detailView.Sections) { Name = "MoreOptionsSection", Title = "More Options", CssClass = "sfExpandableForm", ExpandableDefinitionConfig = { Expanded = false } }; // Url field for insert view if (displayMode == FieldDisplayMode.Write) { var urlName = new MirrorTextFieldElement(moreOptionsSection.Fields) { Title = "URL", ID = "urlName", MirroredControlId = titleField.ID, DataFieldName = "UrlName.PersistedValue", DisplayMode = displayMode, RegularExpressionFilter = DefinitionsHelper.UrlRegularExpressionFilter, WrapperTag = HtmlTextWriterTag.Li, ReplaceWith = "-" }; var validationDef = new ValidatorDefinitionElement(urlName) { Required = true, MessageCssClass = "sfError", RequiredViolationMessage = "Url cannot be empty", RegularExpression = DefinitionsHelper.UrlRegularExpressionFilterForValidator, RegularExpressionViolationMessage = "Invalid Url" }; urlName.ValidatorConfig = validationDef; moreOptionsSection.Fields.Add(urlName); } // add url section to view detailView.Sections.Add(moreOptionsSection); #endregion }
/// <summary> /// Defines the locations backend content view (control panel and views). /// </summary> /// <param name="parent">The parent element hosting the backend content view.</param> /// <returns></returns> public static ContentViewControlElement DefineLocationsBackendContentView(ConfigElement parent) { // initialize the content view; this is the element that will be returned to the page and holds all views of the admin panel var backendContentView = new ContentViewControlElement(parent) { ControlDefinitionName = BackendDefinitionName, ContentType = typeof(LocationItem), UseWorkflow = false }; // GridView element serves as the "List View" for the item list. Grid columns are defined later var locationsGridView = new MasterGridViewElement(backendContentView.ViewsConfig) { ViewName = LocationsDefinitions.BackendListViewName, ViewType = typeof(MasterGridView), AllowPaging = true, DisplayMode = FieldDisplayMode.Read, ItemsPerPage = 50, SearchFields = "Title", SortExpression = "Title ASC", Title = "Locations", WebServiceBaseUrl = "~/Sitefinity/Services/Content/Locations.svc/" }; backendContentView.ViewsConfig.Add(locationsGridView); #region Module Main Toolbar definition // Toolbar is the top menu with action buttons such as Create, Delete, Search, etc. var masterViewToolbarSection = new WidgetBarSectionElement(locationsGridView.ToolbarConfig.Sections) { Name = "Toolbar" }; // "Create" Button for Toolbar var createLocationsWidget = new CommandWidgetElement(masterViewToolbarSection.Items) { Name = "CreateLocationsCommandWidget", ButtonType = CommandButtonType.Create, CommandName = DefinitionsHelper.CreateCommandName, Text = "Create Location", CssClass = "sfMainAction", WidgetType = typeof(CommandWidget) }; masterViewToolbarSection.Items.Add(createLocationsWidget); // "Delete" button for Toolbar var deleteLocationsWidget = new CommandWidgetElement(masterViewToolbarSection.Items) { Name = "DeleteLocationsCommandWidget", ButtonType = CommandButtonType.Standard, CommandName = DefinitionsHelper.GroupDeleteCommandName, Text = "Delete", WidgetType = typeof(CommandWidget), CssClass = "sfGroupBtn" }; masterViewToolbarSection.Items.Add(deleteLocationsWidget); // "Search" button for toolbar masterViewToolbarSection.Items.Add(DefinitionsHelper.CreateSearchButtonWidget(masterViewToolbarSection.Items, typeof(LocationItem))); locationsGridView.ToolbarConfig.Sections.Add(masterViewToolbarSection); #endregion #region Locations Grid (List View) // Define GridView mode var gridMode = new GridViewModeElement(locationsGridView.ViewModesConfig) { Name = "Grid" }; locationsGridView.ViewModesConfig.Add(gridMode); #region Locations Grid Columns // Title column DataColumnElement titleColumn = new DataColumnElement(gridMode.ColumnsConfig) { Name = "Title", HeaderText = "Title", HeaderCssClass = "sfTitleCol", ItemCssClass = "sfTitleCol", ClientTemplate = @"<a sys:href='javascript:void(0);' sys:class=""{{ 'sf_binderCommand_edit sfItemTitle sfpublished""> <strong>{{Title}}</strong></a>" }; gridMode.ColumnsConfig.Add(titleColumn); ActionMenuColumnElement actionsColumn = new ActionMenuColumnElement(gridMode.ColumnsConfig) { Name = "Actions", HeaderText = "Actions", HeaderCssClass = "sfMoreActions", ItemCssClass = "sfMoreActions" }; actionsColumn.MenuItems.Add(DefinitionsHelper.CreateActionMenuCommand(actionsColumn.MenuItems, "View", HtmlTextWriterTag.Li, "preview", "View", string.Empty)); actionsColumn.MenuItems.Add(DefinitionsHelper.CreateActionMenuCommand(actionsColumn.MenuItems, "Delete", HtmlTextWriterTag.Li, "delete", "Delete", string.Empty)); gridMode.ColumnsConfig.Add(actionsColumn); #endregion #endregion #region Dialog Window definitions #region Insert Item Dialog // Insert Item Parameters var parameters = string.Concat( "?ControlDefinitionName=", LocationsDefinitions.BackendDefinitionName, "&ViewName=", LocationsDefinitions.BackendInsertViewName); // Insert Item Dialog DialogElement createDialogElement = DefinitionsHelper.CreateDialogElement( locationsGridView.DialogsConfig, DefinitionsHelper.CreateCommandName, "ContentViewInsertDialog", parameters); // add dialog to Backend locationsGridView.DialogsConfig.Add(createDialogElement); #endregion #region Edit Item Dialog // "Edit Item" Parameters parameters = string.Concat( "?ControlDefinitionName=", LocationsDefinitions.BackendDefinitionName, "&ViewName=", LocationsDefinitions.BackendEditViewName); // "Edit Item" Dialog DialogElement editDialogElement = DefinitionsHelper.CreateDialogElement( locationsGridView.DialogsConfig, DefinitionsHelper.EditCommandName, "ContentViewEditDialog", parameters); // Add Dialog to Backend locationsGridView.DialogsConfig.Add(editDialogElement); #endregion #region Preview Item Dialog // "Preview Item" parameters parameters = string.Concat( "?ControlDefinitionName=", LocationsDefinitions.BackendDefinitionName, "&ViewName=", LocationsDefinitions.BackendPreviewName, "&backLabelText=", "BacktoItems", "&SuppressBackToButtonLabelModify=true"); // Preview Item Dialog DialogElement previewDialogElement = DefinitionsHelper.CreateDialogElement( locationsGridView.DialogsConfig, DefinitionsHelper.PreviewCommandName, "ContentViewEditDialog", parameters); // Add Dialog to Backend locationsGridView.DialogsConfig.Add(previewDialogElement); #endregion #endregion #region Admin Forms Views #region Create Item Form View // bind create item view to web service var locationsInsertDetailView = new DetailFormViewElement(backendContentView.ViewsConfig) { Title = "Create Location", ViewName = LocationsDefinitions.BackendInsertViewName, ViewType = typeof(DetailFormView), ShowSections = true, DisplayMode = FieldDisplayMode.Write, ShowTopToolbar = true, WebServiceBaseUrl = "~/Sitefinity/Services/Content/locations.svc/", IsToRenderTranslationView = false, UseWorkflow = false }; backendContentView.ViewsConfig.Add(locationsInsertDetailView); #endregion #region Edit Item Form View // bind Edit item form to web service var locationsEditDetailView = new DetailFormViewElement(backendContentView.ViewsConfig) { Title = "Edit Location", ViewName = LocationsDefinitions.BackendEditViewName, ViewType = typeof(DetailFormView), ShowSections = true, DisplayMode = FieldDisplayMode.Write, ShowTopToolbar = true, WebServiceBaseUrl = "~/Sitefinity/Services/Content/Locations.svc/", IsToRenderTranslationView = false, UseWorkflow = false }; backendContentView.ViewsConfig.Add(locationsEditDetailView); #endregion #region Preview Item Form View // bind Preview Form to web service var locationsPreviewDetailView = new DetailFormViewElement(backendContentView.ViewsConfig) { Title = "Location Preview", ViewName = LocationsDefinitions.BackendPreviewName, ViewType = typeof(DetailFormView), ShowSections = true, DisplayMode = FieldDisplayMode.Read, ShowTopToolbar = true, ShowNavigation = true, WebServiceBaseUrl = "~/Sitefinity/Services/Content/Locations.svc/", UseWorkflow = false }; backendContentView.ViewsConfig.Add(locationsPreviewDetailView); #endregion #endregion #region Locations Backend Forms Definition #region Insert Form LocationsDefinitions.CreateBackendSections(locationsInsertDetailView, FieldDisplayMode.Write); LocationsDefinitions.CreateBackendFormToolbar(locationsInsertDetailView, true, true); #endregion #region Edit Form LocationsDefinitions.CreateBackendSections(locationsEditDetailView, FieldDisplayMode.Write); LocationsDefinitions.CreateBackendFormToolbar(locationsEditDetailView, false, true); #endregion #region Preview Form CreateBackendSections(locationsPreviewDetailView, FieldDisplayMode.Read); #endregion #endregion return(backendContentView); }
/// <summary> /// Creates the backend form toolbar. /// </summary> /// <param name="detailView">The detail view.</param> /// <param name="resourceClassId">The resource class id.</param> /// <param name="isCreateMode">if set to <c>true</c> [is create mode].</param> /// <param name="itemName">Name of the item.</param> /// <param name="addRevisionHistory">if set to <c>true</c> [add revision history].</param> /// <param name="showPreview">if set to <c>true</c> [show preview].</param> /// <param name="backToItems">The back to items.</param> private static void CreateBackendFormToolbar(DetailFormViewElement detailView, bool isCreateMode, bool showPreview) { // create toolbar var toolbarSectionElement = new WidgetBarSectionElement(detailView.Toolbar.Sections) { Name = "BackendForm", WrapperTagKey = HtmlTextWriterTag.Div, CssClass = "sfWorkflowMenuWrp" }; // Create / Save Command toolbarSectionElement.Items.Add(new CommandWidgetElement(toolbarSectionElement.Items) { Name = "SaveChangesWidgetElement", ButtonType = CommandButtonType.Save, CommandName = DefinitionsHelper.SaveCommandName, Text = (isCreateMode) ? String.Concat("Create Location") : "Save Changes", WrapperTagKey = HtmlTextWriterTag.Span, WidgetType = typeof(CommandWidget) }); // Preview if (showPreview == true) { toolbarSectionElement.Items.Add(new CommandWidgetElement(toolbarSectionElement.Items) { Name = "PreviewWidgetElement", ButtonType = CommandButtonType.Standard, CommandName = DefinitionsHelper.PreviewCommandName, Text = "Preview", ResourceClassId = typeof(Labels).Name, WrapperTagKey = HtmlTextWriterTag.Span, WidgetType = typeof(CommandWidget) }); } // show Actions menu if (!isCreateMode) { var actionsMenuWidget = new ActionMenuWidgetElement(toolbarSectionElement.Items) { Name = "moreActions", Text = Res.Get <Labels>().MoreActionsLink, WrapperTagKey = HtmlTextWriterTag.Div, WidgetType = typeof(ActionMenuWidget), CssClass = "sfInlineBlock sfAlignMiddle" }; actionsMenuWidget.MenuItems.Add(new CommandWidgetElement(actionsMenuWidget.MenuItems) { Name = "DeleteCommand", Text = "DeleteThisItem", CommandName = DefinitionsHelper.DeleteCommandName, WidgetType = typeof(CommandWidget), CssClass = "sfDeleteItm" }); toolbarSectionElement.Items.Add(actionsMenuWidget); } // Cancel button toolbarSectionElement.Items.Add(new CommandWidgetElement(toolbarSectionElement.Items) { Name = "CancelWidgetElement", ButtonType = CommandButtonType.Cancel, CommandName = DefinitionsHelper.CancelCommandName, Text = "Back to Locations List", WrapperTagKey = HtmlTextWriterTag.Span, WidgetType = typeof(CommandWidget) }); detailView.Toolbar.Sections.Add(toolbarSectionElement); }