Beispiel #1
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();
     }
 }
        internal ResponseDevice AddDevice(Item contextItem, LayoutDefinition layoutDefinition, DeviceItem item, ID layoutID)
        {
            var layoutDevice = new ResponseDevice(contextItem, layoutDefinition, item, layoutID);

            _Devices.Add(layoutDevice);
            return(layoutDevice);
        }
Beispiel #3
0
        void AddLocalContentParts(Package package, PackageDefinition manifest, LayoutDefinition layout, string baseDirectory, string relativeDirectory)
        {
            var currentDirectory = Path.Combine(baseDirectory, relativeDirectory);

            foreach (var file in fileSystem.EnumerateFiles(currentDirectory))
            {
                var uniqueFileName = Guid.NewGuid().ToString("N");
                var partUri        = new Uri("LocalContent/" + uniqueFileName, UriKind.Relative);
                AddContent(package, manifest, partUri, file);

                //add file definition
                var fileDate = DateTime.UtcNow; //todo: use original timestamps if un-modified
                layout.FileDefinitions.Add(
                    new FileDefinition
                {
                    FilePath    = "\\" + Path.Combine(relativeDirectory, Path.GetFileName(file)),
                    Description =
                        new FileDescription
                    {
                        DataContentReference = partUri.ToString(),
                        ReadOnly             = false,
                        Created  = fileDate,
                        Modified = fileDate
                    }
                });
            }

            foreach (var subDirectory in Directory.GetDirectories(currentDirectory).Select(x => new DirectoryInfo(x)))
            {
                AddLocalContentParts(package, manifest, layout, baseDirectory, Path.Combine(relativeDirectory, subDirectory.Name));
            }
        }
Beispiel #4
0
        protected override bool Execute(T ruleContext)
        {
            if (string.IsNullOrWhiteSpace(RenderingItemId) || !ID.IsID(RenderingItemId))
            {
                return(false);
            }

            var enhancedContext = ruleContext as PlaceholderSettingsRuleContext;

            if (enhancedContext == null)
            {
                return(false);
            }

            var layoutDefinition = LayoutDefinition.Parse(enhancedContext.Args.LayoutDefinition);

            var renderings = layoutDefinition.Devices.Cast <DeviceDefinition>()
                             .Where(x => x != null)
                             .SelectMany(x => x.Renderings.Cast <RenderingDefinition>())
                             .ToArray();

            if (!renderings.Any())
            {
                return(false);
            }

            var isNested = renderings.Any(x => x.ItemID.Equals(RenderingItemId, StringComparison.InvariantCultureIgnoreCase) && enhancedContext.PlaceholderKeyPath.TrimStart('/').StartsWith(x.Placeholder.TrimStart('/')));

            return(isNested);
        }
        public ResponseDevice(Item contextItem, LayoutDefinition layoutDefinition, DeviceItem deviceItem, ID layoutID)
        {
            Id          = deviceItem.ID.ToString().Replace("{", "").Replace("}", "").ToLower();
            Name        = deviceItem.Name;
            DisplayName = deviceItem.DisplayName;

            LayoutItem layoutItem = deviceItem.Database.GetItem(layoutID);

            if (layoutItem != null)
            {
                LayoutName        = layoutItem.Name;
                LayoutDisplayName = layoutItem.DisplayName;
                LayoutId          = layoutItem.ID.ToString().Replace("{", "").Replace("}", "").ToLower();

                _Placeholders = Utility.FindPlaceholders(contextItem, layoutDefinition, layoutItem);
            }

            Icon = ThemeManager.GetIconImage(deviceItem.InnerItem, 32, 32, "", "");



            // TODO: until we figure this out - it will show as invalid... kind of - unless we don't worry about this level?
            //		var placeHolderControlList = layoutItem.Control.Controls.Cast<Control>()
            //.Where(x => x is global::Sitecore.Web.UI.WebControls.Placeholder)
            //.Cast<global::Sitecore.Web.UI.WebControls.Placeholder>().ToList();

            //		placeHolderControlList.ForEach(ph => AddPlaceholder(ph.RenderingName));
        }
        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);
            }
        }
