public override IEnumerable List(FilterOptions filter) { if (!typeof(EntityViewModel).IsAssignableFrom(typeof(TModel))) { return(base.List(filter)); } var map = EntityHelper.GetObjectMap(typeof(TModel)); var culture = StrixPlatform.CurrentCultureCode.ToLower(); IQueryable query = this.Manager.Query(map.ContentType).Where("Culture.ToLower().Equals(@0) AND IsCurrentVersion", culture); var queryEvent = new PrepareQueryEvent(query, filter); StrixPlatform.RaiseEvent(queryEvent); query = queryEvent.Query; return(query.Map(map.ListModelType)); }
public SearchResult Search(FilterOptions options) { if (options == null) { options = new FilterOptions(); } var culture = StrixPlatform.CurrentCultureCode; var result = new SearchResult(); result.Locators = PageRegistration.ContentLocators; var typesTosearch = EntityHelper.EntityTypes.Where(e => e.Name != typeof(MailContentTemplate).FullName && e.Name != typeof(MailContent).FullName).ToList(); var itemsToSkip = options.PageSize == 1 ? 0 : options.PageSize * (options.Page - 1); // Todo: make configurable. var itemsToGet = options.PageSize == 0 ? 100 : options.PageSize; foreach (var entityType in typesTosearch) { var entryType = EntityHelper.GetEntityType(entityType.Id); var query = this._source.Query(entryType).Where("Culture.Equals(@0) AND IsCurrentVersion", culture); var queryEvent = new PrepareQueryEvent(query, options, false); StrixPlatform.RaiseEvent(queryEvent); query = queryEvent.Query; if (itemsToGet > 0) { if (entryType.Equals(typeof(Html))) { var htmlTypeName = typeof(Html).FullName; var htmlLocators = PageRegistration.ContentLocators.Where(l => l.ContentTypeName == htmlTypeName); var htmlQuery = query.Cast<Html>().Select(h => new { Name = h.Name, Url = h.Entity.Url }).ToList().Select(h => new { Name = h.Name, Url = htmlLocators.Where(l => l.ContentUrl.ToLower() == h.Url.ToLower()).Select(l => l.PageUrl).FirstOrDefault() }); query = htmlQuery.GroupBy(h => h.Url).Select(h => new Html { Name = h.Select(i => i.Url.ToTitleCase()).First(), Entity = new PlatformEntity { Id = Guid.Empty, Url = h.Select(i => i.Url).First() } }).AsQueryable(); } int addedItems = 0; var entries = query.Skip(itemsToSkip).Take(itemsToGet).Select<SearchItem>("new (Entity.Id, Name, Entity.Url)").ToList(); foreach (var entry in entries) { entry.TypeName = entryType.FullName; result.Data.Add(entry); addedItems++; } options.Total = 0; itemsToGet -= addedItems; } var queryCount = query.Count(); itemsToSkip -= queryCount; if (itemsToSkip < 0) { itemsToSkip = 0; } result.Total += queryCount; } return result; }
public SearchResult Search(FilterOptions options) { if (options == null) { options = new FilterOptions(); } var culture = StrixPlatform.CurrentCultureCode; var result = new SearchResult(); result.Locators = PageRegistration.ContentLocators; var typesTosearch = EntityHelper.EntityTypes.Where(e => e.Name != typeof(MailContentTemplate).FullName && e.Name != typeof(MailContent).FullName).ToList(); var itemsToSkip = options.PageSize == 1 ? 0 : options.PageSize * (options.Page - 1); // Todo: make configurable. var itemsToGet = options.PageSize == 0 ? 100 : options.PageSize; foreach (var entityType in typesTosearch) { var entryType = EntityHelper.GetEntityType(entityType.Id); var query = this._source.Query(entryType).Where("Culture.Equals(@0) AND IsCurrentVersion", culture); var queryEvent = new PrepareQueryEvent(query, options, false); StrixPlatform.RaiseEvent(queryEvent); query = queryEvent.Query; if (itemsToGet > 0) { if (entryType.Equals(typeof(Html))) { var htmlTypeName = typeof(Html).FullName; var htmlLocators = PageRegistration.ContentLocators.Where(l => l.ContentTypeName == htmlTypeName); var htmlQuery = query.Cast <Html>().Select(h => new { Name = h.Name, Url = h.Entity.Url }).ToList().Select(h => new { Name = h.Name, Url = htmlLocators.Where(l => l.ContentUrl.ToLower() == h.Url.ToLower()).Select(l => l.PageUrl).FirstOrDefault() }); query = htmlQuery.GroupBy(h => h.Url).Select(h => new Html { Name = h.Select(i => i.Url.ToTitleCase()).First(), Entity = new PlatformEntity { Id = Guid.Empty, Url = h.Select(i => i.Url).First() } }).AsQueryable(); } int addedItems = 0; var entries = query.Skip(itemsToSkip).Take(itemsToGet).Select <SearchItem>("new (Entity.Id, Name, Entity.Url)").ToList(); foreach (var entry in entries) { entry.TypeName = entryType.FullName; result.Data.Add(entry); addedItems++; } options.Total = 0; itemsToGet -= addedItems; } var queryCount = query.Count(); itemsToSkip -= queryCount; if (itemsToSkip < 0) { itemsToSkip = 0; } result.Total += queryCount; } return(result); }