mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-24 10:11:35 +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 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>();
|
||||
}
|
||||
|
||||
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>
|
||||
<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" />
|
||||
|
||||
Reference in New Issue
Block a user