Exemplo n.º 1
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();
        }
Exemplo n.º 2
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();
        }