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);
            }
        }
 public override void Execute(Sitecore.Shell.Framework.Commands.CommandContext context)
 {
     if (context.Parameters != null && context.Parameters.Count > 0)
     {
         try
         {
             string itemID = context.Parameters["itemID"] ?? "";
             itemID = Util.FormatID(itemID);
             string dsID = context.Parameters["dataSourceID"] ?? "";
             dsID = Util.FormatID(dsID);
             string renderingID = context.Parameters["renderingID"] ?? "";
             renderingID = Util.FormatID(renderingID);
             string deviceID = context.Parameters["deviceID"] ?? "";
             deviceID = Util.FormatID(deviceID);
             string dbName             = context.Parameters["dbName"] ?? "";
             Sitecore.Data.Database db = Sitecore.Data.Database.GetDatabase(dbName);
             if (db != null)
             {
                 Item i = db.GetItem(itemID);
                 try
                 {
                     string name = i.Name;
                 }
                 catch { }
                 if (i != null && Sitecore.Data.ID.IsID(renderingID) && Sitecore.Data.ID.IsID(dsID))
                 {
                     using (new EditContext(i))
                     {
                         Sitecore.Data.Fields.LayoutField  layoutField      = new Sitecore.Data.Fields.LayoutField(i.Fields[Sitecore.FieldIDs.LayoutField]);
                         Sitecore.Layouts.LayoutDefinition layoutDefinition = Sitecore.Layouts.LayoutDefinition.Parse(layoutField.Value);
                         Sitecore.Layouts.DeviceDefinition deviceDefinition = layoutDefinition.GetDevice(deviceID);
                         foreach (Sitecore.Layouts.RenderingDefinition rd in deviceDefinition.Renderings)
                         {
                             if (HealthIS.Apps.Util.FormatID(rd.UniqueId) == renderingID)
                             {
                                 rd.Datasource     = HealthIS.Apps.Util.FormatID(dsID);
                                 layoutField.Value = layoutDefinition.ToXml();
                             }
                         }
                     }
                 }
                 else
                 {
                     Exception ex = new Exception("Update Datasource Issue with id: " + itemID + " or dsID: " + dsID + " or i: " + i);
                     Util.LogError(ex.Message, ex, this);
                 }
             }
         }
         catch (Exception ex)
         {
             Util.LogError(ex.Message, ex, this);
         }
     }
 }
        protected override void ProcessRenderings(Item item, LayoutDefinition layout, DeviceDefinition device,
            IEnumerable<RenderingDefinition> renderings)
        {
            if (ShouldProcess(item.GetProviderPath(),
                string.Format("Remove rendering(s) '{0}' from device {1}",
                    renderings.Select(r => r.ItemID.ToString()).Aggregate((seed, curr) => seed + ", " + curr),
                    Device.Name)))
            {
                foreach (
                    var instanceRendering in
                        renderings.Select(rendering => device.Renderings.Cast<RenderingDefinition>()
                            .FirstOrDefault(r => r.UniqueId == rendering.UniqueId))
                            .Where(instanceRendering => instanceRendering != null))
                {
                    device.Renderings.Remove(instanceRendering);
                }

                item.Edit(p =>
                {
                    var outputXml = layout.ToXml();
                    Item["__Renderings"] = outputXml;
                });
            }
        }
        private void SetLayoutFieldValue(RenderingDefinition renderingDefinition, LayoutDefinition layoutDefinition, Item item)
        {
            Assert.ArgumentNotNull(item, "item");

            using (new Sitecore.Data.Items.EditContext(item))
            {
                renderingDefinition.Datasource = _datasourceId.ToString();
                item[Sitecore.FieldIDs.LayoutField] = layoutDefinition.ToXml();
            }
        }
 /// <summary>
 /// Sets the definition.
 /// </summary>
 /// <param name="layout">
 /// The layout.
 /// </param>
 private static void SetDefinition(LayoutDefinition layout)
 {
     Assert.ArgumentNotNull(layout, "layout");
     string xml = layout.ToXml();
     WebUtil.SetSessionValue(AdvancedDeviceEditorForm.GetSessionHandle(), xml);
 }
Beispiel #6
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;
            });
        }