/// <summary> /// Part of the export of IContent and IMedia and IMember which is shared /// </summary> /// <param name="dataTypeService"></param> /// <param name="contentBase">Base Content or Media to export</param> /// <param name="nodeName">Name of the node</param> /// <returns><see cref="XElement"/></returns> private XElement Serialize(IDataTypeService dataTypeService, IContentBase contentBase, string nodeName) { //NOTE: that one will take care of umbracoUrlName var url = contentBase.GetUrlSegment(); var xml = new XElement(nodeName, new XAttribute("id", contentBase.Id), new XAttribute("key", contentBase.Key), new XAttribute("parentID", contentBase.Level > 1 ? contentBase.ParentId : -1), new XAttribute("level", contentBase.Level), new XAttribute("creatorID", contentBase.CreatorId), new XAttribute("sortOrder", contentBase.SortOrder), new XAttribute("createDate", contentBase.CreateDate.ToString("s")), new XAttribute("updateDate", contentBase.UpdateDate.ToString("s")), new XAttribute("nodeName", contentBase.Name), new XAttribute("urlName", url), new XAttribute("path", contentBase.Path), new XAttribute("isDoc", "")); foreach (var property in contentBase.Properties.Where(p => p != null && p.Value != null && p.Value.ToString().IsNullOrWhiteSpace() == false)) { xml.Add(Serialize(dataTypeService, property)); } return(xml); }
/// <summary> /// Part of the export of IContent and IMedia which is shared /// </summary> /// <param name="contentBase">Base Content or Media to export</param> /// <param name="nodeName">Name of the node</param> /// <returns><see cref="XElement"/></returns> private XElement Export(IContentBase contentBase, string nodeName) { //NOTE: that one will take care of umbracoUrlName var url = contentBase.GetUrlSegment(); var xml = new XElement(nodeName, new XAttribute("id", contentBase.Id), new XAttribute("parentID", contentBase.Level > 1 ? contentBase.ParentId : -1), new XAttribute("level", contentBase.Level), new XAttribute("creatorID", contentBase.CreatorId), new XAttribute("sortOrder", contentBase.SortOrder), new XAttribute("createDate", contentBase.CreateDate.ToString("s")), new XAttribute("updateDate", contentBase.UpdateDate.ToString("s")), new XAttribute("nodeName", contentBase.Name), new XAttribute("urlName", url), new XAttribute("path", contentBase.Path), new XAttribute("isDoc", "")); foreach (var property in contentBase.Properties.Where(p => p != null)) { xml.Add(property.ToXml()); } return(xml); }
/// <summary> /// Part of the export of IContent and IMedia which is shared /// </summary> /// <param name="contentBase">Base Content or Media to export</param> /// <param name="nodeName">Name of the node</param> /// <returns><see cref="XElement"/></returns> private XElement Export(IContentBase contentBase, string nodeName) { //NOTE: that one will take care of umbracoUrlName var url = contentBase.GetUrlSegment(); var xml = new XElement(nodeName, new XAttribute("id", contentBase.Id), new XAttribute("parentID", contentBase.Level > 1 ? contentBase.ParentId : -1), new XAttribute("level", contentBase.Level), new XAttribute("creatorID", contentBase.CreatorId), new XAttribute("sortOrder", contentBase.SortOrder), new XAttribute("createDate", contentBase.CreateDate.ToString("s")), new XAttribute("updateDate", contentBase.UpdateDate.ToString("s")), new XAttribute("nodeName", contentBase.Name), new XAttribute("urlName", url), new XAttribute("path", contentBase.Path), new XAttribute("isDoc", "")); foreach (var property in contentBase.Properties.Where(p => p != null)) xml.Add(property.ToXml()); return xml; }
private ContentNuDto GetDto(IContentBase content, bool published, IContentCacheDataSerializer serializer) { // should inject these in ctor // BUT for the time being we decide not to support ConvertDbToXml/String // var propertyEditorResolver = PropertyEditorResolver.Current; // var dataTypeService = ApplicationContext.Current.Services.DataTypeService; var propertyData = new Dictionary <string, PropertyData[]>(); foreach (IProperty prop in content.Properties) { var pdatas = new List <PropertyData>(); foreach (IPropertyValue pvalue in prop.Values) { // sanitize - properties should be ok but ... never knows if (!prop.PropertyType.SupportsVariation(pvalue.Culture, pvalue.Segment)) { continue; } // note: at service level, invariant is 'null', but here invariant becomes 'string.Empty' var value = published ? pvalue.PublishedValue : pvalue.EditedValue; if (value != null) { pdatas.Add(new PropertyData { Culture = pvalue.Culture ?? string.Empty, Segment = pvalue.Segment ?? string.Empty, Value = value }); } } propertyData[prop.Alias] = pdatas.ToArray(); } var cultureData = new Dictionary <string, CultureVariation>(); // sanitize - names should be ok but ... never knows if (content.ContentType.VariesByCulture()) { ContentCultureInfosCollection infos = content is IContent document ? published ? document.PublishCultureInfos : document.CultureInfos : content.CultureInfos; // ReSharper disable once UseDeconstruction foreach (ContentCultureInfos cultureInfo in infos) { var cultureIsDraft = !published && content is IContent d && d.IsCultureEdited(cultureInfo.Culture); cultureData[cultureInfo.Culture] = new CultureVariation { Name = cultureInfo.Name, UrlSegment = content.GetUrlSegment(_shortStringHelper, _urlSegmentProviders, cultureInfo.Culture), Date = content.GetUpdateDate(cultureInfo.Culture) ?? DateTime.MinValue, IsDraft = cultureIsDraft }; } } // the dictionary that will be serialized var contentCacheData = new ContentCacheDataModel { PropertyData = propertyData, CultureData = cultureData, UrlSegment = content.GetUrlSegment(_shortStringHelper, _urlSegmentProviders) }; var serialized = serializer.Serialize(ReadOnlyContentBaseAdapter.Create(content), contentCacheData, published); var dto = new ContentNuDto { NodeId = content.Id, Published = published, Data = serialized.StringData, RawData = serialized.ByteData }; return(dto); }