/// <summary> /// Gets the parent ID of an item. /// </summary> /// <param name="itemDefinition">The item definition.</param> /// <param name="context">The context.</param> /// <returns>Sitecore.Data.ID.</returns> public override ID GetParentID(ItemDefinition itemDefinition, CallContext context) { if (!_setupComplete) { return(base.GetParentID(itemDefinition, context)); } var sectionTable = SectionTable.ToList();//prevent "Collection was modified" var section = sectionTable.FirstOrDefault(x => x.SectionId == itemDefinition.ID); if (section != null) { return(section.TemplateId); } var fieldtable = FieldTable.ToList();//prevent "Collection was modified" var field = fieldtable.FirstOrDefault(x => x.FieldId == itemDefinition.ID); if (field != null) { return(field.SectionId); } return(base.GetParentID(itemDefinition, context)); }
/// <summary> /// Gets the fields of a specific item version. /// </summary> /// <param name="itemDefinition">The item.</param> /// <param name="versionUri">The version URI.</param> /// <param name="context">The context.</param> /// <returns>Sitecore.Data.FieldList.</returns> public override FieldList GetItemFields(ItemDefinition itemDefinition, VersionUri versionUri, CallContext context) { if (!_setupComplete) { return(base.GetItemFields(itemDefinition, versionUri, context)); } var fields = new FieldList(); var sectionTable = SectionTable.ToList();//prevent "Collection was modified" var sectionInfo = sectionTable.FirstOrDefault(x => x.SectionId == itemDefinition.ID); if (sectionInfo != null) { GetStandardFields(fields, sectionInfo.SectionSortOrder >= 0 ? sectionInfo.SectionSortOrder : 100); return(fields); } var fieldtable = FieldTable.ToList();//prevent "Collection was modified" var fieldInfo = fieldtable.FirstOrDefault(x => x.FieldId == itemDefinition.ID); if (fieldInfo != null) { GetStandardFields(fields, fieldInfo.FieldSortOrder >= 0 ? fieldInfo.FieldSortOrder : 100); GetFieldFields(fieldInfo, fields); return(fields); } return(base.GetItemFields(itemDefinition, versionUri, context)); }
/// <summary> /// Gets the definition of an item. /// </summary> /// <param name="itemId">The item ID.</param> /// <param name="context">The context.</param> /// <returns>Sitecore.Data.ItemDefinition.</returns> public override ItemDefinition GetItemDefinition(ID itemId, CallContext context) { if (!_setupComplete) { return(base.GetItemDefinition(itemId, context)); } var sectiontable = SectionTable.ToList();//prevent "Collection was modified" var section = sectiontable.FirstOrDefault(x => x.SectionId == itemId); if (section != null) { return(new GlassItemDefinition(itemId, section.Name, SectionTemplateId, ID.Null)); } var fieldtable = FieldTable.ToList();//prevent "Collection was modified" var field = fieldtable.FirstOrDefault(x => x.FieldId == itemId); if (field != null) { return(new GlassItemDefinition(itemId, field.Name, FieldTemplateId, ID.Null)); } return(base.GetItemDefinition(itemId, context)); }
/// <summary> /// Gets the child I ds section. /// </summary> /// <param name="section">The section.</param> /// <param name="context">The context.</param> /// <param name="sqlProvider">The SQL provider.</param> /// <returns> /// IDList. /// </returns> private IDList GetChildIDsSection(SectionInfo section, CallContext context, DataProvider sqlProvider) { var config = TypeConfigurations.First(x => x.Value.TemplateId == section.TemplateId); var cls = config.Value; var fields = cls.Properties.OfType <SitecoreFieldConfiguration>().Where(f => f.CodeFirst); IDList fieldIds = new IDList(); var interfaces = cls.Type.GetInterfaces().Where(i => System.Attribute.IsDefined(i, typeof(Glass.Mapper.Sc.Configuration.Attributes.SitecoreTypeAttribute))); foreach (var field in fields) { //fix: added check on interfaces, if field resides on interface then skip here var propertyFromInterface = interfaces.FirstOrDefault(inter => inter.GetProperty(field.PropertyInfo.Name) != null && inter.GetProperty(field.PropertyInfo.Name).GetCustomAttributes(typeof(SitecoreFieldAttribute), false).Any()); if (field.PropertyInfo.DeclaringType != cls.Type || propertyFromInterface != null) { continue; } if (field.CodeFirst && !ID.IsNullOrEmpty(field.FieldId) && ((field.SectionName == section.Name) || string.IsNullOrEmpty(field.SectionName) && section.Name == "Data")) { var fieldtable = FieldTable.ToList();//prevent "Collection was modified" var record = fieldtable.FirstOrDefault(x => x.FieldId == field.FieldId); //test if the fields exists in the database: if so, we're using codefirst now, so remove it. var existing = sqlProvider.GetItemDefinition(field.FieldId, context); if (existing != null) { using (new SecurityDisabler()) { if (DisableItemHandlerWhenDeletingFields) { using (new DisableItemHandler()) sqlProvider.DeleteItem(existing, context); } else { sqlProvider.DeleteItem(existing, context); } } } if (record == null) { string fieldName = field.FieldName.IsNullOrEmpty() ? field.PropertyInfo.Name : field.FieldName; record = new FieldInfo(field.FieldId, section.SectionId, fieldName, field.FieldType, field.CustomFieldType, field.FieldSource, field.FieldTitle, field.IsShared, field.IsUnversioned, field.FieldSortOrder, field.ValidationRegularExpression, field.ValidationErrorText, field.IsRequired); if (field.FieldValueConfigs != null && field.FieldValueConfigs.Any()) { foreach (var ffv in field.FieldValueConfigs) { record.FieldFieldValues.Add(ffv.FieldId, ffv.FieldValue); } } } fieldIds.Add(record.FieldId); FieldTable = FieldTable.Add(record); } } return(fieldIds); }