Tuesday, May 7, 2019

Dynamic placeholder update script

using IntuitiveSurgical.Feature.Navigation.Content;
using IntuitiveSurgical.Feature.Navigation.Models;
using IntuitiveSurgical.Foundation.Images.Repositories;
using IntuitiveSurgical.Foundation.SitecoreExtensions.Extensions;
using Sitecore;
using Sitecore.Collections;
using Sitecore.Configuration;
using Sitecore.Data.Fields;
using Sitecore.Data.Items;
using Sitecore.Data.Managers;
using Sitecore.Layouts;
using Sitecore.Links;
using Sitecore.Sites;
using Sitecore.Web;
using Sitecore.Web.UI.WebControls;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text.RegularExpressions;
using System.Web;

namespace IntuitiveSurgical.Feature.Navigation.Repositories
{
    //[Service]
    public class NavigationRepository : INavigationRepository
    {
        public Sitecore.Data.Items.Item ContextItem { get; }

        //Dynamic placeholders
        private const string DatabaseName = "master";
        private const string DefaultDeviceId = "{FE5D7FDF-89C0-4D99-9AA3-B5FBD009C9F3}";
        private const string PlaceholderRegex = "_([0-9a-f]{8}[-][0-9a-f]{4}[-][0-9a-f]{4}[-][0-9a-f]{4}[-][0-9a-f]{12})";
        private const string ItemsWithPresentationDetailsQuery = "/sitecore/content//*[@__Renderings != '' or @__Final Renderings != '']";
        //End of Dynamic placeholders

        public NavigationRepository(Item contextItem)
        {
            this.ContextItem = Get(contextItem);

            //Dynamic placeholders. Nalan, please uncomment the line below to turn on dynamic placeholder names reformatting
            //Dictionary<Item, List<KeyValuePair<string, string>>> result = Iterate();
        }

        public Item Get([NotNull] Item contextItem)
        {
            if (contextItem == null)
            {
                //throw new ArgumentNullException(nameof(contextItem));
                return null;
            }


            return contextItem.GetAncestorOrSelfOfTemplate(Templates.Home_Title.ID) ?? Context.Site.GetContextItem(Templates.Home_Title.ID);
        }

        private List<Language> GetLanguagesPerCountry(Item country)
        {
            List<Language> result = new List<Language>();
            Sitecore.Data.Fields.MultilistField multilistField = country.Fields[Templates.Country.Fields.Languages];

            //Get all languages for the site
            LanguageCollection languages = LanguageManager.GetLanguages(Sitecore.Context.Database);
            List<CultureInfo> cultureInfos = new List<CultureInfo>();

            foreach (Sitecore.Globalization.Language language in languages)
            {
                cultureInfos.Add(language.CultureInfo);
            }

            //get all languages per country
            if (multilistField != null)
            {
                foreach (var id in multilistField.TargetIDs)
                {
                    Item targetItem = Context.Database.Items[id];
                    if (targetItem != null)
                    {
                        Sitecore.Globalization.Language sclan = languages.FirstOrDefault(x => x.CultureInfo.ToString() == targetItem.Name);                       
                        Language lan = new Language() { LanguageName = sclan.CultureInfo.DisplayName.Split('(')[0], Url = CountryHomeItemLanguageUrl(country, sclan.Name) };
                        result.Add(lan);
                    }
                }
            }

            return result;
        }

        public string CountryHomeItemLanguageUrl(Item countryItem, string lan)
        {
            var db = Context.Database;
            Item homeItem = countryItem.Children.FirstOrDefault(x => x.IsDerived(Templates.Home_Title.ID));
            Item lanHomeItem = ItemExtensions.HasLanguageVersion(homeItem, lan);

            var options = new UrlOptions
            {
                AlwaysIncludeServerUrl = true,
                LanguageEmbedding = LanguageEmbedding.Never,
                LowercaseUrls = true
            };

            //build sitecore context for this language
            SiteInfo site = SiteContextFactory.Sites
                //.Where(s => s.RootPath != "" & itemPath.StartsWith(s.RootPath, StringComparison.OrdinalIgnoreCase))
                .Where(s => s.Language == lan)
                .OrderByDescending(s => s.RootPath.Length)
                .FirstOrDefault();

            var website = new SiteContext(site);

            using (new SiteContextSwitcher(website))
            {
                string homeItemUrl = lanHomeItem.Url(options);

                if (!string.IsNullOrEmpty(homeItemUrl))
                    return homeItemUrl;
            }

            return HttpContext.Current.Request.Url.ToString();
        }

