PluginProbe
OpenStation: Desktop Windows, Dock & Virtual Desktops for WP Admin / 1.1.12
OpenStation: Desktop Windows, Dock & Virtual Desktops for WP Admin v1.1.12
1.1.12 1.1.11 1.1.10 1.1.9 1.1.8 1.1.7 1.1.6 1.1.5 1.1.4 1.1.3 1.1.2 1.1.1 1.1.0 1.0.1 1.0.0 0.9.8 0.9.7 0.9.6 0.9.4 0.9.5 0.9.3 0.9.2 0.9.1 0.9.0 0.8.9 All 36 releases
← All changes | includes/my-wordpress/integrations/woocommerce.php +53 -30 1.1.2 → 1.1.12 View file →
@@ -325,9 +325,9 @@
325 325 $order = 100;
326 326 foreach ( ( is_wp_error( $terms ) ? array() : (array) $terms ) as $term ) {
327 327 $bands[] = array(
328 328 'id' => 'cat:' . $term->slug,
329 - 'label' => $term->name,
329 + 'label' => openstation_plain_text_title( $term->name ),
330 330 'order' => $order,
331 331 'category' => $term->slug,
332 332 );
333 333 $order += 10;
@@ -1374,9 +1374,9 @@
1374 1374 'rating' => (float) $product->get_average_rating(),
1375 1375 'reviews' => (int) $product->get_review_count(),
1376 1376 'productType' => $type_label,
1377 1377 'variations' => $product->is_type( 'variable' ) ? count( $product->get_children() ) : 0,
1378 - 'categories' => is_wp_error( $categories ) ? array() : array_values( $categories ),
1378 + 'categories' => is_wp_error( $categories ) ? array() : array_map( 'openstation_plain_text_title', array_values( $categories ) ),
1379 1379 'permalink' => (string) $product->get_permalink(),
1380 1380 'editUrl' => (string) get_edit_post_link( $product->get_id(), 'raw' ),
1381 1381 );
1382 1382 }
@@ -1405,9 +1405,9 @@
1405 1405 $product_id = method_exists( $item, 'get_product_id' ) ? (int) $item->get_product_id() : 0;
1406 1406 // Variations edit through their parent product's screen.
1407 1407 $edit_id = $product_id;
1408 1408 $items[] = array(
1409 - 'name' => $item->get_name(),
1409 + 'name' => openstation_plain_text_title( $item->get_name() ),
1410 1410 'quantity' => (int) $item->get_quantity(),
1411 1411 'total' => openstation_my_wordpress_woo_price( $item->get_total(), $order->get_currency() ),
1412 1412 'id' => $product_id,
1413 1413 // A line item whose product has since been deleted has no
@@ -1555,9 +1555,9 @@
1555 1555 foreach ( $ids as $id ) {
1556 1556 $term = get_term( (int) $id, $taxonomy );
1557 1557 if ( $term && ! is_wp_error( $term ) ) {
1558 1558 $out[] = array(
1559 - 'label' => $term->name,
1559 + 'label' => openstation_plain_text_title( $term->name ),
1560 1560 'editUrl' => (string) get_edit_term_link( $term->term_id, $taxonomy ),
1561 1561 );
1562 1562 }
1563 1563 }
@@ -1569,9 +1569,9 @@
1569 1569 foreach ( $ids as $id ) {
1570 1570 $product = wc_get_product( (int) $id );
1571 1571 if ( $product ) {
1572 1572 $out[] = array(
1573 - 'label' => $product->get_name(),
1573 + 'label' => openstation_plain_text_title( $product->get_name() ),
1574 1574 'editUrl' => (string) get_edit_post_link( $product->get_id(), 'raw' ),
1575 1575 );
1576 1576 }
1577 1577 }
@@ -1899,25 +1899,34 @@
1899 1899
1900 1900 /**
1901 1901 * Register the integration bundle.
1902 1902 *
1903 + * Cache-busted by `filemtime`, like the window bundle it rides along
1904 + * with (see `openstation_my_wordpress_register_assets()`). The bundle
1905 + * is fetched lazily by URL, so a `ver` that only moves on release
1906 + * would let a browser's cached copy outlive builds within one — a
1907 + * stale companion against a fresh WP Explorer bundle is a contract
1908 + * drift no error message points at.
1909 + *
1903 1910 * @return void
1904 1911 */
1905 1912 function openstation_my_wordpress_woo_register_assets() {
1913 + $js_path = OPENSTATION_DIR . 'assets/js/my-wordpress-woocommerce' . openstation_asset_suffix() . '.js';
1906 1914 wp_register_script(
1907 1915 'os-my-wordpress-woocommerce',
1908 - OPENSTATION_URL . 'assets/js/my-wordpress-woocommerce' . ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min' ) . '.js',
1916 + OPENSTATION_URL . 'assets/js/my-wordpress-woocommerce' . openstation_asset_suffix() . '.js',
1909 1917 array( 'wp-hooks' ),
1910 - OPENSTATION_VERSION,
1918 + file_exists( $js_path ) ? (string) filemtime( $js_path ) : OPENSTATION_VERSION,
1911 1919 true
1912 1920 );
1913 1921 wp_set_script_translations( 'os-my-wordpress-woocommerce', 'desktop-mode' );
1914 1922
1923 + $css_path = OPENSTATION_DIR . 'assets/css/my-wordpress-woocommerce.css';
1915 1924 wp_register_style(
1916 1925 'os-my-wordpress-woocommerce',
1917 1926 OPENSTATION_URL . 'assets/css/my-wordpress-woocommerce.css',
1918 1927 array( 'desktop-mode-my-wordpress' ),
1919 - OPENSTATION_VERSION
1928 + file_exists( $css_path ) ? (string) filemtime( $css_path ) : OPENSTATION_VERSION
1920 1929 );
1921 1930 }
1922 1931 add_action( 'init', 'openstation_my_wordpress_woo_register_assets', 5 );
1923 1932
@@ -1923,16 +1932,20 @@
1923 1932
1924 1933 /**
1925 1934 * Attach the integration's config to its script handle.
1926 1935 *
1927 - * The bundle itself is NOT enqueued here, and that is the point. It
1928 - * subscribes to the WP Explorer window's `preview-extras` /
1929 - * `group-extras` actions, so it has to be in the tab before that
1930 - * window's bundle paints — but not one moment sooner. It travels as
1931 - * a companion of `desktop-mode-my-wordpress` (see the `scripts` arg
1932 - * on that window's registration), which means the shell loads it
1933 - * when the window first opens and a merchant who never opens WP
1934 - * Explorer never downloads it at all.
1936 + * NOTHING is enqueued here, and that is the point. The bundle
1937 + * subscribes to the WP Explorer app's `preview-extras` /
1938 + * `group-extras` actions, so it has to be in the tab before the app's
1939 + * client view paints — but not one moment sooner. It travels as a
1940 + * companion of the app window (see
1941 + * `openstation_my_wordpress_woo_app_window_args()` below), which
1942 + * means the shell loads it when the window first opens and a merchant
1943 + * who never opens the explorer never downloads it at all. The
1944 + * stylesheet travels the same way (the `styles` arg): every selector
1945 + * in it is scoped to surfaces inside the explorer or the Customer
1946 + * window, so on any document not showing those —
1947 + * it was pure parse weight.
1935 1948 *
1936 1949 * Only for users who can open the site window on a store — everyone
1937 1950 * else pays nothing.
1938 1951 *
@@ -1954,12 +1967,8 @@
1954 1967 if ( ! openstation_my_wordpress_user_can_use() ) {
1955 1968 return;
1956 1969 }
1957 1970
1958 - // The stylesheet stays eager: it is a few KB, it has no parse
1959 - // cost worth deferring, and the window's own CSS is enqueued the
1960 - // same way.
1961 - wp_enqueue_style( 'os-my-wordpress-woocommerce' );
1962 1971 wp_add_inline_script(
1963 1972 'os-my-wordpress-woocommerce',
1964 1973 sprintf(
1965 1974 'window.openStationWooConfig=%s;',
@@ -1969,8 +1978,10 @@
1969 1978 'restNonce' => wp_create_nonce( 'wp_rest' ),
1970 1979 'canOrders' => true === openstation_my_wordpress_woo_orders_permission(),
1971 1980 'canCustomers' => true === openstation_my_wordpress_woo_customers_permission(),
1972 1981 'orderBands' => openstation_my_wordpress_woo_order_bands(),
1982 + // `wc-` slug → label, for the Orders list view.
1983 + 'orderStatuses' => wc_get_order_statuses(),
1973 1984 'productBands' => openstation_my_wordpress_woo_product_bands(),
1974 1985 'couponBands' => openstation_my_wordpress_woo_coupon_bands_with_counts(),
1975 1986 // Only built for a viewer who may see them — the
1976 1987 // band counts are money, and the plan behind them
@@ -1993,21 +2004,29 @@
1993 2004 }
1994 2005 add_action( 'admin_enqueue_scripts', 'openstation_my_wordpress_woo_enqueue', 5 );
1995 2006
1996 2007 /**
1997 - * Attach the bundle to the WP Explorer window as a companion script.
2008 + * Attach the bundle and stylesheet to the WP Explorer app.
1998 2009 *
1999 - * `scripts` handles load in order immediately before the window's own
2000 - * `script`, so the integration is listening to `preview-extras` /
2001 - * `group-extras` by the time the window bundle fires them — the same
2002 - * guarantee the old boot-time enqueue gave, at the cost of nothing
2003 - * until the window opens.
2010 + * The app fires the `os.my-wordpress.*` seams this bundle subscribes
2011 + * to (`preview-extras`, `group-extras`, `list-tile`, the banding and
2012 + * user filters), and its rows carry the `openstation_woo` /
2013 + * `openstation_woo_customer` facts. `scripts` handles load in order
2014 + * immediately before the window's own script, so the integration is
2015 + * listening by the time the app's client view fires the seams — as a
2016 + * first-open companion, costing nothing until the window opens. The
2017 + * config blob rides the handle (see
2018 + * `openstation_my_wordpress_woo_enqueue()`), so it arrives with the
2019 + * bundle. The `styles` handle keeps its `wp_register_style`
2020 + * dependency on the shared explorer sheet, so its equal-specificity
2021 + * overrides (the ribbon and panel chrome) still win by source order.
2004 2022 *
2005 - * @param array $window_args Args passed to `openstation_register_window()`.
2023 + * @param array $window_args Args passed to `openstation_register_window()`.
2024 + * @param string $app_id App id.
2006 2025 * @return array
2007 2026 */
2008 -function openstation_my_wordpress_woo_window_args( $window_args ) {
2009 - if ( ! is_array( $window_args ) || ! openstation_my_wordpress_woo_active() ) {
2027 +function openstation_my_wordpress_woo_app_window_args( $window_args, $app_id ) {
2028 + if ( 'my-wordpress' !== (string) $app_id || ! is_array( $window_args ) || ! openstation_my_wordpress_woo_active() ) {
2010 2029 return $window_args;
2011 2030 }
2012 2031
2013 2032 $scripts = isset( $window_args['scripts'] ) ? (array) $window_args['scripts'] : array();
@@ -2012,9 +2031,13 @@
2012 2031
2013 2032 $scripts = isset( $window_args['scripts'] ) ? (array) $window_args['scripts'] : array();
2014 2033 $scripts[] = 'os-my-wordpress-woocommerce';
2015 2034
2035 + $styles = isset( $window_args['styles'] ) ? (array) $window_args['styles'] : array();
2036 + $styles[] = 'os-my-wordpress-woocommerce';
2037 +
2016 2038 $window_args['scripts'] = $scripts;
2039 + $window_args['styles'] = $styles;
2017 2040
2018 2041 return $window_args;
2019 2042 }
2020 -add_filter( 'openstation_my_wordpress_window_args', 'openstation_my_wordpress_woo_window_args' );
2043 +add_filter( 'openstation_app_window_args', 'openstation_my_wordpress_woo_app_window_args', 10, 2 );