using System; using System.Data; using System.Linq; using CMS.Ecommerce; using CMS.FormEngine; using CMS.GlobalHelper; using CMS.SettingsProvider; using CMS.SiteProvider; using CMS.UIControls; using CMS.CMSHelper; using CMS.Controls.Configuration; public partial class CMSModules_Ecommerce_Pages_Tools_Products_Product_Edit_Header : CMSProductPropertiesPage { #region "Variables" protected string productName = string.Empty; protected int optionCategoryId = 0; protected int sectionId = -1; protected int siteId = 0; protected string selectedTab = string.Empty; protected int nodeId = 0; protected SKUInfo sku = null; private bool dialogMode = false; #endregion protected void Page_PreInit(object sender, EventArgs e) { optionCategoryId = QueryHelper.GetInteger("categoryid", 0); sectionId = QueryHelper.GetInteger("sectionId", -1); if (optionCategoryId > 0) { IsProductOption = true; } } protected override void OnInit(EventArgs e) { base.OnInit(e); // Get product name ane option category ID if (ProductID > 0) { sku = SKUInfoProvider.GetSKUInfo(ProductID); if (sku != null) { productName = ResHelper.LocalizeString(sku.SKUName); optionCategoryId = sku.SKUOptionCategoryID; siteId = sku.SKUSiteID; // Check if edited object belongs to configured site CheckEditedObjectSiteID(siteId); } } dialogMode = QueryHelper.GetBoolean("dialogmode", false); nodeId = QueryHelper.GetInteger("nodeId", 0); // Display tabs separator CurrentMaster.PanelSeparator.Visible = true; AddMenuButtonSelectScript("Products", string.Empty); } protected override void OnLoad(EventArgs e) { // Handle callback var parameters = Request.Form["params"]; if (parameters != null) { bool handled = false; switch (parameters.ToLowerCSafe()) { // Select preview tab case "previewtab": UIContext.ProductTab = ProductTabEnum.Preview; handled = true; break; // Select live site tab case "livesitetab": UIContext.ProductTab = ProductTabEnum.LiveSite; handled = true; break; } if (handled) { Response.Clear(); Response.End(); } } base.OnLoad(e); string productList = string.Empty; string productListText = string.Empty; string targetFrame = string.Empty; string titleText = string.Empty; string titleImage = string.Empty; ScriptHelper.RegisterClientScriptBlock(Page, typeof(string), "selectTab", ScriptHelper.GetScript(@"function SetTab(tab){ $j.ajax({type: 'POST', data: 'params='+tab, context: document.body, dataType: 'text'});}")); // When editing product option if (optionCategoryId > 0) { productListText = GetString("Prodect_Edit_Header.ProductOptionsLink"); productList = "~/CMSModules/Ecommerce/Pages/Tools/ProductOptions/OptionCategory_Edit_Options.aspx?categoryid=" + optionCategoryId + "&siteId=" + SiteID; targetFrame = "OptionCategoryEdit"; } // When editing product else { productListText = GetString(((nodeId > 0) || !DisplayTreeInProducts) ? "com.sku.productslist" : "com.sku.unassignedlist"); productList = "~/CMSModules/Ecommerce/Pages/Tools/Products/Product_List.aspx?siteId=" + SiteID; if (sectionId > 0) { productList = URLHelper.AddParameterToUrl(productList, "nodeId", sectionId.ToString()); } targetFrame = "_parent"; titleText = GetString((nodeId > 0) ? "Product_Edit_Header.HeaderCaption" : "com.sku.unassignedproperties"); titleImage = GetImageUrl("Objects/Ecommerce_SKU/object.png"); } int hideBreadcrumbs = QueryHelper.GetInteger("hidebreadcrumbs", 0); if ((hideBreadcrumbs == 0) && !dialogMode) { // initializes page title control IntializeBreadcrumbs(productListText, productList, targetFrame, productName); } // Ensure page with changes saved message is loaded initially if required if (QueryHelper.GetInteger("saved", 0) == 1) { CurrentMaster.Tabs.StartPageURL = "Product_Edit_General.aspx" + URLHelper.Url.Query; } // Initialize the master page elements IntializeMasterPage(titleImage, titleText); } /// /// Initializes the master page elements. /// /// Text of the product list /// Product list /// Name of the target frame /// Name of the current product private void IntializeBreadcrumbs(string productListText, string productList, string targetFrame, string currentProductName) { PageTitle masterTitle = CurrentMaster.Title; if (Node != null) { masterTitle.Breadcrumbs = CreateNodeBreadcrumbs(); } else { string[,] breadcrumbs = new string[2, 3]; // Create ordinary breadcrumbs when no node supplied breadcrumbs[0, 0] = productListText; breadcrumbs[0, 1] = (dialogMode) ? null : productList; breadcrumbs[0, 2] = targetFrame; breadcrumbs[1, 0] = FormatBreadcrumbObjectName(currentProductName, siteId); breadcrumbs[1, 1] = string.Empty; breadcrumbs[1, 2] = string.Empty; // Set the master page breadcrumb property masterTitle.Breadcrumbs = breadcrumbs; } } /// /// Returns script executed after the breadcrumb is clicked. /// /// Datarow containing document data. protected override string CreateNodeBreadcrumbScript(DataRow dr) { return string.Format("parent.parent.SelectNode({0}); parent.parent.RefreshTree({1}, {0}); return false;", dr["NodeID"], dr["NodeParentID"]); } /// /// Initializes the master page elements. /// /// Title of the page title element /// URL of the image of the page title element private void IntializeMasterPage(string titleImage, string titleText) { CMSMasterPage master = (CMSMasterPage)CurrentMaster; selectedTab = DataHelper.GetNotEmpty(QueryHelper.GetString("tab", String.Empty).ToLowerCSafe(), ProductTabCode.ToString(UIContext.ProductTab).ToLowerCSafe()); if (!dialogMode) { master.Title.TitleText = titleText; master.Title.TitleImage = titleImage; master.Title.HelpTopicName = "new_product"; master.Title.HelpName = "helpTopic"; } master.Tabs.OnTabCreated += Tabs_OnTabCreated; master.Tabs.UrlTarget = "ProductContent"; master.Tabs.ModuleName = "CMS.Ecommerce"; master.Tabs.ElementName = (optionCategoryId > 0) ? "ProductOptions.Options" : "Products.Properties"; } protected TabItem Tabs_OnTabCreated(UIElementInfo element, TabItem tab, int tabIndex) { bool splitViewSupported = false; string lowerElementName = element.ElementName.ToLowerCSafe(); UIPageURLSettings settings = null; switch (lowerElementName) { case "products.general": case "products.attachments": case "products.metadata": case "products.categories": case "products.workflow": case "products.versions": splitViewSupported = true; break; } switch (lowerElementName) { case "products.attachments": case "products.metadata": case "products.categories": case "products.workflow": case "products.versions": case "products.relatedproducts": // Check if editing product with its document if (NodeID <= 0) { return null; } break; case "products.documents": if ((NodeID <= 0) && DisplayTreeInProducts) { if (!CurrentUser.IsGlobalAdministrator || (sku == null) || !sku.IsGlobal) { return null; } } break; case "products.preview": // Check if editing product with its document if (NodeID <= 0) { return null; } settings = new UIPageURLSettings { Mode = "preview", NodeID = Node.NodeID, Culture = Node.DocumentCulture, Node = Node, AllowViewValidate = false }; tab.RedirectUrl = GetDocumentPageUrl(settings); tab.RedirectUrl = URLHelper.AddParameterToUrl(tab.RedirectUrl, "nodeid", NodeID.ToString()); tab.OnClientClick += "SetTab('PreviewTab')"; break; case "products.livesite": // Check if editing product with its document if (NodeID <= 0) { return null; } settings = new UIPageURLSettings { Mode = "livesite", NodeID = Node.NodeID, Culture = Node.DocumentCulture, Node = Node, AllowViewValidate = false }; tab.RedirectUrl = GetDocumentPageUrl(settings); tab.RedirectUrl = URLHelper.AddParameterToUrl(tab.RedirectUrl, "nodeid", NodeID.ToString()); tab.OnClientClick += "SetTab('LiveSiteTab')"; break; case "products.customfields": case "productoptions.options.customfields": // Check if SKU has any custom fields FormInfo formInfo = FormHelper.GetFormInfo("ecommerce.sku", false); if (!formInfo.GetFormElements(true, false, true).Any()) { return null; } break; case "products.advanced": tab.Expand = (NodeID <= 0); break; } // Open advanced tab when one of its subtabs is selected bool openAdvanced = false; switch (selectedTab) { case "options": case "volumediscounts": case "workflow": case "versions": case "documents": case "relatedproducts": openAdvanced = true; break; } // Ensure tab preselection if (lowerElementName.StartsWithCSafe("products.") && ((lowerElementName.Substring("products.".Length) == selectedTab) || (openAdvanced && (lowerElementName == "products.advanced")))) { CurrentMaster.Tabs.SelectedTab = tabIndex; } // Add SiteId parameter to each tab if (!string.IsNullOrEmpty(tab.RedirectUrl)) { tab.RedirectUrl = URLHelper.AddParameterToUrl(tab.RedirectUrl, "siteId", SiteID.ToString()); } // Ensure split view mode if ((NodeID > 0) && splitViewSupported && CMSContext.DisplaySplitMode) { tab.RedirectUrl = GetSplitViewUrl(tab.RedirectUrl); } // Make URL absolute tab.RedirectUrl = URLHelper.GetAbsoluteUrl(tab.RedirectUrl); return tab; } }