private static void WriteField([NotNull] YamlTextWriter output, [NotNull] Field field)
        {
            output.WriteStartElement("ID", "\"" + field.FieldId.ToString("D") + "\"");
            output.WriteAttributeString("Hint", field.FieldName);

            var type = field.TemplateField.Type;

            if (string.Equals(type, "attachment", StringComparison.OrdinalIgnoreCase))
            {
                var mediaFile = field.Item.Project.Files.OfType <MediaFile>().FirstOrDefault(f => f.MediaItemUri == field.Item.Uri);
                if (mediaFile != null)
                {
                    // todo: use IFileSystemService
                    var bytes = File.ReadAllBytes(mediaFile.Snapshot.SourceFile.AbsoluteFileName);
                    var value = Convert.ToBase64String(bytes);

                    output.WriteAttributeString("BlobID", "\"" + Guid.Parse(field.CompiledValue).ToString("D") + "\"");
                    output.WriteAttributeString("Value", value);

                    return;
                }
            }

            if (!string.Equals(type, "text", StringComparison.OrdinalIgnoreCase) && !string.Equals(type, "single-line text", StringComparison.OrdinalIgnoreCase))
            {
                output.WriteAttributeString("Type", type);
            }

            output.WriteAttributeString("Value", field.CompiledValue);
            output.WriteEndElement();
        }
Exemplo n.º 2
0
        private void ExportTemplate(YamlTextWriter output, Template template)
        {
            // todo: __Standard Values

            output.WriteStartElement("Template", template.Name);
            output.WriteAttributeString("Id", template.ID.ToString());
            output.WriteAttributeStringIf("Icon", template.Icon);
            output.WriteAttributeStringIf("BaseTemplates", string.Join("|", template.BaseIDs.Select(id => id.ToString())));

            foreach (var templateSection in template.GetSections())
            {
                if (templateSection.Name == "Section")
                {
                    output.WriteStartElement("Section", templateSection.Name);
                }
                else
                {
                    output.WriteStartElement(templateSection.Name);
                }
                output.WriteAttributeString("Id", templateSection.ID.ToString());

                foreach (var templateSectionField in templateSection.GetFields())
                {
                    if (templateSectionField.Name == "Field")
                    {
                        output.WriteStartElement("Field", templateSectionField.Name);
                    }
                    else
                    {
                        output.WriteStartElement(templateSectionField.Name);
                    }

                    output.WriteAttributeString("Id", templateSectionField.ID.ToString());
                    output.WriteAttributeStringIf("Type", templateSectionField.Type);
                    output.WriteAttributeStringIf("Source", templateSectionField.Source);
                    output.WriteAttributeString("SortOrder", templateSectionField.Sortorder.ToString());
                    output.WriteAttributeStringIf("Icon", templateSectionField.Icon);

                    if (templateSectionField.IsShared)
                    {
                        output.WriteAttributeStringIf("Sharing", "Shared");
                    }
                    else if (templateSectionField.IsUnversioned)
                    {
                        output.WriteAttributeStringIf("Sharing", "Unversioned");
                    }

                    output.WriteEndElement();
                }

                output.WriteEndElement();
            }

            output.WriteEndElement();
        }
        private static void WriteVersion([NotNull] YamlTextWriter output)
        {
            output.WriteStartElement("Version", "1");
            output.WriteAttributeString("Fields");

            output.WriteStartElement("ID", Constants.Fields.CreatedBy.ToString("D"));
            output.WriteAttributeString("Hint", "__Created by");
            output.WriteAttributeString("Value", "sitecore\\admin");
            output.WriteEndElement();

            output.WriteEndElement();
        }
