Example #1
0
        /// <summary>
        /// Sets the definition.
        /// </summary>
        /// <param name="layout">
        /// The layout.
        /// </param>
        private static void SetDefinition(LayoutDefinition layout)
        {
            Assert.ArgumentNotNull(layout, "layout");
            string value = layout.ToXml();

            WebUtil.SetSessionValue(DeviceEditorForm.GetSessionHandle(), value);
        }
Example #2
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();
            }
        }
        protected static void SetDefinition_exposed(LayoutDefinition layout)
        {
            Assert.ArgumentNotNull(layout, "layout");
            string xml = layout.ToXml();

            WebUtil.SetSessionValue(GetSessionHandle_exposed(), xml);
        }
        public void ClearsAllRenderings()
        {
            ID[] ids;
            var  layoutDefinition = new LayoutDefinition()
            {
                Devices = new ArrayList()
                {
                    new DeviceDefinition()
                }
            };

            using (var db = GetDatabase(out ids))
            {
                var item = db.GetItem("/sitecore/home/page");
                var args = new GetPlaceholderRenderingsArgs("placeholder", layoutDefinition.ToXml(), db.Database)
                {
                    PlaceholderRenderings = db.Database.SelectItems("//Layouts/*").ToList()
                };

                args.PlaceholderRenderings.Should().NotBeEmpty();

                var ctx = new PlaceholderSettingsRuleContext(args, item);

                var action = new ClearRenderingsAction <PlaceholderSettingsRuleContext>();

                action.Apply(ctx);

                args.PlaceholderRenderings.Should().BeEmpty();
            }
        }
        public void AddsAllRenderingsFromFolder()
        {
            ID[] renderingIds;
            ID[] folderIds;
            var  layoutDefinition = new LayoutDefinition()
            {
                Devices = new ArrayList()
                {
                    new DeviceDefinition()
                }
            };

            using (var db = GetDatabase(out renderingIds, out folderIds))
            {
                var item = db.GetItem("/sitecore/home/page");
                var args = new GetPlaceholderRenderingsArgs("placeholder", layoutDefinition.ToXml(), db.Database)
                {
                    PlaceholderRenderings = new List <Item>()
                };
                var ctx = new PlaceholderSettingsRuleContext(args, item);

                var action = new AddRenderingFolderAction <PlaceholderSettingsRuleContext>()
                {
                    RenderingFolderItemId = folderIds[0].ToString()
                };

                action.Apply(ctx);

                args.PlaceholderRenderings.Select(x => x.ID)
                .Should().HaveCount(2)
                .And.Contain(renderingIds.Take(2));
            }
        }
