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(); }
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(); }
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(); } }