PluginProbe
OpenStation: Desktop Windows, Dock & Virtual Desktops for WP Admin / 1.1.10
OpenStation: Desktop Windows, Dock & Virtual Desktops for WP Admin v1.1.10
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 0.8.8 0.8.7 All 34 releases
← All changes | includes/widgets/widget-site-views.php +45 -38 0.9.61.1.10 View file →
@@ -1,7 +1,7 @@
1 1 <?php
2 2 /**
3 - * Desktop Mode — Site Views Widget.
3 + * OpenStation — Site Views Widget.
4 4 *
5 5 * Sparkline graph of page views over the last 7 days with
6 6 * week-over-week delta. Tries Jetpack Stats first, falls back
7 7 * to a _post_views_YYYY-MM-DD meta-key aggregator.
@@ -6,12 +6,11 @@
6 6 * week-over-week delta. Tries Jetpack Stats first, falls back
7 7 * to a _post_views_YYYY-MM-DD meta-key aggregator.
8 8 *
9 9 * Refresh: every 10 minutes.
10 - * Requires: Desktop Mode 0.18.0+ (desktop_mode_register_widget).
10 + * Requires: OpenStation 0.18.0+ (openstation_register_widget).
11 11 *
12 - * @package WPDesktopMode
13 - * @since 0.26.0
12 + * @package OpenStation
14 13 */
15 14
16 15 defined( 'ABSPATH' ) || exit;
17 16
@@ -20,18 +19,16 @@
20 19 * from the _post_views_YYYY-MM-DD meta key (plain-WP fallback).
21 20 *
22 21 * Route: GET /desktop-mode/v1/site-views-meta
23 22 * Permission: edit_posts.
24 - *
25 - * @since 0.26.0
26 23 */
27 -function desktop_mode_register_site_views_rest_route() {
24 +function openstation_register_site_views_rest_route() {
28 25 register_rest_route(
29 26 'desktop-mode/v1',
30 27 '/site-views-meta',
31 28 array(
32 29 'methods' => WP_REST_Server::READABLE,
33 - 'callback' => 'desktop_mode_site_views_meta_callback',
30 + 'callback' => 'openstation_site_views_meta_callback',
34 31 'permission_callback' => static function () {
35 32 return current_user_can( 'edit_posts' );
36 33 },
37 34 )
@@ -36,19 +33,31 @@
36 33 },
37 34 )
38 35 );
39 36 }
40 -add_action( 'rest_api_init', 'desktop_mode_register_site_views_rest_route' );
37 +add_action( 'rest_api_init', 'openstation_register_site_views_rest_route' );
41 38
42 39 /**
43 40 * Aggregate _post_views_YYYY-MM-DD meta across all posts for 14 days.
44 41 *
42 + * The result is cached in a 5-minute transient: the aggregation runs
43 + * 14 SUM() queries over postmeta, the widget only refreshes every
44 + * 10 minutes, and the data is site-wide (not per-user) — so every
45 + * concurrent viewer can share one computation. View counts accrue
46 + * continuously, so a short TTL is the invalidation strategy; no
47 + * event-based purge is needed.
48 + *
45 49 * @param WP_REST_Request $request REST request.
46 50 * @return array
47 51 */
48 -function desktop_mode_site_views_meta_callback( $request ) {
52 +function openstation_site_views_meta_callback( $request ) {
49 53 global $wpdb;
50 54
55 + $cached = get_transient( 'desktop_mode_site_views_meta' );
56 + if ( is_array( $cached ) ) {
57 + return $cached;
58 + }
59 +
51 60 $rows = array();
52 61 $today = current_time( 'Y-m-d' );
53 62
54 63 for ( $i = 0; $i < 14; $i++ ) {
@@ -61,9 +70,9 @@
61 70 WHERE meta_key = %s",
62 71 $meta_key
63 72 )
64 73 );
65 - $rows[] = array(
74 + $rows[] = array(
66 75 'date' => $date,
67 76 'views' => $total,
68 77 );
69 78 }
@@ -69,76 +78,74 @@
69 78 }
70 79
71 80 $has_data = array_sum( array_column( $rows, 'views' ) ) > 0;
72 81
73 - return array(
82 + $result = array(
74 83 'source' => 'post-meta',
75 84 'has_data' => $has_data,
76 85 'days' => array_reverse( $rows ),
77 86 );
87 +
88 + set_transient( 'desktop_mode_site_views_meta', $result, 5 * MINUTE_IN_SECONDS );
89 +
90 + return $result;
78 91 }
79 92
80 93 /**
81 94 * Register the JS + CSS assets.
82 - *
83 - * @since 0.26.0
84 95 */
85 -function desktop_mode_register_site_views_widget_assets() {
86 - $suffix = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
87 - $version = defined( 'DESKTOP_MODE_VERSION' ) ? DESKTOP_MODE_VERSION : '0';
96 +function openstation_register_site_views_widget_assets() {
97 + $suffix = openstation_asset_suffix();
98 + $version = defined( 'OPENSTATION_VERSION' ) ? OPENSTATION_VERSION : '0';
88 99
89 - $js_path = DESKTOP_MODE_DIR . 'assets/js/widget-site-views' . $suffix . '.js';
90 - $css_path = DESKTOP_MODE_DIR . 'assets/js/widget-site-views' . $suffix . '.css';
100 + $js_path = OPENSTATION_DIR . 'assets/js/widget-site-views' . $suffix . '.js';
101 + $css_path = OPENSTATION_DIR . 'assets/js/widget-site-views' . $suffix . '.css';
91 102
92 103 wp_register_style(
93 - 'desktop-mode-site-views-widget',
94 - DESKTOP_MODE_URL . 'assets/js/widget-site-views' . $suffix . '.css',
104 + 'os-site-views-widget',
105 + OPENSTATION_URL . 'assets/js/widget-site-views' . $suffix . '.css',
95 106 array(),
96 107 file_exists( $css_path ) ? (string) filemtime( $css_path ) : $version
97 108 );
98 109
99 110 wp_register_script(
100 - 'desktop-mode-site-views-widget',
101 - DESKTOP_MODE_URL . 'assets/js/widget-site-views' . $suffix . '.js',
111 + 'os-site-views-widget',
112 + OPENSTATION_URL . 'assets/js/widget-site-views' . $suffix . '.js',
102 113 array( 'wp-api-fetch' ),
103 114 file_exists( $js_path ) ? (string) filemtime( $js_path ) : $version,
104 115 true
105 116 );
106 117 }
107 -add_action( 'init', 'desktop_mode_register_site_views_widget_assets', 5 );
118 +add_action( 'init', 'openstation_register_site_views_widget_assets', 5 );
108 119
109 120 /**
110 121 * Eagerly enqueue the CSS on shell pages.
111 - *
112 - * @since 0.26.0
113 122 */
114 -function desktop_mode_enqueue_site_views_widget_styles() {
115 - if ( function_exists( 'desktop_mode_is_enabled' ) && ! desktop_mode_is_enabled() ) {
123 +function openstation_enqueue_site_views_widget_styles() {
124 + if ( function_exists( 'openstation_is_enabled' ) && ! openstation_is_enabled() ) {
116 125 return;
117 126 }
118 - if ( function_exists( 'desktop_mode_is_chromeless_request' ) && desktop_mode_is_chromeless_request() ) {
127 + if ( function_exists( 'openstation_is_chromeless_request' ) && openstation_is_chromeless_request() ) {
119 128 return;
120 129 }
121 - wp_enqueue_style( 'desktop-mode-site-views-widget' );
130 + wp_enqueue_style( 'os-site-views-widget' );
122 131 }
123 -add_action( 'admin_enqueue_scripts', 'desktop_mode_enqueue_site_views_widget_styles', 20 );
132 +add_action( 'admin_enqueue_scripts', 'openstation_enqueue_site_views_widget_styles', 20 );
124 133
125 134 /**
126 135 * Register the widget definition.
127 - *
128 - * @since 0.26.0
129 136 */
130 -function desktop_mode_register_site_views_widget() {
131 - if ( ! function_exists( 'desktop_mode_register_widget' ) ) {
137 +function openstation_register_site_views_widget() {
138 + if ( ! function_exists( 'openstation_register_widget' ) ) {
132 139 return;
133 140 }
134 - desktop_mode_register_widget(
141 + openstation_register_widget(
135 142 'desktop-mode/site-views',
136 143 array(
137 144 'label' => __( 'Site Views', 'desktop-mode' ),
138 145 'description' => __( 'Sparkline of page views over the last 7 days with week-over-week delta.', 'desktop-mode' ),
139 146 'icon' => 'dashicons-chart-area',
140 - 'script' => 'desktop-mode-site-views-widget',
147 + 'script' => 'os-site-views-widget',
141 148 'movable' => true,
142 149 'resizable' => true,
143 150 'min_width' => 240,
144 151 'min_height' => 160,
@@ -146,5 +153,5 @@
146 153 'default_height' => 200,
147 154 )
148 155 );
149 156 }
150 -add_action( 'init', 'desktop_mode_register_site_views_widget', 6 );
157 +add_action( 'init', 'openstation_register_site_views_widget', 6 );