コード例 #1
0
        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);
            }
        }
コード例 #2
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;
            });
        }
コード例 #3
0
 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);
         }
     }
 }
コード例 #4
0
 public static IEnumerable<RenderingDefinition> GetTestingRenderings(LayoutDefinition layout, ID deviceID, Database database)
 {
     Assert.ArgumentNotNull((object)layout, "layout");
     Assert.ArgumentNotNull((object)deviceID, "deviceID");
     Assert.ArgumentNotNull((object)database, "database");
     List<RenderingDefinition> list = new List<RenderingDefinition>();
     ArrayList renderings = layout.GetDevice(deviceID.ToString()).Renderings;
     if (renderings == null)
         return (IEnumerable<RenderingDefinition>)list;
     foreach (RenderingDefinition rendering in renderings)
     {
         //if (Enumerable.Count<MultivariateTestValueItem>(TestingUtil.MultiVariateTesting.GetVariableValues(rendering, database)) > 1)
         list.Add(rendering);
     }
     return (IEnumerable<RenderingDefinition>)list;
 }
コード例 #5
0
        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;
                });
            }
        }
コード例 #6
0
 protected override void ProcessRenderings(Item item, LayoutDefinition layout, DeviceDefinition device,
     IEnumerable<RenderingDefinition> renderings)
 {
     renderings.ToList().ForEach(r => WriteObject(ItemShellExtensions.WrapInItemOwner(SessionState, item, r)));
 }
コード例 #7
0
        private void SetLayoutFieldValueIfValidDevice(LayoutDefinition layoutDefinition, Item item)
        {
            bool isDeviceValid = layoutDefinition != null && layoutDefinition.Devices != null && layoutDefinition.Devices.Count > 0;
            if (isDeviceValid)
            {
                var renderings = (layoutDefinition.Devices[0] as DeviceDefinition).Renderings;

                foreach (RenderingDefinition rendering in renderings)
                {
                    SetLayoutFieldValueIfApplicable(rendering, layoutDefinition, item);
                }
            }
        }
コード例 #8
0
 private void SetLayoutFieldValueIfEditMode(RenderingDefinition renderingDefinition, LayoutDefinition layoutDefinition, Item item)
 {
     if (IsEditMode)
     {
         SetLayoutFieldValue(renderingDefinition, layoutDefinition, item);
     }
 }
コード例 #9
0
 private void SetLayoutFieldValueIfApplicable(RenderingDefinition renderingDefinition, LayoutDefinition layoutDefinition, Item item)
 {
     if (renderingDefinition.ItemID == _renderingId.ToString())
     {
         SetLayoutFieldValueIfEditMode(renderingDefinition, layoutDefinition, item);
     }
 }
コード例 #10
0
        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();
            }
        }
コード例 #11
0
ファイル: BaseLayoutCommand.cs プロジェクト: sobek85/Console
 protected abstract void ProcessLayout(Item item, LayoutDefinition layout, DeviceDefinition device);
コード例 #12
0
        private void SetLayoutFieldValueIfEditMode(RenderingDefinition renderingDefinition, LayoutDefinition layoutDefinition, Item item)
        {
            if (_processingResults.ContainsKey(item.ID))
            {
                _processingResults[item.ID].Updated = true;
            }

            if (IsEditMode)
            {
                SetLayoutFieldValue(renderingDefinition, layoutDefinition, item);
            }
        }
 /// <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);
 }
コード例 #14
0
 protected abstract void ProcessRenderings(Item item, LayoutDefinition layout, DeviceDefinition device,
     IEnumerable<RenderingDefinition> renderings);
コード例 #15
0
        protected override void ProcessLayout(Item item, LayoutDefinition layout, DeviceDefinition device)
        {
            if (device == null || device.Renderings == null)
            {
                return;
            }

            var renderings = device.Renderings.Cast<RenderingDefinition>();

            if (Instance != null)
            {
                renderings = new[] {Instance};
            }
            else if (!string.IsNullOrEmpty(UniqueId))
            {
                renderings =
                    renderings.Where(r => string.Equals(r.UniqueId, UniqueId, StringComparison.OrdinalIgnoreCase));
            }
            else
            {
                if (Rendering != null)
                {
                    renderings = renderings.Where(r => r.ItemID == Rendering.ID.ToString());
                }

                if (!string.IsNullOrEmpty(DataSource))
                {
                    renderings = WildcardFilter(DataSource, renderings, r => r.Datasource);
                }

                if (!string.IsNullOrEmpty(PlaceHolder))
                {
                    renderings = WildcardFilter(PlaceHolder, renderings, r => r.Placeholder);
                }

                if (Index > -1)
                {
                    renderings = renderings.Skip(index).Take(1);
                }
            }

            if (paramPatterns != null)
            {
                var paramFilteredRenderings = new List<RenderingDefinition>();
                foreach (var rendering in renderings)
                {
                    if (string.IsNullOrEmpty(rendering.Parameters))
                    {
                        continue;
                    }
                    var parsedParams = new UrlString(rendering.Parameters);
                    var match = true;
                    foreach (var param in paramPatterns)
                    {
                        if (!parsedParams.Parameters.AllKeys.Contains(param.Key, StringComparer.OrdinalIgnoreCase))
                        {
                            match = false;
                            break;
                        }
                        if (!param.Value.IsMatch(parsedParams.Parameters[param.Key]))
                        {
                            match = false;
                            break;
                        }
                    }
                    if (match)
                    {
                        paramFilteredRenderings.Add(rendering);
                    }
                }
                renderings = paramFilteredRenderings;
            }
            ProcessRenderings(item, layout, device, renderings);
        }
