Skip to content

Commit 0d174ab

Browse files
Merge pull request #17830 from wargcm/issue/6969-email-followers-filter
Add email followers filter to people page
2 parents 3870317 + a2ba5a2 commit 0d174ab

File tree

7 files changed

+289
-161
lines changed

7 files changed

+289
-161
lines changed

WordPress/Classes/Models/ManagedPerson.swift

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ class ManagedPerson: NSManagedObject {
3030
return User(managedPerson: self)
3131
case PersonKind.viewer.rawValue:
3232
return Viewer(managedPerson: self)
33+
case PersonKind.emailFollower.rawValue:
34+
return EmailFollower(managedPerson: self)
3335
default:
3436
return Follower(managedPerson: self)
3537
}
@@ -97,3 +99,18 @@ extension Viewer {
9799
isSuperAdmin: managedPerson.isSuperAdmin)
98100
}
99101
}
102+
103+
extension EmailFollower {
104+
init(managedPerson: ManagedPerson) {
105+
self.init(ID: Int(managedPerson.userID),
106+
username: managedPerson.username,
107+
firstName: managedPerson.firstName,
108+
lastName: managedPerson.lastName,
109+
displayName: managedPerson.displayName,
110+
role: RemoteRole.follower.slug,
111+
siteID: Int(managedPerson.siteID),
112+
linkedUserID: Int(managedPerson.linkedUserID),
113+
avatarURL: managedPerson.avatarURL.flatMap { URL(string: $0) },
114+
isSuperAdmin: managedPerson.isSuperAdmin)
115+
}
116+
}

WordPress/Classes/Services/PeopleService.swift

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,28 @@ struct PeopleService {
6868
})
6969
}
7070

71+
/// Loads a page of Email Followers associated to the current blog, starting at the specified offset.
72+
///
73+
/// - Parameters:
74+
/// - offset: Number of records to skip.
75+
/// - count: Number of records to retrieve. By default set to 20.
76+
/// - success: Closure to be executed on success with the number of followers retrieved and a bool indicating if more are available.
77+
/// - failure: Closure to be executed on failure.
78+
///
79+
func loadEmailFollowersPage(_ offset: Int = 0,
80+
count: Int = 20,
81+
success: @escaping ((_ retrieved: Int, _ shouldLoadMore: Bool) -> Void),
82+
failure: ((Error) -> Void)? = nil) {
83+
let page = (offset / count) + 1
84+
remote.getEmailFollowers(siteID, page: page, max: count, success: { followers, hasMore in
85+
self.mergePeople(followers)
86+
success(followers.count, hasMore)
87+
}, failure: { error in
88+
DDLogError(String(describing: error))
89+
failure?(error)
90+
})
91+
}
92+
7193
/// Loads a page of Viewers associated to the current blog, starting at the specified offset.
7294
///
7395
/// - Parameters:
@@ -182,6 +204,30 @@ struct PeopleService {
182204
context.delete(managedPerson)
183205
}
184206

207+
/// Deletes a given EmailFollower.
208+
///
209+
/// - Parameters:
210+
/// - person: The email follower that should be deleted
211+
/// - success: Closure to be executed in case of success.
212+
/// - failure: Closure to be executed on error
213+
///
214+
func deleteEmailFollower(_ person: EmailFollower, success: (() -> Void)? = nil, failure: ((Error) -> Void)? = nil) {
215+
guard let managedPerson = managedPersonFromPerson(person) else {
216+
return
217+
}
218+
219+
remote.deleteEmailFollower(siteID, userID: person.ID, success: {
220+
success?()
221+
}, failure: { error in
222+
DDLogError("### Error while deleting follower \(person.ID) from blog \(self.siteID): \(error)")
223+
224+
self.createManagedPerson(person)
225+
failure?(error)
226+
})
227+
228+
context.delete(managedPerson)
229+
}
230+
185231
/// Deletes a given Viewer.
186232
///
187233
/// - Parameters:

0 commit comments

Comments
 (0)