        public List<Region> GetRegions()
        {           
            List<Region> regions = new List<Region>();
            Item regionItem = this.ContextItem.GetAncestorOrSelfOfTemplate(Templates.Region.ID);
            Item parentItem = regionItem.Parent;

            var regionItems = parentItem.GetChildren().Where(x => x.TemplateID == Templates.Region.ID);

            foreach (Item region in regionItems)
            {
                var countrieItems = region.GetChildren().Where(x => x.TemplateID == Templates.Country.ID);
                var countries = (from c in countrieItems select new Country { Name = c.Fields[Templates.Country.Fields.Name].Value, FlagUrl = BuildImageUrl(c), Languages = GetLanguagesPerCountry(c) }).ToList();

                regions.Add(
                    new Region
                    {
                        Title = region.Fields[Templates.Region.Fields.Title].Value,
                        Countries = countries
                    });
            }

            return regions;
        }

        private string BuildImageUrl(Item countryItem)
        {
            var ImgixModel = ImgixRepository.Get(countryItem);
            return ImgixModel.Url.ToString();
        }

        public NavigationItems GetNavigationList()
        {

            var NavigationItems = new NavigationItems();
            NavigationItems.HeaderSections = CreateHeaderList(this.ContextItem);
            NavigationItems.ContactLinkItems = CreateContactLinkList(this.ContextItem);
            var hasLogoItems = this.ContextItem.GetAncestorOrSelfOfTemplate(Templates.Logo.ID) ?? Context.Site.GetContextItem(Templates.Logo.ID);
            var hasLogoItem = Context.Site.GetContextItem(Templates.Logo.ID);
            NavigationItems.Logo = hasLogoItem?.TargetItem(Templates.Logo.Fields.Logo);
            return NavigationItems;
        }


