diff --git a/src/Umbraco.Core/Services/IMediaService.cs b/src/Umbraco.Core/Services/IMediaService.cs
index 6976a09b76..6fa211f4f3 100644
--- a/src/Umbraco.Core/Services/IMediaService.cs
+++ b/src/Umbraco.Core/Services/IMediaService.cs
@@ -90,7 +90,7 @@ namespace Umbraco.Core.Services
/// Search text filter
/// An Enumerable list of objects
IEnumerable GetPagedChildren(int id, long pageIndex, int pageSize, out long totalRecords,
- string orderBy = "SortOrder", Direction orderDirection = Direction.Ascending, string filter = "");
+ string filter = null, Ordering ordering = null);
///
/// Gets a collection of objects by Parent Id
@@ -105,23 +105,7 @@ namespace Umbraco.Core.Services
///
/// An Enumerable list of objects
IEnumerable GetPagedChildren(int id, long pageIndex, int pageSize, out long totalRecords,
- string orderBy, Direction orderDirection, bool orderBySystemField, IQuery filter);
-
- ///
- /// Gets a collection of objects by Parent Id
- ///
- /// Id of the Parent to retrieve Children from
- /// Page number
- /// Page size
- /// Total records query would return without paging
- /// Field to order by
- /// Direction to order by
- /// Flag to indicate when ordering by system field
- /// Search text filter
- /// A list of content type Ids to filter the list by
- /// An Enumerable list of objects
- IEnumerable GetPagedChildren(int id, long pageIndex, int pageSize, out long totalRecords,
- string orderBy, Direction orderDirection, bool orderBySystemField, string filter, int[] contentTypeFilter);
+ IQuery filter, Ordering ordering = null);
///
/// Gets a collection of objects by Parent Id
@@ -135,7 +119,7 @@ namespace Umbraco.Core.Services
/// Search text filter
/// An Enumerable list of objects
IEnumerable GetPagedDescendants(int id, long pageIndex, int pageSize, out long totalRecords,
- string orderBy = "path", Direction orderDirection = Direction.Ascending, string filter = "");
+ string filter = null, Ordering ordering = null);
///
/// Gets a collection of objects by Parent Id
@@ -150,8 +134,8 @@ namespace Umbraco.Core.Services
///
/// An Enumerable list of objects
IEnumerable GetPagedDescendants(int id, long pageIndex, int pageSize, out long totalRecords,
- string orderBy, Direction orderDirection, bool orderBySystemField, IQuery filter);
-
+ IQuery filter, Ordering ordering = null);
+
///
/// Gets a collection of objects by the Id of the
///
diff --git a/src/Umbraco.Core/Services/Implement/ContentService.cs b/src/Umbraco.Core/Services/Implement/ContentService.cs
index 1c3f5203f9..debf7dcb34 100644
--- a/src/Umbraco.Core/Services/Implement/ContentService.cs
+++ b/src/Umbraco.Core/Services/Implement/ContentService.cs
@@ -595,7 +595,6 @@ namespace Umbraco.Core.Services.Implement
///
public IEnumerable GetPagedDescendants(int id, long pageIndex, int pageSize, out long totalChildren,
string filter = null, Ordering ordering = null)
- //string orderBy = "Path", Direction orderDirection = Direction.Ascending, string filter = "")
{
var filterQuery = filter.IsNullOrWhiteSpace()
? null
@@ -636,7 +635,6 @@ namespace Umbraco.Core.Services.Implement
if (pageIndex < 0) throw new ArgumentOutOfRangeException(nameof(pageIndex));
if (pageSize <= 0) throw new ArgumentOutOfRangeException(nameof(pageSize));
if (filter == null) throw new ArgumentNullException(nameof(filter));
-
if (ordering == null) throw new ArgumentNullException(nameof(ordering));
var query = Query();
diff --git a/src/Umbraco.Core/Services/Implement/MediaService.cs b/src/Umbraco.Core/Services/Implement/MediaService.cs
index 25aa02befa..a584521c33 100644
--- a/src/Umbraco.Core/Services/Implement/MediaService.cs
+++ b/src/Umbraco.Core/Services/Implement/MediaService.cs
@@ -471,13 +471,14 @@ namespace Umbraco.Core.Services.Implement
/// Direction to order by
/// Search text filter
/// An Enumerable list of objects
- public IEnumerable GetPagedChildren(int id, long pageIndex, int pageSize, out long totalChildren, string orderBy, Direction orderDirection, string filter = "")
+ public IEnumerable GetPagedChildren(int id, long pageIndex, int pageSize, out long totalChildren,
+ string filter = null, Ordering ordering = null)
{
var filterQuery = filter.IsNullOrWhiteSpace()
? null
: Query().Where(x => x.Name.Contains(filter));
- return GetPagedChildren(id, pageIndex, pageSize, out totalChildren, orderBy, orderDirection, true, filterQuery);
+ return GetPagedChildren(id, pageIndex, pageSize, out totalChildren, filterQuery, ordering);
}
///
@@ -492,56 +493,21 @@ namespace Umbraco.Core.Services.Implement
/// Flag to indicate when ordering by system field
///
/// An Enumerable list of objects
- public IEnumerable GetPagedChildren(int id, long pageIndex, int pageSize, out long totalChildren, string orderBy, Direction orderDirection, bool orderBySystemField, IQuery filter)
+ public IEnumerable GetPagedChildren(int id, long pageIndex, int pageSize, out long totalChildren,
+ IQuery filter, Ordering ordering = null)
{
if (pageIndex < 0) throw new ArgumentOutOfRangeException(nameof(pageIndex));
if (pageSize <= 0) throw new ArgumentOutOfRangeException(nameof(pageSize));
+ if (ordering == null)
+ ordering = Ordering.By("sortOrder");
+
using (var scope = ScopeProvider.CreateScope(autoComplete: true))
{
scope.ReadLock(Constants.Locks.MediaTree);
var query = Query().Where(x => x.ParentId == id);
- return _mediaRepository.GetPage(query, pageIndex, pageSize, out totalChildren, filter, Ordering.By(orderBy, orderDirection, isCustomField: !orderBySystemField));
- }
- }
-
- ///
- /// Gets a collection of objects by Parent Id
- ///
- /// Id of the Parent to retrieve Children from
- /// Page number
- /// Page size
- /// Total records query would return without paging
- /// Field to order by
- /// Direction to order by
- /// Flag to indicate when ordering by system field
- /// Search text filter
- /// A list of content type Ids to filter the list by
- /// An Enumerable list of objects
- public IEnumerable GetPagedChildren(int id, long pageIndex, int pageSize, out long totalChildren, string orderBy, Direction orderDirection, bool orderBySystemField, string filter, int[] contentTypeFilter)
- {
- if (pageIndex < 0) throw new ArgumentOutOfRangeException(nameof(pageIndex));
- if (pageSize <= 0) throw new ArgumentOutOfRangeException(nameof(pageSize));
-
- using (var scope = ScopeProvider.CreateScope(autoComplete: true))
- {
- scope.ReadLock(Constants.Locks.MediaTree);
-
- var query = Query();
- // always check for a parent - else it will also get decendants (and then you should use the GetPagedDescendants method)
-
- query.Where(x => x.ParentId == id);
-
- if (contentTypeFilter != null && contentTypeFilter.Length > 0)
- {
- query.Where(x => contentTypeFilter.Contains(x.ContentTypeId));
- }
-
- var filterQuery = filter.IsNullOrWhiteSpace()
- ? null
- : Query().Where(x => x.Name.Contains(filter));
- return _mediaRepository.GetPage(query, pageIndex, pageSize, out totalChildren, filterQuery, Ordering.By(orderBy, orderDirection, isCustomField: !orderBySystemField));
+ return _mediaRepository.GetPage(query, pageIndex, pageSize, out totalChildren, filter, ordering);
}
}
@@ -556,13 +522,14 @@ namespace Umbraco.Core.Services.Implement
/// Direction to order by
/// Search text filter
/// An Enumerable list of objects
- public IEnumerable GetPagedDescendants(int id, long pageIndex, int pageSize, out long totalChildren, string orderBy = "Path", Direction orderDirection = Direction.Ascending, string filter = "")
+ public IEnumerable GetPagedDescendants(int id, long pageIndex, int pageSize, out long totalChildren,
+ string filter = null, Ordering ordering = null)
{
var filterQuery = filter.IsNullOrWhiteSpace()
? null
: Query().Where(x => x.Name.Contains(filter));
- return GetPagedDescendants(id, pageIndex, pageSize, out totalChildren, orderBy, orderDirection, true, filterQuery);
+ return GetPagedDescendants(id, pageIndex, pageSize, out totalChildren, filterQuery, ordering);
}
///
@@ -577,8 +544,12 @@ namespace Umbraco.Core.Services.Implement
/// Flag to indicate when ordering by system field
///
/// An Enumerable list of objects
- public IEnumerable GetPagedDescendants(int id, long pageIndex, int pageSize, out long totalChildren, string orderBy, Direction orderDirection, bool orderBySystemField, IQuery filter)
+ public IEnumerable GetPagedDescendants(int id, long pageIndex, int pageSize, out long totalChildren,
+ IQuery filter, Ordering ordering = null)
{
+ if (ordering == null)
+ ordering = Ordering.By("Path");
+
using (var scope = ScopeProvider.CreateScope(autoComplete: true))
{
scope.ReadLock(Constants.Locks.MediaTree);
@@ -592,22 +563,25 @@ namespace Umbraco.Core.Services.Implement
totalChildren = 0;
return Enumerable.Empty();
}
- return GetPagedDescendantsLocked(mediaPath[0].Path, pageIndex, pageSize, out totalChildren, orderBy, orderDirection, orderBySystemField, filter);
+ return GetPagedDescendantsLocked(mediaPath[0].Path, pageIndex, pageSize, out totalChildren, filter, ordering);
}
- return GetPagedDescendantsLocked(null, pageIndex, pageSize, out totalChildren, orderBy, orderDirection, orderBySystemField, filter);
+ return GetPagedDescendantsLocked(null, pageIndex, pageSize, out totalChildren, filter, ordering);
}
}
- private IEnumerable GetPagedDescendantsLocked(string mediaPath, long pageIndex, int pageSize, out long totalChildren, string orderBy, Direction orderDirection, bool orderBySystemField, IQuery filter)
+ private IEnumerable GetPagedDescendantsLocked(string mediaPath, long pageIndex, int pageSize, out long totalChildren,
+ IQuery filter, Ordering ordering)
{
if (pageIndex < 0) throw new ArgumentOutOfRangeException(nameof(pageIndex));
if (pageSize <= 0) throw new ArgumentOutOfRangeException(nameof(pageSize));
+ if (filter == null) throw new ArgumentNullException(nameof(filter));
+ if (ordering == null) throw new ArgumentNullException(nameof(ordering));
var query = Query();
if (!mediaPath.IsNullOrWhiteSpace())
query.Where(x => x.Path.SqlStartsWith(mediaPath + ",", TextColumnType.NVarchar));
- return _mediaRepository.GetPage(query, pageIndex, pageSize, out totalChildren, filter, Ordering.By(orderBy, orderDirection, isCustomField: !orderBySystemField));
+ return _mediaRepository.GetPage(query, pageIndex, pageSize, out totalChildren, filter, ordering);
}
///
@@ -836,7 +810,7 @@ namespace Umbraco.Core.Services.Implement
while(page * pageSize < total)
{
//get descendants - ordered from deepest to shallowest
- var descendants = GetPagedDescendants(media.Id, page, pageSize, out total, "Path", Direction.Descending);
+ var descendants = GetPagedDescendants(media.Id, page, pageSize, out total, ordering: Ordering.By("Path", Direction.Descending));
foreach (var c in descendants)
DoDelete(c);
}
@@ -1069,7 +1043,7 @@ namespace Umbraco.Core.Services.Implement
var total = long.MaxValue;
while (page * pageSize < total)
{
- var descendants = GetPagedDescendantsLocked(originalPath, page++, pageSize, out total, "Path", Direction.Ascending, true, null);
+ var descendants = GetPagedDescendantsLocked(originalPath, page++, pageSize, out total, null, Ordering.By("Path", Direction.Ascending));
foreach (var descendant in descendants)
{
moves.Add(Tuple.Create(descendant, descendant.Path)); // capture original path
diff --git a/src/Umbraco.Tests/Services/MediaServiceTests.cs b/src/Umbraco.Tests/Services/MediaServiceTests.cs
index 68fd2c3e11..b9e1fee0db 100644
--- a/src/Umbraco.Tests/Services/MediaServiceTests.cs
+++ b/src/Umbraco.Tests/Services/MediaServiceTests.cs
@@ -69,11 +69,15 @@ namespace Umbraco.Tests.Services
}
long total;
- var result = ServiceContext.MediaService.GetPagedChildren(-1, 0, 11, out total, "SortOrder", Direction.Ascending, true, null, new[] { mediaType1.Id, mediaType2.Id });
+ var result = ServiceContext.MediaService.GetPagedChildren(-1, 0, 11, out total,
+ SqlContext.Query().Where(x => new[] { mediaType1.Id, mediaType2.Id }.Contains(x.ContentTypeId)),
+ Ordering.By("SortOrder", Direction.Ascending));
Assert.AreEqual(11, result.Count());
Assert.AreEqual(20, total);
- result = ServiceContext.MediaService.GetPagedChildren(-1, 1, 11, out total, "SortOrder", Direction.Ascending, true, null, new[] { mediaType1.Id, mediaType2.Id });
+ result = ServiceContext.MediaService.GetPagedChildren(-1, 1, 11, out total,
+ SqlContext.Query().Where(x => new[] { mediaType1.Id, mediaType2.Id }.Contains(x.ContentTypeId)),
+ Ordering.By("SortOrder", Direction.Ascending));
Assert.AreEqual(9, result.Count());
Assert.AreEqual(20, total);
}
diff --git a/src/Umbraco.Tests/UmbracoExamine/IndexInitializer.cs b/src/Umbraco.Tests/UmbracoExamine/IndexInitializer.cs
index b197cea5bc..8aec854441 100644
--- a/src/Umbraco.Tests/UmbracoExamine/IndexInitializer.cs
+++ b/src/Umbraco.Tests/UmbracoExamine/IndexInitializer.cs
@@ -116,12 +116,12 @@ namespace Umbraco.Tests.UmbracoExamine
mediaServiceMock
.Setup(x => x.GetPagedDescendants(
- It.IsAny(), It.IsAny(), It.IsAny(), out totalRecs, It.IsAny(), It.IsAny(), It.IsAny())
+ It.IsAny(), It.IsAny(), It.IsAny(), out totalRecs, It.IsAny(), It.IsAny())
).Returns(() => allRecs);
mediaServiceMock
.Setup(x => x.GetPagedDescendants(
- It.IsAny(), It.IsAny(), It.IsAny(), out totalRecs, It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny>())
+ It.IsAny(), It.IsAny(), It.IsAny(), out totalRecs, It.IsAny>(), It.IsAny())
).Returns(() => allRecs);
//mediaServiceMock.Setup(service => service.GetPagedXmlEntries(It.IsAny(), It.IsAny(), It.IsAny(), out longTotalRecs))
diff --git a/src/Umbraco.Web/Editors/MediaController.cs b/src/Umbraco.Web/Editors/MediaController.cs
index 3dfd435d8f..f61cbc5952 100644
--- a/src/Umbraco.Web/Editors/MediaController.cs
+++ b/src/Umbraco.Web/Editors/MediaController.cs
@@ -209,7 +209,10 @@ namespace Umbraco.Web.Editors
}
long total;
- var children = Services.MediaService.GetPagedChildren(id, pageNumber - 1, pageSize, out total, "Name", Direction.Ascending, true, null, folderTypes.ToArray());
+ var children = Services.MediaService.GetPagedChildren(id, pageNumber - 1, pageSize, out total,
+ //lookup these content types
+ SqlContext.Query().Where(x => folderTypes.Contains(x.ContentTypeId)),
+ Ordering.By("Name", Direction.Ascending));
return new PagedResult>(total, pageNumber, pageSize)
{
@@ -286,8 +289,8 @@ namespace Umbraco.Web.Editors
.GetPagedChildren(
id, (pageNumber - 1), pageSize,
out totalChildren,
- orderBy, orderDirection, orderBySystemField,
- queryFilter).ToList();
+ queryFilter,
+ Ordering.By(orderBy, orderDirection, isCustomField: !orderBySystemField)).ToList();
}
else
{
@@ -762,12 +765,10 @@ namespace Umbraco.Web.Editors
var total = long.MaxValue;
while (page * pageSize < total)
{
- var children = Services.MediaService.GetPagedChildren(mediaId, page, pageSize, out total);
+ var children = Services.MediaService.GetPagedChildren(mediaId, page, pageSize, out total,
+ SqlContext.Query().Where(x => x.Name == nameToFind));
foreach (var c in children)
- {
- if (c.Name == nameToFind && c.ContentType.Alias == contentTypeAlias)
- return c;
- }
+ return c; //return first one if any are found
}
return null;
}