Example #6
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();
            }
        }
        protected override void ProcessRenderings(Item item, LayoutDefinition layout, DeviceDefinition device,
                                                  IEnumerable <RenderingDefinition> renderings)
        {
            if (renderings.Any())
            {
                if (!ShouldProcess(item.GetProviderPath(),
                                   $"Remove rendering(s) '{renderings.Select(r => r.ItemID.ToString()).Aggregate((seed, curr) => seed + ", " + curr)}' from device {Device.Name}"))
                {
                    return;
                }

                foreach (
                    var instanceRendering in
                    renderings.Select(rendering => device.Renderings.Cast <RenderingDefinition>()
                                      .FirstOrDefault(r => r.UniqueId == rendering.UniqueId))
                    .Where(instanceRendering => instanceRendering != null)
                    .Reverse())
                {
                    device.Renderings.Remove(instanceRendering);
                }

                item.Edit(p =>
                {
                    var outputXml       = layout.ToXml();
                    Item[LayoutFieldId] = outputXml;
                });
            }
            else
            {
                WriteError(typeof(ObjectNotFoundException), "Cannot find a rendering to remove",
                           ErrorIds.RenderingNotFound, ErrorCategory.ObjectNotFound, null);
            }
        }
        protected override void ProcessPlaceholderSettings(Item item, LayoutDefinition layout, DeviceDefinition device,
                                                           List <PlaceholderDefinition> placeholders)
        {
            if (placeholders.Any())
            {
                if (!ShouldProcess(item.GetProviderPath(),
                                   $"Remove placeholder setting(s) '{placeholders.Select(r => r.MetaDataItemId.ToString()).Aggregate((seed, curr) => seed + ", " + curr)}' from device {Device.Name}")
                    )
                {
                    return;
                }

                foreach (
                    var placeholderSetting in
                    placeholders.Select(rendering => device.Placeholders.Cast <PlaceholderDefinition>()
                                        .FirstOrDefault(r => r.UniqueId == rendering.UniqueId))
                    .Where(placeholder => placeholder != null)
                    .Reverse())
                {
                    device.Placeholders.Remove(placeholderSetting);
                }

                item.Edit(p =>
                {
                    var outputXml = layout.ToXml();
                    LayoutField.SetFieldValue(Item.Fields[LayoutFieldId], outputXml);
                });
            }
            else
            {
                WriteError(typeof(ObjectNotFoundException), "Cannot find a placeholder setting to remove",
                           ErrorIds.PlaceholderSettingNotFound, ErrorCategory.ObjectNotFound, null);
            }
        }
        public void AddsSelectedRenderings()
        {
            ID[] ids;
            var  layoutDefinition = new LayoutDefinition()
            {
                Devices = new ArrayList()
                {
                    new DeviceDefinition()
                }
            };

            using (var db = GetDatabase(out ids))
            {
                var item = db.GetItem("/sitecore/home/page");
                var args = new GetPlaceholderRenderingsArgs("placeholder", layoutDefinition.ToXml(), db.Database)
                {
                    PlaceholderRenderings = new List <Item>()
                };
                var ctx = new PlaceholderSettingsRuleContext(args, item);

                var action = new AddRenderingAction <PlaceholderSettingsRuleContext>()
                {
                    RenderingItemIds = string.Join("|", ids.Select(x => x.ToString()))
                };

                action.Apply(ctx);

                args.PlaceholderRenderings.Should().HaveSameCount(ids);
            }
        }
Example #10
0
        private static string ApplyActionToLayoutXml(string xml, Func <RenderingDefinition, RenderingActionResult> action)
        {
            LayoutDefinition layout = LayoutDefinition.Parse(xml);

            xml = layout.ToXml(); // normalize the output in case of any minor XML differences (spaces, etc)

            // loop over devices in the rendering
            for (int deviceIndex = layout.Devices.Count - 1; deviceIndex >= 0; deviceIndex--)
            {
                var device = layout.Devices[deviceIndex] as DeviceDefinition;

                if (device == null)
                {
                    continue;
                }

                // loop over renderings within the device
                for (int renderingIndex = device.Renderings.Count - 1; renderingIndex >= 0; renderingIndex--)
                {
                    var rendering = device.Renderings[renderingIndex] as RenderingDefinition;

                    if (rendering == null)
                    {
                        continue;
                    }

                    // run the action on the rendering
                    RenderingActionResult result = action(rendering);

                    // remove the rendering if the action method requested it
                    if (result == RenderingActionResult.Delete)
                    {
                        device.Renderings.RemoveAt(renderingIndex);
                    }
                }
            }

            string layoutXml = layout.ToXml();

            // save a modified layout value if necessary
            if (layoutXml != xml)
            {
                return(layoutXml);
            }

            return(null);
        }
        protected override void ProcessLayout(Item item, LayoutDefinition layout, DeviceDefinition device)
        {
            if (!ShouldProcess(item.GetProviderPath(), "Add rendering " + Instance.ItemID))
            {
                return;
            }
            var rendering = new RenderingDefinition
            {
                ItemID             = Instance.ItemID,
                Placeholder        = PlaceHolder ?? Instance.Placeholder,
                Datasource         = DataSource ?? Instance.Datasource,
                Cachable           = Instance.Cachable,
                ClearOnIndexUpdate = Instance.ClearOnIndexUpdate,
                VaryByData         = Instance.VaryByData,
                VaryByDevice       = Instance.VaryByDevice,
                VaryByLogin        = Instance.VaryByLogin,
                VaryByParameters   = Instance.VaryByParameters,
                VaryByQueryString  = Instance.VaryByQueryString,
                VaryByUser         = Instance.VaryByUser
            };

            if (Parameter != null)
            {
                var parameters = new UrlString(rendering.Parameters ?? string.Empty);
                foreach (string name in Parameter.Keys)
                {
                    if (parameters.Parameters.AllKeys.Contains(name))
                    {
                        parameters.Parameters[name] = Parameter[name].ToString();
                    }
                    else
                    {
                        parameters.Add(name, Parameter[name].ToString());
                    }
                }
                rendering.Parameters = parameters.ToString();
            }

            //todo: add support for conditions
            //renderingDefinition.Conditions
            //todo: add support for multivariate tests
            //rendering.MultiVariateTest

            if (Index > -1)
            {
                device.Insert(Index, rendering);
            }
            else
            {
                device.AddRendering(rendering);
            }

            item.Edit(p =>
            {
                var outputXml = layout.ToXml();
                LayoutField.SetFieldValue(item.Fields[LayoutFieldId], outputXml);
            });
        }
