mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-26 03:40:56 +08:00
Adding a new interface in order to allow extending content queries. (#7717)
Fixes #6978
This commit is contained in:
committed by
Sébastien Ros
parent
0fc29a5bce
commit
93fc2e6af0
@@ -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>();
|
||||||
}
|
}
|
||||||
|
|||||||
9
src/Orchard/ContentManagement/IGlobalCriteriaProvider.cs
Normal file
9
src/Orchard/ContentManagement/IGlobalCriteriaProvider.cs
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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" />
|
||||||
|
|||||||
Reference in New Issue
Block a user