Skip to content

Commit 878ac5f

Browse files
authored
Fix #21856: Support the 'Order' setting in pages list (#24181)
1 parent c7722e1 commit 878ac5f

File tree

6 files changed

+14
-13
lines changed

6 files changed

+14
-13
lines changed

WordPress.xcworkspace/xcshareddata/swiftpm/Package.resolved

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

WordPress/Classes/Models/AbstractPost.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ typedef NS_ENUM(NSUInteger, AbstractPostRemoteStatus) {
3434
@property (weak, readonly) AbstractPost *revision;
3535
@property (nonatomic, strong) NSSet *comments;
3636
@property (nonatomic, strong, nullable) Media *featuredImage;
37+
@property (nonatomic, assign) NSInteger order;
3738

3839
/// This array will contain a list of revision IDs.
3940
@property (nonatomic, strong, nullable) NSArray *revisions;

WordPress/Classes/Models/AbstractPost.m

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ @implementation AbstractPost
2626
@dynamic autosaveModifiedDate;
2727
@dynamic autosaveIdentifier;
2828
@dynamic foreignID;
29+
@dynamic order;
2930
@synthesize voiceContent;
3031

3132
#pragma mark - Life Cycle Methods

WordPress/Classes/Services/PostHelper.m

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ + (void)updatePost:(AbstractPost *)post withRemotePost:(RemotePost *)remotePost
3434
post.content = remotePost.content;
3535
post.status = remotePost.status;
3636
post.password = remotePost.password;
37+
post.order = remotePost.order;
3738

3839
if (remotePost.postThumbnailID != nil) {
3940
post.featuredImage = [Media existingOrStubMediaWithMediaID: remotePost.postThumbnailID inBlog:post.blog];

WordPress/Classes/Utility/PageTree.swift

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,6 @@ final class PageTree {
22

33
// A node in a tree, which of course is also a tree itself.
44
private class TreeNode {
5-
struct PageData {
6-
var postID: NSNumber?
7-
var parentID: NSNumber?
8-
}
95
let page: Page
106
var children = [TreeNode]()
117
var parentNode: TreeNode?
@@ -16,7 +12,7 @@ final class PageTree {
1612

1713
func dfsList() -> [Page] {
1814
var pages = [Page]()
19-
_ = depthFirstSearch { level, node in
15+
_ = depthFirstSearch(sortByPageOrder: true) { level, node in
2016
let page = node.page
2117
page.hierarchyIndex = level
2218
page.hasVisibleParent = node.parentNode != nil
@@ -32,18 +28,19 @@ final class PageTree {
3228
/// a boolean value indicate whether the search should be stopped.
3329
/// - Returns: `true` if search has been stopped by the closure.
3430
@discardableResult
35-
func depthFirstSearch(using closure: (Int, TreeNode) -> Bool) -> Bool {
36-
depthFirstSearch(level: 0, using: closure)
31+
func depthFirstSearch(sortByPageOrder: Bool, using closure: (Int, TreeNode) -> Bool) -> Bool {
32+
depthFirstSearch(level: 0, sortByPageOrder: sortByPageOrder, using: closure)
3733
}
3834

39-
private func depthFirstSearch(level: Int, using closure: (Int, TreeNode) -> Bool) -> Bool {
35+
private func depthFirstSearch(level: Int, sortByPageOrder: Bool, using closure: (Int, TreeNode) -> Bool) -> Bool {
4036
let shouldStop = closure(level, self)
4137
if shouldStop {
4238
return true
4339
}
4440

45-
for child in children {
46-
let shouldStop = child.depthFirstSearch(level: level + 1, using: closure)
41+
let pages = sortByPageOrder ? children.sorted(using: KeyPathComparator(\TreeNode.page.order)) : children
42+
for child in pages {
43+
let shouldStop = child.depthFirstSearch(level: level + 1, sortByPageOrder: sortByPageOrder, using: closure)
4744
if shouldStop {
4845
return true
4946
}

WordPress/Classes/WordPress.xcdatamodeld/WordPress 155.xcdatamodel/contents

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
2-
<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="23788" systemVersion="24D81" minimumToolsVersion="Xcode 9.0" sourceLanguage="Swift" userDefinedModelVersionIdentifier="">
2+
<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="23788" systemVersion="24E248" minimumToolsVersion="Xcode 9.0" sourceLanguage="Swift" userDefinedModelVersionIdentifier="">
33
<entity name="AbstractPost" representedClassName="AbstractPost" isAbstract="YES" parentEntity="BasePost">
44
<attribute name="autosaveContent" optional="YES" attributeType="String" syncable="YES"/>
55
<attribute name="autosaveExcerpt" optional="YES" attributeType="String" syncable="YES"/>
@@ -13,6 +13,7 @@
1313
<attribute name="foreignID" optional="YES" attributeType="UUID" usesScalarValueType="NO" syncable="YES"/>
1414
<attribute name="metaIsLocal" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="NO" syncable="YES"/>
1515
<attribute name="metaPublishImmediately" attributeType="Boolean" defaultValueString="YES" usesScalarValueType="NO" syncable="YES"/>
16+
<attribute name="order" optional="YES" attributeType="Integer 64" defaultValueString="0" usesScalarValueType="YES" syncable="YES"/>
1617
<attribute name="revisions" optional="YES" attributeType="Transformable" valueTransformerName="NSSecureUnarchiveFromData" syncable="YES"/>
1718
<attribute name="statusAfterSync" optional="YES" attributeType="String" syncable="YES"/>
1819
<relationship name="blog" minCount="1" maxCount="1" deletionRule="Nullify" destinationEntity="Blog" inverseName="posts" inverseEntity="Blog" syncable="YES"/>

0 commit comments

Comments
 (0)