/// <summary> /// Gets the list of placeholder definitions from a Layout field. /// </summary> /// <param name="definition">The parsed Layout field.</param> /// <param name="placeholderKey">The placeholder key.</param> /// <param name="deviceId">The device ID.</param> /// <returns>The list of placeholder definitions.</returns> public static IEnumerable <PlaceholderDefinition> GetPlaceholderDefinitionList(LayoutDefinition definition, string placeholderKey, ID deviceId) { Assert.ArgumentNotNull(definition, nameof(definition)); Assert.ArgumentNotNull(placeholderKey, nameof(placeholderKey)); Assert.ArgumentNotNull(deviceId, nameof(deviceId)); // Gets the list of placeholder definitions for the specified device ArrayList placeholders = definition.GetDevice(deviceId.ToString()).Placeholders; List <PlaceholderDefinition> placeholderDefinitions = new List <PlaceholderDefinition>(); if (placeholders == null || placeholders.Count == 0) { return(null); } PlaceholderDefinition placeholderDefinitionTemp = null; string lastPart = StringUtil.GetLastPart(placeholderKey, '/', placeholderKey); // Search through all the placeholder definitions to find all the ones that have a matching key foreach (PlaceholderDefinition placeholderDefinition in placeholders) { string key = placeholderDefinition.Key; if (string.Equals(key, lastPart, StringComparison.InvariantCultureIgnoreCase) || string.Equals(key, placeholderKey, StringComparison.InvariantCultureIgnoreCase)) { placeholderDefinitions.Add(placeholderDefinition); } } return(placeholderDefinitions); }
/// <summary> /// Updates the state of the commands. /// </summary> private void UpdateRenderingsCommandsState() { if (this.SelectedIndex < 0) { this.ChangeButtonsState(true); return; } LayoutDefinition layoutDefinition = DeviceEditorForm.GetLayoutDefinition(); DeviceDefinition device = layoutDefinition.GetDevice(this.DeviceID); System.Collections.ArrayList renderings = device.Renderings; if (renderings == null) { this.ChangeButtonsState(true); return; } RenderingDefinition renderingDefinition = renderings[this.SelectedIndex] as RenderingDefinition; if (renderingDefinition == null) { this.ChangeButtonsState(true); return; } this.ChangeButtonsState(false); this.Personalize.Disabled = !string.IsNullOrEmpty(renderingDefinition.MultiVariateTest); this.Test.Disabled = DeviceEditorForm.HasRenderingRules(renderingDefinition); }
/// <summary> /// Handles a click on the OK button. /// </summary> /// <param name="sender"> /// The sender. /// </param> /// <param name="args"> /// The arguments. /// </param> /// <remarks> /// When the user clicks OK, the dialog is closed by calling /// the <see cref="M:Sitecore.Web.UI.Sheer.ClientResponse.CloseWindow">CloseWindow</see> method. /// </remarks> protected override void OnOK(object sender, System.EventArgs args) { Assert.ArgumentNotNull(sender, "sender"); Assert.ArgumentNotNull(args, "args"); if (this.Layout.Value.Length > 0) { Item item = Client.ContentDatabase.GetItem(this.Layout.Value); if (item == null) { Context.ClientPage.ClientResponse.Alert("Layout not found."); return; } if (item.TemplateID == TemplateIDs.Folder || item.TemplateID == TemplateIDs.Node) { Context.ClientPage.ClientResponse.Alert(Translate.Text("\"{0}\" is not a layout.", new object[] { item.DisplayName })); return; } } LayoutDefinition layoutDefinition = DeviceEditorForm.GetLayoutDefinition(); DeviceDefinition device = layoutDefinition.GetDevice(this.DeviceID); System.Collections.ArrayList renderings = device.Renderings; if (renderings != null && renderings.Count > 0 && this.Layout.Value.Length == 0) { Context.ClientPage.ClientResponse.Alert("You must specify a layout when you specify renderings."); return; } device.Layout = this.Layout.Value; DeviceEditorForm.SetDefinition(layoutDefinition); Context.ClientPage.ClientResponse.SetDialogValue("yes"); base.OnOK(sender, args); }
protected void SortUp(Message message) { Assert.ArgumentNotNull((object)message, "message"); if (this.SelectedIndex <= 0) { return; } LayoutDefinition layoutDefinition = CustomDeviceEditor.GetLayoutDefinition(); ArrayList renderings = layoutDefinition.GetDevice(this.DeviceID).Renderings; if (renderings == null) { return; } RenderingDefinition renderingDefinition = renderings[this.SelectedIndex] as RenderingDefinition; if (renderingDefinition == null) { return; } renderings.Remove((object)renderingDefinition); renderings.Insert(this.SelectedIndex - 1, (object)renderingDefinition); --this.SelectedIndex; CustomDeviceEditor.SetDefinition(layoutDefinition); this.Refresh(); }
protected void SortUp(Message message) { Assert.ArgumentNotNull(message, "message"); if (this.SelectedIndex <= 0) { return; } LayoutDefinition layoutDefinition = DeviceEditorForm.GetLayoutDefinition(); DeviceDefinition device = layoutDefinition.GetDevice(this.DeviceID); System.Collections.ArrayList renderings = device.Renderings; if (renderings == null) { return; } RenderingDefinition renderingDefinition = renderings[this.SelectedIndex] as RenderingDefinition; if (renderingDefinition == null) { return; } renderings.Remove(renderingDefinition); renderings.Insert(this.SelectedIndex - 1, renderingDefinition); this.SelectedIndex--; DeviceEditorForm.SetDefinition(layoutDefinition); this.Refresh(); }
protected void Remove(Message message) { Assert.ArgumentNotNull(message, "message"); int selectedIndex = this.SelectedIndex; if (selectedIndex < 0) { return; } LayoutDefinition layoutDefinition = DeviceEditorForm.GetLayoutDefinition(); DeviceDefinition device = layoutDefinition.GetDevice(this.DeviceID); System.Collections.ArrayList renderings = device.Renderings; if (renderings == null) { return; } if (selectedIndex < 0 || selectedIndex >= renderings.Count) { return; } renderings.RemoveAt(selectedIndex); if (selectedIndex >= 0) { this.SelectedIndex--; } DeviceEditorForm.SetDefinition(layoutDefinition); this.Refresh(); }
protected void AddPlaceholder(ClientPipelineArgs args) { if (args.IsPostBack) { if (string.IsNullOrEmpty(args.Result) || !(args.Result != "undefined")) { return; } LayoutDefinition layoutDefinition = CustomDeviceEditor.GetLayoutDefinition(); DeviceDefinition device = layoutDefinition.GetDevice(this.DeviceID); string placeholderKey; Item dialogResult = SelectPlaceholderSettingsOptions.ParseDialogResult(args.Result, Client.ContentDatabase, out placeholderKey); if (dialogResult == null || string.IsNullOrEmpty(placeholderKey)) { return; } PlaceholderDefinition placeholderDefinition = new PlaceholderDefinition() { UniqueId = ID.NewID.ToString(), MetaDataItemId = dialogResult.Paths.FullPath, Key = placeholderKey }; device.AddPlaceholder(placeholderDefinition); CustomDeviceEditor.SetDefinition(layoutDefinition); this.Refresh(); } else { SheerResponse.ShowModalDialog(new SelectPlaceholderSettingsOptions() { IsPlaceholderKeyEditable = true }.ToUrlString().ToString(), "460px", "460px", string.Empty, true); args.WaitForPostBack(); } }
/// <summary> /// Refreshes this instance. /// </summary> private void Refresh() { this.Renderings.Controls.Clear(); this.Placeholders.Controls.Clear(); this.Controls = new System.Collections.ArrayList(); LayoutDefinition layoutDefinition = DeviceEditorForm.GetLayoutDefinition(); DeviceDefinition device = layoutDefinition.GetDevice(this.DeviceID); if (device.Renderings == null) { SheerResponse.SetOuterHtml("Renderings", this.Renderings); SheerResponse.SetOuterHtml("Placeholders", this.Placeholders); SheerResponse.Eval("if (!scForm.browser.isIE) { scForm.browser.initializeFixsizeElements(); }"); return; } int selectedIndex = this.SelectedIndex; this.RenderRenderings(device, selectedIndex, 0); this.RenderPlaceholders(device); this.UpdateRenderingsCommandsState(); this.UpdatePlaceholdersCommandsState(); SheerResponse.SetOuterHtml("Renderings", this.Renderings); SheerResponse.SetOuterHtml("Placeholders", this.Placeholders); SheerResponse.Eval("if (!scForm.browser.isIE) { scForm.browser.initializeFixsizeElements(); }"); }
public void CleanRenderings(Item item, string renderingID, string placeholder) { LayoutField layoutField = new LayoutField(item.Fields[FieldIDs.FinalLayoutField]); LayoutDefinition layoutDefinition = LayoutDefinition.Parse(layoutField.Value); DeviceDefinition deviceDefinition = layoutDefinition.GetDevice(GetDefaultDeviceItem(item.Database).ID.ToString()); List <string> placeholders = new List <string>(); foreach (RenderingDefinition rendering in deviceDefinition.Renderings) { if (rendering.ItemID.ToLower() == "{C1624533-ED68-41AC-B03C-BFDE4D9B1F2A}".ToLower()) { placeholders.Add(StringUtil.EnsurePrefix('/', rendering.Placeholder + "/" + placeholder + "_" + new Guid(rendering.UniqueId).ToString("D").ToLower())); } } List <RenderingDefinition> renderingsToRemove = new List <RenderingDefinition>(); foreach (RenderingDefinition rendering in deviceDefinition.Renderings) { if (rendering.ItemID.ToLower() == renderingID.ToLower() && placeholders.Contains(rendering.Placeholder)) { renderingsToRemove.Add(rendering); } } foreach (var rendering in renderingsToRemove) { deviceDefinition.Renderings.Remove(rendering); } using (new SecurityDisabler()) { item.Editing.BeginEdit(); layoutField.Value = layoutDefinition.ToXml(); item.Editing.EndEdit(); } }
/// <summary> /// Gets the device definition for a given item and device. /// </summary> /// <param name = "theItem">The item.</param> /// <param name = "device">The device.</param> /// <returns>The device definition if it was found, null otherwise</returns> public static DeviceDefinition GetDeviceDefinition(Item theItem, DeviceItem device) { if (theItem == null || device == null) { return(null); } //Make sure there is a renderings string string renderingString = theItem.Fields["__renderings"].Value; if (string.IsNullOrEmpty(renderingString)) { return(null); } //Try and retrieve the layout definition by parsing the rendering string LayoutDefinition layout = LayoutDefinition.Parse(renderingString); if (layout == null) { return(null); } //Try and get the device definition from the layout definition return(layout.GetDevice(device.ID.ToString())); }
public void AddRendering(Item item, string renderingID, string placeholder, Item datasource) { LayoutField layoutField = new LayoutField(item.Fields[FieldIDs.FinalLayoutField]); LayoutDefinition layoutDefinition = LayoutDefinition.Parse(layoutField.Value); DeviceDefinition deviceDefinition = layoutDefinition.GetDevice(GetDefaultDeviceItem(item.Database).ID.ToString()); foreach (RenderingDefinition rendering in deviceDefinition.Renderings) { if (rendering.ItemID.ToLower() == "{C1624533-ED68-41AC-B03C-BFDE4D9B1F2A}".ToLower()) { placeholder = StringUtil.EnsurePrefix('/', rendering.Placeholder + "/" + placeholder + "_" + new Guid(rendering.UniqueId).ToString("D").ToLower()); break; } } var newRendering = new RenderingDefinition { Placeholder = placeholder, ItemID = renderingID, Datasource = datasource.ID.ToString() }; deviceDefinition.AddRendering(newRendering); using (new SecurityDisabler()) { item.Editing.BeginEdit(); layoutField.Value = layoutDefinition.ToXml(); item.Editing.EndEdit(); } }
///<summary> /// When working with the Presentation Layer for Sitecore, you can specify a Datasource as a property /// for a control. However, accessing the item that is set brings a bit of a challenge. Hopefully this fixes that. ///</summary> ///<param name = "database">Sitecore Database to Use. Usually From Context.</param> ///<param name = "device">Sitecore Device to Use. Usually from Context.</param> ///<param name = "item">Item to get the Layout Renderings from.</param> ///<param name = "sublayoutItem"> /// Item reference to the Sublayout or Webcontrol that you would like to use for getting the datasource from. ///</param> ///<returns>Datasource Item. If no Datasource Item is listed in the layout properties, returns Null.</returns> ///<exception cref = "ItemNotFoundException">Thrown when Sitecore can't find a specified datasource item entry.</exception> public static Item GetDatasourceFromControl(Database database, DeviceItem device, Item item, Item sublayoutItem) { Item datasourceItem = null; // Get the Layout definition from the current item string rend = item.Fields["__renderings"].Value; LayoutDefinition layout = LayoutDefinition.Parse(rend); // Get the current device definition DeviceDefinition deviceDef = layout.GetDevice(device.ID.ToString()); // Get the sublayout to find Item mySublayout = database.GetItem(sublayoutItem.ID); // Get the definition for the sublayout RenderingDefinition rendering = deviceDef.GetRendering(mySublayout.ID.ToString()); if (!String.IsNullOrEmpty(rendering.Datasource)) { datasourceItem = database.GetItem(rendering.Datasource); if (datasourceItem == null) { throw new ItemNotFoundException("Could not find datasource item at " + rendering.Datasource); } } return(datasourceItem); }
protected void Add(ClientPipelineArgs args) { Assert.ArgumentNotNull((object)args, "args"); if (args.IsPostBack) { if (!args.HasResult) { return; } string[] strArray = args.Result.Split(','); string str1 = strArray[0]; string str2 = strArray[1].Replace("-c-", ","); bool flag = strArray[2] == "1"; LayoutDefinition layoutDefinition = CustomDeviceEditor.GetLayoutDefinition(); DeviceDefinition device = layoutDefinition.GetDevice(this.DeviceID); RenderingDefinition renderingDefinition = new RenderingDefinition() { ItemID = str1, Placeholder = str2 }; device.AddRendering(renderingDefinition); CustomDeviceEditor.SetDefinition(layoutDefinition); this.Refresh(); if (flag) { ArrayList renderings = device.Renderings; if (renderings != null) { this.SelectedIndex = renderings.Count - 1; Context.ClientPage.SendMessage((object)this, "device:edit"); } } Registry.SetString("/Current_User/SelectRendering/Selected", str1); } else { Item itm = UIUtil.GetItemFromQueryString(Sitecore.Client.ContentDatabase); SelectRenderingOptions renderingOptions = new SelectRenderingOptions() { ShowOpenProperties = true, ShowPlaceholderName = true, PlaceholderName = string.Empty }; string @string = Registry.GetString("/Current_User/SelectRendering/Selected"); if (!string.IsNullOrEmpty(@string)) { renderingOptions.SelectedItem = Client.ContentDatabase.GetItem(@string); } //Modify the following line to include id and deviceid parameters SheerResponse.ShowModalDialog(renderingOptions.ToUrlString(Sitecore.Client.ContentDatabase).ToString() + "&ciId=" + System.Web.HttpUtility.UrlEncode(itm.ID.ToString()) + "&deviceid=" + System.Web.HttpUtility.UrlEncode(this.DeviceID), true); //SheerResponse.ShowModalDialog(renderingOptions.ToUrlString(Client.ContentDatabase).ToString(), true); args.WaitForPostBack(); } }
protected void Run(ClientPipelineArgs args) { Assert.ArgumentNotNull(args, "args"); if (!args.IsPostBack) { SheerResponse.Input("Name: ", "New Prefab", "New Prefab"); args.WaitForPostBack(); } else if (args.HasResult) { var name = args.Result; var pageId = args.Parameters["id"]; var uniqueId = args.Parameters["referenceId"]; var renderingId = args.Parameters["renderingId"]; var db = Client.ContentDatabase; LayoutDefinition layoutDefinition = GetCurrentLayoutDefinition(); var deviceId = WebEditUtil.GetClientDeviceId(); if (layoutDefinition == null || ID.IsNullOrEmpty(deviceId)) { SheerResponse.Alert("Action failed. Unable to find presentation details."); return; } var deviceRenderings = layoutDefinition?.GetDevice(deviceId.ToString()); if (deviceRenderings?.Renderings == null) { SheerResponse.Alert("Action failed. Unable to find current device."); return; } var index = GetIndex(deviceRenderings, uniqueId); if (index == -1) { SheerResponse.Alert("Action failed. Unable to find selected rendering"); return; } var item = UIUtil.GetItemFromQueryString(db); // Create prefab var prefab = _prefabService.CreatePrefab(name, deviceRenderings, index, item); SheerResponse.Alert("Prefab Created"); if (Config.Sxa.IsEnabled) // reload so toolbox shows new prefab { SheerResponse.Eval("window.parent.location.reload();"); } // TODO: Go Edit Prefab? return; } }
protected void Change(ClientPipelineArgs args) { Assert.ArgumentNotNull(args, "args"); if (this.SelectedIndex < 0) { return; } LayoutDefinition layoutDefinition = DeviceEditorForm.GetLayoutDefinition(); DeviceDefinition device = layoutDefinition.GetDevice(this.DeviceID); System.Collections.ArrayList renderings = device.Renderings; if (renderings == null) { return; } RenderingDefinition renderingDefinition = renderings[this.SelectedIndex] as RenderingDefinition; if (renderingDefinition == null) { return; } if (string.IsNullOrEmpty(renderingDefinition.ItemID)) { return; } if (args.IsPostBack) { if (args.HasResult) { string[] array = args.Result.Split(new char[] { ',' }); renderingDefinition.ItemID = array[0]; bool flag = array[2] == "1"; DeviceEditorForm.SetDefinition(layoutDefinition); this.Refresh(); if (flag) { Context.ClientPage.SendMessage(this, "device:edit"); return; } } } else { SelectRenderingOptions selectRenderingOptions = new SelectRenderingOptions { ShowOpenProperties = true, ShowPlaceholderName = false, PlaceholderName = string.Empty, SelectedItem = Client.ContentDatabase.GetItem(renderingDefinition.ItemID) }; string url = selectRenderingOptions.ToUrlString(Client.ContentDatabase).ToString(); SheerResponse.ShowModalDialog(url, true); args.WaitForPostBack(); } }
protected void Add(ClientPipelineArgs args) { Assert.ArgumentNotNull(args, "args"); if (args.IsPostBack) { if (args.HasResult) { string[] array = args.Result.Split(new char[] { ',' }); string text = array[0]; string placeholder = array[1].Replace("-c-", ","); bool flag = array[2] == "1"; LayoutDefinition layoutDefinition = DeviceEditorForm.GetLayoutDefinition(); DeviceDefinition device = layoutDefinition.GetDevice(this.DeviceID); RenderingDefinition renderingDefinition = new RenderingDefinition { ItemID = text, Placeholder = placeholder }; device.AddRendering(renderingDefinition); DeviceEditorForm.SetDefinition(layoutDefinition); this.Refresh(); if (flag) { System.Collections.ArrayList renderings = device.Renderings; if (renderings != null) { this.SelectedIndex = renderings.Count - 1; Context.ClientPage.SendMessage(this, "device:edit"); } } Registry.SetString("/Current_User/SelectRendering/Selected", text); return; } } else { SelectRenderingOptions selectRenderingOptions = new SelectRenderingOptions { ShowOpenProperties = true, ShowPlaceholderName = true, PlaceholderName = string.Empty }; string @string = Registry.GetString("/Current_User/SelectRendering/Selected"); if (!string.IsNullOrEmpty(@string)) { selectRenderingOptions.SelectedItem = Client.ContentDatabase.GetItem(@string); } string url = selectRenderingOptions.ToUrlString(Client.ContentDatabase).ToString(); SheerResponse.ShowModalDialog(url, true); args.WaitForPostBack(); } }
protected void SetTest(ClientPipelineArgs args) { Assert.ArgumentNotNull(args, "args"); if (this.SelectedIndex < 0) { return; } LayoutDefinition layoutDefinition = DeviceEditorForm.GetLayoutDefinition(); DeviceDefinition device = layoutDefinition.GetDevice(this.DeviceID); ArrayList renderings = device.Renderings; if (renderings == null) { return; } RenderingDefinition renderingDefinition = renderings[this.SelectedIndex] as RenderingDefinition; if (renderingDefinition == null) { return; } if (args.IsPostBack) { if (args.HasResult) { if (args.Result == "#reset#") { renderingDefinition.MultiVariateTest = string.Empty; DeviceEditorForm.SetDefinition(layoutDefinition); this.Refresh(); return; } ID iD = SetTestDetailsOptions.ParseDialogResult(args.Result); if (ID.IsNullOrEmpty(iD)) { SheerResponse.Alert("Item not found.", new string[0]); return; } renderingDefinition.MultiVariateTest = iD.ToString(); DeviceEditorForm.SetDefinition(layoutDefinition); this.Refresh(); return; } } else { Command command = CommandManager.GetCommand("device:settestdetails"); Assert.IsNotNull(command, "deviceTestCommand"); CommandContext commandContext = new CommandContext(); commandContext.Parameters["deviceDefinitionId"] = device.ID; commandContext.Parameters["renderingDefinitionUniqueId"] = renderingDefinition.UniqueId; command.Execute(commandContext); args.WaitForPostBack(); } }
protected void SetTest(ClientPipelineArgs args) { Assert.ArgumentNotNull((object)args, "args"); if (this.SelectedIndex < 0) { return; } LayoutDefinition layoutDefinition = CustomDeviceEditor.GetLayoutDefinition(); DeviceDefinition device = layoutDefinition.GetDevice(this.DeviceID); ArrayList renderings = device.Renderings; if (renderings == null) { return; } RenderingDefinition renderingDefinition = renderings[this.SelectedIndex] as RenderingDefinition; if (renderingDefinition == null) { return; } if (args.IsPostBack) { if (!args.HasResult) { return; } if (args.Result == "#reset#") { renderingDefinition.MultiVariateTest = string.Empty; CustomDeviceEditor.SetDefinition(layoutDefinition); this.Refresh(); } else { ID dialogResult = SetTestDetailsOptions.ParseDialogResult(args.Result); if (ID.IsNullOrEmpty(dialogResult)) { SheerResponse.Alert("Item not found."); } else { renderingDefinition.MultiVariateTest = dialogResult.ToString(); CustomDeviceEditor.SetDefinition(layoutDefinition); this.Refresh(); } } } else { SheerResponse.ShowModalDialog(new SetTestDetailsOptions("SC_DEVICEEDITOR", UIUtil.GetItemFromQueryString(Client.ContentDatabase).Uri.ToString(), device.ID, renderingDefinition.UniqueId).ToUrlString().ToString(), "520px", "695px", string.Empty, true); args.WaitForPostBack(); } }
public override void Execute(CommandContext context) { string formValue = WebUtil.GetFormValue("scLayout"); string xml = WebEditUtil.ConvertJSONLayoutToXML(formValue); string id = ShortID.Decode(WebUtil.GetFormValue("scDeviceID")); LayoutDefinition layoutDefinition = LayoutDefinition.Parse(xml); if (layoutDefinition == null) { ReturnLayout(); return; } DeviceDefinition device = layoutDefinition.GetDevice(id); if (device == null) { ReturnLayout(); return; } string uniqueId = Guid.Parse(context.Parameters["renderingUid"]).ToString("B").ToUpperInvariant(); RenderingDefinition renderingByUniqueId = device.GetRenderingByUniqueId(uniqueId); if (renderingByUniqueId == null) { ReturnLayout(); return; } if (string.IsNullOrEmpty(renderingByUniqueId.Parameters)) { if (!string.IsNullOrEmpty(renderingByUniqueId.ItemID)) { RenderingItem renderingItem = Client.ContentDatabase.GetItem(renderingByUniqueId.ItemID); renderingByUniqueId.Parameters = ((renderingItem != null) ? renderingItem.Parameters : string.Empty); } else { renderingByUniqueId.Parameters = string.Empty; } } NameValueCollection nameValueCollection = WebUtil.ParseUrlParameters(renderingByUniqueId.Parameters); string input = nameValueCollection["FieldNames"]; string text = context.Parameters["variant"]; if (Guid.TryParse(input, out Guid result) && result == Guid.Parse(text)) { ReturnLayout(); return; } nameValueCollection["FieldNames"] = text; renderingByUniqueId.Parameters = new UrlString(nameValueCollection.EscapeDataValues()).GetUrl(); formValue = WebEditUtil.ConvertXMLLayoutToJSON(layoutDefinition.ToXml()); ReturnLayout(formValue); }
protected void PersonalizeControl(ClientPipelineArgs args) { Assert.ArgumentNotNull(args, "args"); if (this.SelectedIndex < 0) { return; } LayoutDefinition layoutDefinition = DeviceEditorForm.GetLayoutDefinition(); DeviceDefinition device = layoutDefinition.GetDevice(this.DeviceID); System.Collections.ArrayList renderings = device.Renderings; if (renderings == null) { return; } RenderingDefinition renderingDefinition = renderings[this.SelectedIndex] as RenderingDefinition; if (renderingDefinition == null) { return; } if (string.IsNullOrEmpty(renderingDefinition.ItemID) || string.IsNullOrEmpty(renderingDefinition.UniqueId)) { return; } if (args.IsPostBack) { if (args.HasResult) { XElement rules = XElement.Parse(args.Result); renderingDefinition.Rules = rules; DeviceEditorForm.SetDefinition(layoutDefinition); this.Refresh(); return; } } else { Item itemFromQueryString = UIUtil.GetItemFromQueryString(Client.ContentDatabase); string contextItemUri = (itemFromQueryString != null) ? itemFromQueryString.Uri.ToString() : string.Empty; PersonalizeOptions personalizeOptions = new PersonalizeOptions { SessionHandle = DeviceEditorForm.GetSessionHandle(), DeviceId = this.DeviceID, RenderingUniqueId = renderingDefinition.UniqueId, ContextItemUri = contextItemUri }; SheerResponse.ShowModalDialog(personalizeOptions.ToUrlString().ToString(), "980px", "712px", string.Empty, true); args.WaitForPostBack(); } }
protected void Change(ClientPipelineArgs args) { Assert.ArgumentNotNull((object)args, "args"); if (this.SelectedIndex < 0) { return; } LayoutDefinition layoutDefinition = CustomDeviceEditor.GetLayoutDefinition(); ArrayList renderings = layoutDefinition.GetDevice(this.DeviceID).Renderings; if (renderings == null) { return; } RenderingDefinition renderingDefinition = renderings[this.SelectedIndex] as RenderingDefinition; if (renderingDefinition == null || string.IsNullOrEmpty(renderingDefinition.ItemID)) { return; } if (args.IsPostBack) { if (!args.HasResult) { return; } string[] strArray = args.Result.Split(','); renderingDefinition.ItemID = strArray[0]; bool flag = strArray[2] == "1"; CustomDeviceEditor.SetDefinition(layoutDefinition); this.Refresh(); if (!flag) { return; } Context.ClientPage.SendMessage((object)this, "device:edit"); } else { SelectRenderingOptions renderingOptions = new SelectRenderingOptions(); renderingOptions.ShowOpenProperties = true; renderingOptions.ShowPlaceholderName = false; renderingOptions.PlaceholderName = string.Empty; renderingOptions.SelectedItem = Client.ContentDatabase.GetItem(renderingDefinition.ItemID); SheerResponse.ShowModalDialog(renderingOptions.ToUrlString(Client.ContentDatabase).ToString(), true); args.WaitForPostBack(); } }
public override void Process(GetChromeDataArgs args) { Assert.ArgumentNotNull(args, "args"); Assert.IsNotNull(args.ChromeData, "Chrome Data"); if ("placeholder".Equals(args.ChromeType, StringComparison.OrdinalIgnoreCase)) { string placeholderKey = args.CustomData["placeHolderKey"] as string; Sitecore.Data.Fields.LayoutField layoutField = new Sitecore.Data.Fields.LayoutField(Context.Item.Fields[Sitecore.FieldIDs.FinalLayoutField]); LayoutDefinition layoutDefinition = LayoutDefinition.Parse(layoutField.Value); DeviceDefinition deviceDefinition = layoutDefinition.GetDevice(Context.Device.ID.ToString()); // Initial repository path is "/sitecore/system/Modules/USF Health Restriction Manager/Remove Delete Button" Item removeDeleteButtonItem = Context.Item.Database.GetItem("/sitecore/system/Modules/USF Health Restriction Manager/Remove Delete Button"); if (removeDeleteButtonItem == null) { Assert.IsNull(removeDeleteButtonItem, "Item is null"); return; } MultilistField listOfRenderingItems = removeDeleteButtonItem.Fields["List of Rendering Items"]; string listOfUserRoles = removeDeleteButtonItem.Fields["List of User Roles"].Value.Trim(); List <string> eachListOfUserRoles = listOfUserRoles.Split(';').ToList(); // Remove "Delete" button in placeholder if (eachListOfUserRoles.Where(e => User.Current.IsInRole(e)).Any()) { args.ChromeData.Custom["removeAddHereButton"] = true; foreach (ID renderingItemId in listOfRenderingItems.TargetIDs) { RenderingItem r = RenderingItem.GetItem(renderingItemId, Context.Data.Database, true); string renderingName = Regex.Replace(r.Name.ToLower(), @"\s+", ""); string displayName = Regex.Replace(args.ChromeData.DisplayName.ToLower(), @"\s+", ""); // Only when rendering name matches to its display name // Only when rendering item's display name contains rendering name // Only when master rendering item has 'Main Layout' placeholder key if (renderingName == displayName || displayName.Contains(renderingName) || (r.Name.ToLower().Contains(" master") && displayName == "mainlayout")) { args.ChromeData.Custom["editable"] = false; } } } } }
protected override List <XElement> MigratePersonalizationSettings(XElement layoutXml, LayoutDefinition definition) { LayoutDefinition layoutDefinition = LayoutDefinition.Parse(layoutXml.ToString()); foreach (DeviceDefinition device in definition.Devices) { foreach (RenderingDefinition rendering in device.Renderings) { var deviceRendering = layoutDefinition?.GetDevice(device.ID)?.GetRenderingByUniqueId(rendering.UniqueId); if (deviceRendering != null) { deviceRendering.Rules = rendering.Rules; } } } return(layoutDefinition.ToXml().ToXmlNode().ToXElement().Descendants((XName)"d").ToList()); }
protected void PersonalizeControl(ClientPipelineArgs args) { Assert.ArgumentNotNull((object)args, "args"); if (this.SelectedIndex < 0) { return; } LayoutDefinition layoutDefinition = CustomDeviceEditor.GetLayoutDefinition(); ArrayList renderings = layoutDefinition.GetDevice(this.DeviceID).Renderings; if (renderings == null) { return; } RenderingDefinition renderingDefinition = renderings[this.SelectedIndex] as RenderingDefinition; if (renderingDefinition == null || string.IsNullOrEmpty(renderingDefinition.ItemID) || string.IsNullOrEmpty(renderingDefinition.UniqueId)) { return; } if (args.IsPostBack) { if (!args.HasResult) { return; } XElement xelement = XElement.Parse(args.Result); renderingDefinition.Rules = xelement; CustomDeviceEditor.SetDefinition(layoutDefinition); this.Refresh(); } else { Item itemFromQueryString = UIUtil.GetItemFromQueryString(Client.ContentDatabase); string str = itemFromQueryString != null?itemFromQueryString.Uri.ToString() : string.Empty; SheerResponse.ShowModalDialog(new PersonalizeOptions() { SessionHandle = CustomDeviceEditor.GetSessionHandle(), DeviceId = this.DeviceID, RenderingUniqueId = renderingDefinition.UniqueId, ContextItemUri = str }.ToUrlString().ToString(), "980px", "712px", string.Empty, true); args.WaitForPostBack(); } }
protected void EditPlaceholder(ClientPipelineArgs args) { if (string.IsNullOrEmpty(this.UniqueId)) { return; } LayoutDefinition layoutDefinition = DeviceEditorForm.GetLayoutDefinition(); DeviceDefinition device = layoutDefinition.GetDevice(this.DeviceID); PlaceholderDefinition placeholder = device.GetPlaceholder(this.UniqueId); if (placeholder == null) { return; } if (args.IsPostBack) { if (!string.IsNullOrEmpty(args.Result) && args.Result != "undefined") { string key; Item item = SelectPlaceholderSettingsOptions.ParseDialogResult(args.Result, Client.ContentDatabase, out key); if (item == null) { return; } placeholder.MetaDataItemId = item.Paths.FullPath; placeholder.Key = key; DeviceEditorForm.SetDefinition(layoutDefinition); this.Refresh(); return; } } else { Item item2 = string.IsNullOrEmpty(placeholder.MetaDataItemId) ? null : Client.ContentDatabase.GetItem(placeholder.MetaDataItemId); SelectPlaceholderSettingsOptions selectPlaceholderSettingsOptions = new SelectPlaceholderSettingsOptions { TemplateForCreating = null, PlaceholderKey = placeholder.Key, CurrentSettingsItem = item2, SelectedItem = item2, IsPlaceholderKeyEditable = true }; SheerResponse.ShowModalDialog(selectPlaceholderSettingsOptions.ToUrlString().ToString(), "460px", "460px", string.Empty, true); args.WaitForPostBack(); } }
public void RemoveComponent(Item item, RenderingDefinition rendering, string deviceId) { LayoutField layoutField = new LayoutField(item.Fields[FieldIDs.FinalLayoutField]); LayoutDefinition layoutDefinition = LayoutDefinition.Parse(layoutField.Value); DeviceDefinition deviceDefinition = layoutDefinition.GetDevice(deviceId); for (int i = 0; i < deviceDefinition.Renderings.Count; i++) { var tempRend = (RenderingDefinition)deviceDefinition.Renderings[i]; if (tempRend.UniqueId == rendering.UniqueId) { deviceDefinition.Renderings.RemoveAt(i); break; } } layoutField.Value = layoutDefinition.ToXml(); }
// Return all datasource defined on one item public IEnumerable <string> GetDatasourceValue(WorkflowPipelineArgs args, Item targetItem) { List <string> uniqueDatasourceValues = new List <string>(); Sitecore.Layouts.RenderingReference[] renderings = GetListOfSublayouts(targetItem.ID.ToString(), targetItem); LayoutField layoutField = new LayoutField(targetItem.Fields[Sitecore.FieldIDs.FinalLayoutField]); LayoutDefinition layoutDefinition = LayoutDefinition.Parse(layoutField.Value); DeviceDefinition deviceDefinition = layoutDefinition.GetDevice(Sitecore.Context.Device.ID.ToString()); foreach (var rendering in renderings) { if (!uniqueDatasourceValues.Contains(rendering.Settings.DataSource)) { uniqueDatasourceValues.Add(rendering.Settings.DataSource); } } return(uniqueDatasourceValues); }
protected void EditPlaceholder(ClientPipelineArgs args) { if (string.IsNullOrEmpty(this.UniqueId)) { return; } LayoutDefinition layoutDefinition = CustomDeviceEditor.GetLayoutDefinition(); PlaceholderDefinition placeholder = layoutDefinition.GetDevice(this.DeviceID).GetPlaceholder(this.UniqueId); if (placeholder == null) { return; } if (args.IsPostBack) { if (string.IsNullOrEmpty(args.Result) || !(args.Result != "undefined")) { return; } string placeholderKey; Item dialogResult = SelectPlaceholderSettingsOptions.ParseDialogResult(args.Result, Client.ContentDatabase, out placeholderKey); if (dialogResult == null) { return; } placeholder.MetaDataItemId = dialogResult.Paths.FullPath; placeholder.Key = placeholderKey; CustomDeviceEditor.SetDefinition(layoutDefinition); this.Refresh(); } else { Item obj = string.IsNullOrEmpty(placeholder.MetaDataItemId) ? (Item)null : Client.ContentDatabase.GetItem(placeholder.MetaDataItemId); SelectPlaceholderSettingsOptions placeholderSettingsOptions = new SelectPlaceholderSettingsOptions(); placeholderSettingsOptions.TemplateForCreating = (Template)null; placeholderSettingsOptions.PlaceholderKey = placeholder.Key; placeholderSettingsOptions.CurrentSettingsItem = obj; placeholderSettingsOptions.SelectedItem = obj; placeholderSettingsOptions.IsPlaceholderKeyEditable = true; SheerResponse.ShowModalDialog(placeholderSettingsOptions.ToUrlString().ToString(), "460px", "460px", string.Empty, true); args.WaitForPostBack(); } }
/// <summary> /// Raises the load event. /// </summary> /// <param name="e"> /// The <see cref="T:System.EventArgs" /> instance containing the event data. /// </param> /// <remarks> /// This method notifies the server control that it should perform actions common to each HTTP /// request for the page it is associated with, such as setting up a database query. At this /// stage in the page life cycle, server controls in the hierarchy are created and initialized, /// view state is restored, and form controls reflect client-side data. Use the IsPostBack /// property to determine whether the page is being loaded in response to a client post back, /// or if it is being loaded and accessed for the first time. /// </remarks> protected override void OnLoad(System.EventArgs e) { Assert.ArgumentNotNull(e, "e"); base.OnLoad(e); if (!Context.ClientPage.IsEvent) { this.DeviceID = WebUtil.GetQueryString("de"); LayoutDefinition layoutDefinition = DeviceEditorForm.GetLayoutDefinition(); DeviceDefinition device = layoutDefinition.GetDevice(this.DeviceID); if (device.Layout != null) { this.Layout.Value = device.Layout; } this.Personalize.Visible = Policy.IsAllowed("Page Editor/Extended features/Personalization"); this.Test.Visible = (XdbSettings.Enabled && Policy.IsAllowed("Page Editor/Extended features/Testing")); this.Refresh(); this.SelectedIndex = -1; } }
private bool UpdateRendering(Database db, Sitecore.Data.Items.Item homeItem, Sitecore.Data.Items.Item newHomeItem) { try { // get rendering, layout Sitecore.Layouts.RenderingReference[] renderings = newHomeItem.Visualization.GetRenderings(Sitecore.Context.Device, true); LayoutField layoutField = new LayoutField(newHomeItem.Fields[Sitecore.FieldIDs.LayoutField]); LayoutDefinition layoutDefinition = LayoutDefinition.Parse(layoutField.Value); DeviceDefinition deviceDefinition = layoutDefinition.GetDevice(Sitecore.Context.Device.ID.ToString()); // update rendering's datasource foreach (RenderingReference rendering in renderings) { string datasouceString = deviceDefinition.GetRendering(rendering.RenderingID.ToString()).Datasource; if (!string.IsNullOrEmpty(datasouceString)) { // get datasource item var currentDatasouceItem = Sitecore.Data.ID.IsID(datasouceString) ? db.GetItem(new Sitecore.Data.ID(datasouceString)) : db.GetItem(datasouceString); if (currentDatasouceItem != null) { // get new path datasouceString = currentDatasouceItem.Paths.FullPath.Replace(homeItem.DisplayName, newHomeItem.DisplayName); var newItem = db.GetItem(datasouceString); if (newItem != null) { // set new datasource id deviceDefinition.GetRendering(rendering.RenderingID.ToString()).Datasource = newItem.ID.ToString(); newHomeItem.Editing.BeginEdit(); layoutField.Value = layoutDefinition.ToXml(); newHomeItem.Editing.EndEdit(); } } } } return(true); } catch (Exception ex) { SetMesasgeInCookie(ex.Message, 1); return(false); } }