public bool CreatesVersioningConflict(Item item, Item baseLayoutItem) { var itemLayout = item.Fields[FieldIDs.LayoutField].GetValue(false, false); return(!string.IsNullOrWhiteSpace(itemLayout) && XmlPatchUtils.IsXmlPatch(itemLayout) && !string.IsNullOrWhiteSpace(baseLayoutItem.Fields[FieldIDs.FinalLayoutField].GetValue(false, false))); }
public void ShouldWorkWithLayoutDeltas() { ID templateId = ID.NewID; string templateLayout = @"<r xmlns:xsd=""http://www.w3.org/2001/XMLSchema""> <d id=""{FE5D7FDF-89C0-4D99-9AA3-B5FBD009C9F3}"" l=""{4CA7478E-6184-4890-9072-1156DB468A1B}"" /> <d id=""{EF7176AE-2502-401A-96C0-1E9918A982F7}"" l=""{4CA7478E-6184-4890-9072-1156DB468A1B}"" /> <d id=""{5A6E7DC3-987F-4E74-AF78-AC0E544975F2}"" l=""{4CA7478E-6184-4890-9072-1156DB468A1B}"" /> </r>"; string itemDelta = @"<r xmlns:p=""p"" xmlns:s=""s"" p:p=""1""> <d id=""{FE5D7FDF-89C0-4D99-9AA3-B5FBD009C9F3}""> <r uid=""{BC2FDEAE-A971-420B-A874-BA5C767C42FE}"" s:id=""{B5BFA387-74C8-416B-98AF-01C9230C24B2}"" s:ph=""Score Content Main"" /> </d> </r>"; string merged = XmlDeltas.ApplyDelta(templateLayout, itemDelta); using (var db = new Db() { new DbTemplate("main", templateId) { { FieldIDs.LayoutField, templateLayout } }, new DbItem("page", ID.NewID, templateId), new DbItem("page2", ID.NewID, templateId) { new DbField(FieldIDs.LayoutField) { Value = itemDelta } } }) { Item item = db.GetItem("/sitecore/content/page"); #pragma warning disable 618 Assert.Equal(templateLayout, StandardValuesManager.Provider.GetStandardValue(item.Fields[FieldIDs.LayoutField])); #pragma warning restore 618 Assert.Equal(templateLayout, LayoutField.GetFieldValue(item.Fields[FieldIDs.LayoutField])); // standard values Assert.Equal(templateLayout, item[FieldIDs.LayoutField]); var item2 = db.GetItem("/sitecore/content/page2"); Assert.Equal(templateLayout, item2.Fields[FieldIDs.LayoutField].GetStandardValue()); // just checking Assert.True(XmlPatchUtils.IsXmlPatch(itemDelta)); Assert.Equal(merged, LayoutField.GetFieldValue(item2.Fields[FieldIDs.LayoutField])); } }
/// <summary> /// Merges the content. /// </summary> /// <param name="nodeIterator">The node iterator.</param> /// <param name="patch">The patch.</param> public static void MergeContent([NotNull] this XPathNodeIterator nodeIterator, [NotNull] IXmlElement patch) { Assert.ArgumentNotNull(nodeIterator, "nodeIterator"); Assert.ArgumentNotNull(patch, "patch"); EnsureEnumerationIsStarted(nodeIterator); XmlDocument document = new XmlDocument(); document.Load(new StringReader(nodeIterator.Current.OuterXml)); XmlPatchUtils.MergeNodes(document.DocumentElement, patch, SitecoreNamespaces); nodeIterator.Current.ReplaceSelf(document.DocumentElement.OuterXml); }
private static string GetLayoutFieldValue(Field field) { var value = field.GetValue(true, true); var func = XmlDeltas.WithEmptyValue("<r />"); if (string.IsNullOrEmpty(value)) { return(value); } if (!XmlPatchUtils.IsXmlPatch(value)) { return(value); } return(XmlDeltas.ApplyDelta(func(field), value)); }