PluginProbe ʕ •ᴥ•ʔ
Presto Player / 4.3.2
Presto Player v4.3.2
4.3.2 4.3.1 4.3.0 4.2.4 4.2.3 4.2.2 4.2.0 4.2.1 trunk 1.10.0 1.10.1 1.10.2 1.11.0 1.12.0 1.13.0 1.14.0 1.14.1 1.5.10 1.5.11 1.5.12 1.5.13 1.5.14 1.5.15 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.6.10 1.6.11 1.6.12 1.6.13 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.9.0 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.14 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.1 2.0.10 2.0.11 2.0.12 2.0.13 2.0.14 2.0.15 2.0.16 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.0.9 2.1.0 2.2.0 2.2.1 2.2.2 2.2.3 2.2.3-beta1 2.3.0 2.3.1 2.3.2 2.3.3 3.0.0 3.0.0-beta1 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.8 3.1.0 3.1.1 3.1.2 3.1.3 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.0.5 4.0.6 4.0.7 4.0.8 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4
presto-player / inc / Services / Player.php
presto-player / inc / Services Last commit date
API 1 month ago Blocks 10 months ago License 1 day ago AdminNotice.php 1 month ago AdminNotices.php 1 month ago AjaxActions.php 1 month ago Blocks.php 2 years ago Compatibility.php 10 months ago Learn.php 2 months ago Menu.php 2 months ago Migrations.php 2 years ago NpsSurvey.php 5 months ago Onboarding.php 1 month ago Player.php 1 week ago PluginInstaller.php 2 months ago PreloadService.php 1 year ago ProCompatibility.php 2 months ago ReusableVideos.php 3 weeks ago RewriteRulesManager.php 2 years ago Scripts.php 3 weeks ago Settings.php 2 months ago Shortcodes.php 1 month ago Streamer.php 1 month ago Translation.php 1 month ago Usage.php 1 month ago VideoPostType.php 3 weeks ago
Player.php
92 lines
1 <?php
2 /**
3 * Player progress AJAX service.
4 *
5 * @package PrestoPlayer
6 */
7
8 namespace PrestoPlayer\Services;
9
10 use PrestoPlayer\Contracts\Service;
11
12 /**
13 * Registers the AJAX endpoints used to track player progress.
14 */
15 class Player implements Service {
16
17 /**
18 * Register the AJAX hooks for this service.
19 *
20 * @return void
21 */
22 public function register() {
23 // Ajax percentage actions.
24 add_action( 'wp_ajax_presto_player_progress_percent', array( $this, 'progressAjaxPercent' ) );
25 add_action( 'wp_ajax_nopriv_presto_player_progress_percent', array( $this, 'progressAjaxPercent' ) );
26
27 add_action( 'wp_ajax_nopriv_presto_refresh_progress_nonce', array( $this, 'generateNonce' ) );
28 add_action( 'wp_ajax_presto_refresh_progress_nonce', array( $this, 'generateNonce' ) );
29 }
30
31 /**
32 * Send a freshly generated progress nonce as a JSON response.
33 *
34 * Scoped to progress tracking only — this endpoint is open to logged-out
35 * users, so it must not hand out a general-purpose wp_rest nonce.
36 *
37 * @return void
38 */
39 public function generateNonce() {
40 wp_send_json_success( wp_create_nonce( 'presto_player_progress' ) );
41 }
42
43 /**
44 * Run ajax percent action.
45 *
46 * @return void
47 */
48 public function progressAjaxPercent() {
49 $response = $this->progressAction();
50 if ( is_wp_error( $response ) ) {
51 wp_send_json_error( $response->get_error_message(), $response->get_all_error_data( 'status' ) );
52 }
53
54 wp_send_json_success();
55 }
56
57 /**
58 * Run the progress action.
59 *
60 * @return bool|\WP_Error True on success, or a WP_Error describing the failure.
61 */
62 public function progressAction() {
63 // Verify nonce. wp_rest is still accepted for pages rendered before the scoped nonce shipped.
64 $nonce = isset( $_POST['nonce'] ) ? sanitize_text_field( wp_unslash( $_POST['nonce'] ) ) : '';
65 if ( ! wp_verify_nonce( $nonce, 'presto_player_progress' ) && ! wp_verify_nonce( $nonce, 'wp_rest' ) ) {
66 return new \WP_Error( 'invalid', 'Nonce invalid', array( 'status' => 403 ) );
67 }
68
69 // Video id is required.
70 if ( empty( $_POST['id'] ) ) {
71 return new \WP_Error( 'invalid', 'You must provide a valid video id', array( 'status' => 400 ) );
72 }
73
74 // Must have a valid percentage.
75 if ( ! isset( $_POST['percent'] ) ) {
76 return new \WP_Error( 'invalid', 'You must provide a valid percentage', array( 'status' => 400 ) );
77 }
78
79 $id = (int) $_POST['id'];
80 $percent = (int) $_POST['percent'];
81 $visit_time = isset( $_POST['visit_time'] ) ? (int) $_POST['visit_time'] : false;
82
83 /**
84 * Progress event, sends video id and percent progress.
85 */
86 do_action( 'presto_player_progress', $id, $percent, $visit_time );
87
88 // Success.
89 return true;
90 }
91 }
92