Example #12
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);
        }
        protected override void ProcessLayout(Item item, LayoutDefinition layout, DeviceDefinition device)
        {
            var key = Key ?? Instance.Key;

            if (string.IsNullOrWhiteSpace(key))
            {
                WriteError(typeof(ObjectNotFoundException), "A placeholder setting requires a key provided here or in the instance.",
                           ErrorIds.ValueNotFound, ErrorCategory.ObjectNotFound, key);

                return;
            }

            var metadataItemId = MetaDataItemId ?? Instance.MetaDataItemId;

            if (string.IsNullOrWhiteSpace(metadataItemId))
            {
                WriteError(typeof(ObjectNotFoundException), "A placeholder setting requires a MetaDataItemId provided here or in the instance.",
                           ErrorIds.ValueNotFound, ErrorCategory.ObjectNotFound, metadataItemId);

                return;
            }

            if (!ShouldProcess(item.GetProviderPath(), $"Add placeholder setting '{metadataItemId}'"))
            {
                return;
            }

            var placeholder = new PlaceholderDefinition
            {
                Key            = key,
                MetaDataItemId = metadataItemId,
                UniqueId       = ID.NewID.ToString()
            };

            if (!PlaceholderSettingExists(device, placeholder))
            {
                device.AddPlaceholder(placeholder);

                item.Edit(p =>
                {
                    var outputXml = layout.ToXml();
                    LayoutField.SetFieldValue(item.Fields[LayoutFieldId], outputXml);
                });
            }
            else
            {
                WriteError(typeof(DuplicateNameException), $"A placeholder setting with key '{key}' and metadata '{metadataItemId}' already exists.",
                           ErrorIds.PlaceholderSettingAlreadyExists, ErrorCategory.InvalidArgument, placeholder);
                return;
            }
        }
        public void OnItemSaving(object sender, EventArgs args)
        {
            Item item = Event.ExtractParameter(args, 0) as Item;

            if (item == null)
            {
                return;
            }
            LayoutField layoutField = new LayoutField(item.Fields[Sitecore.FieldIDs.LayoutField]);

            if (!layoutField.InnerField.HasValue)
            {
                return;
            }
            Item existingItem = item.Database.GetItem(
                item.ID,
                item.Language,
                item.Version);

            if (existingItem == null)
            {
                return;
            }
            LayoutField oldLayout = new LayoutField(existingItem.Fields[Sitecore.FieldIDs.LayoutField]);

            if (string.IsNullOrEmpty(layoutField.Value) || layoutField.Value == oldLayout.Value)
            {
                return;
            }
            LayoutDefinition layout = LayoutDefinition.Parse(layoutField.Value);

            for (int i = 0; i < layout.Devices.Count; i++)
            {
                DeviceDefinition device = layout.Devices[i] as DeviceDefinition;
                for (int j = 0; j < device.Renderings.Count; j++)
                {
                    RenderingDefinition rendering = device.Renderings[j] as RenderingDefinition;
                    if (!string.IsNullOrEmpty(rendering.Datasource) && rendering.Datasource.StartsWith("/"))
                    {
                        Item datasourceItem = item.Database.GetItem(rendering.Datasource);
                        if (datasourceItem == null)
                        {
                            Sitecore.Diagnostics.Log.Warn(string.Format("Could not find datasource item at path {0} while saving item {1}", rendering.Datasource, item.ID), this);
                            continue;
                        }
                        rendering.Datasource = datasourceItem.ID.ToString();
                    }
                }
            }
            layoutField.Value = layout.ToXml();
        }
        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 #16
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();
        }
