/// <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);
        }
Example #2
0
        /// <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);
        }
Example #3
0
        /// <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);
        }
Example #4
0
        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();
        }
Example #5
0
        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();
        }
Example #6
0
        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();
        }
Example #7
0
 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();
     }
 }
Example #8
0
        /// <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(); }");
        }
Example #9
0
        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();
            }
        }
Example #10
0
        /// <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()));
        }
Example #11
0
        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();
            }
        }
Example #12
0
        ///<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);
        }
Example #13
0
        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;
            }
        }
Example #15
0
        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();
            }
        }
Example #16
0
 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();
     }
 }
Example #17
0
        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();
            }
        }
Example #18
0
        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();
            }
        }
Example #19
0
        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);
        }
Example #20
0
        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();
            }
        }
Example #21
0
        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();
            }
        }
Example #22
0
        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());
        }
Example #24
0
        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();
            }
        }
Example #25
0
        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();
            }
        }
Example #26
0
        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);
        }
Example #28
0
        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();
            }
        }
Example #29
0
 /// <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;
     }
 }
Example #30
0
        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);
            }
        }