PluginProbe ʕ •ᴥ•ʔ
Presto Player / 4.3.0
Presto Player v4.3.0
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 / Models / Post.php
presto-player / inc / Models Last commit date
AudioPreset.php 1 month ago Block.php 9 months ago CurrentUser.php 1 year ago EmailCollection.php 1 year ago Model.php 1 week ago ModelInterface.php 1 year ago Player.php 1 week ago Post.php 1 year ago Preset.php 1 month ago ReusableVideo.php 1 month ago Setting.php 1 year ago Video.php 1 month ago Webhook.php 1 year ago
Post.php
136 lines
1 <?php
2
3 namespace PrestoPlayer\Models;
4
5 class Post {
6
7 protected $post;
8
9 public function __construct( \WP_Post $post ) {
10 $this->post = $post;
11 }
12
13 /**
14 * Find video id in post using multiple methods
15 *
16 * @return int|false
17 */
18 public function findVideoId() {
19 // first check for id in block
20 $id = $this->getVideoIdFromBlock();
21 if ( $id ) {
22 return (int) $id;
23 }
24
25 $id = $this->getVideoIdFromShortcode();
26 if ( $id ) {
27 return (int) $id;
28 }
29
30 $id = $this->getVideoIdFromContent();
31 if ( $id ) {
32 return (int) $id;
33 }
34
35 return false;
36 }
37
38 /**
39 * Find the video id from the shortcode
40 *
41 * @return int|false
42 */
43 public function getVideoIdFromShortcode() {
44 $pattern = get_shortcode_regex();
45 $content = $this->post->post_content;
46 preg_match_all( "/$pattern/", $content, $matches );
47
48 $shortcode = array_keys( $matches[2], 'presto_player' );
49 if ( ! $shortcode ) {
50 return false;
51 }
52 if ( empty( $matches[3][0] ) ) {
53 return false;
54 }
55
56 // get media hub id
57 $atts = shortcode_parse_atts( $matches[3][0] );
58 if ( ! empty( $atts['id'] ) ) {
59 $this->post = get_post( $atts['id'] );
60 return $this->findVideoId();
61 }
62 }
63
64 /**
65 * Get the video id from the block
66 */
67 public function getVideoIdFromBlock() {
68 $blocks = parse_blocks( $this->post->post_content );
69 foreach ( $blocks as $block ) {
70 // inside wrapper block
71 if ( 'presto-player/reusable-edit' === $block['blockName'] && ! empty( $block['innerBlocks'] ) ) {
72 $block = $block['innerBlocks'][0];
73 }
74
75 // we have a reusable display block
76 if ( 'presto-player/reusable-display' === $block['blockName'] ) {
77 // find the media hub post
78 if ( ! empty( $block['attrs']['id'] ) ) {
79 $block = $this->getMediaHubBlockFromPost( $block['attrs']['id'] );
80 }
81 }
82
83 // in case block needs to be filtered
84 $block = apply_filters( 'presto_player_get_block_from_content', $block );
85
86 // find the id attribute
87 if ( ! empty( $block ) && in_array( $block['blockName'], Block::getBlockTypes() ) ) {
88 if ( ! empty( $block['attrs']['id'] ) ) {
89 return $block['attrs']['id'];
90 }
91 }
92 }
93
94 return false;
95 }
96
97 /**
98 * Fallback - get video id from comment in content
99 */
100 public function getVideoIdFromContent() {
101 $content = $this->post->post_content;
102
103 preg_match_all( '/(?<=<!--presto-player:video_id=)(.*)(?=-->)/', $content, $matches );
104 if ( ! empty( $matches[0][0] ) ) {
105 return (int) $matches[0][0];
106 }
107
108 return false;
109 }
110
111 /**
112 * Retrieve the inner block from media hub post.
113 *
114 * @param int $id id of the post.
115 * @return array|false
116 */
117 public function getMediaHubBlockFromPost( $id ) {
118 if ( ! $id ) {
119 return false;
120 }
121
122 // get the media hub post.
123 $block_post = get_post( $id );
124
125 // if it has content, get the first block.
126 if ( ! empty( $block_post->post_content ) ) {
127 $inner_blocks = parse_blocks( $block_post->post_content );
128 if ( ! empty( $inner_blocks[0]['innerBlocks'][0] ) ) {
129 return $inner_blocks[0]['innerBlocks'][0] ?? false;
130 }
131 }
132
133 return false;
134 }
135 }
136