        private List<HeaderItem> CreateHeaderList(Item IHeaderItem)
        {
            var HeaderItemsList = new List<HeaderItem>();
            var HeadersFound = IHeaderItem.Axes.GetDescendants().Where(h => h.IsDerived(Templates.Header.ID));
            foreach (var curHeader in HeadersFound)
            {
                var curHeaderTitle = new HtmlString(FieldRenderer.Render(curHeader, Templates.Navigation_Title.Fields.Title.ToString()));
                if (!curHeader.IsNullOrEmpty(Templates.Navigation_Title.Fields.Title))
                {
                    if (!curHeader.IsChecked(Templates.Featured.Fields.Hide_In_Navigation))
                    {
                        HeaderItemsList.Add(
                        new HeaderItem
                        {
                            SubHeaderSections = this.CreateSubtHeaderList(curHeader),
                            Item = curHeader,
                            Featured = curHeader.IsChecked(Templates.Featured.Fields.Featured),
                            Excerpt = !curHeader.IsNullOrEmpty(Templates.Featured.Fields.Excerpt) ? curHeader.Fields[Templates.Featured.Fields.Excerpt].Value.ToString() : "",
                            PageLink = ((curHeader[Templates.Featured.Fields.Page_Link] != null) && (Context.Database.GetItem(curHeader[Templates.Featured.Fields.Page_Link]) != null)) ? Context.Database.GetItem(curHeader[Templates.Featured.Fields.Page_Link]).Url() : "",
                            Title = !curHeader.IsNullOrEmpty(Templates.Navigation_Title.Fields.Title) ? curHeaderTitle : new HtmlString("")

                        });
                    }
                }
            }
            return HeaderItemsList;
        }
        private List<SubHeaderItem> CreateSubtHeaderList(Item ISubHeaderItem)
        {
            var options = new UrlOptions
            {
                AlwaysIncludeServerUrl = true,
                LanguageEmbedding = LanguageEmbedding.Never,
                LowercaseUrls = true
            };

            var SubHeaderItemsList = new List<SubHeaderItem>();
            //var SubHeadersFound = ISubHeaderItem.Axes.GetDescendants().Where(s => s.IsDerived(Templates.Sub_Header.ID));
            //l.IsDerived(Templates.Navigation_Link.ID));
            var SubHeadersFound = ISubHeaderItem.Axes.GetDescendants().Where(l => l.Parent.Template.ID == Templates.Heading.ID || l.Parent.Template.ID == Templates.DaVinciHeading.ID);

            foreach (var curSubHeader in SubHeadersFound)
            {
                var curSubHeaderTitle = new HtmlString(FieldRenderer.Render(curSubHeader, Templates.Navigation_Title.Fields.Title.ToString()));
                if (!curSubHeader.IsNullOrEmpty(Templates.Navigation_Title.Fields.Title))
                {
                    SubHeaderItemsList.Add(
                    new SubHeaderItem
                    {
                        LinkSections = this.CreateNavigationLinkList(curSubHeader),
                        Item = curSubHeader,
                        Border = curSubHeader.CustomStyle(Templates.Border.Fields.Border),
                        Title = !curSubHeader.IsNullOrEmpty(Templates.Navigation_Title.Fields.Title) ? curSubHeaderTitle : new HtmlString(""),
                        Target = (curSubHeader.TemplateID == Templates.RedirectPage.ID) ? "_blank" : "",
                        Visible = !curSubHeader.IsChecked(Templates.Featured.Fields.Hide_In_Footer),
                        PageLink = curSubHeader.Url(options),
                    });
                }
            }
            return SubHeaderItemsList;
        }
        private List<NavigationLinkItem> CreateNavigationLinkList(Item item)
        {
            var options = new UrlOptions
            {
                AlwaysIncludeServerUrl = true,
                LanguageEmbedding = LanguageEmbedding.Never,
                LowercaseUrls = true
            };
            var NavigationLinkItemsList = new List<NavigationLinkItem>();
            var NavigationLinkFound = item.Axes.GetDescendants().Where(l => l.IsDerived(Templates.Navigation_Link.ID));
            foreach (var curNavigationLink in NavigationLinkFound)
            {
                if ((!curNavigationLink.IsChecked(Templates.Featured.Fields.Hide_In_Navigation)) && (!curNavigationLink.IsNullOrEmpty(Templates.Navigation_Title.Fields.Title)))
                {
                    var curNavigationLinkTitle = new HtmlString(FieldRenderer.Render(curNavigationLink, Templates.Navigation_Title.Fields.Title.ToString()));
                    NavigationLinkItemsList.Add(
                        new NavigationLinkItem
                        {
                            Url = curNavigationLink.Url(options),
                            Item = curNavigationLink,
                            Title = !curNavigationLink.IsNullOrEmpty(Templates.Navigation_Title.Fields.Title) ? curNavigationLinkTitle : new HtmlString(""),
                            Target = (curNavigationLink.TemplateID == Templates.RedirectPage.ID) ? "_blank" : "",
                            Visible = !curNavigationLink.IsChecked(Templates.Featured.Fields.Hide_In_Footer)
                        });
                }
            }
            return NavigationLinkItemsList;
        }
        private List<ContactLinkItem> CreateContactLinkList(Item item)
        {
            var options = new UrlOptions
            {
                AlwaysIncludeServerUrl = true,
                LanguageEmbedding = LanguageEmbedding.Never,
                LowercaseUrls = true
            };
            item = item.GetAncestorOrSelfOfTemplate(Templates.Navigation_Contact_Links.ID) ?? Context.Site.GetContextItem(Templates.Navigation_Contact_Links.ID);
            var ContactLinkItemsList = new List<ContactLinkItem>();
            var ContactLinkFound = item.GetMultiListValueItems(Templates.Navigation_Contact_Links.Fields.Contact_Links);
            foreach (var curContactLink in ContactLinkFound)
            {
                if (!curContactLink.IsChecked(Templates.Featured.Fields.Hide_In_Navigation))
                {
                    var curContactLinkTitle = new HtmlString(FieldRenderer.Render(curContactLink, Templates.Navigation_Title.Fields.Title.ToString()));
                    ContactLinkItemsList.Add(
                        new ContactLinkItem
                        {
                            Url = curContactLink.Url(options),
                            Item = curContactLink,
                            Title = !curContactLink.IsNullOrEmpty(Templates.Navigation_Title.Fields.Title) ? curContactLinkTitle : new HtmlString(""),
                            Target = (curContactLink.TemplateID == Templates.RedirectPage.ID) ? "_blank" : "",
                            Visible = !curContactLink.IsChecked(Templates.Featured.Fields.Hide_In_Footer)
                        });
                }
            }
            return ContactLinkItemsList;
        }