Exemplo n.º 4
0
        private void Export(YamlTextWriter output, Item item, Language[] languages, IEnumerable <string> duplicateTemplateNames, bool isRoot)
        {
            if (item.TemplateID == TemplateIDs.Template)
            {
                var template = TemplateManager.GetTemplate(item.ID, item.Database);
                if (template != null)
                {
                    ExportTemplate(output, template);
                }

                return;
            }

            output.WriteStartElement(item.TemplateName, item.Name);
            if (duplicateTemplateNames.Contains(item.TemplateName))
            {
                output.WriteAttributeString("TemplateName", item.Database.GetItem(item.TemplateID).Paths.Path);
            }

            output.WriteAttributeString("Id", item.ID.ToString());

            if (isRoot)
            {
                output.WriteAttributeString("ItemPath", item.Paths.Path);
                output.WriteAttributeString("Database", item.Database.Name);
            }

            item.Fields.ReadAll();

            var versionedItems = item.Versions.GetVersions(true);
            var versions       = new List <Tuple <Language, List <Field>, List <Tuple <int, List <Field> > > > >();
            var sharedFields   = item.Fields.Where(f => !f.Name.StartsWith("__") && f.Shared && !string.IsNullOrEmpty(f.Value)).ToArray();

            foreach (var language in languages)
            {
                var unversionedItem = versionedItems.FirstOrDefault(i => i.Language == language);
                if (unversionedItem == null)
                {
                    continue;
                }

                unversionedItem.Fields.ReadAll();

                var unversionedFields = unversionedItem.Fields.Where(f => !f.Name.StartsWith("__") && !f.Shared && f.Unversioned && !string.IsNullOrEmpty(f.Value)).ToList();

                var versionedFields = new List <Tuple <int, List <Field> > >();
                foreach (var versionedItem in versionedItems.Where(i => i.Language == language))
                {
                    versionedItem.Fields.ReadAll();

                    var flds = versionedItem.Fields.Where(f => !f.Name.StartsWith("__") && !f.Shared && !f.Unversioned && !string.IsNullOrEmpty(f.Value)).ToList();
                    if (flds.Any())
                    {
                        var tuple = new Tuple <int, List <Field> >(versionedItem.Version.Number, flds);
                        versionedFields.Add(tuple);
                    }
                }

                if (unversionedFields.Any() || versionedFields.Any())
                {
                    versions.Add(new Tuple <Language, List <Field>, List <Tuple <int, List <Field> > > >(language, unversionedFields, versionedFields));
                }
            }

            if (versions.Any() || sharedFields.Any())
            {
                output.WriteStartElement("Fields");

                foreach (var field in sharedFields.OrderBy(f => f.Name))
                {
                    var value = GetValue(field);
                    output.WriteAttributeStringIf(field.Name, value);
                }

                if (versions.Any())
                {
                    foreach (var language in versions.OrderBy(l => l.Item1.Name))
                    {
                        output.WriteStartElement(language.Item1.Name);

                        foreach (var field in language.Item2.OrderBy(f => f.Name))
                        {
                            var value = GetValue(field);
                            output.WriteAttributeStringIf(field.Name, value);
                        }

                        foreach (var versionedItem in language.Item3.OrderBy(t => t.Item1))
                        {
                            output.WriteStartElement(versionedItem.Item1.ToString());

                            foreach (var field in versionedItem.Item2.OrderBy(f => f.Name))
                            {
                                var value = GetValue(field);
                                output.WriteAttributeStringIf(field.Name, value);
                            }

                            output.WriteEndElement();
                        }

                        output.WriteEndElement();
                    }
                }

                output.WriteEndElement();
            }

            if (item.Children.Any())
            {
                output.WriteStartElement("Items");

                foreach (Item child in item.Children)
                {
                    Export(output, child, languages, duplicateTemplateNames, false);
                }

                output.WriteEndElement();
            }

            output.WriteEndElement();
        }
        public static void WriteAsUnicornYaml([NotNull] this Item item, [NotNull] TextWriter writer)
        {
            var parent = item.GetParent();

            var output = new YamlTextWriter(writer);

            output.Indentation = 2;

            output.WriteLine("---");
            output.WriteAttributeString("ID", "\"" + item.Uri.Guid.ToString("D") + "\"");
            if (parent != null)
            {
                output.WriteAttributeString("Parent", "\"" + parent.Uri.Guid.ToString("D") + "\"");
            }

            output.WriteAttributeString("Template", "\"" + item.Template.Uri.Guid.ToString("D") + "\"");
            output.WriteAttributeString("Path", item.ItemIdOrPath);
            output.WriteAttributeString("DB", item.DatabaseName);

            var sharedFields      = item.Fields.Where(f => f.TemplateField.Shared).OrderBy(f => f.FieldName);
            var unversionedFields = item.Fields.Where(f => !f.TemplateField.Shared && f.TemplateField.Unversioned).OrderBy(f => f.FieldName);
            var versionedFields   = item.Fields.Where(f => !f.TemplateField.Shared && !f.TemplateField.Unversioned).OrderBy(f => f.FieldName);

            if (sharedFields.Any())
            {
                output.WriteAttributeString("SharedFields");
                foreach (var field in sharedFields)
                {
                    WriteField(output, field);
                }
            }

            output.WriteAttributeString("Languages");

            if (unversionedFields.Any() || versionedFields.Any())
            {
                var languages = item.Versions.GetLanguages().OrderBy(l => l.LanguageName).ToArray();

                foreach (var language in languages)
                {
                    var unversionedLanguageFields = unversionedFields.Where(f => f.Language == language).ToArray();
                    var versionedLanguageFields   = versionedFields.Where(f => f.Language == language).ToArray();
                    if (!unversionedLanguageFields.Any() && !versionedLanguageFields.Any())
                    {
                        continue;
                    }

                    output.WriteStartElement("Language", language.LanguageName);
                    output.WriteAttributeString("Fields");

                    foreach (var field in unversionedLanguageFields.OrderBy(f => f.FieldName))
                    {
                        WriteField(output, field);
                    }

                    output.WriteAttributeString("Versions");

                    var versions = versionedLanguageFields.Select(f => f.Version).Distinct().OrderByDescending(v => v.Number).ToArray();
                    if (versions.Any())
                    {
                        foreach (var version in versions.OrderByDescending(v => v.Number))
                        {
                            output.WriteStartElement("Version", version.Number.ToString());
                            output.WriteAttributeString("Fields");

                            foreach (var field in versionedLanguageFields.Where(f => f.Version == version).OrderBy(f => f.FieldName))
                            {
                                WriteField(output, field);
                            }

                            output.WriteEndElement();
                        }
                    }
                    else
                    {
                        WriteVersion(output);
                    }

                    output.WriteEndElement();
                }
            }
            else
            {
                output.WriteStartElement("Language", item.Database.Languages.First().LanguageName);
                output.WriteAttributeString("Fields");

                output.WriteAttributeString("Versions");
                WriteVersion(output);

                output.WriteEndElement();
            }
        }