/// <summary> /// Creates a new version for a content item in a particular language. /// </summary> /// <param name="itemDefinition">Used to identify the particular item</param> /// <param name="baseVersion">The version to copy off of</param> /// <param name="context"></param> /// <returns></returns> public override int AddVersion(ItemDefinition itemDefinition, VersionUri baseVersion, CallContext context) { if (!ItemsById.ContainsKey(itemDefinition.ID)) { return(-1); } SyncItem current = ItemsById[itemDefinition.ID]; int num = -1; Language baseVersionLanguage = baseVersion.Language; if (Language.Invariant.Equals(baseVersionLanguage)) { baseVersionLanguage = LanguageManager.DefaultLanguage; } if (baseVersion.Version != null && baseVersion.Version.Number > 0) { // copy version SyncVersion matchingVersion = (current.Versions ?? new List <SyncVersion>()) .OrderByDescending(vr => int.Parse(vr.Version)) .FirstOrDefault(vr => vr.Language.Equals(baseVersionLanguage.Name)); int?maxVersionNumber = matchingVersion != null?int.Parse(matchingVersion.Version) : null as int?; num = maxVersionNumber.HasValue && maxVersionNumber > 0 ? maxVersionNumber.Value + 1 : -1; if (num > 0) { SyncVersion newVersion = current.AddVersion(matchingVersion.Language, num.ToString(), matchingVersion.Revision); IList <SyncField> currentFieldValues = matchingVersion.Fields; foreach (SyncField fieldValue in currentFieldValues) { newVersion.AddField(fieldValue.FieldID, fieldValue.FieldName, fieldValue.FieldKey, fieldValue.FieldValue, true); } } } if (num == -1) { num = 1; // add blank version current.AddVersion(baseVersionLanguage.Name, num.ToString(), Guid.NewGuid().ToString()); } return(num); }
public SyncItem BuildSyncItem(IItemData item) { var syncItem = new SyncItem { ID = item.Id.ToString("B"), DatabaseName = item.DatabaseName, ParentID = item.ParentId.ToString("B"), Name = item.Name, BranchId = item.BranchId.ToString("B"), TemplateID = item.TemplateId.ToString("B"), ItemPath = item.Path }; //syncItem.TemplateName = item.TemplateName; foreach (var field in item.SharedFields) //TODO: ItemSynchronization.BuildSyncItem sorts the fields and versions first, should we ? { syncItem.AddSharedField(field.FieldId.ToString("B"), null /*name*/, null /*key?*/, field.Value, true); } foreach (var version in item.Versions) { var syncVersion = syncItem.AddVersion(version.Language.ToString(), version.VersionNumber.ToString(), version.VersionNumber.ToString() /*revisionid needed?*/); if (syncVersion != null) { foreach (var field in version.Fields) { syncVersion.AddField(field.FieldId.ToString("B"), null /*name*/, null /*key?*/, field.Value, true); } } } return(syncItem); }
private static SyncItem LoadItem(XmlDocument document) { SyncItem loadedItem = new SyncItem(); XmlNode itemNode = document.DocumentElement; loadedItem.ID = XmlUtil.GetAttribute("id", itemNode); loadedItem.Name = XmlUtil.GetAttribute("name", itemNode); loadedItem.ParentID = XmlUtil.GetAttribute("parentid", itemNode); loadedItem.TemplateID = XmlUtil.GetAttribute("tid", itemNode); loadedItem.MasterID = XmlUtil.GetAttribute("mid", itemNode); loadedItem.BranchId = XmlUtil.GetAttribute("bid", itemNode); loadedItem.TemplateName = XmlUtil.GetAttribute("template", itemNode); SyncVersion loadedVersion = loadedItem.AddVersion( XmlUtil.GetAttribute("language", itemNode), XmlUtil.GetAttribute("version", itemNode), string.Empty); foreach (XmlNode node in itemNode.SelectNodes("fields/field")) { XmlNode content = node.SelectSingleNode("content"); loadedVersion.AddField( XmlUtil.GetAttribute("tfid", node), XmlUtil.GetAttribute("key", node), XmlUtil.GetAttribute("key", node), content != null ? XmlUtil.GetValue(content) : null, content != null); } return(loadedItem); }
public SyncItem BuildSyncItem(IItemData item) { var syncItem = new SyncItem { ID = item.Id.ToString("B"), DatabaseName = item.DatabaseName, ParentID = item.ParentId.ToString("B"), Name = item.Name, BranchId = item.BranchId.ToString("B"), TemplateID = item.TemplateId.ToString("B"), ItemPath = item.Path }; //syncItem.TemplateName = item.TemplateName; foreach (var field in item.SharedFields) //TODO: ItemSynchronization.BuildSyncItem sorts the fields and versions first, should we ? { syncItem.AddSharedField(field.FieldId.ToString("B"), null/*name*/, null/*key?*/, field.Value, true); } foreach (var version in item.Versions) { var syncVersion = syncItem.AddVersion(version.Language.ToString(), version.VersionNumber.ToString(), version.VersionNumber.ToString() /*revisionid needed?*/); if (syncVersion != null) { foreach (var field in version.Fields) { syncVersion.AddField(field.FieldId.ToString("B"), null/*name*/,null /*key?*/, field.Value, true); } } } return syncItem; }
private SyncItem CreateSyncItem(string name, string database, string itemPath, string parentID, string templatePath) { SyncItem syncItem = new SyncItem { ID = MainUtil.GetNewID(), DatabaseName = database, ItemPath = String.Format("{0}/{1}", itemPath, name), ParentID = parentID, Name = name, MasterID = Guid.Empty.ToString(), TemplateID = TemplateIdResolver.Instance.GetTemplateId(templatePath), TemplateName = SitecoreUtils.GetTemplateName(templatePath) }; syncItem.AddVersion(_config.BuildSyncVersion()); return(syncItem); }
/// <summary> /// Builds the version. /// </summary> /// <param name="item">The item.</param> /// <param name="version">The version.</param> private static void BuildVersion(SyncItem item, Item version) { SyncVersion syncVersion = item.AddVersion(version.Language.ToString(), version.Version.ToString(), version.Statistics.Revision); if (syncVersion == null) { return; } version.Fields.ReadAll(); version.Fields.Sort(); foreach (Field field in version.Fields) { if (TemplateManager.GetTemplate(version).GetField(field.ID) != null && !field.Shared) { string fieldValue = GetFieldValue(field); if (fieldValue != null) { syncVersion.AddField(field.ID.ToString(), field.Name, field.Key, fieldValue, true); } } } }
protected override SyncItem GetItem(FileInfo itemFile, Func <IItemData, bool> mustMatch) { var formatter = new YamlSerializationFormatter(null, null); //Checking path is a template, Helix structure means have to traverse more directories bringing in serialized roles and other yml files. if (!itemFile.FullName.Contains(@"\serialization\Templates")) { return(null); } SyncItem syncItem = null; using (StreamReader sr = new StreamReader(itemFile.FullName)) { try { IItemData item = formatter.ReadSerializedItem(sr.BaseStream, itemFile.Name); if (item == null || (mustMatch != null && !mustMatch(item))) { return(null); } syncItem = new SyncItem() { Name = item.Name, BranchId = new ID(item.BranchId).ToString(), DatabaseName = item.DatabaseName, ID = new ID(item.Id).ToString(), ItemPath = item.Path, TemplateID = new ID(item.TemplateId).ToString(), ParentID = new ID(item.ParentId).ToString() }; foreach (var version in item.Versions) { var syncVersion = syncItem.AddVersion(version.Language.Name, version.VersionNumber.ToString(), version.VersionNumber.ToString()); foreach (var field in version.Fields) { syncVersion.AddField(new ID(field.FieldId).ToString(), field.NameHint, field.NameHint, field.Value, true); } } foreach (var sharedField in item.SharedFields) { syncItem.AddSharedField(new ID(sharedField.FieldId).ToString(), sharedField.NameHint, sharedField.NameHint, sharedField.Value, true); } foreach (var unversionedField in item.UnversionedFields) { foreach (var version in syncItem.Versions.Where(v => v.Language == unversionedField.Language.Name)) { foreach (var itemFieldValue in unversionedField.Fields) { version.AddField(new ID(itemFieldValue.FieldId).ToString(), itemFieldValue.NameHint, itemFieldValue.NameHint, itemFieldValue.Value, true); } } } } catch (Exception ex) { throw new Exception(string.Format("Unable to deserialize '{0}'", itemFile.FullName), ex); } } return(syncItem); }
/// <summary> /// Loads an item as defined in XML from the package. /// </summary> /// <param name="document"></param> /// <returns></returns> private static SyncItem LoadItem(XmlDocument document) { SyncItem loadedItem = new SyncItem(); XmlNode itemNode = document.DocumentElement; loadedItem.ID = XmlUtil.GetAttribute("id", itemNode); loadedItem.Name = XmlUtil.GetAttribute("name", itemNode); loadedItem.ParentID = XmlUtil.GetAttribute("parentid", itemNode); loadedItem.TemplateID = XmlUtil.GetAttribute("tid", itemNode); loadedItem.MasterID = XmlUtil.GetAttribute("mid", itemNode); loadedItem.BranchId = XmlUtil.GetAttribute("bid", itemNode); loadedItem.TemplateName = XmlUtil.GetAttribute("template", itemNode); SyncVersion loadedVersion = loadedItem.AddVersion( XmlUtil.GetAttribute("language", itemNode), XmlUtil.GetAttribute("version", itemNode), string.Empty); foreach (XmlNode node in itemNode.SelectNodes("fields/field")) { XmlNode content = node.SelectSingleNode("content"); loadedVersion.AddField( XmlUtil.GetAttribute("tfid", node), XmlUtil.GetAttribute("key", node), XmlUtil.GetAttribute("key", node), content != null ? XmlUtil.GetValue(content) : null, content != null); } return loadedItem; }
protected override List <SyncItem> GetAllItems(DirectoryInfo folder, string db, string[] includePaths) { var formatter = new YamlSerializationFormatter(null, null); List <SyncItem> result = new List <SyncItem>(); foreach (FileInfo itemFile in folder.GetFiles("*.yml", SearchOption.AllDirectories)) { using (StreamReader sr = new StreamReader(itemFile.FullName)) { try { var item = formatter.ReadSerializedItem(sr.BaseStream, itemFile.Name); if (item == null || !includePaths.Any(p => item.Path.StartsWith(p))) { continue; } var syncItem = new SyncItem() { Name = item.Name, BranchId = new ID(item.BranchId).ToString(), DatabaseName = item.DatabaseName, ID = new ID(item.Id).ToString(), ItemPath = item.Path, TemplateID = new ID(item.TemplateId).ToString(), ParentID = new ID(item.ParentId).ToString() }; foreach (var version in item.Versions) { var syncVersion = syncItem.AddVersion(version.Language.Name, version.VersionNumber.ToString(), version.VersionNumber.ToString()); foreach (var field in version.Fields) { syncVersion.AddField(new ID(field.FieldId).ToString(), field.NameHint, field.NameHint, field.Value, true); } } foreach (var sharedField in item.SharedFields) { syncItem.AddSharedField(new ID(sharedField.FieldId).ToString(), sharedField.NameHint, sharedField.NameHint, sharedField.Value, true); } foreach (var unversionedField in item.UnversionedFields) { foreach (var version in syncItem.Versions.Where(v => v.Language == unversionedField.Language.Name)) { foreach (var itemFieldValue in unversionedField.Fields) { version.AddField(new ID(itemFieldValue.FieldId).ToString(), itemFieldValue.NameHint, itemFieldValue.NameHint, itemFieldValue.Value, true); } } } result.Add(syncItem); } catch (Exception ex) { throw new Exception(string.Format("Unable to deserialize '{0}'", itemFile.FullName), ex); } } } return(result); }
private SyncItem CreateSyncItem(string name, string database, string itemPath, string parentID, string templatePath) { SyncItem syncItem = new SyncItem { ID = MainUtil.GetNewID(), DatabaseName = database, ItemPath = String.Format("{0}/{1}", itemPath, name), ParentID = parentID, Name = name, MasterID = Guid.Empty.ToString(), TemplateID = TemplateIdResolver.Instance.GetTemplateId(templatePath), TemplateName = SitecoreUtils.GetTemplateName(templatePath) }; syncItem.AddVersion(_config.BuildSyncVersion()); return syncItem; }