Skip to content

Commit

Permalink
Merge 23.7 beta 1 and editorialized release notes (#22049)
Browse files Browse the repository at this point in the history
  • Loading branch information
mokagio authored Nov 19, 2023
2 parents b2a5d65 + ceb1c8a commit 9782fb5
Show file tree
Hide file tree
Showing 80 changed files with 3,462 additions and 5,276 deletions.
27 changes: 21 additions & 6 deletions WordPress/Classes/Utility/Analytics/WPAnalytics+Domains.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,39 @@ import Foundation

extension WPAnalytics {

/// Checks if the Domain Purchasing Feature Flag and AB Experiment are enabled
/// Checks if the Domain Purchasing Feature Flag is enabled.
private static var domainPurchasingEnabled: Bool {
RemoteFeatureFlag.plansInSiteCreation.enabled()
}

static func domainsProperties(for blog: Blog, origin: SiteCreationWebViewViewOrigin? = .menu) -> [AnyHashable: Any] {
domainsProperties(usingCredit: blog.canRegisterDomainWithPaidPlan, origin: origin)
/// Checks if the Domain Management Feature Flag is enabled.
private static var domainManagementEnabled: Bool {
return RemoteFeatureFlag.domainManagement.enabled()
}

static func domainsProperties(
for blog: Blog,
origin: SiteCreationWebViewViewOrigin? = .menu
) -> [AnyHashable: Any] {
domainsProperties(
usingCredit: blog.canRegisterDomainWithPaidPlan,
origin: origin,
domainOnly: false
)
}

static func domainsProperties(
usingCredit: Bool,
origin: SiteCreationWebViewViewOrigin?
origin: SiteCreationWebViewViewOrigin? = nil,
domainOnly: Bool = false
) -> [AnyHashable: Any] {
var dict: [AnyHashable: Any] = ["using_credit": usingCredit.stringLiteral]
if Self.domainPurchasingEnabled,
let origin = origin {
if Self.domainPurchasingEnabled, let origin = origin {
dict["origin"] = origin.rawValue
}
if Self.domainManagementEnabled {
dict["domain_only"] = domainOnly.stringLiteral
}
return dict
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ import SwiftUI
/// - customTitle: Title of of the presented view. If nil the title displays the title of the webview..
/// - purchaseCallback: closure to be called when user completes a plan purchase.
static func plansFlowAfterDomainAddedToCartBlock(customTitle: String?,
analyticsSource: String? = nil,
purchaseCallback: @escaping PurchaseCallback) -> RegisterDomainCoordinator.DomainAddedToCartCallback {
let planSelected = { (planSelectionViewController: PlanSelectionViewController, domainName: String, checkoutURL: URL) in
let viewModel = CheckoutViewModel(url: checkoutURL)
Expand All @@ -59,7 +60,11 @@ import SwiftUI

let domainAddedToCart = { (domainViewController: UIViewController, domainName: String, blog: Blog) in
guard let viewModel = PlanSelectionViewModel(blog: blog) else { return }
let planSelectionViewController = PlanSelectionViewController(viewModel: viewModel, customTitle: customTitle)
let planSelectionViewController = PlanSelectionViewController(
viewModel: viewModel,
customTitle: customTitle,
analyticsSource: analyticsSource
)
planSelectionViewController.planSelectedCallback = { planSelectionViewController, checkoutURL in
planSelected(planSelectionViewController, domainName, checkoutURL)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,13 +44,14 @@ final class PlanSelectionViewController: WebKitViewController {

private var webViewURLChangeObservation: NSKeyValueObservation?

init(viewModel: PlanSelectionViewModel, customTitle: String?) {
init(viewModel: PlanSelectionViewModel, customTitle: String?, analyticsSource: String? = nil) {
self.viewModel = viewModel

let configuration = WebViewControllerConfiguration(url: viewModel.url)
configuration.authenticateWithDefaultAccount()
configuration.secureInteraction = true
configuration.customTitle = customTitle
configuration.analyticsSource = analyticsSource ?? ""
super.init(configuration: configuration)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ class RegisterDomainCoordinator {
// MARK: Variables

private let crashLogger: CrashLogging
private let analyticsSource: String?

var site: Blog?
var domainPurchasedCallback: DomainPurchasedCallback?
Expand All @@ -23,12 +24,21 @@ class RegisterDomainCoordinator {

private var webViewURLChangeObservation: NSKeyValueObservation?

/// Initializes a `RegisterDomainCoordinator` with the specified parameters.
///
/// - Parameters:
/// - site: An optional `Blog` object representing the blog associated with the domain registration.
/// - domainPurchasedCallback: An optional closure to be called when a domain is successfully purchased.
/// - analyticsSource: A string representing the source for analytics tracking. Defaults to `domains_register` if not provided.
/// - crashLogger: An instance of `CrashLogging` to handle crash logging. Defaults to `.main` if not provided.
init(site: Blog?,
domainPurchasedCallback: RegisterDomainCoordinator.DomainPurchasedCallback? = nil,
analyticsSource: String? = "domains_register",
crashLogger: CrashLogging = .main) {
self.site = site
self.domainPurchasedCallback = domainPurchasedCallback
self.crashLogger = crashLogger
self.analyticsSource = analyticsSource
}

// MARK: Public Functions
Expand Down Expand Up @@ -149,8 +159,9 @@ class RegisterDomainCoordinator {

let webViewController = WebViewControllerFactory.controllerWithDefaultAccountAndSecureInteraction(
url: url,
source: "domains_register", // TODO: Update source
title: title)
source: analyticsSource ?? "",
title: title
)
let navController = LightNavigationController(rootViewController: webViewController)

// WORKAROUND: The reason why we have to use this mechanism to detect success and failure conditions
Expand All @@ -177,9 +188,11 @@ class RegisterDomainCoordinator {
}

if let site {
WPAnalytics.track(.domainsPurchaseWebviewViewed, properties: WPAnalytics.domainsProperties(for: site), blog: site)
let properties = WPAnalytics.domainsProperties(for: site)
WPAnalytics.track(.domainsPurchaseWebviewViewed, properties: properties, blog: site)
} else {
// TODO: Track showing no site checkout
let properties = WPAnalytics.domainsProperties(usingCredit: false, domainOnly: true)
WPAnalytics.track(.domainsPurchaseWebviewViewed, properties: properties)
}

webViewController.configureSandboxStore {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@ import Foundation

@objc final class AllDomainsAddDomainCoordinator: NSObject {
static func presentAddDomainFlow(in allDomainsViewController: AllDomainsListViewController) {
let coordinator = RegisterDomainCoordinator(site: nil)
let analyticsSource = AllDomainsListViewController.Constants.analyticsSource
let coordinator = RegisterDomainCoordinator(site: nil, analyticsSource: analyticsSource)
let domainSuggestionsViewController = RegisterDomainSuggestionsViewController.instance(
coordinator: coordinator,
domainSelectionType: .purchaseFromDomainManagement,
Expand All @@ -18,7 +19,9 @@ import Foundation

let domainAddedToCart = FreeToPaidPlansCoordinator.plansFlowAfterDomainAddedToCartBlock(
customTitle: RegisterDomainCoordinator.TextContent.checkoutTitle,
purchaseCallback: domainPurchasedCallback)
analyticsSource: analyticsSource,
purchaseCallback: domainPurchasedCallback
)

coordinator.domainPurchasedCallback = domainPurchasedCallback // For no site flow (domain only)
coordinator.domainAddedToCartAndLinkedToSiteCallback = domainAddedToCart // For existing site flow (plans)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ final class AllDomainsListViewController: UIViewController {

// MARK: - Types

enum Constants {
static let analyticsSource = "all_domains"
}

private enum Layout {
static let interRowSpacing = Length.Padding.double
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,15 +45,15 @@ final class SiteMediaPickerViewController: UIViewController, SiteMediaCollection
collectionViewController.delegate = self

configureDefaultNavigationBarAppearance()
configurationNavigationItems()
configureNavigationItems()
startSelection()
}

// MARK: - Configuration

private func configurationNavigationItems() {
private func configureNavigationItems() {
let buttonCancel = UIBarButtonItem(systemItem: .cancel, primaryAction: UIAction { [weak self] _ in
self?.buttonDoneTapped()
self?.buttonCancelTapped()
})

navigationItem.leftBarButtonItem = buttonCancel
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ extension AbstractPostButton: AbstractPostMenuAction {
case .cancelAutoUpload: return UIImage(systemName: "xmark.icloud")
case .share: return UIImage(systemName: "square.and.arrow.up")
case .blaze: return UIImage(systemName: "flame")
case .comments: return UIImage(systemName: "bubble")
case .comments: return UIImage(systemName: "bubble.right")
case .settings: return UIImage(systemName: "gearshape")
case .setParent: return UIImage(systemName: "text.append")
case .setHomepage: return UIImage(systemName: "house")
Expand Down
35 changes: 24 additions & 11 deletions WordPress/Jetpack/Resources/AppStoreStrings.po
Original file line number Diff line number Diff line change
Expand Up @@ -81,22 +81,35 @@ msgctxt "app_store_keywords"
msgid "social,notes,jetpack,writing,geotagging,media,blog,website,blogging,journal"
msgstr ""

msgctxt "v23.6-whats-new"
msgctxt "v23.7-whats-new"
msgid ""
"When you move a post to the trash, you’ll now see a confirmation message appear at the bottom of the screen.\n"
"Buckle up, this update’s a doozy.\n"
"\n"
"We made some changes to the block editor.\n"
"First off, we added the All Domains screen so you can manage all your domains in one place within the app. There’s no place like home.\n"
"\n"
"- Inactive social icons and Synced Pattern titles are no longer invisible in block-based themes using dark mode. Good try, fellas, but you’re not as ninja as you think.\n"
"- In the Classic editor, you can now convert your content into blocks with the click of a button.\n"
"Next, we made updates to Site Media.\n"
"\n"
"Finally, we squashed a mini-swarm of bugs.\n"
"- The Site Media screen design has better menus, file selection and sharing, and more. It even runs faster—no more jerky GIFs or stalled-out videos.\n"
"- You can use the pan gesture to select multiple media files at once. It’s also easier to swipe from one photo to another, change metadata, and delete items.\n"
"- On iPad, you can switch between square image previews and aspect ratio.\n"
"- We fixed issues with blank placeholder images, incorrect messages, document sharing, and occasional crashes.\n"
"\n"
"- You shouldn’t run into any login issues if you enter the wrong site address on the first try.\n"
"- Incorrect HTML tags won’t show up in your post titles—you’ll only see plain text.\n"
"- During two-factor authentication, you’ll get a much more descriptive error message if you enter the wrong code while logging in.\n"
"- When you’re adding a new domain, you’ll see a more accurate message describing how the new domain will behave.\n"
"- We removed extra controls in the two-factor authentication process that added unnecessary security measures. Logging in is still safe, but now it comes with fewer headaches.\n"
"We’re not done yet. We also made big changes to Posts & Pages.\n"
"\n"
"- The Posts & Pages screen got a facelift with clean, simple display options.\n"
"- Use more advanced search features, like author and tag filters, to find the content you’d like to edit. Search also works across all authors (unless, of course, you want content from one specific person.)\n"
"- Use swipe actions to view, share, or delete posts and pages. Sweet.\n"
"- The context menu now lets you access comments, settings, and other actions for a post or page.\n"
"- We fixed issues with page refreshes and visibility, as well as a handful of crashes.\n"
"\n"
"Finally, we fixed a handful of pesky problems across the app.\n"
"\n"
"- The app now recognizes when you’ve finished uploading a GIF. (monty-burns-excellent.gif)\n"
"- “Hidden” posts now have a better description for their privacy status.\n"
"- The reader now scrolls to the top when you tap the status bar. Up, up, and away.\n"
"- The Menus screen properly creates menu items based on top-level pages.\n"
"- We fixed a block editor crash related to using text colors in older site themes.\n"
"- You shouldn’t run into any errors when you paste deeply nested content in the block editor. Much like onions, ogres, cakes, or parfaits, your content can have many layers.\n"
msgstr ""

#. translators: This is a promo message that will be attached on top of the first screenshot in the App Store.
Expand Down
54 changes: 26 additions & 28 deletions WordPress/Jetpack/Resources/release_notes.txt
Original file line number Diff line number Diff line change
@@ -1,29 +1,27 @@
* [**] Posts & Pages: Redesigned the posts and pages screen. We’ve consolidated the “default” and “compact” display options (#21804, #21842)
* [*] Posts & Pages: Moved actions to a context menu and added new actions such as “Comments”, “Settings”, and “Set as regular page”. Made the context menu available via long-press (#21886, #21965, #21963, #21967)
* [*] Posts & Pages: Added swipe actions - left to view, right to share and/or delete (#21917)
* [***] Posts & Pages: Added paging, full-text search, and searching via “author” / “tag” filters (#21789)
* [*] Posts & Pages: Search now works across all authors unless you explicitly add the author filter (#21966)
* [*] Posts & Pages: Fix an issue with the Pages list not refreshing when the pages are added or modified
* [*] Posts & Pages: Fix an issue where “View” action was available for Trashed posts (#21958)
* [*] Posts & Pages: Fix rare crashes in Posts & Pages (#21298)
* [***] Site Media: Update the design of the Site Media screen with an improved selection mode, updated context menus, a way to share more than one item at a time, better support for animated GIFs, fix a couple of visual issues with state views and search, and more [#21457]
* [**] Site Media: Improve performance by moving the work to the background, reducing memory usage, prefetching images, decompressing jpegs in the background, canceling unneeded requests, and more [#21470], [#21615], [#21664]
* [**] Site Media: Add support for selecting site media with a pan gesture [#21702]
* [*] Site Media: Add storage quota shown proactively in the context menu when adding media [#22013]
* [*] Site Media: Add aspect ratio mode to Site Media on iPad, which is a new default [#22009]
* [**] Site Media: Update the design of the Site Media details view that now allows swiping between photos, makes it easier to modify metadata, and delete items [#22008]
* [*] Site Media: Fix an issue with blank image placeholders on the Site Media screen [#21457]
* [*] Site Media: Fix an issue with 'you have no media' appears just before the media does [#9922] [#21457]
* [*] Site Media: Fix an issue with media occasionally flashing white on the Site Media screen
* [*] Site Media: Fix rare crashes in the Site Media screen and media picker [#21572]
* [*] Site Media: Fix an issue with sharing PDF and other documents [#22021]
* [*] Bug fix: Reader now scrolls to the top when tapping the status bar. [#21914]
* [*] Fix an issue with incorrect description for "Hidden" post privacy status [#21955]
* [*] [internal] Refactor sending the API requests for searching posts and pages. [#21976]
* [*] Fix an issue in Menu screen where it fails to create default menu items. [#21949]
* [*] Fix an issue with GIF uploads [#22025]
* [*] [internal] Refactor how site's pages are loaded in Site Settings -> Homepage Settings. [#21974]
* [*] Block Editor: Fix error when pasting deeply nested structure content [https://github.com/WordPress/gutenberg/pull/55613]
* [*] Block Editor: Fix crash related to accessing undefined value in `TextColorEdit` [https://github.com/WordPress/gutenberg/pull/55664]
* [***] Added the All Domains screen enabling the users to manage their domains from within the app [#22033]
Buckle up, this update’s a doozy.

First off, we added the All Domains screen so you can manage all your domains in one place within the app. There’s no place like home.

Next, we made updates to Site Media.

- The Site Media screen design has better menus, file selection and sharing, and more. It even runs faster—no more jerky GIFs or stalled-out videos.
- You can use the pan gesture to select multiple media files at once. It’s also easier to swipe from one photo to another, change metadata, and delete items.
- On iPad, you can switch between square image previews and aspect ratio.
- We fixed issues with blank placeholder images, incorrect messages, document sharing, and occasional crashes.

We’re not done yet. We also made big changes to Posts & Pages.

- The Posts & Pages screen got a facelift with clean, simple display options.
- Use more advanced search features, like author and tag filters, to find the content you’d like to edit. Search also works across all authors (unless, of course, you want content from one specific person.)
- Use swipe actions to view, share, or delete posts and pages. Sweet.
- The context menu now lets you access comments, settings, and other actions for a post or page.
- We fixed issues with page refreshes and visibility, as well as a handful of crashes.

Finally, we fixed a handful of pesky problems across the app.

- The app now recognizes when you’ve finished uploading a GIF. (monty-burns-excellent.gif)
- “Hidden” posts now have a better description for their privacy status.
- The reader now scrolls to the top when you tap the status bar. Up, up, and away.
- The Menus screen properly creates menu items based on top-level pages.
- We fixed a block editor crash related to using text colors in older site themes.
- You shouldn’t run into any errors when you paste deeply nested content in the block editor. Much like onions, ogres, cakes, or parfaits, your content can have many layers.
Loading

0 comments on commit 9782fb5

Please sign in to comment.