PluginProbe ʕ •ᴥ•ʔ
Presto Player / 4.3.1
Presto Player v4.3.1
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 / Integrations / Divi / D5 / PrestoVideoModule.php
presto-player / inc / Integrations / Divi / D5 Last commit date
module-json 5 days ago PlayerAttrs.php 5 days ago PrestoVideoModule.php 5 days ago
PrestoVideoModule.php
84 lines
1 <?php
2 /**
3 * Registers the Presto Player video module for Divi 5.
4 *
5 * @package presto-player
6 */
7
8 namespace PrestoPlayer\Integrations\Divi\D5;
9
10 use ET\Builder\Framework\DependencyManagement\Interfaces\DependencyInterface;
11 use ET\Builder\Packages\ModuleLibrary\ModuleRegistration;
12
13 /**
14 * Divi 5 module dependency that registers the Presto Player video block.
15 */
16 class PrestoVideoModule implements DependencyInterface {
17
18 /**
19 * Registers the module with the Divi 5 module library.
20 *
21 * @return void
22 */
23 public function load(): void {
24 ModuleRegistration::register_module(
25 __DIR__ . '/module-json/player',
26 array( 'render_callback' => array( self::class, 'render_callback' ) )
27 );
28 }
29
30 /**
31 * Renders the Presto Player video module on the front end.
32 *
33 * @param array<string, mixed> $attrs Module attribute array from D5.
34 * @param string $content Inner content string.
35 * @param object $block The block object.
36 * @param object $elements The elements object.
37 * @param array<string, mixed> $default_printed_style_attrs Default printed style attributes.
38 * @return string
39 */
40 public static function render_callback( $attrs, $content, $block, $elements, $default_printed_style_attrs ) {
41 $mapped = PlayerAttrs::map( $attrs );
42
43 if ( empty( $mapped['video_id'] ) ) {
44 return self::curtain();
45 }
46
47 global $load_presto_js;
48 $load_presto_js = true;
49
50 // Enqueue player assets once per request even if several modules render.
51 static $assets_enqueued = false;
52 if ( ! $assets_enqueued ) {
53 ( new \PrestoPlayer\Services\Scripts() )->blockAssets();
54 $assets_enqueued = true;
55 }
56
57 // Same visibility guard as the shortcode — renderBlock() skips WP's
58 // singular-post check, so private/draft Media Hub items would leak.
59 $fallback = ( new \PrestoPlayer\Services\Shortcodes() )->maybeUnauthorizedFallback( $mapped['video_id'] );
60 if ( false !== $fallback ) {
61 return $fallback;
62 }
63
64 $video = new \PrestoPlayer\Models\ReusableVideo( $mapped['video_id'] );
65 $html = $video->renderBlock( $mapped['overrides'] );
66
67 return $html ? $html : self::curtain();
68 }
69
70 /**
71 * The empty-state placeholder shown when no video is selected.
72 *
73 * @return string
74 */
75 private static function curtain(): string {
76 // The editor draws its own placeholder (PlayerEdit); on the public front end an
77 // unconfigured module renders nothing, matching an empty Divi 4 module.
78 if ( ! function_exists( 'et_core_is_fb_enabled' ) || ! et_core_is_fb_enabled() ) {
79 return '';
80 }
81 return '<presto-video-curtain-ui>' . esc_html__( 'Please select media.', 'presto-player' ) . '</presto-video-curtain-ui>';
82 }
83 }
84