        public NavigationJson GetNavigationList(Item contextItem, SiteContext site)
        {
            var NavigationItems = new NavigationJson();
            NavigationItems.HeaderSections = CreateHeaderListJson(contextItem, site);
            var hasLogoItems = contextItem.GetAncestorOrSelfOfTemplate(Templates.Logo.ID) ?? contextItem;
            var hasLogoItem = contextItem;
            NavigationItems.Logo = hasLogoItem?.TargetItem(Templates.Logo.Fields.Logo);
            return NavigationItems;
        }

        private List<HeaderJson> CreateHeaderListJson(Item IHeaderItem, SiteContext website)
        {
            var db = IHeaderItem.Database;
            var HeaderItemsList = new List<HeaderJson>();

            using (new SiteContextSwitcher(website))
            {
                var HeadersFound = IHeaderItem.Axes.GetDescendants().Where(h => h.IsDerived(Templates.Header.ID));
                foreach (var curHeader in HeadersFound)
                {
                    var curHeaderTitle = FieldRenderer.Render(curHeader, Templates.Navigation_Title.Fields.Title.ToString());
                    if (!curHeader.IsNullOrEmpty(Templates.Navigation_Title.Fields.Title))
                    {
                        if (!curHeader.IsChecked(Templates.Featured.Fields.Hide_In_Navigation))
                        {
                            HeaderItemsList.Add(
                            new HeaderJson
                            {
                                SubHeaderListJson = this.CreateSubtHeaderListJson(curHeader, website),
                                PageLink = ((curHeader[Templates.Featured.Fields.Page_Link] != null) && (db.GetItem(curHeader[Templates.Featured.Fields.Page_Link]) != null))
                                           ? db.GetItem(curHeader[Templates.Featured.Fields.Page_Link]).Url() : "",
                                Title = !curHeader.IsNullOrEmpty(Templates.Navigation_Title.Fields.Title) ? curHeaderTitle.ToString() : string.Empty
                            });
                        }
                    }
                }
            }

            return HeaderItemsList;
        }

        private List<SubHeaderJson> CreateSubtHeaderListJson(Item ISubHeaderItem, SiteContext siteContext)
        {
            var SubHeaderItemsList = new List<SubHeaderJson>();
            var SubHeadersFound = ISubHeaderItem.Axes.GetDescendants().Where(l => l.Parent.Template.ID == Templates.Heading.ID || l.Parent.Template.ID == Templates.DaVinciHeading.ID);

            using (new SiteContextSwitcher(siteContext))
            {
                var options = LinkManager.GetDefaultUrlOptions();
                options.AlwaysIncludeServerUrl = true;
                options.Site = siteContext;
                options.SiteResolving = true;
                options.LanguageEmbedding = LanguageEmbedding.Never;
                options.Language = Sitecore.Data.Managers.LanguageManager.GetLanguage(siteContext.Language);

                foreach (var curSubHeader in SubHeadersFound)
                {
                    if (!curSubHeader.IsNullOrEmpty(Templates.Navigation_Title.Fields.Title))
                    {
                        string pageLink = LinkManager.GetItemUrl(curSubHeader, options);
                        if (!curSubHeader.IsChecked(Templates.Featured.Fields.Hide_In_Navigation))
                        {
                            var curSubHeaderTitle = FieldRenderer.Render(curSubHeader, Templates.Navigation_Title.Fields.Title.ToString());
                            SubHeaderItemsList.Add(
                                new SubHeaderJson
                                {
                                    NavigationLinkListJson = this.CreateNavigationLinkListJson(curSubHeader),
                                    Title = !curSubHeader.IsNullOrEmpty(Templates.Navigation_Title.Fields.Title) ? curSubHeaderTitle : string.Empty,
                                    PageLink = pageLink,
                                    Target = (curSubHeader.TemplateID == Templates.RedirectPage.ID) ? "_blank" : ""
                                });
                        }
                    }
                }
            }

            return SubHeaderItemsList;
        }

