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));
        }
예제 #3
0
        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);
        }
예제 #5
0
        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>());
        }
예제 #6
0
 /// <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));
 }