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 ICacheManager _cacheManager;
private ISignals _signals; private ISignals _signals;
private IRepository<ContentTypeRecord> _contentTypeRepository; private IRepository<ContentTypeRecord> _contentTypeRepository;
private IEnumerable<IGlobalCriteriaProvider> _globalCriteriaList;
public DefaultContentQuery( public DefaultContentQuery(
IContentManager contentManager, IContentManager contentManager,
ITransactionManager transactionManager, ITransactionManager transactionManager,
ICacheManager cacheManager, ICacheManager cacheManager,
ISignals signals, ISignals signals,
IRepository<ContentTypeRecord> contentTypeRepository) { IRepository<ContentTypeRecord> contentTypeRepository,
IEnumerable<IGlobalCriteriaProvider> globalCriteriaList) {
_transactionManager = transactionManager; _transactionManager = transactionManager;
ContentManager = contentManager; ContentManager = contentManager;
_cacheManager = cacheManager; _cacheManager = cacheManager;
_signals = signals; _signals = signals;
_contentTypeRepository = contentTypeRepository; _contentTypeRepository = contentTypeRepository;
_globalCriteriaList = globalCriteriaList;
} }
public IContentManager ContentManager { get; private set; } public IContentManager ContentManager { get; private set; }
private void BeforeExecuteQuery(ICriteria contentItemVersionCriteria) {
foreach(var criteria in _globalCriteriaList) {
criteria.AddCriteria(contentItemVersionCriteria);
}
}
ISession BindSession() { ISession BindSession() {
if (_session == null) if (_session == null)
_session = _transactionManager.GetSession(); _session = _transactionManager.GetSession();
@@ -188,6 +197,8 @@ namespace Orchard.ContentManagement {
criteria = criteria.SetMaxResults(count); criteria = criteria.SetMaxResults(count);
} }
BeforeExecuteQuery(criteria);
return criteria return criteria
.List<ContentItemVersionRecord>() .List<ContentItemVersionRecord>()
.Select(x => ContentManager.Get(x.ContentItemRecord.Id, _versionOptions != null && _versionOptions.IsDraftRequired ? _versionOptions : VersionOptions.VersionRecord(x.Id))) .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.ClearOrders();
criteria.ApplyVersionOptionsRestrictions(_versionOptions); criteria.ApplyVersionOptionsRestrictions(_versionOptions);
BeforeExecuteQuery(criteria);
return criteria.SetProjection(Projections.RowCount()).UniqueResult<Int32>(); 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> <ItemGroup>
<Compile Include="ContentManagement\Extensions\DriverResultExtensions.cs" /> <Compile Include="ContentManagement\Extensions\DriverResultExtensions.cs" />
<Compile Include="ContentManagement\Handlers\CloneContentContext.cs" /> <Compile Include="ContentManagement\Handlers\CloneContentContext.cs" />
<Compile Include="ContentManagement\IGlobalCriteriaProvider.cs" />
<Compile Include="Environment\Configuration\ExtensionLocations.cs" /> <Compile Include="Environment\Configuration\ExtensionLocations.cs" />
<Compile Include="DisplayManagement\IPositioned.cs" /> <Compile Include="DisplayManagement\IPositioned.cs" />
<Compile Include="DisplayManagement\PositionWrapper.cs" /> <Compile Include="DisplayManagement\PositionWrapper.cs" />