mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2026-02-09 09:16:41 +08:00
Implementing deep cloning for QueryPart + code styling in QueryPartDriver
This commit is contained in:
@@ -126,7 +126,8 @@ namespace Orchard.Projections.Drivers {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
context.ImportAttribute(part.PartDefinition.Name, "VersionScope", scope => part.VersionScope = (QueryVersionScopeOptions)Enum.Parse(typeof(QueryVersionScopeOptions), scope));
|
context.ImportAttribute(part.PartDefinition.Name, "VersionScope", scope =>
|
||||||
|
part.VersionScope = (QueryVersionScopeOptions)Enum.Parse(typeof(QueryVersionScopeOptions), scope));
|
||||||
|
|
||||||
var queryElement = context.Data.Element(part.PartDefinition.Name);
|
var queryElement = context.Data.Element(part.PartDefinition.Name);
|
||||||
|
|
||||||
@@ -197,7 +198,9 @@ namespace Orchard.Projections.Drivers {
|
|||||||
DisplayType = layout.Attribute("DisplayType").Value,
|
DisplayType = layout.Attribute("DisplayType").Value,
|
||||||
State = state,
|
State = state,
|
||||||
Type = type,
|
Type = type,
|
||||||
GUIdentifier = string.IsNullOrWhiteSpace(layout.Attribute("GUIdentifier").Value) ? Guid.NewGuid().ToString() : layout.Attribute("GUIdentifier").Value,
|
GUIdentifier = string.IsNullOrWhiteSpace(layout.Attribute("GUIdentifier").Value)
|
||||||
|
? Guid.NewGuid().ToString()
|
||||||
|
: layout.Attribute("GUIdentifier").Value,
|
||||||
Properties = layout.Element("Properties").Elements("Property").Select(GetProperty).ToList(),
|
Properties = layout.Element("Properties").Elements("Property").Select(GetProperty).ToList(),
|
||||||
GroupProperty = GetProperty(layout.Element("Group").Element("Property"))
|
GroupProperty = GetProperty(layout.Element("Group").Element("Property"))
|
||||||
};
|
};
|
||||||
@@ -289,9 +292,90 @@ namespace Orchard.Projections.Drivers {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected override void Cloning(QueryPart originalPart, QueryPart clonePart, CloneContentContext context) {
|
protected override void Cloning(QueryPart originalPart, QueryPart clonePart, CloneContentContext context) {
|
||||||
clonePart.Record.SortCriteria = originalPart.SortCriteria;
|
clonePart.VersionScope = originalPart.VersionScope;
|
||||||
clonePart.Record.FilterGroups = originalPart.FilterGroups;
|
|
||||||
clonePart.Record.Layouts = originalPart.Layouts;
|
clonePart.Record.FilterGroups = originalPart.FilterGroups.Select(originalGroup => {
|
||||||
|
var cloneGroup = new FilterGroupRecord {
|
||||||
|
QueryPartRecord = clonePart.Record
|
||||||
|
};
|
||||||
|
|
||||||
|
cloneGroup.Filters = originalGroup.Filters.Select(filter => new FilterRecord {
|
||||||
|
Category = filter.Category,
|
||||||
|
Description = filter.Description,
|
||||||
|
Position = filter.Position,
|
||||||
|
State = filter.State,
|
||||||
|
Type = filter.Type,
|
||||||
|
FilterGroupRecord = cloneGroup
|
||||||
|
}).ToList();
|
||||||
|
|
||||||
|
return cloneGroup;
|
||||||
|
}).ToList();
|
||||||
|
|
||||||
|
clonePart.Record.SortCriteria = originalPart.SortCriteria.Select(sortCriterion => new SortCriterionRecord {
|
||||||
|
Category = sortCriterion.Category,
|
||||||
|
Description = sortCriterion.Description,
|
||||||
|
Position = sortCriterion.Position,
|
||||||
|
State = sortCriterion.State,
|
||||||
|
Type = sortCriterion.Type,
|
||||||
|
QueryPartRecord = clonePart.Record
|
||||||
|
}).ToList();
|
||||||
|
|
||||||
|
clonePart.Record.Layouts = originalPart.Layouts.Select(layout => {
|
||||||
|
var cloneLayout = new LayoutRecord {
|
||||||
|
Category = layout.Category,
|
||||||
|
Description = layout.Description,
|
||||||
|
Display = layout.Display,
|
||||||
|
DisplayType = layout.DisplayType,
|
||||||
|
GUIdentifier = Guid.NewGuid().ToString(),
|
||||||
|
State = layout.State,
|
||||||
|
Type = layout.Type,
|
||||||
|
QueryPartRecord = clonePart.Record
|
||||||
|
};
|
||||||
|
|
||||||
|
cloneLayout.Properties = layout.Properties.Select(property => {
|
||||||
|
var cloneProperty = new PropertyRecord {
|
||||||
|
AddEllipsis = property.AddEllipsis,
|
||||||
|
Category = property.Category,
|
||||||
|
CreateLabel = property.CreateLabel,
|
||||||
|
CustomLabelCss = property.CustomLabelCss,
|
||||||
|
Description = property.Description,
|
||||||
|
CustomLabelTag = property.CustomLabelTag,
|
||||||
|
CustomPropertyCss = property.CustomPropertyCss,
|
||||||
|
CustomPropertyTag = property.CustomPropertyTag,
|
||||||
|
CustomWrapperCss = property.CustomWrapperCss,
|
||||||
|
CustomWrapperTag = property.CustomWrapperTag,
|
||||||
|
CustomizeLabelHtml = property.CustomizeLabelHtml,
|
||||||
|
CustomizePropertyHtml = property.CustomizePropertyHtml,
|
||||||
|
CustomizeWrapperHtml = property.CustomizeWrapperHtml,
|
||||||
|
ExcludeFromDisplay = property.ExcludeFromDisplay,
|
||||||
|
HideEmpty = property.HideEmpty,
|
||||||
|
Label = property.Label,
|
||||||
|
LinkToContent = property.LinkToContent,
|
||||||
|
MaxLength = property.MaxLength,
|
||||||
|
NoResultText = property.NoResultText,
|
||||||
|
Position = property.Position,
|
||||||
|
PreserveLines = property.PreserveLines,
|
||||||
|
RewriteOutputCondition = property.RewriteOutputCondition,
|
||||||
|
RewriteText = property.RewriteText,
|
||||||
|
State = property.State,
|
||||||
|
StripHtmlTags = property.StripHtmlTags,
|
||||||
|
TrimLength = property.TrimLength,
|
||||||
|
TrimOnWordBoundary = property.TrimOnWordBoundary,
|
||||||
|
TrimWhiteSpace = property.TrimWhiteSpace,
|
||||||
|
Type = property.Type,
|
||||||
|
ZeroIsEmpty = property.ZeroIsEmpty,
|
||||||
|
LayoutRecord = cloneLayout
|
||||||
|
};
|
||||||
|
|
||||||
|
if (cloneLayout.GroupProperty == null && layout.GroupProperty == property) {
|
||||||
|
cloneLayout.GroupProperty = cloneProperty;
|
||||||
|
}
|
||||||
|
|
||||||
|
return cloneProperty;
|
||||||
|
}).ToList();
|
||||||
|
|
||||||
|
return cloneLayout;
|
||||||
|
}).ToList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user