/// <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);
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }
Example #6
0
        /// <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;
        }
Example #9
0
        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;
 }