        private List<NavigationLinkJson> CreateNavigationLinkListJson(Item item)
        {
            var options = new UrlOptions
            {
                AlwaysIncludeServerUrl = true,
                LanguageEmbedding = LanguageEmbedding.Never,
                LowercaseUrls = true
            };
            var NavigationLinkItemsList = new List<NavigationLinkJson>();
            var NavigationLinkFound = item.Axes.GetDescendants().Where(l => l.IsDerived(Templates.Navigation_Link.ID));
            foreach (var curNavigationLink in NavigationLinkFound)
            {
                if ((!curNavigationLink.IsChecked(Templates.Featured.Fields.Hide_In_Navigation)) && (!curNavigationLink.IsNullOrEmpty(Templates.Navigation_Title.Fields.Title)))
                {
                    var curNavigationLinkTitle = FieldRenderer.Render(curNavigationLink, Templates.Navigation_Title.Fields.Title.ToString());
                    NavigationLinkItemsList.Add(
                        new NavigationLinkJson
                        {
                            Title = !curNavigationLink.IsNullOrEmpty(Templates.Navigation_Title.Fields.Title) ? curNavigationLinkTitle : string.Empty,
                            PageLink = curNavigationLink.Url(options),
                            Target = (curNavigationLink.TemplateID == Templates.RedirectPage.ID) ? "_blank" : ""
                        });
                }
            }
            return NavigationLinkItemsList;
        }

        //private List<SubHeaderJson> CreateSubtHeaderListJson(Item ISubHeaderItem)
        //{
        //    var options = new UrlOptions
        //    {
        //        AlwaysIncludeServerUrl = true,
        //        LanguageEmbedding = LanguageEmbedding.Always,
        //        LowercaseUrls = true
        //    };
        //    var SubHeaderItemsList = new List<SubHeaderJson>();
        //    var SubHeadersFound = ISubHeaderItem.Axes.GetDescendants().Where(s => s.IsDerived(Templates.Sub_Header.ID));
        //    foreach (var curSubHeader in SubHeadersFound)
        //    {
        //        var curSubHeaderTitle = FieldRenderer.Render(curSubHeader, Templates.Navigation_Title.Fields.Title.ToString());
        //        if (!curSubHeader.IsNullOrEmpty(Templates.Navigation_Title.Fields.Title))
        //        {
        //            string pageLink = string.Empty;
        //            if (!curSubHeader.IsChecked(Templates.Featured.Fields.Hide_In_Navigation))
        //            {
        //                if (curSubHeader[Templates.Featured.Fields.Page_Link] != null)
        //                {
        //                    var pageLinkItem = Context.Database.GetItem(curSubHeader[Templates.Featured.Fields.Page_Link]);

        //                    if (pageLinkItem != null && !pageLinkItem.IsChecked(Templates.Featured.Fields.Hide_In_Navigation))
        //                    {
        //                        SubHeaderItemsList.Add(
        //                        new SubHeaderJson
        //                        {
        //                            NavigationLinkListJson = this.CreateNavigationLinkListJson(curSubHeader),
        //                            Title = !curSubHeader.IsNullOrEmpty(Templates.Navigation_Title.Fields.Title) ? curSubHeaderTitle : string.Empty,
        //                            PageLink = pageLinkItem.Url()
        //                            //PageLink = curSubHeader.Url(options),
        //                        });
        //                    }
        //                }
        //            }
        //        }
        //    }
        //    return SubHeaderItemsList;
        //}
        //private List<NavigationLinkJson> CreateNavigationLinkListJson(Item item)
        //{
        //    var options = new UrlOptions
        //    {
        //        AlwaysIncludeServerUrl = true,
        //        LanguageEmbedding = LanguageEmbedding.Always,
        //        LowercaseUrls = true
        //    };
        //    var NavigationLinkItemsList = new List<NavigationLinkJson>();
        //    var NavigationLinkFound = item.Axes.GetDescendants().Where(l => l.IsDerived(Templates.Navigation_Link.ID));
        //    foreach (var curNavigationLink in NavigationLinkFound)
        //    {
        //        if ((!curNavigationLink.IsChecked(Templates.Featured.Fields.Hide_In_Navigation)) && (!curNavigationLink.IsNullOrEmpty(Templates.Navigation_Title.Fields.Title)))
        //        {
        //            var curNavigationLinkTitle = FieldRenderer.Render(curNavigationLink, Templates.Navigation_Title.Fields.Title.ToString());
        //            NavigationLinkItemsList.Add(
        //                new NavigationLinkJson
        //                {
        //                    Title = !curNavigationLink.IsNullOrEmpty(Templates.Navigation_Title.Fields.Title) ? curNavigationLinkTitle : string.Empty,
        //                    PageLink = curNavigationLink.Url(options)
        //                });
        //        }
        //    }
        //    return NavigationLinkItemsList;
        //}

