public void ApplyFilter(SortCriterionContext context, PropertyInfo property) { bool ascending = Boolean.Parse(Convert.ToString(context.State.Sort)); context.Query = ascending ? context.Query.OrderBy(alias => alias.ContentPartRecord(property.DeclaringType), x => x.Asc(property.Name)) : context.Query.OrderBy(alias => alias.ContentPartRecord(property.DeclaringType), x => x.Desc(property.Name)); }
public LocalizedString DisplaySortCriterion(SortCriterionContext context, ContentPartDefinition part, ContentPartFieldDefinition fieldDefinition) { bool ascending = (bool)context.State.Sort; return ascending ? T("Ordered by field {0}, ascending", fieldDefinition.Name) : T("Ordered by field {0}, descending", fieldDefinition.Name); }
public LocalizedString DisplaySortCriterion(SortCriterionContext context, string propertyName) { bool ascending = Boolean.Parse(Convert.ToString(context.State.Sort)); if (ascending) { return T("Ordered by {0}, ascending", propertyName); } return T("Ordered by {0}, descending", propertyName); }
public void ApplySortCriterion(SortCriterionContext context, int sortId, string sortName) { Action<IHqlExpressionFactory> predicate = y => y.Eq("CustomSortRecord.Id", sortId); Action<IAliasFactory> relationship = x => x.ContentPartRecord<CustomSortOrderRecord>("left outer join", predicate); context.Query = context.Query.Join(relationship); context.Query = context.Query.OrderBy(relationship, x => x.Desc("SortOrder")); }
public void ApplySortCriterion(SortCriterionContext context, IFieldTypeEditor fieldTypeEditor, string storageName, Type storageType, ContentPartDefinition part, ContentPartFieldDefinition field) { bool ascending = Convert.ToBoolean(context.State.Sort); var propertyName = String.Join(".", part.Name, field.Name, storageName ?? ""); // use an alias with the join so that two filters on the same Field Type wont collide var relationship = fieldTypeEditor.GetFilterRelationship(propertyName.ToSafeName()); // generate the predicate based on the editor which has been used Action<IHqlExpressionFactory> predicate = y => y.Eq("PropertyName", propertyName); // combines the predicate with a filter on the specific property name of the storage, as implemented in FieldIndexService // apply where clause context.Query = context.Query.Where(relationship, predicate); // apply sort context.Query = ascending ? context.Query.OrderBy(relationship, x => x.Asc("Value")) : context.Query.OrderBy(relationship, x => x.Desc("Value")); }
public LocalizedString DisplaySortCriterion(SortCriterionContext context, string sortName) { return T("Ordered by {0}", sortName); }
public IEnumerable<ContentItem> GetContentItems(int queryId, int skip = 0, int count = 0) { var availableSortCriteria = DescribeSortCriteria().ToList(); var queryRecord = _queryRepository.Get(queryId); if(queryRecord == null) { throw new ArgumentException("queryId"); } var contentItems = new List<ContentItem>(); // aggregate the result for each group query foreach(var contentQuery in GetContentQueries(queryRecord, queryRecord.SortCriteria)) { contentItems.AddRange(contentQuery.Slice(skip, count)); } if(queryRecord.FilterGroups.Count <= 1) { return contentItems; } // re-executing the sorting with the cumulated groups var ids = contentItems.Select(c => c.Id).ToArray(); var groupQuery = _contentManager.HqlQuery().Where(alias => alias.Named("ci"), x => x.InG("Id", ids)); // iterate over each sort criteria to apply the alterations to the query object foreach (var sortCriterion in queryRecord.SortCriteria) { var sortCriterionContext = new SortCriterionContext { Query = groupQuery, State = FormParametersHelper.ToDynamic(sortCriterion.State) }; string category = sortCriterion.Category; string type = sortCriterion.Type; // look for the specific filter component var descriptor = availableSortCriteria.SelectMany(x => x.Descriptors).FirstOrDefault(x => x.Category == category && x.Type == type); // ignore unfound descriptors if (descriptor == null) { continue; } // apply alteration descriptor.Sort(sortCriterionContext); groupQuery = sortCriterionContext.Query; } return groupQuery.Slice(skip, count); }
public IEnumerable<IHqlQuery> GetContentQueries(QueryPartRecord queryRecord, IEnumerable<SortCriterionRecord> sortCriteria) { var availableFilters = DescribeFilters().ToList(); var availableSortCriteria = DescribeSortCriteria().ToList(); // pre-executing all groups foreach (var group in queryRecord.FilterGroups) { var contentQuery = _contentManager.HqlQuery().ForVersion(VersionOptions.Published); // iterate over each filter to apply the alterations to the query object foreach (var filter in group.Filters) { var tokenizedState = _tokenizer.Replace(filter.State, new Dictionary<string, object>()); var filterContext = new FilterContext { Query = contentQuery, State = FormParametersHelper.ToDynamic(tokenizedState) }; string category = filter.Category; string type = filter.Type; // look for the specific filter component var descriptor = availableFilters .SelectMany(x => x.Descriptors) .FirstOrDefault(x => x.Category == category && x.Type == type); // ignore unfound descriptors if (descriptor == null) { continue; } // apply alteration descriptor.Filter(filterContext); contentQuery = filterContext.Query; } // iterate over each sort criteria to apply the alterations to the query object foreach (var sortCriterion in sortCriteria) { var sortCriterionContext = new SortCriterionContext { Query = contentQuery, State = FormParametersHelper.ToDynamic(sortCriterion.State) }; string category = sortCriterion.Category; string type = sortCriterion.Type; // look for the specific filter component var descriptor = availableSortCriteria .SelectMany(x => x.Descriptors) .FirstOrDefault(x => x.Category == category && x.Type == type); // ignore unfound descriptors if (descriptor == null) { continue; } // apply alteration descriptor.Sort(sortCriterionContext); contentQuery = sortCriterionContext.Query; } yield return contentQuery; } }