Adding a new interface in order to allow extending content queries. (#7717)

Fixes #6978
This commit is contained in:
GiuseppeMusso-Laser
2017-06-01 22:00:39 +02:00
committed by Sébastien Ros
parent 0fc29a5bce
commit 93fc2e6af0
3 changed files with 23 additions and 1 deletions

View File

@@ -22,22 +22,31 @@ namespace Orchard.ContentManagement {
private ICacheManager _cacheManager;
private ISignals _signals;
private IRepository<ContentTypeRecord> _contentTypeRepository;
private IEnumerable<IGlobalCriteriaProvider> _globalCriteriaList;
public DefaultContentQuery(
IContentManager contentManager,
ITransactionManager transactionManager,
ICacheManager cacheManager,
ISignals signals,
IRepository<ContentTypeRecord> contentTypeRepository) {
IRepository<ContentTypeRecord> contentTypeRepository,
IEnumerable<IGlobalCriteriaProvider> globalCriteriaList) {
_transactionManager = transactionManager;
ContentManager = contentManager;
_cacheManager = cacheManager;
_signals = signals;
_contentTypeRepository = contentTypeRepository;
_globalCriteriaList = globalCriteriaList;
}
public IContentManager ContentManager { get; private set; }
private void BeforeExecuteQuery(ICriteria contentItemVersionCriteria) {
foreach(var criteria in _globalCriteriaList) {
criteria.AddCriteria(contentItemVersionCriteria);
}
}
ISession BindSession() {
if (_session == null)
_session = _transactionManager.GetSession();
@@ -188,6 +197,8 @@ namespace Orchard.ContentManagement {
criteria = criteria.SetMaxResults(count);
}
BeforeExecuteQuery(criteria);
return criteria
.List<ContentItemVersionRecord>()
.Select(x => ContentManager.Get(x.ContentItemRecord.Id, _versionOptions != null && _versionOptions.IsDraftRequired ? _versionOptions : VersionOptions.VersionRecord(x.Id)))
@@ -199,6 +210,7 @@ namespace Orchard.ContentManagement {
criteria.ClearOrders();
criteria.ApplyVersionOptionsRestrictions(_versionOptions);
BeforeExecuteQuery(criteria);
return criteria.SetProjection(Projections.RowCount()).UniqueResult<Int32>();
}

View File

@@ -0,0 +1,9 @@
using System.Collections.Generic;
using NHibernate;
using NHibernate.Criterion;
namespace Orchard.ContentManagement {
public interface IGlobalCriteriaProvider : IDependency {
void AddCriteria(ICriteria criteria);
}
}

View File

@@ -177,6 +177,7 @@
<ItemGroup>
<Compile Include="ContentManagement\Extensions\DriverResultExtensions.cs" />
<Compile Include="ContentManagement\Handlers\CloneContentContext.cs" />
<Compile Include="ContentManagement\IGlobalCriteriaProvider.cs" />
<Compile Include="Environment\Configuration\ExtensionLocations.cs" />
<Compile Include="DisplayManagement\IPositioned.cs" />
<Compile Include="DisplayManagement\PositionWrapper.cs" />