Example #17
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);
            }
        }
Example #18
0
        protected void EditPlaceholderPipeline(ClientPipelineArgs args)
        {
            Assert.ArgumentNotNull(args, "args");
            LayoutDefinition      definition  = LayoutDefinition.Parse(this.GetDoc().OuterXml);
            PlaceholderDefinition placeholder = definition.GetDevice(args.Parameters["deviceid"]).GetPlaceholder(args.Parameters["uniqueid"]);

            if (placeholder != null)
            {
                if (args.IsPostBack)
                {
                    if (!string.IsNullOrEmpty(args.Result) && (args.Result != "undefined"))
                    {
                        string str;
                        Item   item = SelectPlaceholderSettingsOptions.ParseDialogResult(args.Result, Client.ContentDatabase, out str);
                        if (item != null)
                        {
                            placeholder.MetaDataItemId = item.Paths.FullPath;
                        }
                        if (!string.IsNullOrEmpty(str))
                        {
                            placeholder.Key = str;
                        }
                        this.SetActiveLayout(definition.ToXml());
                        this.Refresh();
                    }
                }
                else
                {
                    Item item2 = string.IsNullOrEmpty(placeholder.MetaDataItemId) ? null : Client.ContentDatabase.GetItem(placeholder.MetaDataItemId);
                    SelectPlaceholderSettingsOptions options = new SelectPlaceholderSettingsOptions {
                        TemplateForCreating      = null,
                        PlaceholderKey           = placeholder.Key,
                        CurrentSettingsItem      = item2,
                        SelectedItem             = item2,
                        IsPlaceholderKeyEditable = true
                    };
                    SheerResponse.ShowModalDialog(options.ToUrlString().ToString(), "460px", "460px", string.Empty, true);
                    args.WaitForPostBack();
                }
            }
        }
Example #19
0
        public void AddComponent(Item item, Item datasource, string placeholder, string componentId, string deviceId, string parameters, bool isSXA)
        {
            var datasourceValue = isSXA
                ? datasource?.Paths.FullPath.Replace(item.Paths.FullPath, "local:")
                : datasource?.ID.ToString();

            LayoutField      layoutField      = new LayoutField(item.Fields[FieldIDs.FinalLayoutField]);
            LayoutDefinition layoutDefinition = LayoutDefinition.Parse(layoutField.Value);
            DeviceDefinition deviceDefinition = layoutDefinition.GetDevice(deviceId);
            var rendering = new RenderingDefinition
            {
                ItemID      = componentId,
                Datasource  = datasourceValue,
                Placeholder = placeholder,
                Parameters  = parameters
            };

            deviceDefinition.AddRendering(rendering);

            layoutField.Value = layoutDefinition.ToXml();
        }
        /// <summary>
        /// Ends the wizard.
        /// </summary>
        protected override void EndWizard()
        {
            if (ShowPageEditorFunctionality && (CurrentPoll != null))
            {
                Assert.IsNotNullOrEmpty(ParentItem[FieldIDs.LayoutField], String.Format("Item {0} has no layout", ParentItem.Paths.Path));

                LayoutDefinition definition = LayoutDefinition.Parse(ParentItem[FieldIDs.LayoutField]);
                var rendering = new RenderingDefinition();

                rendering.ItemID = PollConstants.PollRenderingID;

                rendering.Placeholder = Context.ClientPage.Request.Form["__LISTACTIVE"];

                rendering.Datasource = String.Format("{0}/{1}", CurrentPoll.InnerItem.Parent.Paths.Path, CurrentPoll.Name);

                definition.GetDevice(PollConstants.PollRenderingDefaultDevice).AddRendering(rendering);
                using (new EditContext(ParentItem))
                {
                    ParentItem[FieldIDs.LayoutField] = definition.ToXml();
                }
            }
            base.EndWizard();
        }
        public ResponsePlaceholder(Item contextItem, LayoutDefinition layoutDefinition, string name, string parentUniqueId, bool exists = true, bool dynamic = true)
        {
            Name           = name;
            ParentUniqueId = parentUniqueId;
            Exists         = exists;
            Icon           = "<img src=\"/temp/IconCache/Business/16x16/table_selection_block.png\" alt=\"\" />";
            Dynamic        = dynamic;

            //DynamicPlaceholderName = name + "-" + ParentUniqueId + "";

            ValidRenderings = new List <ResponsePlaceholderRendering>();
            // TODO: find all the valid renderings!
            GetPlaceholderRenderingsArgs args = new GetPlaceholderRenderingsArgs(Name, layoutDefinition.ToXml(), contextItem.Database);

            //args.ContextItemPath = contextItem.Paths.FullPath;
            //args.ShowDialogIfDatasourceSetOnRenderingItem = true;
            CorePipeline.Run("getPlaceholderRenderings", args);

            if (args.PlaceholderRenderings != null)
            {
                foreach (var placeholderRendering in args.PlaceholderRenderings)
                {
                    ValidRenderings.Add(new ResponsePlaceholderRendering(placeholderRendering, layoutDefinition, contextItem));
                }
            }
        }