Beispiel #7
0
        /// <summary>
        /// Identify the items with a presentation detail
        /// </summary>
        /// <param name="item">Item to check</param>
        /// <returns></returns>
        private bool IsPage(Item item)
        {
            var result      = false;
            var layoutField = new LayoutField(item.Fields[FieldIDs.LayoutField]);

            if (!layoutField.InnerField.HasValue || string.IsNullOrEmpty(layoutField.Value))
            {
                return(false);
            }
            var layout = LayoutDefinition.Parse(layoutField.Value);

            foreach (var deviceObj in layout.Devices)
            {
                var device = deviceObj as DeviceDefinition;
                if (device == null)
                {
                    return(false);
                }
                if (device.Renderings.Count > 0)
                {
                    result = true;
                }
            }
            return(result);
        }
Beispiel #8
0
        /// <summary>
        /// Gets the layout definition.
        /// </summary>
        /// <returns>
        /// The layout definition.
        /// </returns>
        /// <contract><ensures condition="not null" /></contract>
        private static LayoutDefinition GetLayoutDefinition()
        {
            string sessionString = WebUtil.GetSessionString(DeviceEditorForm.GetSessionHandle());

            Assert.IsNotNull(sessionString, "layout definition");
            return(LayoutDefinition.Parse(sessionString));
        }
Beispiel #9
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);
        }
Beispiel #10
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();
        }
Beispiel #11
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();
        }
Beispiel #12
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);
        }
Beispiel #13
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);
        }
Beispiel #14
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();
        }
        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);
            }
        }
Beispiel #16
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(); }");
        }
Beispiel #17
0
        private LayoutDefinition GetLayout(string name)
        {
            if (layoutDefinitions.Count == 0)
            {
                string message = string.Format("Loading Layout: {0}", name);
                ConsoleLog(message);
                var layoutsDefinitionsText = File.ReadAllText(Path.Combine(appDataFolder, @".\Layouts\Layouts.json"));
                var layouts = (JObject)JsonConvert.DeserializeObject(layoutsDefinitionsText);
                foreach (var layoutJson in layouts["Layouts"])
                {
                    var layout = layoutJson.ToObject <LayoutDefinition>();
                    if (!layoutDefinitions.Contains(layout))
                    {
                        layoutDefinitions.Add(layout);
                    }
                }
            }
            LayoutDefinition result = layoutDefinitions.SingleOrDefault(x => x.Name == name);

            if (result == null)
            {
                result = layoutDefinitions.First();
                string message = string.Format("Layout Not Defined: {0}\rUsing First Layout: {1}", name, result.Name);
                ConsoleLog(message);
            }
            return(result);
        }
Beispiel #18
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();
            }
        }
        public static void MergeLayouts([NotNull] this Item item)
        {
            //Grab the field that contains the layout
            var layoutField = new LayoutField(item.Fields[Sitecore.FieldIDs.LayoutField]);

            //Grab the field that contains the final layout
            var finalLayoutField = new LayoutField(item.Fields[Sitecore.FieldIDs.FinalLayoutField]);

            if (layoutField == null)
            {
                throw new Exception("Couldn't find layout on: {0}".FormatWith(item.Name));
            }

            if (finalLayoutField == null)
            {
                throw new Exception("Couldn't find final layout on: {0}".FormatWith(item.Name));
            }

            //If we don't have a final layout delta, we're good!
            if (string.IsNullOrWhiteSpace(finalLayoutField.Value))
            {
                return;
            }

            var finalLayoutDefinition = LayoutDefinition.Parse(finalLayoutField.Value);

            using (new EditContext(item))
            {
                layoutField.Value = finalLayoutDefinition.ToXml();
                item.Fields["__Final Renderings"].Reset();
                item.Editing.AcceptChanges();
            }
        }
Beispiel #20
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();
            }
        }
