Exemplo n.º 1
0
 public static void AppendEntityReferences(this XElement element, Eav.Entity entity, Attribute attribute)
 {
     var entityGuids = attribute.ToSIC_EAV_EntityRelationships.Where(rel => rel.ParentEntityID == entity.EntityID)
                                                              .Select(rel => rel.ChildEntity.EntityGUID);
     var entityGuidsString = string.Join(",", entityGuids);
     element.Append(attribute.StaticName, entityGuidsString);
 }
Exemplo n.º 2
0
        /// <summary>
        /// Append an element to this. The element will get the name of the attribute, and if possible the value will 
        /// be referenced to another language (for example [ref(en-US,ro)].
        /// </summary>
        public static void AppendValueReferenced(this XElement element, Eav.Entity entity, Attribute attribute, string language, string languageFallback, IEnumerable<string> languageScope, bool referenceParentLanguagesOnly, ResourceReferenceExport resourceReferenceOption)
        {
            var valueName = attribute.StaticName;
            var value = entity.GetAttributeValue(attribute, language);
            if (value == null)
            {
                element.Append(valueName, "[]");
                return;
            }

            var valueLanguage = value.ValuesDimensions.Select(reference => reference.Dimension.ExternalKey)
                                         .FirstOrDefault(l => l == language); // value.GetLanguage(language);
            if (valueLanguage == null)
            {   // If no language is found, serialize the plain value
                element.AppendValue(valueName, value, resourceReferenceOption);
                return;
            }

            var valueLanguagesReferenced = value.GetLanguagesReferenced(language, true)
                                                .OrderBy(lang => lang != languageFallback)
                                                .ThenBy(lan => lan);;
            if (valueLanguagesReferenced.Count() == 0)
            {   // If the value is a head value, serialize the plain value
                element.AppendValue(valueName, value, resourceReferenceOption);
                return;
            }

            var valueLanguageReferenced = default(string);
            var valueLanguageReadOnly = value.IsLanguageReadOnly(language);
            if (referenceParentLanguagesOnly)
            {
                valueLanguageReferenced = valueLanguagesReferenced.FirstOrDefault
                    (
                        lang => languageScope.IndexOf(lang) < languageScope.IndexOf(language)
                    );
            }
            else if (valueLanguageReadOnly)
            {   // If one language is serialized, do not serialize read-write values
                // as references
                valueLanguageReferenced = valueLanguagesReferenced.First();
            }

            if (valueLanguageReferenced == null)
            {
                element.AppendValue(valueName, value, resourceReferenceOption);
                return;
            }

            element.Append(valueName, string.Format("[ref({0},{1})]", valueLanguageReferenced, valueLanguageReadOnly ? "ro" : "rw"));
        }
Exemplo n.º 3
0
 /// <summary>
 /// Append an element to this. If the attribute is named xxx and the value is 4711 in the language specified, 
 /// the element appended will be <xxx>4711</xxx>. File and page references can be resolved optionally.
 /// </summary>
 public static void AppendValueResolved(this XElement element, Eav.Entity entity, Attribute attribute, string language, string languageFallback, ResourceReferenceExport resourceReferenceOption)
 {
     var valueName = attribute.StaticName;
     var value = entity.GetAttributeValue(attribute, language, languageFallback);
     element.AppendValue(valueName, value, resourceReferenceOption);
 }