PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.2-a.1
Jetpack – WP Security, Backup, Speed, & Growth v16.2-a.1
16.2-a.3 16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / jetpack_vendor / automattic / jetpack-videopress / src / class-stats.php
jetpack / jetpack_vendor / automattic / jetpack-videopress / src Last commit date
js 2 months ago tus 1 month ago videopress-divi 2 months ago videopress-divi-5 2 months ago class-access-control.php 5 days ago class-admin-ui.php 2 weeks ago class-ajax.php 1 month ago class-attachment-handler.php 1 month ago class-block-editor-content.php 1 month ago class-block-editor-extensions.php 2 weeks ago class-block-replacement.php 9 months ago class-caption-tracks.php 1 month ago class-data.php 1 month ago class-divi.php 2 months ago class-initial-state.php 2 weeks ago class-initializer.php 5 days ago class-jwt-token-bridge.php 2 years ago class-module-control.php 3 years ago class-options.php 2 years ago class-package-version.php 5 days ago class-plan.php 2 years ago class-rest-controller.php 1 month ago class-site.php 3 years ago class-stats.php 1 year ago class-status.php 9 months ago class-upload-exception.php 3 years ago class-uploader-rest-endpoints.php 2 weeks ago class-uploader.php 1 month ago class-utils.php 3 months ago class-video-block-email-renderer.php 2 months ago class-videopress-rest-api-v1-features.php 6 months ago class-videopress-rest-api-v1-settings.php 1 month ago class-videopress-rest-api-v1-site.php 2 weeks ago class-videopress-rest-api-v1-stats.php 3 years ago class-videopresstoken.php 1 month ago class-wpcom-rest-api-v2-attachment-field-videopress.php 9 months ago class-wpcom-rest-api-v2-attachment-videopress-data.php 1 month ago class-wpcom-rest-api-v2-endpoint-videopress-caption-tracks.php 1 month ago class-wpcom-rest-api-v2-endpoint-videopress.php 2 weeks ago class-xmlrpc.php 1 month ago utility-functions.php 4 weeks ago
class-stats.php
190 lines
1 <?php
2 /**
3 * Provides data stats about videos inside VideoPress
4 *
5 * @package automattic/jetpack-videopress
6 */
7
8 namespace Automattic\Jetpack\VideoPress;
9
10 use Automattic\Jetpack\Connection\Client;
11 use WP_Error;
12
13 /**
14 * Provides data stats about videos inside VideoPress
15 */
16 class Stats {
17 /**
18 * Hit WPCOM video-plays stats endpoint.
19 *
20 * @param array $args Request args.
21 * @return array|WP_Error WP HTTP response on success
22 */
23 public static function fetch_video_plays( $args = array() ) {
24 $blog_id = VideoPressToken::blog_id();
25
26 $endpoint = sprintf(
27 'sites/%d/stats/video-plays?check_stats_module=false',
28 $blog_id
29 );
30
31 if ( is_array( $args ) && ! empty( $args ) ) {
32 $endpoint .= '&' . http_build_query( $args );
33 }
34
35 $result = Client::wpcom_json_api_request_as_blog( $endpoint );
36
37 if ( is_wp_error( $result ) ) {
38 return $result;
39 }
40
41 $response = $result['http_response'];
42 $response_code = $response->get_status();
43 $response_body = json_decode( $response->get_data(), true );
44
45 if ( 200 !== $response_code ) {
46 return new WP_Error(
47 'videopress_stats_error',
48 $response_body
49 );
50 }
51
52 return array(
53 'code' => $response_code,
54 'data' => $response_body,
55 );
56 }
57
58 /**
59 * Returns the counter of today's plays for all videos.
60 *
61 * @return int|WP_Error the total of plays for today, or WP_Error on failure.
62 */
63 public static function get_today_plays() {
64 $response = self::fetch_video_plays();
65
66 if ( is_wp_error( $response ) ) {
67 return $response;
68 }
69
70 $data = $response['data'];
71
72 if ( ! $data || ! isset( $data['days'] ) || ! is_countable( $data['days'] ) || count( $data['days'] ) === 0 ) {
73 return new WP_Error(
74 'videopress_stats_error',
75 __( 'Could not find any stats from the service', 'jetpack-videopress-pkg' )
76 );
77 }
78
79 /*
80 * The only result here is today's stats
81 */
82 $today_stats = array_pop( $data['days'] );
83
84 return $today_stats['total_plays'];
85 }
86
87 /**
88 * Returns the featured stats for VideoPress.
89 *
90 * @param int $period_count (optional) The number of days to consider.
91 * @param string $period (optional) The period to consider.
92 *
93 * @return array|WP_Error a list of stats, or WP_Error on failure.
94 */
95 public static function get_featured_stats( $period_count = 14, $period = 'day' ) {
96 $response = self::fetch_video_plays(
97 array(
98 'period' => $period,
99 'num' => $period_count,
100 'complete_stats' => true,
101 )
102 );
103
104 if ( is_wp_error( $response ) ) {
105 return $response;
106 }
107
108 $data = $response['data'];
109
110 if ( ! $data ) {
111 return new WP_Error(
112 'videopress_stats_error',
113 __( 'Could not find any stats from the service', 'jetpack-videopress-pkg' )
114 );
115 }
116
117 // Get only the list of dates
118 $dates = $data['days'];
119
120 // Organize the data into the planned stats
121 return self::prepare_featured_stats( $dates, $period_count, $period );
122 }
123
124 /**
125 * Prepares the featured stats for VideoPress.
126 *
127 * @param array $dates The list of dates returned by the API.
128 * @param int $period_count The total number of days to consider.
129 * @param string $period The period to consider.
130 * @return array a list of stats.
131 */
132 public static function prepare_featured_stats( $dates, $period_count, $period = 'day' ) {
133 /**
134 * Ensure the sorting of the dates, recent ones first.
135 * This way, the first 7 positions are from the last 7 days,
136 * and the next 7 positions are from the 7 days before it.
137 */
138 krsort( $dates );
139 $period_of_data = floor( $period_count / 2 );
140 $period = $period === 'day' ? __( 'day', 'jetpack-videopress-pkg' ) : __( 'year', 'jetpack-videopress-pkg' );
141
142 // template for the response
143 $featured_stats = array(
144 // translators: %1$d is the number of units of time, %2$s is the period in which the units of time are measured ex. 'day' or 'year'.
145 'label' => sprintf( _n( 'last %1$d %2$s', 'last %1$d %2$ss', (int) $period_of_data, 'jetpack-videopress-pkg' ), $period_of_data, $period ),
146 'period' => $period,
147 'data' => array(
148 'views' => array(
149 'current' => 0,
150 'previous' => 0,
151 ),
152 'impressions' => array(
153 'current' => 0,
154 'previous' => 0,
155 ),
156 'watch_time' => array(
157 'current' => 0,
158 'previous' => 0,
159 ),
160 ),
161 );
162
163 // Go through the dates to compute the stats
164 $counter = 0;
165 foreach ( $dates as $date_info ) {
166 $date_totals = $date_info['total'];
167
168 if ( $counter < floor( $period_count / 2 ) ) {
169
170 // the first 7 elements are for the current period
171 $featured_stats['data']['views']['current'] += $date_totals['views'];
172 $featured_stats['data']['impressions']['current'] += $date_totals['impressions'];
173 $featured_stats['data']['watch_time']['current'] += $date_totals['watch_time'];
174
175 } else {
176
177 // the next 7 elements are for the previous period
178 $featured_stats['data']['views']['previous'] += $date_totals['views'];
179 $featured_stats['data']['impressions']['previous'] += $date_totals['impressions'];
180 $featured_stats['data']['watch_time']['previous'] += $date_totals['watch_time'];
181
182 }
183
184 ++$counter;
185 }
186
187 return $featured_stats;
188 }
189 }
190