Skip to content

Commit e5076c9

Browse files
authored
Remove .newsletterSubscribers FF (#24913)
* Remove .newsletterSubscribers FF * Remove follower mode from PersonViewController * Remoev Followers mode from PeopleViewController
1 parent 1868861 commit e5076c9

File tree

6 files changed

+37
-148
lines changed

6 files changed

+37
-148
lines changed

WordPress/Classes/Utility/BuildInformation/FeatureFlag.swift

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ public enum FeatureFlag: Int, CaseIterable {
2424
case selfHostedSiteUserManagement
2525
case readerGutenbergCommentComposer
2626
case pluginManagementOverhaul
27-
case newsletterSubscribers
2827
case newStats
2928
case newPublishingSheet
3029
case mediaQuotaView
@@ -81,8 +80,6 @@ public enum FeatureFlag: Int, CaseIterable {
8180
return false
8281
case .pluginManagementOverhaul:
8382
return false
84-
case .newsletterSubscribers:
85-
return true
8683
case .newStats:
8784
return false
8885
case .newPublishingSheet:
@@ -133,7 +130,6 @@ extension FeatureFlag {
133130
case .selfHostedSiteUserManagement: "Self-hosted Site User Management"
134131
case .pluginManagementOverhaul: "Plugin Management Overhaul"
135132
case .readerGutenbergCommentComposer: "Gutenberg Comment Composer"
136-
case .newsletterSubscribers: "Newsletter Subscribers"
137133
case .newStats: "New Stats"
138134
case .newPublishingSheet: "New Publishing Sheet"
139135
case .mediaQuotaView: "Media Quota"

WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController+Swift.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import WordPressCore
1010

1111
extension BlogDetailsViewController {
1212
@objc public var shouldShowSubscribersRow: Bool {
13-
FeatureFlag.newsletterSubscribers.enabled && blog.supports(.people)
13+
blog.supports(.people)
1414
}
1515

1616
@objc public func makeSubscribersRow() -> BlogDetailsRow {

WordPress/Classes/ViewRelated/People/Controllers/InvitePersonViewController.swift

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -51,19 +51,7 @@ class InvitePersonViewController: UITableViewController {
5151
/// Roles available for the current site
5252
///
5353
fileprivate var availableRoles: [RemoteRole] {
54-
let blogRoles = blog?.sortedRoles ?? []
55-
var roles = [RemoteRole]()
56-
let inviteRole: RemoteRole
57-
if blog.isPrivateAtWPCom() {
58-
inviteRole = RemoteRole.viewer
59-
} else {
60-
inviteRole = RemoteRole.follower
61-
}
62-
roles += blogRoles.map({ $0.toUnmanaged() })
63-
if !FeatureFlag.newsletterSubscribers.enabled {
64-
roles.append(inviteRole)
65-
}
66-
return roles
54+
(blog?.sortedRoles ?? []).map { $0.toUnmanaged() }
6755
}
6856

6957
private lazy var inviteActivityView: UIActivityIndicatorView = {

WordPress/Classes/ViewRelated/People/Controllers/PeopleViewController.swift

Lines changed: 4 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class PeopleViewController: UITableViewController {
1616
///
1717
private var blog: Blog?
1818

19-
/// Mode: Users / Followers
19+
/// Mode: Users
2020
///
2121
private var filter = Filter.users {
2222
didSet {
@@ -70,15 +70,7 @@ class PeopleViewController: UITableViewController {
7070
/// Sort Descriptor
7171
///
7272
private var sortDescriptors: [NSSortDescriptor] {
73-
// Note:
74-
// Followers must be sorted out by creationDate!
75-
//
76-
switch filter {
77-
case .followers:
78-
return [NSSortDescriptor(key: "creationDate", ascending: true, selector: #selector(NSDate.compare(_:)))]
79-
default:
80-
return [NSSortDescriptor(key: "displayName", ascending: true, selector: #selector(NSString.localizedCaseInsensitiveCompare(_:)))]
81-
}
73+
[NSSortDescriptor(key: "displayName", ascending: true, selector: #selector(NSString.localizedCaseInsensitiveCompare(_:)))]
8274
}
8375

8476
private var viewContext: NSManagedObjectContext {
@@ -192,14 +184,6 @@ class PeopleViewController: UITableViewController {
192184
return
193185
}
194186
navigationController?.pushViewController(viewController, animated: true)
195-
case .followers:
196-
let url = URL(string: "https://wordpress.com/subscribers/\(blogId)/\(personAtIndexPath(indexPath).ID)")
197-
let configuration = WebViewControllerConfiguration(url: url)
198-
configuration.authenticateWithDefaultAccount()
199-
configuration.secureInteraction = true
200-
let viewController = WebKitViewController(configuration: configuration)
201-
let navWrapper = UINavigationController(rootViewController: viewController)
202-
navigationController?.present(navWrapper, animated: true)
203187
}
204188
}
205189

@@ -282,19 +266,12 @@ extension PeopleViewController {
282266
enum Filter: String, CaseIterable, FilterTabBarItem {
283267

284268
case users = "users"
285-
case followers = "followers"
286269
case viewers = "viewers"
287270

288-
static var defaultFilters: [Filter] {
289-
return [.users, .followers]
290-
}
291-
292271
var title: String {
293272
switch self {
294273
case .users:
295274
return NSLocalizedString("Users", comment: "Blog Users")
296-
case .followers:
297-
return NSLocalizedString("users.list.title.subscribers", value: "Subscribers", comment: "Site Subscribers")
298275
case .viewers:
299276
return NSLocalizedString("Viewers", comment: "Blog Viewers")
300277
}
@@ -304,21 +281,15 @@ extension PeopleViewController {
304281
switch self {
305282
case .users:
306283
return .user
307-
case .followers:
308-
return .follower
309284
case .viewers:
310285
return .viewer
311286
}
312287
}
313288

314289
var screenMode: PersonViewController.ScreenMode {
315290
switch self {
316-
case .users:
317-
return .User
318-
case .followers:
319-
return .Follower
320-
case .viewers:
321-
return .Viewer
291+
case .users: .user
292+
case .viewers: .viewer
322293
}
323294
}
324295
}
@@ -402,8 +373,6 @@ private extension PeopleViewController {
402373
}
403374

404375
switch filter {
405-
case .followers:
406-
service.loadFollowersPage(offset, success: success)
407376
case .users:
408377
loadUsersPage(offset, success: success)
409378
case .viewers:
@@ -579,20 +548,6 @@ private extension PeopleViewController {
579548
}
580549
}
581550

582-
extension PeopleViewController {
583-
class func controllerWithBlog(_ blog: Blog, selectedFilter: Filter) -> PeopleViewController? {
584-
let storyboard = UIStoryboard(name: "People", bundle: .keystone)
585-
guard let viewController = storyboard.instantiateInitialViewController() as? PeopleViewController else {
586-
return nil
587-
}
588-
589-
viewController.defaultFilter = selectedFilter
590-
viewController.blog = blog
591-
592-
return viewController
593-
}
594-
}
595-
596551
private enum Strings {
597552
static let title = NSLocalizedString("users.title", value: "Users", comment: "Screen title")
598553
}

WordPress/Classes/ViewRelated/People/Controllers/PersonViewController.swift

Lines changed: 23 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -21,18 +21,15 @@ final class PersonViewController: UITableViewController {
2121
/// PersonViewController operation modes
2222
///
2323
enum ScreenMode: String {
24-
case User = "user"
25-
case Follower = "follower"
26-
case Viewer = "viewer"
24+
case user = "user"
25+
case viewer = "viewer"
2726

2827
var title: String {
2928
switch self {
30-
case .User:
31-
return NSLocalizedString("user.details.title.user", value: "Site's User", comment: "Sites's User Profile. Displayed when the name is empty!")
32-
case .Follower:
33-
return NSLocalizedString("user.details.title.subscriber", value: "Site's Subscriber", comment: "Site's Subscriber Profile. Displayed when the name is empty!")
34-
case .Viewer:
35-
return NSLocalizedString("user.details.title.viewer", value: "Site's Viewer", comment: "Site's Viewers Profile. Displayed when the name is empty!")
29+
case .user:
30+
NSLocalizedString("user.details.title.user", value: "Site's User", comment: "Sites's User Profile. Displayed when the name is empty!")
31+
case .viewer:
32+
NSLocalizedString("user.details.title.viewer", value: "Site's Viewer", comment: "Site's Viewers Profile. Displayed when the name is empty!")
3633
}
3734
}
3835
}
@@ -53,7 +50,7 @@ final class PersonViewController: UITableViewController {
5350
}
5451
}
5552

56-
/// Mode: User / Follower / Viewer / Email Follower
53+
/// Mode: User / Viewer
5754
///
5855
private let screenMode: ScreenMode
5956

@@ -210,8 +207,8 @@ private extension PersonViewController {
210207

211208
func removeWasPressed() {
212209
let titleFormat = NSLocalizedString("Remove %@", comment: "Remove Person Alert Title")
213-
let titleText = String(format: titleFormat, isEmailFollower ? person.displayName : "@" + person.username)
214-
let name = person.firstName?.nonEmptyString() ?? (isEmailFollower ? person.displayName : person.username)
210+
let titleText = String(format: titleFormat, person.username)
211+
let name = person.firstName?.nonEmptyString() ?? person.username
215212
let message = warningTextForRemovingPerson(name)
216213
let cancelTitle = NSLocalizedString("Cancel", comment: "Cancel Action")
217214
let removeTitle = NSLocalizedString("Remove", comment: "Remove Action")
@@ -226,11 +223,9 @@ private extension PersonViewController {
226223
}
227224

228225
switch strongSelf.screenMode {
229-
case .User:
226+
case .user:
230227
strongSelf.deleteUser()
231-
case .Follower:
232-
strongSelf.deleteFollower()
233-
case .Viewer:
228+
case .viewer:
234229
strongSelf.deleteViewer()
235230
return
236231
}
@@ -242,20 +237,17 @@ private extension PersonViewController {
242237
func warningTextForRemovingPerson(_ name: String) -> String {
243238
var messageFirstLine: String
244239
switch screenMode {
245-
case .User:
240+
case .user:
246241
let text = NSLocalizedString("If you remove %@, that user will no longer be able to access this site, but any content that was created by %@ will remain on the site.",
247242
comment: "First line of remove user warning in confirmation dialog. Note: '%@' is the placeholder for the user's name and it must exist twice in this string.")
248243
messageFirstLine = String.localizedStringWithFormat(text, name, name)
249-
case .Follower:
250-
messageFirstLine = NSLocalizedString("Removing followers makes them stop receiving updates from your site. If they choose to, they can still visit your site, and follow it again.",
251-
comment: "First line of remove follower warning in confirmation dialog.")
252-
case .Viewer:
244+
case .viewer:
253245
messageFirstLine = NSLocalizedString("If you remove this viewer, he or she will not be able to visit this site.",
254246
comment: "First line of remove viewer warning in confirmation dialog.")
255247
}
256248

257249
let messageSecondLineText = NSLocalizedString("Would you still like to remove this person?",
258-
comment: "Second line of Remove user/follower/viewer warning in confirmation dialog.")
250+
comment: "Second line of Remove user/viewer warning in confirmation dialog.")
259251

260252
return messageFirstLine + "\n\n" + messageSecondLineText
261253
}
@@ -279,23 +271,6 @@ private extension PersonViewController {
279271
_ = navigationController?.popViewController(animated: true)
280272
}
281273

282-
func deleteFollower() {
283-
guard let follower, isFollower else {
284-
DDLogError("Error: Only Followers can be deleted here")
285-
assertionFailure()
286-
return
287-
}
288-
289-
service?.deleteFollower(follower, failure: {[weak self] (error: Error?) -> () in
290-
guard let strongSelf = self, let error = error as NSError? else {
291-
return
292-
}
293-
294-
strongSelf.handleRemoveViewerOrFollowerError(error)
295-
})
296-
_ = navigationController?.popViewController(animated: true)
297-
}
298-
299274
func deleteViewer() {
300275
guard let viewer, isViewer else {
301276
DDLogError("Error: Only Viewers can be deleted here")
@@ -310,7 +285,7 @@ private extension PersonViewController {
310285
return
311286
}
312287

313-
strongSelf.handleRemoveViewerOrFollowerError(error)
288+
strongSelf.handleRemoveViewerError(error)
314289
})
315290
_ = navigationController?.popViewController(animated: true)
316291
}
@@ -333,7 +308,7 @@ private extension PersonViewController {
333308
WPError.showAlert(withTitle: errorTitleText, message: errorMessage, withSupportButton: true)
334309
}
335310

336-
func handleRemoveViewerOrFollowerError(_ error: NSError) {
311+
func handleRemoveViewerError(_ error: NSError) {
337312
let errorWithSource = NSError(domain: error.domain, code: error.code, userInfo: error.userInfo)
338313
WPError.showNetworkingAlertWithError(errorWithSource)
339314
}
@@ -396,7 +371,7 @@ private extension PersonViewController {
396371
}
397372
headerCell.fullNameLabel.font = .preferredFont(forTextStyle: .headline)
398373
headerCell.fullNameLabel.textColor = .label
399-
headerCell.fullNameLabel.text = isEmailFollower ? person.displayName : person.fullName
374+
headerCell.fullNameLabel.text = person.fullName
400375

401376
headerCell.userNameLabel.font = .preferredFont(forTextStyle: .subheadline)
402377
headerCell.userNameLabel.textColor = .secondaryLabel
@@ -425,7 +400,7 @@ private extension PersonViewController {
425400
func configureRemoveCell(_ cell: UITableViewCell) {
426401
WPStyleGuide.configureTableViewDestructiveActionCell(cell)
427402
let removeFormat = NSLocalizedString("Remove %@", comment: "Remove User. Verb")
428-
let removeText = String(format: removeFormat, isEmailFollower ? person.displayName : "@" + person.username)
403+
let removeText = String(format: removeFormat, person.username)
429404
cell.textLabel?.text = removeText as String
430405
cell.isHidden = !isRemoveEnabled
431406
}
@@ -504,7 +479,7 @@ private extension PersonViewController {
504479
}
505480

506481
var isFullnamePrivate: Bool {
507-
// Followers + Viewers shouldn't display First / Last name
482+
// Viewers shouldn't display First / Last name
508483
return isUser == false
509484
}
510485

@@ -516,12 +491,10 @@ private extension PersonViewController {
516491

517492
var isRemoveEnabled: Bool {
518493
switch screenMode {
519-
case .User:
494+
case .user:
520495
// YES, ListUsers. Brought from Calypso's code
521496
return blog.isUserCapableOf(.ListUsers) && isMyself == false && isUser == true
522-
case .Follower:
523-
return isFollower == true
524-
case .Viewer:
497+
case .viewer:
525498
return isViewer == true
526499
}
527500
}
@@ -534,22 +507,6 @@ private extension PersonViewController {
534507
return person as? User
535508
}
536509

537-
var isFollower: Bool {
538-
return follower != nil
539-
}
540-
541-
var follower: Follower? {
542-
return person as? Follower
543-
}
544-
545-
var isEmailFollower: Bool {
546-
return person is EmailFollower
547-
}
548-
549-
var emailFollower: EmailFollower? {
550-
return person as? EmailFollower
551-
}
552-
553510
var isViewer: Bool {
554511
return viewer != nil
555512
}
@@ -560,11 +517,9 @@ private extension PersonViewController {
560517

561518
var role: RemoteRole? {
562519
switch screenMode {
563-
case .Follower:
564-
return .follower
565-
case .Viewer:
520+
case .viewer:
566521
return .viewer
567-
case .User:
522+
case .user:
568523
return try? Role.lookup(withBlogID: blog.objectID, slug: person.role, in: context)?.toUnmanaged()
569524
}
570525
}

0 commit comments

Comments
 (0)