Beispiel #21
0
        protected override void ProcessItem(Item item)
        {
            LayoutField layoutField = item.Fields[LayoutFieldId];

            if (string.IsNullOrEmpty(layoutField?.Value))
            {
                return;
            }

            var layout = LayoutDefinition.Parse(layoutField.Value);

            if (Device == null)
            {
                Device = CurrentDatabase.Resources.Devices.GetAll().FirstOrDefault(d => d.IsDefault);
            }

            if (Device == null)
            {
                WriteError(
                    new ErrorRecord(
                        new ObjectNotFoundException(
                            "Device not provided and no default device in the system is defined."),
                        "sitecore_device_not_found", ErrorCategory.InvalidData, null));
                return;
            }

            var device = layout.GetDevice(Device.ID.ToString());

            if (device != null)
            {
                ProcessLayout(item, layout, device);
            }
        }
        private static string ApplyActionToLayoutXml(Item item, string xml, string branchBasePath)
        {
            var layout = LayoutDefinition.Parse(xml);

            xml = layout.ToXml();

            for (var deviceIndex = layout.Devices.Count - 1; deviceIndex >= 0; deviceIndex--)
            {
                var device = layout.Devices[deviceIndex] as DeviceDefinition;
                if (device == null)
                {
                    continue;
                }

                for (var renderingIndex = device.Renderings.Count - 1; renderingIndex >= 0; renderingIndex--)
                {
                    var rendering = device.Renderings[renderingIndex];
                    if (rendering is RenderingDefinition)
                    {
                        var renderingdefn = rendering as RenderingDefinition;
                        RelinkRenderingDatasource(item, renderingdefn, branchBasePath);
                    }
                }
            }

            var layoutXml = layout.ToXml();

            return(layoutXml != xml ? layoutXml : null);
        }
        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));
                }
            }
        }
        public void ShouldProduceValidManifestXml()
        {
            var manifest = new PackageDefinition {
                MetaData = { AzureVersion = "2.6" }
            };

            manifest.Contents.Add(
                new ContentDefinition
            {
                Name        = "ServiceDefinition/ServiceDefinition.csdef",
                Description = new ContentDescription
                {
                    LengthInBytes = 688,
                    HashAlgorithm = IntegrityCheckHashAlgorithm.Sha256,
                    Hash          = "NMkHuVQbi+g+ny+kvjiunBgt8rLQT8Jd9FGJvWsRtZE=",
                    DataStorePath = new Uri("ServiceDefinition/ServiceDefinition.csdef", UriKind.Relative)
                }
            });
            manifest.Contents.Add(
                new ContentDefinition
            {
                Name        = "LocalContent/ab3574e8f52d4c939aa6ff065e8b7cfd",
                Description = new ContentDescription
                {
                    LengthInBytes = 19469,
                    HashAlgorithm = IntegrityCheckHashAlgorithm.Sha256,
                    Hash          = "UK4lyWPyRI6I8WNzlVP2dtiFZj+kjMIjyGieq5b4TiE=",
                    DataStorePath = new Uri("LocalContent/ab3574e8f52d4c939aa6ff065e8b7cfd", UriKind.Relative)
                }
            });

            var workerRoleLayout = new LayoutDefinition {
                Name = "Roles/WorkerRole1"
            };

            workerRoleLayout.FileDefinitions.Add(new FileDefinition
            {
                FilePath    = "\\Cloud.uar.csman",
                Description =
                    new FileDescription
                {
                    DataContentReference = "LocalContent/ab3574e8f52d4c939aa6ff065e8b7cfd",
                    Created  = DateTime.UtcNow,
                    Modified = DateTime.UtcNow
                }
            });
            manifest.Layouts.Add(workerRoleLayout);

            var manifestXml = new XDocument(new XDeclaration("1.0", "utf-8", "yes"));

            manifestXml.Add(manifest.ToXml());

            var schemaSet = new XmlSchemaSet();

            schemaSet.Add(null, XmlReader.Create(new StringReader(GetPackageManifestSchema()), XmlUtils.DtdSafeReaderSettings));
            manifestXml.Validate(schemaSet, (o, e) =>
            {
                Assert.Fail("Xml failed to validate: " + e.Message);
            });
        }
        internal ResponseRendering AddRendering(Item contextItem, LayoutDefinition layoutDefinition, ResponseRendering responseRendering)
        {
            var placeholder = _Placeholders.SingleOrDefault(p => p.Name == responseRendering.PlaceholderName && (!p.Dynamic || p.ParentUniqueId == responseRendering.ParentUniqueId));

            if (placeholder == null)
            {
                // TODO: but this would be a NOT FOUND situation?
                // - basically this means that that placeholder wasn't really on that rendering
                // - or it is dynamic and not referenced dynamically!
                //var possiblePlaceholders = _Placeholders.Where(p => p.Dynamic && p.Name == responseRendering.PlaceholderName).ToList();
                //if (possiblePlaceholders.Count > 0) { // this means that we are dynamic, but we haven't built out our placeholder name with the guid, etc

                //	// TODO: what about seed?
                //	responseRendering.PossiblePlaceholderPaths.AddRange(possiblePlaceholders.Select(p => p.Name + "-" + p.ParentUniqueId)); // TODO: check if this causes any recursion problems?
                //	placeholder = new ResponsePlaceholder(contextItem, layoutDefinition, responseRendering.PlaceholderName, "", false, true);
                //} else {
                //}


                placeholder = new ResponsePlaceholder(contextItem, layoutDefinition, responseRendering.PlaceholderName, "", false, false);
                _Placeholders.Add(placeholder);
            }
            var rendering = placeholder.AddRendering(responseRendering);

            return(rendering);
        }
        private LayoutDefinition GetLayoutDefinition()
        {
            var xml = WebEditUtil.ConvertJSONLayoutToXML(WebUtil.GetFormValue("scLayout"));
            var layoutDefinition = LayoutDefinition.Parse(xml);

            return(layoutDefinition);
        }