コード例 #16
0
        private void BuildDevice(GridPanel grid, LayoutDefinition layout, DeviceItem deviceItem)
        {
            Assert.ArgumentNotNull(grid, "grid");
            Assert.ArgumentNotNull(deviceItem, "deviceItem");

            var xmlControl = string.IsNullOrEmpty(OpenDeviceClick)
                ? Resource.GetWebControl("LayoutFieldDeviceReadOnly") as XmlControl
                : Resource.GetWebControl("LayoutFieldDevice") as XmlControl;

            Assert.IsNotNull(xmlControl, typeof(XmlControl));

            grid.Controls.Add(xmlControl);

            string str1 = StringUtil.GetString(OpenDeviceClick).Replace("$Device", deviceItem.ID.ToString());
            string str2 = StringUtil.GetString(CopyToClick).Replace("$Device", deviceItem.ID.ToString());

            ReflectionUtil.SetProperty(xmlControl, "DeviceName", deviceItem.DisplayName);
            ReflectionUtil.SetProperty(xmlControl, "DeviceIcon", deviceItem.InnerItem.Appearance.Icon);
            ReflectionUtil.SetProperty(xmlControl, "DblClick", str1);
            ReflectionUtil.SetProperty(xmlControl, "Copy", str2);

            string str3 = string.Format("<span style=\"color:#999999\">{0}</span>", Translate.Text("[No layout specified]"));

            int index = 0;
            int num = 0;
            var parent1 = xmlControl["ControlsPane"] as System.Web.UI.Control;
            var parent2 = xmlControl["PlaceholdersPane"] as System.Web.UI.Control;

            if (layout != null)
            {
                DeviceDefinition device = layout.GetDevice(deviceItem.ID.ToString());
                string layout1 = device.Layout;

                if (!string.IsNullOrEmpty(layout1))
                {
                    Item obj = Client.ContentDatabase.GetItem(layout1);
                    if (obj != null)
                    {
                        str3 = Images.GetImage(obj.Appearance.Icon, 16, 16, "absmiddle", "0px 4px 0px 0px", obj.ID.ToString()) + obj.DisplayName;
                    }
                }

                ArrayList renderings = device.Renderings;
                if (renderings != null && renderings.Count > 0)
                {
                    Border border = new Border();
                    Context.ClientPage.AddControl(parent1, border);
                    foreach (RenderingDefinition renderingDefinition in renderings)
                    {
                        int conditionsCount = 0;

                        if (renderingDefinition.Rules != null && !renderingDefinition.Rules.IsEmpty)
                        {
                            conditionsCount = Enumerable.Count(renderingDefinition.Rules.Elements("rule"));
                        }

                        BuildRendering(border, device, renderingDefinition, index, conditionsCount);
                        ++index;
                    }
                }

                ArrayList placeholders = device.Placeholders;
                if (placeholders != null && placeholders.Count > 0)
                {
                    Border border = new Border();
                    Context.ClientPage.AddControl(parent2, border);

                    foreach (PlaceholderDefinition placeholderDefinition in placeholders)
                    {
                        BuildPlaceholder(border, device, placeholderDefinition);
                        ++num;
                    }
                }
            }

            ReflectionUtil.SetProperty(xmlControl, "LayoutName", str3);

            if (index == 0)
            {
                var noRenderingsLabel = string.Format("<span style=\"color:#999999\">{0}</span>", Translate.Text("[No renderings specified.]"));
                Context.ClientPage.AddControl(parent1, new LiteralControl(noRenderingsLabel));
            }

            if (num != 0)
            {
                return;
            }

            var noPlaceholdersLabel = string.Format("<span style=\"color:#999999\">{0}</span>", Translate.Text("[No placeholder settings were specified]"));
            Context.ClientPage.AddControl(parent2, new LiteralControl(noPlaceholdersLabel));
        }