public void LoadData() { if (node != null) { string layoutText = String.Empty; // get template info pti = PageTemplateInfoProvider.GetPageTemplateInfo(node.GetUsedPageTemplateId()); if ((pti == null) && (DocumentContext.CurrentPageInfo != null) && (DocumentContext.CurrentPageInfo.UsedPageTemplateInfo != null)) { pti = DocumentContext.CurrentPageInfo.UsedPageTemplateInfo; } if (pti != null) { PageTemplateLayoutTypeEnum type = PageTemplateLayoutTypeEnum.PageTemplateLayout; // Try get device layout object layoutObject = PageTemplateDeviceLayoutInfoProvider.GetLayoutObject(pti, DeviceContext.CurrentDeviceProfile, out type); layoutText = pti.PageTemplateLayout; // Set layout text with dependence on current layout type switch (type) { // Shared layouts case PageTemplateLayoutTypeEnum.SharedLayout: case PageTemplateLayoutTypeEnum.DeviceSharedLayout: case PageTemplateLayoutTypeEnum.SharedLayoutMapped: layoutText = (layoutObject as LayoutInfo).LayoutCode; break; // Custom device layout case PageTemplateLayoutTypeEnum.DeviceLayout: layoutText = (layoutObject as PageTemplateDeviceLayoutInfo).LayoutCode; break; } } ltlLayoutCode.Text = HTMLHelper.EnsureHtmlLineEndings(HTMLHelper.HighlightHTML(layoutText)); ltlLayoutCode.Text = RegexHelper.GetRegex("[ ](?![^<>]*>)").Replace(ltlLayoutCode.Text, " "); // Load node data if (!RequestHelper.IsPostBack()) { txtBodyCss.Text = node.NodeBodyElementAttributes; txtBodyScripts.Value = node.NodeBodyScripts; txtDocType.Text = node.NodeDocType; txtHeadTags.Value = node.NodeHeadTags; } } lblAfterDocType.Text = HighlightHTML("<html>") + "<br />" + AddSpaces(1) + HighlightHTML("<head>"); lblAfterHeadTags.Text = AddSpaces(1) + HighlightHTML("</head>"); lblAfterLayout.Text = AddSpaces(1) + HighlightHTML("</body>") + "<br />" + HighlightHTML("</html>"); lblBodyEnd.Text = HighlightHTML(">"); lblBodyStart.Text = AddSpaces(1) + HighlightHTML("<body " + HttpUtility.HtmlDecode(mBody)); }
private void EditForm_OnBeforeSave(object sender, EventArgs e) { // Don't save shared layout object, update only necessary objects if ((EditedObjectType == EditedObjectTypeEnum.Layout) && radShared.Checked) { LayoutInfo li = EditedObject as LayoutInfo; // Get the current layout type PageTemplateLayoutTypeEnum layoutType = PageTemplateLayoutTypeEnum.PageTemplateLayout; PageTemplateDeviceLayoutInfoProvider.GetLayoutObject(PageTemplateInfo, DeviceProfileInfo, out layoutType); switch (layoutType) { case PageTemplateLayoutTypeEnum.PageTemplateLayout: case PageTemplateLayoutTypeEnum.SharedLayout: { int newLayoutId = ValidationHelper.GetInteger(drpLayout.Value, 0); // We need to save also page template if shared template is used if ((PageTemplateInfo != null) && (PageTemplateInfo.LayoutID != li.LayoutId)) { PageTemplateInfo.LayoutID = newLayoutId; PageTemplateInfo.Update(); } } break; case PageTemplateLayoutTypeEnum.DeviceSharedLayout: case PageTemplateLayoutTypeEnum.DeviceLayout: { // We need to save also template device layout if shared template is used PageTemplateDeviceLayoutInfo deviceLayout = PageTemplateDeviceLayoutInfoProvider.GetTemplateDeviceLayoutInfo(TemplateID, DeviceProfileID); if (deviceLayout != null) { deviceLayout.LayoutID = ValidationHelper.GetInteger(drpLayout.Value, 0); deviceLayout.LayoutCode = null; deviceLayout.LayoutCSS = null; deviceLayout.Update(); } } break; } ShowChangesSaved(); // Prevent from saving object EditForm.StopProcessing = true; } }
/// <summary> /// Handles the OnAfterAction event of the ObjectManager control. /// </summary> protected void ObjectManager_OnAfterAction(object sender, SimpleObjectManagerEventArgs e) { if ((e.ActionName == ComponentEvents.SAVE) || (e.ActionName == ComponentEvents.CHECKIN)) { if (EditForm.ValidateData()) { LayoutInfo li = EditedObject as LayoutInfo; if (radShared.Checked) { // Get the current layout type PageTemplateLayoutTypeEnum layoutType = PageTemplateLayoutTypeEnum.PageTemplateLayout; PageTemplateDeviceLayoutInfoProvider.GetLayoutObject(PageTemplateInfo, DeviceProfileInfo, out layoutType); switch (layoutType) { case PageTemplateLayoutTypeEnum.PageTemplateLayout: case PageTemplateLayoutTypeEnum.SharedLayout: { int newLayoutId = ValidationHelper.GetInteger(drpLayout.Value, 0); // We need to save also page template if shared template is used if ((PageTemplateInfo != null) && (PageTemplateInfo.LayoutID != li.LayoutId)) { PageTemplateInfo.LayoutID = newLayoutId; PageTemplateInfo.Update(); } } break; case PageTemplateLayoutTypeEnum.DeviceSharedLayout: case PageTemplateLayoutTypeEnum.DeviceLayout: { // We need to save also template device layout if shared template is used PageTemplateDeviceLayoutInfo deviceLayout = PageTemplateDeviceLayoutInfoProvider.GetTemplateDeviceLayoutInfo(TemplateID, DeviceProfileID); if (deviceLayout != null) { deviceLayout.LayoutID = ValidationHelper.GetInteger(drpLayout.Value, 0); deviceLayout.LayoutCode = null; deviceLayout.LayoutCSS = null; deviceLayout.Update(); } } break; default: break; } } // Register refresh script string refreshScript = ScriptHelper.GetScript("if ((wopener != null) && (wopener.RefreshPage != null)) {wopener.RefreshPage();}"); ScriptHelper.RegisterClientScriptBlock(Page, typeof(String), "pageTemplateRefreshScript", refreshScript); // Register preview refresh RegisterRefreshScript(); // Close if required if (ValidationHelper.GetBoolean(hdnClose.Value, false)) { ScriptHelper.RegisterStartupScript(Page, typeof(string), "CloseDialogPreviewScript", ScriptHelper.GetScript("CloseDialog();")); } // Load actual layout info (it was edited during saving by LayoutInfoProvider) if (li != null) { actualLayoutInfo = LayoutInfoProvider.GetLayoutInfo(li.LayoutId); } } // Hide warning after save MessagesPlaceHolder.WarningText = ""; } else if (e.ActionName == ComponentEvents.UNDO_CHECKOUT) { if (AllowTypeSwitching) { var url = RequestContext.CurrentURL; url = URLHelper.RemoveParameterFromUrl(url, "newshared"); url = URLHelper.RemoveParameterFromUrl(url, "oldshared"); url = URLHelper.AddParameterToUrl(url, "wopenerrefresh", "1"); Response.Redirect(url); } } else if (e.ActionName == ComponentEvents.CHECKOUT) { DisplayMessage(true); } switch (e.ActionName) { case ComponentEvents.SAVE: case ComponentEvents.CHECKOUT: case ComponentEvents.CHECKIN: case ComponentEvents.UNDO_CHECKOUT: if (DialogMode) { RegisterWOpenerRefreshScript(); } else if (dialog) { ScriptHelper.RegisterClientScriptBlock(Page, typeof(string), "parentWOpenerRefresh", ScriptHelper.GetScript("if (parent && parent.wopener && parent.wopener.refresh) { parent.wopener.refresh(); }")); } break; } if (!AllowTypeSwitching && (EditedObjectType == EditedObjectTypeEnum.Layout) && (e.ActionName != ComponentEvents.CHECKOUT) && !DialogMode) { ScriptHelper.RefreshTabHeader(Page, EditForm.EditedObject.Generalized.ObjectDisplayName); } // No save for checkout if (e.ActionName != ComponentEvents.CHECKOUT) { ShowChangesSaved(); } }
/// <summary> /// Gets the edited object. /// </summary> private object GetEditedObject() { object editedObject = null; if (PageTemplate != null) { DeviceProfileInfo profileInfo = DeviceProfile; int newSharedLayoutId = QueryHelper.GetInteger("newshared", -1); int oldSharedLayoutId = QueryHelper.GetInteger("oldshared", -1); // Check modify shared templates permission if (PageTemplate.IsReusable && !MembershipContext.AuthenticatedUser.IsAuthorizedPerUIElement("CMS.Design", "Design.ModifySharedTemplates")) { RedirectToUIElementAccessDenied("CMS.Design", "Design.ModifySharedTemplates"); } // Default state - no radio buttons used if ((newSharedLayoutId == -1) && (oldSharedLayoutId == -1)) { editedObject = PageTemplateDeviceLayoutInfoProvider.GetLayoutObject(PageTemplate, profileInfo); } else { // If new shared layout is set, than it should be used as edited object // This happens when switched from custom to a shared layout if (newSharedLayoutId > 0) { // Standard page layout editedObject = LayoutInfoProvider.GetLayoutInfo(newSharedLayoutId); } else if (newSharedLayoutId == 0) { // This means user switched from shared layout to custom // Data has to be copied to PageTemplateInfo if (profileInfo != null) { // Get the current device layout if exists PageTemplateDeviceLayoutInfo deviceLayout = PageTemplateDeviceLayoutInfoProvider.GetTemplateDeviceLayoutInfo(PageTemplate.PageTemplateId, profileInfo.ProfileID); if (deviceLayout != null) { // Custom device layout (use old layout) editedObject = PageTemplateDeviceLayoutInfoProvider.CloneInfoObject(deviceLayout, oldSharedLayoutId) as PageTemplateDeviceLayoutInfo; } } else { // We have to work with the clone, because we need to change the data of the object // (copy from shared layout) editedObject = PageTemplateDeviceLayoutInfoProvider.CloneInfoObject(PageTemplate, oldSharedLayoutId) as PageTemplateInfo; } } } } // Load the layout object else { var layoutId = QueryHelper.GetInteger("layoutid", 0); if (layoutId > 0) { editedObject = LayoutInfoProvider.GetLayoutInfo(layoutId); } } return(editedObject); }
/// <summary> /// Gets the edited object. /// </summary> /// <param name="templateId">The template id - if template/device layout is being edited</param> /// <param name="layoutId">The layout id - if shared layout is being edited</param> /// <param name="newSharedLayoutId">The new shared layout id - when changing shared layouts for template/device layouts</param> /// <param name="oldSharedLayoutId">The old shared layout id - when changing shared layouts for template/device layouts</param> /// <param name="deviceProfileId">The device profile id</param> private object GetEditedObject(int templateId, int layoutId, int newSharedLayoutId, int oldSharedLayoutId, int deviceProfileId) { object editedObject = null; if (templateId > 0) { PageTemplateInfo pti = PageTemplateInfoProvider.GetPageTemplateInfo(templateId); DeviceProfileInfo profileInfo = DeviceProfileInfoProvider.GetDeviceProfileInfo(deviceProfileId); PageTemplateLayoutTypeEnum type = PageTemplateLayoutTypeEnum.PageTemplateLayout; // Standard page template layout if (pti != null) { // Check modify shared templates permission if (pti.IsReusable && !CMSContext.CurrentUser.IsAuthorizedPerUIElement("CMS.Content", "Design.ModifySharedTemplates")) { RedirectToCMSDeskUIElementAccessDenied("CMS.Content", "Design.ModifySharedTemplates"); } // Default state - no radio buttons used if ((newSharedLayoutId == -1) && (oldSharedLayoutId == -1)) { editedObject = PageTemplateDeviceLayoutInfoProvider.GetLayoutObject(pti, profileInfo, out type); } else { // If new shared layout is set, than it should be used as edited object // This happens when switched from custom to a shared layout if (newSharedLayoutId > 0) { // Standard page layout editedObject = LayoutInfoProvider.GetLayoutInfo(newSharedLayoutId); } else if (newSharedLayoutId == 0) { // This means user switched from shared layout to custom // Data has to be copied to PageTemplateInfo PageTemplateDeviceLayoutInfo deviceLayout = null; if (deviceProfileId > 0) { // Get the current device layout if exists deviceLayout = PageTemplateDeviceLayoutInfoProvider.GetTemplateDeviceLayoutInfo(templateId, deviceProfileId); if (deviceLayout != null) { // Custom device layout (use old layout) editedObject = PageTemplateDeviceLayoutInfoProvider.CloneInfoObject(deviceLayout, oldSharedLayoutId) as PageTemplateDeviceLayoutInfo; } } else { // We have to work with the clone, because we need to change the data of the object // (copy from shared layout) editedObject = PageTemplateDeviceLayoutInfoProvider.CloneInfoObject(pti, oldSharedLayoutId) as PageTemplateInfo; } } } } } else { // Load the object if (layoutId > 0) { editedObject = LayoutInfoProvider.GetLayoutInfo(layoutId); } } return(editedObject); }