Beispiel #27
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);
        }
Beispiel #28
0
        private static string ApplyActionToLayoutXml(string xml, Action <RenderingDefinition> action)
        {
            var layout = LayoutDefinition.Parse(xml);

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

            // loop over devices in the rendering
            for (var 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 (var 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
                    action(rendering);
                }
            }

            var layoutXml = layout.ToXml();

            // save a modified layout value if necessary
            return(layoutXml != xml ? layoutXml : null);
        }
Beispiel #29
0
        protected override void ProcessItem(Item item)
        {
            if (ShouldProcess(item.GetProviderPath(), string.Format("Set layout '{0}'", Layout.GetProviderPath())))
            {
                LayoutField layoutField = item.Fields[LayoutFieldId];
                if (layoutField == null)
                {
                    return;
                }

                var layout = LayoutDefinition.Parse(layoutField.Value);

                var device = layout.GetDevice(Device.ID.ToString());

                if (string.Equals(device.Layout, Layout.ID.ToString(), StringComparison.OrdinalIgnoreCase))
                {
                    //same layout as already set - no point in setting it again
                    return;
                }

                device.Layout = Layout.ID.ToString();

                item.Edit(p =>
                {
                    var outputXml = layout.ToXml();
                    LayoutField.SetFieldValue(item.Fields[LayoutFieldId], outputXml);
                });
            }
        }
        private static void UpdateFinalRenderings(Item sourcePageItem, Item targetPageItem, Field sourceFinalRenderingsField, Field targetFinalRenderingsField)
        {
            // get source renderings
            var sourceDefaultDevice    = sourcePageItem.Database.Resources.Devices.GetAll().First(d => d.IsDefault);
            var sourceLayoutField      = new LayoutField(sourceFinalRenderingsField);
            var sourceLayoutDefinition = LayoutDefinition.Parse(sourceLayoutField.Value);
            var sourceDeviceDefinition = sourceLayoutDefinition.GetDevice(sourceDefaultDevice.ID.ToString());

            // get target renderings
            var targetDefaultDevice    = targetPageItem.Database.Resources.Devices.GetAll().First(d => d.IsDefault);
            var targetLayoutField      = new LayoutField(targetFinalRenderingsField);
            var targetLayoutDefinition = LayoutDefinition.Parse(targetLayoutField.Value);
            var targetDeviceDefinition = targetLayoutDefinition.GetDevice(targetDefaultDevice.ID.ToString());

            foreach (RenderingDefinition sourceRendering in sourceDeviceDefinition.Renderings)
            {
                var duplicateRendering =
                    targetDeviceDefinition.Renderings.Cast <RenderingDefinition>()
                    .FirstOrDefault(r => r.UniqueId.Equals(sourceRendering.UniqueId));

                // Rendering isn't already on target renderings
                if (duplicateRendering == null)
                {
                    targetDeviceDefinition.Renderings.Add(sourceRendering);
                }
            }

            // save changes
            using (new EditContext(targetPageItem))
            {
                targetFinalRenderingsField.Value = targetLayoutDefinition.ToXml();
            }
        }