1 | <?php |
||||
2 | /** |
||||
3 | * Brightcove Video CMB2 Field Register. |
||||
4 | * |
||||
5 | * @package cmb2-brightcove-video-field |
||||
6 | */ |
||||
7 | |||||
8 | namespace CMB2\BrightcoveVideoField; |
||||
9 | |||||
10 | use BC_Video_Shortcode; |
||||
11 | |||||
12 | /** |
||||
13 | * Hook up all the filters and actions. |
||||
14 | */ |
||||
15 | function bootstrap() { |
||||
16 | |||||
17 | 1 | add_action( 'plugins_loaded', __NAMESPACE__ . '\\load_textdomain' ); |
|||
18 | 1 | add_action( 'plugins_loaded', __NAMESPACE__ . '\\load_plugin' ); |
|||
19 | 1 | } |
|||
20 | |||||
21 | /** |
||||
22 | * Load plugin text domain for text translation. |
||||
23 | */ |
||||
24 | function load_textdomain() { |
||||
25 | |||||
26 | load_plugin_textdomain( |
||||
27 | 'cmb2-brightcove-video-field', |
||||
28 | false, |
||||
29 | basename( plugin_dir_url( __DIR__ ) ) . '/languages' |
||||
30 | ); |
||||
31 | } |
||||
32 | |||||
33 | /** |
||||
34 | * Dependency check before loading the plugin. |
||||
35 | */ |
||||
36 | function is_dependency_loaded() { |
||||
37 | |||||
38 | return ( |
||||
39 | 1 | defined( 'CMB2_LOADED' ) |
|||
40 | 1 | && ! empty( constant( 'CMB2_LOADED' ) ) |
|||
41 | 1 | && defined( 'BRIGHTCOVE_URL' ) |
|||
42 | 1 | && ! empty( constant( 'BRIGHTCOVE_URL' ) ) |
|||
43 | ); |
||||
44 | } |
||||
45 | |||||
46 | /** |
||||
47 | * Load plugin functionality if dependency are loaded correctly. |
||||
48 | */ |
||||
49 | function load_plugin() { |
||||
50 | |||||
51 | 1 | if ( ! is_dependency_loaded() ) { |
|||
52 | 1 | add_action( 'admin_notices', __NAMESPACE__ . '\\dependency_admin_notice' ); |
|||
53 | 1 | add_action( 'network_admin_notices', __NAMESPACE__ . '\\dependency_admin_notice' ); |
|||
54 | 1 | return; |
|||
55 | } |
||||
56 | |||||
57 | 1 | add_brightcove_video_field(); |
|||
58 | 1 | } |
|||
59 | |||||
60 | /** |
||||
61 | * Plugin dependency error message for admin notice. |
||||
62 | */ |
||||
63 | function dependency_admin_notice() { |
||||
64 | |||||
65 | 1 | echo '<div class="error"><p>'; |
|||
66 | 1 | esc_html_e( '"CMB2 BrightCove Video Field" plugin can\'t be loaded, It requires following plugins to be installed and activated.', 'cmb2-brightcove-video-field' ); |
|||
67 | 1 | echo '<ol>'; |
|||
68 | 1 | printf( |
|||
69 | 1 | '<li><a href="https://wordpress.org/plugins/cmb2/" target="_blank">%s</a></li>', |
|||
70 | 1 | esc_html__( 'CMB2', 'cmb2-brightcove-video-field' ) |
|||
71 | ); |
||||
72 | 1 | printf( |
|||
73 | 1 | ' <li><a href="https://wordpress.org/plugins/brightcove-video-connect" target="_blank">%s</a></li>', |
|||
74 | 1 | esc_html__( 'Brightcove Video Connect', 'cmb2-brightcove-video-field' ) |
|||
75 | ); |
||||
76 | 1 | echo '</ol>'; |
|||
77 | 1 | esc_html_e( 'Please verify the dependency to enable this field type.', 'cmb2-brightcove-video-field' ); |
|||
78 | 1 | echo '</p></div>'; |
|||
79 | 1 | } |
|||
80 | |||||
81 | /** |
||||
82 | * Register brightcove video field. |
||||
83 | */ |
||||
84 | function add_brightcove_video_field() { |
||||
85 | |||||
86 | 2 | add_action( 'admin_enqueue_scripts', __NAMESPACE__ . '\\enqueue_scripts', 11 ); |
|||
87 | 2 | add_action( 'cmb2_render_brightcove_video', __NAMESPACE__ . '\\cmb2_render_callback_for_brightcove_video', 10, 5 ); |
|||
88 | 2 | add_action( 'admin_footer', __NAMESPACE__ . '\\js_wp_templates' ); |
|||
89 | 2 | } |
|||
90 | |||||
91 | /** |
||||
92 | * Enqueue helper JS script in the admin. |
||||
93 | * |
||||
94 | * @param string $hook Hook for the current page in the admin. |
||||
95 | */ |
||||
96 | function enqueue_scripts( $hook ) { |
||||
97 | |||||
98 | 1 | if ( ! in_array( $hook, [ 'post.php', 'post-new.php' ], true ) ) { |
|||
99 | 1 | return; |
|||
100 | } |
||||
101 | |||||
102 | 1 | wp_enqueue_style( |
|||
103 | 1 | 'cmb2-brightcove-video-field-css', |
|||
104 | 1 | plugin_dir_url( __FILE__ ) . 'assets/css/brightcove-video-field.css', |
|||
105 | 1 | [], |
|||
106 | 1 | VERSION |
|||
107 | ); |
||||
108 | |||||
109 | 1 | wp_enqueue_script( |
|||
110 | 1 | 'cmb2-brightcove-video-field-js', |
|||
111 | 1 | plugin_dir_url( __FILE__ ) . 'assets/js/brightcove-video-field.js', |
|||
112 | [ |
||||
113 | 1 | 'wp-util', |
|||
114 | 'brightcove-admin', |
||||
115 | ], |
||||
116 | 1 | VERSION, |
|||
117 | 1 | true |
|||
118 | ); |
||||
119 | 1 | } |
|||
120 | |||||
121 | |||||
122 | /** |
||||
123 | * Brightcove Video Field render callback function. |
||||
124 | * |
||||
125 | * @param \CMB2_Field $field `CMB2_Field` object. |
||||
126 | * @param array $escaped_value Field escaped values. |
||||
127 | * @param int $object_id Field object id, ex: post id, term id etc. |
||||
128 | * @param string $object_type Field object type, ex: post type, user, option-page etc. |
||||
129 | * @param \CMB2_Types $field_type_object `CMB2_Types` object. |
||||
130 | */ |
||||
131 | function cmb2_render_callback_for_brightcove_video( $field, $escaped_value, $object_id, $object_type, $field_type_object ) { |
||||
0 ignored issues
–
show
The parameter
$object_id is not used and could be removed.
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
This check looks for parameters that have been defined for a function or method, but which are not used in the method body. ![]() |
|||||
132 | |||||
133 | 1 | $field_id = $field->id(); |
|||
134 | |||||
135 | $bc_video_values = [ |
||||
136 | 1 | 'video_id' => $escaped_value['bc_video_id'] ?? '', |
|||
137 | 1 | 'player_id' => $escaped_value['bc_player_id'] ?? '', |
|||
138 | 1 | 'account_id' => $escaped_value['bc_account_id'] ?? '', |
|||
139 | 1 | 'video_duration' => $escaped_value['bc_video_duration'] ?? '', |
|||
140 | ]; |
||||
141 | |||||
142 | $bc_video_args = [ |
||||
143 | 1 | 'embed' => 'iframe', |
|||
144 | 'width' => '100%', |
||||
145 | 'height' => 'auto', |
||||
146 | 'padding_top' => '10', // Adding min 10 padding since by-default it's adding 56.25% padding even with 0 padding. |
||||
147 | ]; |
||||
148 | |||||
149 | 1 | $bc_video_args = wp_parse_args( $bc_video_values, $bc_video_args ); |
|||
150 | |||||
151 | 1 | $allowed_html = wp_kses_allowed_html( 'post' ); |
|||
152 | 1 | $allowed_html['iframe'] = [ |
|||
153 | 'src' => true, |
||||
154 | 'webkitallowfullscreen' => true, |
||||
155 | 'allowfullscreen' => true, |
||||
156 | 'mozallowfullscreen' => true, |
||||
157 | 'style' => true, |
||||
158 | ]; |
||||
159 | 1 | $allowed_html['input'] = [ |
|||
160 | 'type' => true, |
||||
161 | 'class' => true, |
||||
162 | 'name' => true, |
||||
163 | 'id' => true, |
||||
164 | 'value' => true, |
||||
165 | 'data-hash' => true, |
||||
166 | ]; |
||||
167 | |||||
168 | // Remove jetpack shortcode module filters which is converting this shortcode to anchor tag when jetpack is enabled. |
||||
169 | // ref: https://github.com/Automattic/jetpack/blob/cb04cfc4479515f12945256555bbab1192711c57/modules/shortcodes/class.filter-embedded-html-objects.php#L11-L12. |
||||
170 | 1 | if ( class_exists( 'Filter_Embedded_HTML_Objects' ) ) { |
|||
171 | remove_filter( 'pre_kses', [ 'Filter_Embedded_HTML_Objects', 'filter' ], 11 ); |
||||
172 | remove_filter( 'pre_kses', [ 'Filter_Embedded_HTML_Objects', 'maybe_create_links' ], 100 ); |
||||
173 | } |
||||
174 | |||||
175 | ?> |
||||
176 | 1 | <div class="cmb2-brightcove-video-metabox"> |
|||
177 | <button type="button" class="button brightcove-add-media-btn"> |
||||
178 | <?php |
||||
179 | 1 | $button_title = __( 'Select Brightcove Video', 'cmb2-brightcove-video-field' ); |
|||
180 | 1 | printf( |
|||
181 | 1 | '<img class="bc-button-icon" src="%s" alt="%s" />%s', |
|||
182 | 1 | esc_url( BRIGHTCOVE_URL . 'images/menu-icon.svg' ), |
|||
183 | 1 | esc_attr( $button_title ), |
|||
184 | 1 | esc_html( $button_title ) |
|||
185 | ); |
||||
186 | ?> |
||||
187 | 1 | </button> |
|||
188 | <div class="brightcove-video-preview"> |
||||
189 | <?php |
||||
190 | 1 | if( ! empty( $bc_video_args['video_id'] ) ) { |
|||
191 | 1 | echo wp_kses( BC_Video_Shortcode::bc_video( $bc_video_args ), $allowed_html ); |
|||
192 | 1 | echo '<a href="#" class="bc-remove-video">Remove brightcove video</a>'; |
|||
193 | } |
||||
194 | ?> |
||||
195 | 1 | </div> |
|||
196 | <?php |
||||
197 | |||||
198 | 1 | echo wp_kses( |
|||
199 | 1 | $field_type_object->input( |
|||
200 | [ |
||||
201 | 1 | 'type' => 'hidden', |
|||
202 | 1 | 'id' => esc_attr( $field_id . '_bc_video_id' ), |
|||
203 | 1 | 'class' => 'bc_video_id', |
|||
204 | 1 | 'name' => esc_attr( $field_id . '[bc_video_id]' ), |
|||
205 | 1 | 'value' => esc_attr( $bc_video_values['video_id'] ) ?? '', |
|||
206 | ] |
||||
207 | ), |
||||
208 | 1 | $allowed_html |
|||
209 | ); |
||||
210 | 1 | echo wp_kses( |
|||
211 | 1 | $field_type_object->input( |
|||
212 | [ |
||||
213 | 1 | 'type' => 'hidden', |
|||
214 | 1 | 'id' => esc_attr( $field_id . '_bc_video_duration' ), |
|||
215 | 1 | 'class' => 'bc_video_duration', |
|||
216 | 1 | 'name' => esc_attr( $field_id . '[bc_video_duration]' ), |
|||
217 | 1 | 'value' => esc_attr( $bc_video_values['video_duration'] ) ?? '', |
|||
218 | ] |
||||
219 | ), |
||||
220 | 1 | $allowed_html |
|||
221 | ); |
||||
222 | 1 | echo wp_kses( |
|||
223 | 1 | $field_type_object->input( |
|||
224 | [ |
||||
225 | 1 | 'type' => 'hidden', |
|||
226 | 1 | 'id' => esc_attr( $field_id . '_bc_player_id' ), |
|||
227 | 1 | 'class' => 'bc_player_id', |
|||
228 | 1 | 'name' => esc_attr( $field_id . '[bc_player_id]' ), |
|||
229 | 1 | 'value' => esc_attr( $bc_video_values['player_id'] ) ?? '', |
|||
230 | ] |
||||
231 | ), |
||||
232 | 1 | $allowed_html |
|||
233 | ); |
||||
234 | 1 | echo wp_kses( |
|||
235 | 1 | $field_type_object->input( |
|||
236 | [ |
||||
237 | 1 | 'type' => 'hidden', |
|||
238 | 1 | 'id' => esc_attr( $field_id . '_bc_account_id' ), |
|||
239 | 1 | 'class' => 'bc_account_id', |
|||
240 | 1 | 'name' => esc_attr( $field_id . '[bc_account_id]' ), |
|||
241 | 1 | 'value' => esc_attr( $bc_video_values['account_id'] ) ?? '', |
|||
242 | ] |
||||
243 | ), |
||||
244 | 1 | $allowed_html |
|||
245 | ); |
||||
246 | ?> |
||||
247 | 1 | </div> |
|||
248 | <?php |
||||
249 | |||||
250 | // Enable jetpack embed filter. |
||||
251 | 1 | if ( class_exists( 'Filter_Embedded_HTML_Objects' ) ) { |
|||
252 | add_filter( 'pre_kses', [ 'Filter_Embedded_HTML_Objects', 'filter' ], 11 ); |
||||
253 | add_filter( 'pre_kses', [ 'Filter_Embedded_HTML_Objects', 'maybe_create_links' ], 100 ); |
||||
254 | } |
||||
255 | 1 | } |
|||
256 | |||||
257 | /** |
||||
258 | * JS WP Template to add video preview from Brightcove modal selection. |
||||
259 | */ |
||||
260 | function js_wp_templates() { |
||||
261 | ?> |
||||
262 | 1 | <script type="text/html" id="tmpl-cmb2-brightcove-video-preview"> |
|||
263 | <iframe |
||||
264 | width="100%" |
||||
265 | src="https://players.brightcove.net/{{data.account_id}}/{{data.player_id}}_default/index.html?videoId={{data.id}}" |
||||
266 | allowfullscreen |
||||
267 | webkitallowfullscreen |
||||
268 | mozallowfullscreen |
||||
269 | ></iframe> |
||||
270 | <a href="#" class="bc-remove-video">Remove brightcove video</a> |
||||
271 | </script> |
||||
272 | <?php |
||||
273 | } |
||||
274 |
This check looks for parameters that have been defined for a function or method, but which are not used in the method body.