Example #22
0
        public static void AddRenderings(Item parentItem)
        {
            if (parentItem == null)
            {
                return;
            }

            if (parentItem.Children.Count == 0)
            {
                return;
            }
            else
            {
                localDatasource = parentItem.Children.FirstOrDefault();
            }

            if (localDatasource.Children.Count == 0)
            {
                return;
            }

            ResetRenderings(parentItem);

            // Get the default device
            DeviceRecords devices       = parentItem.Database.Resources.Devices;
            DeviceItem    defaultDevice = devices.GetAll().Where(d => d.Name.ToLower() == "default").First();

            var renderingsList = parentItem.Visualization.GetRenderings(defaultDevice, true);

            if (renderingsList == null)
            {
                return;
            }

            LayoutField      layoutField      = new LayoutField(parentItem.Fields[FieldIDs.FinalLayoutField]);
            LayoutDefinition layoutDefinition = LayoutDefinition.Parse(layoutField.Value);
            DeviceDefinition deviceDefinition = layoutDefinition.GetDevice(defaultDevice.ID.ToString());

            foreach (Item child in localDatasource.Children)
            {
                if (child.TemplateID.ToString() == NewsChild.Text)
                {
                    Guid   newGuid           = Guid.NewGuid();
                    string renderingUniqueID = newGuid.ToString().TrimStart('{').TrimEnd('}').ToLower();

                    if (layoutDefinition.Devices.Count > 0)
                    {
                        if (!RenderingAvailable(layoutDefinition, Renderings.BodyContent_Rendering))
                        {
                            RenderingDefinition textSubLayout = new RenderingDefinition();

                            textSubLayout.ItemID      = Renderings.BodyContent_Rendering;
                            textSubLayout.Placeholder = "page-layout";
                            textSubLayout.UniqueId    = renderingUniqueID;
                            deviceDefinition.AddRendering(textSubLayout);
                        }
                        else
                        {
                            var rendering = deviceDefinition.GetRendering(Renderings.BodyContent_Rendering);
                            renderingUniqueID = rendering.UniqueId;
                            renderingUniqueID = renderingUniqueID.TrimStart('{').TrimEnd('}').ToLower();
                        }
                    }

                    RenderingDefinition newRenderingDefinition = new RenderingDefinition();
                    newRenderingDefinition.ItemID = Renderings.Text;
                    string placeholderValue = !string.IsNullOrEmpty(renderingUniqueID) ? "/page-layout/body-content_" + renderingUniqueID : "/page-layout/body-content";
                    newRenderingDefinition.Placeholder = placeholderValue;
                    newRenderingDefinition.Datasource  = child.ID.ToString();

                    deviceDefinition.AddRendering(newRenderingDefinition);
                }
                else if (child.TemplateID.ToString() == NewsChild.Quote)
                {
                    Guid   newGuid           = Guid.NewGuid();
                    string renderingUniqueID = newGuid.ToString().TrimStart('{').TrimEnd('}').ToLower();

                    if (layoutDefinition.Devices.Count > 0)
                    {
                        if (!RenderingAvailable(layoutDefinition, Renderings.BodyContent_Rendering))
                        {
                            RenderingDefinition quoteSubLayout = new RenderingDefinition();
                            quoteSubLayout.ItemID      = Renderings.BodyContent_Rendering;
                            quoteSubLayout.Placeholder = "page-layout";
                            quoteSubLayout.UniqueId    = renderingUniqueID;

                            deviceDefinition.AddRendering(quoteSubLayout);
                        }
                        else
                        {
                            var rendering = deviceDefinition.GetRendering(Renderings.BodyContent_Rendering);
                            renderingUniqueID = rendering.UniqueId;
                            renderingUniqueID = renderingUniqueID.TrimStart('{').TrimEnd('}').ToLower();
                        }
                    }

                    RenderingDefinition newRenderingDefinition = new RenderingDefinition();
                    newRenderingDefinition.ItemID = Renderings.Quote;

                    string placeholderValue = !string.IsNullOrEmpty(renderingUniqueID) ? "/page-layout/body-content_" + renderingUniqueID : "/page-layout/body-content";

                    newRenderingDefinition.Placeholder = placeholderValue;
                    newRenderingDefinition.Datasource  = child.ID.ToString();

                    deviceDefinition.AddRendering(newRenderingDefinition);
                }
            }

            using (new SecurityDisabler())
            {
                parentItem.Editing.BeginEdit();
                if (parentItem.Editing.IsEditing)
                {
                    parentItem["__Renderings"] = layoutDefinition.ToXml();
                }
                parentItem.Editing.EndEdit();
            }
        }
 /// <summary>
 /// Sets the definition.
 /// </summary>
 /// <param name="layout">
 /// The layout.
 /// </param>
 private void SetLayoutDefinition(LayoutDefinition layout)
 {
     Assert.ArgumentNotNull(layout, "layout");
     WebUtil.SetSessionValue(HandleName, layout.ToXml());
 }