        #region DynamicPlaceholders
        public Dictionary<Item, List<KeyValuePair<string, string>>> Iterate()
        {
            Dictionary<Item, List<KeyValuePair<string, string>>> result = new Dictionary<Item, List<KeyValuePair<string, string>>>();

            Sitecore.Data.Database master = Factory.GetDatabase(DatabaseName);
            Item[] items = master.SelectItems(ItemsWithPresentationDetailsQuery);
            List<string> paths = new List<string>();

            Sitecore.Data.ID[] layoutFields = new[] { FieldIDs.LayoutField, FieldIDs.FinalLayoutField };

            foreach (Item itemInDefaultLanguage in items)
            {
                string idAndLanguage = itemInDefaultLanguage.Paths.Path;
                paths.Add(idAndLanguage);

                foreach (Sitecore.Globalization.Language itemLanguage in itemInDefaultLanguage.Languages)
                {
                    Item itemGeneral = itemInDefaultLanguage.Database.GetItem(itemInDefaultLanguage.ID, itemLanguage);

                    if (itemGeneral.Versions.Count > 0)
                    {
                        if (itemGeneral.Versions.Count > 1)
                        {
                            bool stopHere = true;
                        }

                        foreach (var version in itemGeneral.Versions.GetVersions()) //Iterate through each numbered version of the item
                        {
                            string pathAndLanguage = version.Paths.Path + "     " + itemLanguage;


                            foreach (Sitecore.Data.ID layoutField in layoutFields)
                            {
                                List<KeyValuePair<string, string>> changeResult = ChangeLayoutFieldForItem(version, version.Fields[layoutField]);

                                if (changeResult.Any())
                                {
                                    if (!result.ContainsKey(version))
                                    {
                                        result.Add(version, changeResult);
                                    }
                                    else
                                    {
                                        result[version].AddRange(changeResult);
                                    }
                                }
                            }
                        }
                    }
                }
            }

            List<string> allPaths = paths;
            return result;
        }

        private List<KeyValuePair<string, string>> ChangeLayoutFieldForItem(Item currentItem, Field field)
        {
            List<KeyValuePair<string, string>> result = new List<KeyValuePair<string, string>>();

            string xml = LayoutField.GetFieldValue(field);

            if (!string.IsNullOrWhiteSpace(xml))
            {
                LayoutDefinition details = LayoutDefinition.Parse(xml);

                DeviceDefinition device = details.GetDevice(DefaultDeviceId);
                DeviceItem deviceItem = currentItem.Database.Resources.Devices["Default"];

                RenderingReference[] renderings = currentItem.Visualization.GetRenderings(deviceItem, false);

                if (device?.Renderings != null)
                {

                    bool requiresUpdate = false;
                    foreach (RenderingDefinition rendering in device.Renderings)
                    {
                        if (!string.IsNullOrWhiteSpace(rendering.Placeholder))
                        {
                            string newPlaceholder = rendering.Placeholder;
                            foreach (Match match in Regex.Matches(newPlaceholder, PlaceholderRegex, RegexOptions.IgnoreCase))
                            {
                                int count = 0;

                                string renderingId = match.Value;
                                string newRenderingId = "-{" + renderingId.ToUpper().Substring(1) + "}-" + count;

                                newPlaceholder = newPlaceholder.Replace(match.Value, newRenderingId);
                                result.Add(new KeyValuePair<string, string>(currentItem.Paths.Path + "   " + rendering.Placeholder, newPlaceholder));
                                count++;
                                requiresUpdate = true;
                            }

                            //result.Add(new KeyValuePair<string, string>(rendering.Placeholder, newPlaceholder));
                            rendering.Placeholder = newPlaceholder;
                        }
                    }

                    if (requiresUpdate)
                    {
                        string newXml = details.ToXml();

                        using (new EditContext(currentItem))
                        {
                            LayoutField.SetFieldValue(field, newXml);
                        }
                    }

                }
            }

            return result;
        }
        #endregion
    }
}

No comments:

Post a Comment