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