Example #24
0
 private static void SaveLayoutDefinition(LayoutDefinition definition)
 {
     Assert.ArgumentNotNull(definition, "layout");
     WebUtil.SetSessionValue(GetSessionHandle(), definition.ToXml());
 }
Example #25
0
        // update datasource references on target page item
        private void UpdateDatasourcePaths(Item target)
        {
            try
            {
                if (target != null)
                {
                    //Log.Info("target: " + target.ID + " - " + target.Name, this);

                    // get all target's renderings
                    RenderingReference[] renderings = target.Visualization.GetRenderings(Context.Device, true);
                    //Log.Info("Total # target's renderings: " + renderings.Length + ".", this);

                    Item   targetResourceFolder = GetResourceFolder(target.Paths.Path);
                    string targetDatasourceID   = string.Empty;

                    // Get the layout definitions and the device
                    LayoutDefinition sharedLayout = LayoutDefinition.Parse(LayoutField.GetFieldValue(target.Fields[FieldIDs.LayoutField]));
                    LayoutDefinition finalLayout  = LayoutDefinition.Parse(LayoutField.GetFieldValue(target.Fields[FieldIDs.FinalLayoutField]));
                    DeviceDefinition device       = finalLayout.Devices[0] as DeviceDefinition;

                    //int count = 1;
                    foreach (RenderingReference rend in renderings)
                    {
                        string renderingDatasourceID = rend.Settings.DataSource;
                        if (!String.IsNullOrEmpty(renderingDatasourceID))
                        {
                            //Log.Info("rend[" + count + "] = " + rend.RenderingItem.Name + " = " + rend.RenderingID.ToString(), this);

                            string renderingUID = rend.UniqueId;
                            //Log.Info("rend.UniqueId = " + renderingUID, this);


                            // get target datasource ID
                            if (targetResourceFolder != null && targetResourceFolder.HasChildren)
                            {
                                //Log.Info("targetResourceFolder has " + targetResourceFolder.Children.Count + " children.", this);
                                targetDatasourceID = GetTargetDatasourceID(targetResourceFolder.Paths.Path, renderingDatasourceID);
                            }
                            else
                            {
                                if (ItemIsSourceRootChild(renderingDatasourceID))
                                {
                                    targetDatasourceID = GetTargetDatasourceID(renderingDatasourceID);
                                }
                                else
                                {
                                    return;
                                }                // datasource exists in area of content tree that was not copied, do not update
                            }
                            //Log.Info("targetDatasourceID: " + targetDatasourceID, this);

                            // Update rendering datasource value accordingly and verify
                            if (!String.IsNullOrEmpty(targetDatasourceID))
                            {
                                //Log.Info("Datasource should be pointing to : " + targetDatasourceID + " | but it is pointing to: " + renderingDatasourceID, this);
                                device.GetRenderingByUniqueId(renderingUID).Datasource = targetDatasourceID;
                                VerifyReferenceUpdate(target, device.GetRenderingByUniqueId(renderingUID).Datasource);

                                // Save the layout changes
                                target.Editing.BeginEdit();
                                ItemUtil.SetLayoutDetails(target, sharedLayout.ToXml(), finalLayout.ToXml());
                                target.Editing.EndEdit();
                            }
                        }
                        //count++;
                    }
                }
            }
            catch (Exception ex)
            {
                Log.Error("Failed to update item references after CopyTo - " + target.ID.ToString() + " - " + ex.Message, ex, this);
            }
        }
