public IEnumerable <IPermissionApplication> GetPermissions(SearchCustomEntitySummariesQuery query) { var definition = _customEntityDefinitionRepository.GetByCode(query.CustomEntityDefinitionCode); EntityNotFoundException.ThrowIfNull(definition, query.CustomEntityDefinitionCode); yield return(new CustomEntityReadPermission(definition)); }
public async Task <PagedQueryResult <CustomEntitySummary> > ExecuteAsync(SearchCustomEntitySummariesQuery query, IExecutionContext executionContext) { var definition = _customEntityDefinitionRepository.GetByCode(query.CustomEntityDefinitionCode); EntityNotFoundException.ThrowIfNull(definition, query.CustomEntityDefinitionCode); // Get Main Query var dbPagedResult = await RunQueryAsync(query, definition, executionContext); var mappedResult = await _customEntitySummaryMapper.MapAsync(dbPagedResult.Items, executionContext); return(dbPagedResult.ChangeType(mappedResult)); }
public async Task <PagedQueryResult <CustomEntitySummary> > ExecuteAsync(SearchCustomEntitySummariesQuery query, IExecutionContext executionContext) { var definition = _queryExecutor.GetById <CustomEntityDefinitionSummary>(query.CustomEntityDefinitionCode); EntityNotFoundException.ThrowIfNull(definition, query.CustomEntityDefinitionCode); // Get Query var dbQuery = GetQuery(query, definition); // Execute Query var dbPagedResult = dbQuery.ToPagedResult(query); var routingsQuery = new GetPageRoutingInfoByCustomEntityIdRangeQuery(dbPagedResult.Items.Select(e => e.CustomEntityId)); var routings = await _queryExecutor.ExecuteAsync(routingsQuery); var allLocales = (await _queryExecutor.GetAllAsync <ActiveLocale>()).ToDictionary(l => l.LocaleId); // Map Items var entities = new List <CustomEntitySummary>(dbPagedResult.Items.Length); foreach (var dbVersion in dbPagedResult.Items) { PageRoutingInfo detailsRouting = null; if (routings.ContainsKey(dbVersion.CustomEntityId)) { detailsRouting = routings[dbVersion.CustomEntityId].FirstOrDefault(r => r.CustomEntityRouteRule != null); } var entity = Mapper.Map <CustomEntitySummary>(dbVersion); if (dbVersion.LocaleId.HasValue) { entity.Locale = allLocales.GetOrDefault(dbVersion.LocaleId.Value); EntityNotFoundException.ThrowIfNull(entity.Locale, dbVersion.LocaleId.Value); } if (detailsRouting != null) { entity.FullPath = detailsRouting.CustomEntityRouteRule.MakeUrl(detailsRouting.PageRoute, detailsRouting.CustomEntityRoute); } entity.Model = (ICustomEntityVersionDataModel)_dbUnstructuredDataSerializer.Deserialize(dbVersion.SerializedData, definition.DataModelType); entity.AuditData.UpdateDate = dbVersion.VersionAuditData.CreateDate; entity.AuditData.Updater = dbVersion.VersionAuditData.Creator; entities.Add(entity); } return(dbPagedResult.ChangeType(entities)); }
private Task <PagedQueryResult <CustomEntityPublishStatusQuery> > RunQueryAsync( SearchCustomEntitySummariesQuery query, ICustomEntityDefinition definition, IExecutionContext executionContext ) { var dbQuery = _dbContext .CustomEntityPublishStatusQueries .AsNoTracking() .Include(v => v.CustomEntityVersion) .ThenInclude(v => v.Creator) .Include(v => v.CustomEntity) .ThenInclude(c => c.Creator) .FilterActive() .FilterByStatus(PublishStatusQuery.Latest, executionContext.ExecutionDate) .FilterByCustomEntityDefinitionCode(query.CustomEntityDefinitionCode); // Filter by locale if (query.LocaleId > 0 && definition.HasLocale) { dbQuery = dbQuery.Where(p => p.CustomEntity.LocaleId == query.LocaleId); } else if (query.InterpretNullLocaleAsNone) { dbQuery = dbQuery.Where(p => !p.CustomEntity.LocaleId.HasValue); } if (!string.IsNullOrWhiteSpace(query.Text)) { dbQuery = dbQuery .Where(e => e.CustomEntityVersion.Title.Contains(query.Text) || e.CustomEntityVersion.SerializedData.Contains(query.Text)) .OrderByDescending(e => e.CustomEntityVersion.Title == query.Text) .ThenByDescending(e => e.CustomEntityVersion.Title.Contains(query.Text)); } else { dbQuery = dbQuery .SortBy(definition, CustomEntityQuerySortType.Default); } var dbPagedResult = dbQuery.ToPagedResultAsync(query); return(dbPagedResult); }
private IQueryable <CustomEntitySummaryQueryModel> GetQuery(SearchCustomEntitySummariesQuery query, CustomEntityDefinitionSummary definition) { var dbQuery = _dbContext .CustomEntityVersions .AsNoTracking() .Where(e => e.CustomEntity.CustomEntityDefinitionCode == query.CustomEntityDefinitionCode) .Where(v => v.WorkFlowStatusId == (int)WorkFlowStatus.Draft || v.WorkFlowStatusId == (int)WorkFlowStatus.Published) .GroupBy(e => e.CustomEntityId, (key, g) => g.OrderByDescending(v => v.WorkFlowStatusId == (int)WorkFlowStatus.Draft).FirstOrDefault()); // Filter by locale if (query.LocaleId > 0) { dbQuery = dbQuery.Where(p => p.CustomEntity.LocaleId == query.LocaleId); } else if (query.InterpretNullLocaleAsNone) { dbQuery = dbQuery.Where(p => !p.CustomEntity.LocaleId.HasValue); } if (!string.IsNullOrWhiteSpace(query.Text)) { dbQuery = dbQuery .Where(e => e.Title.Contains(query.Text) || e.SerializedData.Contains(query.Text)) .OrderByDescending(e => e.Title == query.Text) .ThenByDescending(e => e.Title.Contains(query.Text)); } else if (definition.Ordering != CustomEntityOrdering.None) { dbQuery = dbQuery .OrderBy(e => e.CustomEntity.Locale.IETFLanguageTag) .ThenBy(e => !e.CustomEntity.Ordering.HasValue) .ThenBy(e => e.CustomEntity.Ordering) .ThenBy(e => e.Title); } else { dbQuery = dbQuery .OrderBy(e => e.CustomEntity.Locale.IETFLanguageTag) .ThenBy(e => e.Title); } return(dbQuery.ProjectTo <CustomEntitySummaryQueryModel>()); }
/// <summary> /// A workflow non-specifc search of custom entities which returns basic /// custom entity information with workflow status and model data for the /// latest version. Designed to be used in the admin panel and not in a /// version-sensitive context sach as a public webpage. /// </summary> /// <param name="query">Query parameters.</param> /// <param name="executionContext">Optional execution context to use when executing the query. Useful if you need to temporarily elevate your permission level.</param> public Task <PagedQueryResult <CustomEntitySummary> > SearchCustomEntitySummariesAsync(SearchCustomEntitySummariesQuery query, IExecutionContext executionContext = null) { return(_queryExecutor.ExecuteAsync(query, executionContext)); }
public Task <PagedQueryResult <CustomEntitySummary> > AsSummariesAsync(SearchCustomEntitySummariesQuery query) { return(ExtendableContentRepository.ExecuteQueryAsync(query)); }
public IContentRepositoryQueryContext <PagedQueryResult <CustomEntitySummary> > AsSummaries(SearchCustomEntitySummariesQuery query) { return(ContentRepositoryQueryContextFactory.Create(query, ExtendableContentRepository)); }