protected virtual void InsertRenderingAt(DeviceDefinition device, RenderingDefinition renderingDefinition, int insertPosition, IEnumerable <ID> allowedRenderingsIds, string renderingUniqueId = "")
        {
            Assert.ArgumentNotNull((object)device, "device");
            Assert.ArgumentNotNull((object)renderingDefinition, "renderingDefinition");

            // Insert Rendering by it's Unique Id
            if (!string.IsNullOrEmpty(renderingUniqueId) && device != null && device.Renderings != null)
            {
                string uniqueId = string.Concat("{", renderingUniqueId, "}");
                // Try
                for (int index = 0; index < device.Renderings.Count; ++index)
                {
                    RenderingDefinition rendering = device.Renderings[index] as RenderingDefinition;

                    if (rendering.UniqueId.Equals(uniqueId, StringComparison.InvariantCultureIgnoreCase))
                    {
                        device.Insert(index + 1, renderingDefinition);
                    }
                }
            }

            if (insertPosition == 0)
            {
                device.Insert(insertPosition, renderingDefinition);
            }
            else if (device.Renderings == null)
            {
                device.AddRendering(renderingDefinition);
            }
            else
            {
                ID[] idArray = Enumerable.ToArray <ID>(allowedRenderingsIds);
                int  num     = 0;
                for (int index = 0; index < device.Renderings.Count; ++index)
                {
                    RenderingDefinition rendering = device.Renderings[index] as RenderingDefinition;
                    Assert.IsNotNull((object)rendering, "rendering");
                    string placeholder = rendering.Placeholder;
                    if (string.IsNullOrEmpty(placeholder) && Enumerable.Any <ID>((IEnumerable <ID>)idArray, (Func <ID, bool>)(p => p == ID.Parse(rendering.ItemID))))
                    {
                        placeholder = renderingDefinition.Placeholder;
                    }

                    if (InsertRendering.AreEqualPlaceholders(placeholder, renderingDefinition.Placeholder))
                    {
                        ++num;
                    }

                    if (num == insertPosition)
                    {
                        device.Insert(index + 1, renderingDefinition);
                        break;
                    }
                }
            }
        }
        protected virtual void InsertRenderingAt(DeviceDefinition device, RenderingDefinition renderingDefinition, int insertPosition, IEnumerable<ID> allowedRenderingsIds, string renderingUniqueId = "")
        {
            Assert.ArgumentNotNull((object)device, "device");
            Assert.ArgumentNotNull((object)renderingDefinition, "renderingDefinition");

            // Insert Rendering by it's Unique Id
            if (!string.IsNullOrEmpty(renderingUniqueId) && device != null && device.Renderings != null)
            {
                string uniqueId = string.Concat("{", renderingUniqueId, "}");
                // Try
                for (int index = 0; index < device.Renderings.Count; ++index)
                {
                    RenderingDefinition rendering = device.Renderings[index] as RenderingDefinition;

                    if (rendering.UniqueId == uniqueId)
                    {
                        device.Insert(index + 1, renderingDefinition);
                    }
                }
            }

            if (insertPosition == 0)
                device.Insert(insertPosition, renderingDefinition);
            else if (device.Renderings == null)
            {
                device.AddRendering(renderingDefinition);
            }
            else
            {
                ID[] idArray = Enumerable.ToArray<ID>(allowedRenderingsIds);
                int num = 0;
                for (int index = 0; index < device.Renderings.Count; ++index)
                {
                    RenderingDefinition rendering = device.Renderings[index] as RenderingDefinition;
                    Assert.IsNotNull((object)rendering, "rendering");
                    string placeholder = rendering.Placeholder;
                    if (string.IsNullOrEmpty(placeholder) && Enumerable.Any<ID>((IEnumerable<ID>)idArray, (Func<ID, bool>)(p => p == ID.Parse(rendering.ItemID))))
                        placeholder = renderingDefinition.Placeholder;

                    if (InsertRendering.AreEqualPlaceholders(placeholder, renderingDefinition.Placeholder))
                        ++num;

                    if (num == insertPosition)
                    {
                        device.Insert(index + 1, renderingDefinition);
                        break;
                    }
                }
            }
        }
        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);
            });
        }
Beispiel #4
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);
            }
        }
Beispiel #5
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,
                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();
                Item["__Renderings"] = outputXml;
            });
        }