Example #26
0
        protected override void ProcessLayout(Item item, LayoutDefinition layout, DeviceDefinition device)
        {
            if (!ShouldProcess(item.GetProviderPath(), "Add rendering " + Instance.ItemID))
            {
                return;
            }
            var rendering = new RenderingDefinition
            {
                ItemID             = Instance.ItemID,
                Placeholder        = PlaceHolder ?? Instance.Placeholder,
                Datasource         = DataSource ?? Instance.Datasource,
                Cachable           = Instance.Cachable,
                ClearOnIndexUpdate = Instance.ClearOnIndexUpdate,
                VaryByData         = Instance.VaryByData,
                VaryByDevice       = Instance.VaryByDevice,
                VaryByLogin        = Instance.VaryByLogin,
                VaryByParameters   = Instance.VaryByParameters,
                VaryByQueryString  = Instance.VaryByQueryString,
                VaryByUser         = Instance.VaryByUser
            };

            if (Parameter != null && Parameter.Keys.Count > 0)
            {
                var parameters    = new UrlString(rendering.Parameters ?? string.Empty);
                var renderingItem = Sitecore.Client.ContentDatabase.GetItem(Instance.ItemID);
                if (renderingItem == null)
                {
                    WriteError(new ItemNotFoundException($"The rendering with Id {Instance.ItemID} could not be found in the ContentDatabase."), ErrorIds.ItemNotFound, ErrorCategory.ObjectNotFound, this);
                    return;
                }

                var standardValuesItem = RenderingItem.GetStandardValuesItemFromParametersTemplate(renderingItem);
                var excludedFields     = new List <string> {
                    "additional parameters", "placeholder", "data source", "caching", "personalization", "test"
                };
                foreach (Field standardValueField in standardValuesItem.Fields)
                {
                    var fieldName      = standardValueField.Name;
                    var lowerInvariant = fieldName.ToLowerInvariant();
                    if (excludedFields.Contains(lowerInvariant))
                    {
                        continue;
                    }
                    if (!RenderingItem.IsRenderingParameterField(standardValueField))
                    {
                        continue;
                    }

                    var fieldValue = standardValueField.Value ?? string.Empty;
                    if (parameters.Parameters.AllKeys.Contains(fieldName))
                    {
                        parameters.Parameters[fieldName] = fieldValue;
                    }
                    else
                    {
                        parameters.Add(fieldName, fieldValue);
                    }
                }
                foreach (string name in Parameter.Keys)
                {
                    if (parameters.Parameters.AllKeys.Contains(name))
                    {
                        parameters.Parameters[name] = Parameter[name].ToString();
                    }
                    else
                    {
                        parameters.Add(name, Parameter[name].ToString());
                    }
                }
                rendering.Parameters = parameters.ToString();
            }

            //todo: add support for conditions
            //renderingDefinition.Conditions
            //todo: add support for multivariate tests
            //rendering.MultiVariateTest

            if (Index > -1)
            {
                device.Insert(Index, rendering);
            }
            else
            {
                device.AddRendering(rendering);
            }

            item.Edit(p =>
            {
                var outputXml = layout.ToXml();
                LayoutField.SetFieldValue(item.Fields[LayoutFieldId], outputXml);
            });

            if (PassThru)
            {
                WriteObject(rendering);
            }
        }
        private List <KeyValuePair <string, string> > ChangeLayoutFieldForItem(Item currentItem, Field field)
        {
            var result = new List <KeyValuePair <string, string> >();

            string xml = LayoutField.GetFieldValue(field);

            try
            {
                if (!string.IsNullOrWhiteSpace(xml))
                {
                    LayoutDefinition details = LayoutDefinition.Parse(xml);

                    var        device     = details.GetDevice(DefaultDeviceId);
                    DeviceItem deviceItem = currentItem.Database.Resources.Devices["Default"];

                    RenderingReference[] renderings = currentItem.Visualization.GetRenderings(deviceItem, false);

                    bool needUpdate = false;
                    foreach (RenderingDefinition rendering in device.Renderings)
                    {
                        if (!string.IsNullOrWhiteSpace(rendering.Placeholder))
                        {
                            var    newPlaceholder   = rendering.Placeholder;
                            string placeHolderRegex = "([0-9a-f]{8}[-][0-9a-f]{4}[-][0-9a-f]{4}[-][0-9a-f]{4}[-][0-9a-f]{12})$";
                            foreach (Match match in Regex.Matches(newPlaceholder, placeHolderRegex, RegexOptions.IgnoreCase))
                            {
                                var renderingId    = match.Value;
                                var newRenderingId = "-{" + renderingId.Substring(0) + "}-0";
                                newPlaceholder = newPlaceholder.Replace("_" + match.Value, newRenderingId);
                                needUpdate     = true;
                            }
                            if (newPlaceholder.Contains("_-{"))
                            {
                                newPlaceholder = newPlaceholder.Replace("_-{", "-{");
                                needUpdate     = true;
                            }
                            //newPlaceholder = newPlaceholder.Replace("_-", "-");
                            rendering.Placeholder = newPlaceholder;
                        }
                    }

                    if (needUpdate)
                    {
                        string newXml = details.ToXml();

                        using (new EditContext(currentItem))
                        {
                            LayoutField.SetFieldValue(field, newXml);
                        }
                        result.Add(new KeyValuePair <string, string>(currentItem.ID.ToString(), currentItem.Name));
                        //write it to log
                        _log.Info("Updated placeholder for " + currentItem.ID + " - Name - " + currentItem.Name);
                    }
                }
            }
            catch (Exception ex)
            {
                Sitecore.Diagnostics.Log.Error("UpcomingEventsandWebinarsController.Default", ex);
            }
            return(result);
        }
        public static void UpdateLayoutDefinition(this Item item, LayoutDefinition layoutDefinition)
        {
            var layoutField = item.Fields[SitecoreIDs.LayoutFieldId];

            LayoutField.SetFieldValue(layoutField, layoutDefinition.ToXml());
        }
Example #29
0
 /// <summary>Sets the definition.</summary>
 /// <param name="layout">The layout.</param>
 private static void SetDefinition(LayoutDefinition layout)
 {
     Assert.ArgumentNotNull((object)layout, "layout");
     WebUtil.SetSessionValue(CustomDeviceEditor.GetSessionHandle(), (object)layout.ToXml());
 }