PluginProbe
VdoCipher: Secure Video Player and Hosting / 1.28
VdoCipher: Secure Video Player and Hosting v1.28
trunk 1.10 1.11 1.12 1.13 1.14 1.15 1.17 1.18 1.19 1.20 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.30 1.4 1.5 1.6 All 28 releases
← All changes | vdocipher.php +171 -266 trunk1.28 View file →
@@ -2,9 +2,9 @@
2 2 /**
3 3 * Plugin Name: VdoCipher
4 4 * Plugin URI: https://www.vdocipher.com
5 5 * Description: Secured video hosting for WordPress
6 - * Version: 1.30
6 + * Version: 1.28
7 7 * Author: VdoCipher
8 8 * Author URI: https://www.vdocipher.com
9 9 * License: GPL2
10 10 */
@@ -10,17 +10,15 @@
10 10 */
11 11
12 12 if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) {
13 13 header($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found');
14 - exit(
15 - "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\r\n<html lang='en'><head>\r\n<title>404 Not Found</title>\r\n".
14 + exit("<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\r\n<html lang='en'><head>\r\n<title>404 Not Found</title>\r\n".
16 15 "</head><body>\r\n<h1>Not Found</h1>\r\n<p>The requested URL " . $_SERVER['SCRIPT_NAME'] . " was not found on ".
17 - "this server.</p>\r\n</body></html>"
18 - );
16 + "this server.</p>\r\n</body></html>");
19 17 }
20 18
21 19 if (!defined('VDOCIPHER_PLUGIN_VERSION')) {
22 - define('VDOCIPHER_PLUGIN_VERSION', '1.30');
20 + define('VDOCIPHER_PLUGIN_VERSION', '1.28');
23 21 }
24 22
25 23 if (!defined('VDOCIPHER_PLAYER_VERSION')) {
26 24 define('VDOCIPHER_PLAYER_VERSION', 'v2');
@@ -57,21 +55,18 @@
57 55 // Function called to get OTP, starts
58 56 function vdo_otp($video, $otp_post_array = array())
59 57 {
60 58 $client_key = get_option('vdo_client_key');
61 - if (empty($client_key)) {
59 + if ($client_key == false || $client_key == "") {
62 60 return (object)['message' => 'Plugin not configured. API Key missing.'];
63 - } elseif (strlen($client_key) !== 64) {
61 + } else if (strlen($client_key) !== 64) {
64 62 return (object)["message" => "Invalid API Key."];
65 63 }
66 64 $url = "https://dev.vdocipher.com/api/videos/$video/otp";
67 - $pluginVersion = VDOCIPHER_PLUGIN_VERSION;
68 - $phpVersion = phpversion();
69 65 $headers = array(
70 - 'Authorization' => 'Apisecret '.$client_key,
71 - 'Content-Type' => 'application/json',
72 - 'Accept' => 'application/json',
73 - 'vdo-sdk' => "VdoWP/$pluginVersion PHP/$phpVersion" // for backward compatibility
66 + 'Authorization'=>'Apisecret '.$client_key,
67 + 'Content-Type'=>'application/json',
68 + 'Accept'=>'application/json'
74 69 );
75 70 $otp_post_json = json_encode($otp_post_array);
76 71 $response = wp_remote_post(
77 72 $url,
@@ -83,26 +78,24 @@
83 78 );
84 79 if (is_wp_error($response)) {
85 80 $error_message = $response->get_error_message();
86 81 if (false !== stripos($error_message, 'Operation timed out')) {
87 - $error_message = 'Operation timed out. Check your firewall at web host or try after sometime.';
88 - } elseif (false !== stripos($error_message, 'Could not resolve host')) {
89 - $error_message = 'DNS Connectivity issue. Check firewall at web host.';
82 + $error_message = 'Operation timed out. Check your firewall at web host or try after sometime.';
83 + } else if (false !== stripos($error_message, 'Could not resolve host')) {
84 + $error_message = 'Connectivity issue. Check firewall at web host.';
90 85 }
91 - return (object)["message" => $error_message];
86 + return ["message" => $error_message];
92 87 }
93 88
94 89 $responseCode = $response['response']['code'];
95 90 if ($responseCode === 404) {
96 91 return (object)["message" => "Video ID not found"];
97 - } elseif ($responseCode === 403) {
92 + }
93 + else if ($responseCode === 403) {
98 94 return (object)["message" => "API key does not have OTP creator permission"];
99 - } elseif ($responseCode === 401) {
95 + }
96 + else if ($responseCode === 400 || $responseCode === 401) {
100 97 return (object)["message" => "Incorrect API key"];
101 - } elseif ($responseCode === 400) {
102 - return (object)["message" => "Invalid configuration"];
103 - } elseif ($responseCode >= 500) {
104 - return (object)["message" => "Service unavailable. Please try after sometime."];
105 98 } else {
106 99 return json_decode($response['body']);
107 100 }
108 101 }
@@ -107,165 +100,8 @@
107 100 }
108 101 }
109 102 // Function called to get OTP, ends
110 103
111 -/**
112 - * Generate player code for V2
113 - *
114 - * @param string $url iframe URL
115 - * @param string $styleAttr style attribute
116 - * @param string $speedOptions comma separated float for playback speed
117 - *
118 - * @return string
119 - */
120 -function buildPlayerV2($url, $styleAttr, $speedOptions)
121 -{
122 - $url = esc_url($url);
123 - $styleAttr = esc_attr($styleAttr);
124 - $uniq = 'u' . rand();
125 - $output = <<<END
126 -<script src="https://player.vdocipher.com/v2/api.js"></script>
127 -<iframe
128 - src="$url"
129 - id="$uniq"
130 - style="$styleAttr"
131 - allow="encrypted-media"
132 - allowfullscreen
133 -></iframe>
134 -<script>
135 -(function() {
136 - const iframe = document.querySelector('#$uniq');
137 - const player = VdoPlayer.getInstance(iframe);
138 - const isAutoHeight = () => iframe.style.height === 'auto' && iframe.style.width.endsWith('px');
139 - const setAspectRatio = (ratio) => {
140 - iframe.style.maxHeight = '100vh';
141 - if (CSS.supports('aspect-ratio', 1)) {
142 - iframe.style.aspectRatio = ratio;
143 - } else {
144 - const offsetWidth = iframe.offsetWidth;
145 - iframe.style.height = Math.round(offsetWidth / ratio) + 'px';
146 - }
147 - }
148 - if (isAutoHeight()) {
149 - if (iframe.src.includes('litemode')) {
150 - setAspectRatio(16/9);
151 - }
152 - player.video.addEventListener('loadstart', async () => {
153 - const aspectRatio = (await player.api.getMetaData()).aspectRatio;
154 - setAspectRatio(aspectRatio);
155 - });
156 - }
157 -})();
158 -</script>
159 -END;
160 - $speedPattern = '/^\d.\d{1,2}(,\d.\d{1,2})+$/';
161 -
162 - if ($speedOptions !== false && preg_match($speedPattern, $speedOptions)) {
163 - $speedOptions = esc_js($speedOptions);
164 - $output .= <<<END
165 -<script>
166 -(function() {
167 - const iframe = document.querySelector('#$uniq')
168 - const player = VdoPlayer.getInstance(iframe);
169 - player.video.addEventListener('loadstart', async () => {
170 - player.api.updatePlayerConfig({playbackSpeedOptions: [$speedOptions]});
171 - });
172 -})();
173 -</script>
174 -END;
175 - }
176 - return $output;
177 -}
178 -
179 -
180 -/**
181 - * Process watermark, to insert WordPress variables, ip, date
182 - *
183 - * @param string $inputWatermark watermark entered in options
184 - *
185 - * @return string json string with variables replaced
186 - */
187 -function processWatermark($inputWatermark)
188 -{
189 - $current_user = wp_get_current_user();
190 - $vdo_annotate_code = get_option('vdo_annotate_code');
191 - $vdo_annotate_code = apply_filters('vdocipher_annotate_preprocess', $vdo_annotate_code);
192 - if (is_user_logged_in()) {
193 - $vdo_annotate_code = str_replace('{name}', esc_js($current_user->display_name), $vdo_annotate_code);
194 - $vdo_annotate_code = str_replace('{email}', esc_js($current_user->user_email), $vdo_annotate_code);
195 - $vdo_annotate_code = str_replace('{username}', esc_js($current_user->user_login), $vdo_annotate_code);
196 - $vdo_annotate_code = str_replace('{id}', esc_js($current_user->ID), $vdo_annotate_code);
197 - }
198 - $vdo_annotate_code = str_replace('{ip}', $_SERVER['REMOTE_ADDR'], $vdo_annotate_code);
199 - $vdo_annotate_code = preg_replace_callback('/{date\.([^}]+)}/', "eval_date", $vdo_annotate_code);
200 -
201 - return apply_filters('vdocipher_annotate_postprocess', $vdo_annotate_code);
202 -}
203 -
204 -function buildPlayerV1Speed($speedOptions)
205 -{
206 - $speedOptions = esc_js($speedOptions);
207 - return <<<END
208 - <script>
209 - (function () {
210 - var originalReadyFunction = window.onVdoCipherAPIReady;
211 - // private API; do not use anywhere else; might change without notice
212 - var index = vdo.d.length - 1;
213 - window.onVdoCipherAPIReady = () => {
214 - if (originalReadyFunction) originalReadyFunction();
215 - var v_ = vdo.getObjects()[index];
216 - v_.addEventListener('load', () => {
217 - v_.availablePlaybackRates = [$speedOptions]
218 - });
219 - }
220 - })()
221 - </script>
222 -END;
223 -}
224 -
225 -/**
226 - * Generate player code for V1
227 - *
228 - * @param string $OTP otp
229 - * @param string $playbackInfo playbackInfo
230 - * @param string $styleAttr string for inline styles
231 - * @param string $vdo_player_theme optional theme id applicable to player v1
232 - *
233 - * @return string string html for embed code
234 - */
235 -function buildPlayerV1($OTP, $playbackInfo, $styleAttr, $vdo_player_theme)
236 -{
237 - $styleAttr = esc_attr($styleAttr);
238 - $OTP = esc_attr($OTP);
239 - $playbackInfo = esc_attr($playbackInfo);
240 - $vdo_player_theme = esc_attr($vdo_player_theme);
241 - return <<<END
242 - <div id='vdo$OTP' style='$styleAttr' ></div>
243 - <script>(function(v,i,d,e,o){v[o]=v[o]||{}; v[o].add = v[o].add || function V(a){
244 - (v[o].d=v[o].d||[]).push(a);};
245 - if(!v[o].l) { v[o].l=1*new Date(); a=i.createElement(d), m=i.getElementsByTagName(d)[0];
246 - a.async=1; a.src=e; m.parentNode.insertBefore(a,m);}
247 - })(window,document,'script','https://d1z78r8i505acl.cloudfront.net/playerAssets/1.6.10/vdo.js','vdo');
248 - vdo.add({
249 - otp: '$OTP',
250 - playbackInfo: '$playbackInfo',
251 - theme: '$vdo_player_theme',
252 - plugins: [{
253 - name: 'keyboard',
254 - options: {
255 - preset: 'default',
256 - bindings: {
257 - 'Left' : (player) => player.seek(player.currentTime - 15),
258 - 'Right' : (player) => player.seek(player.currentTime + 15),
259 - },
260 - }
261 - }],
262 - container: document.querySelector('#vdo$OTP'),
263 - })
264 - </script>
265 -END;
266 -}
267 -
268 104 // VdoCipher Shortcode starts
269 105 function vdo_shortcode($atts)
270 106 {
271 107 $vdo_args = shortcode_atts(
@@ -272,15 +108,10 @@
272 108 array(
273 109 'width' => get_option('vdo_default_width'),
274 110 'height' => get_option('vdo_default_height'),
275 111 'id' => 'id',
276 - 'no_annotate' => false,
277 - 'vdo_theme' => false,
278 - 'autoplay' => false,
279 - 'loop' => false,
280 - 'controls' => 'on',
281 - 'cc_language' => false,
282 - 'litemode' => false,
112 + 'no_annotate'=> false,
113 + 'vdo_theme'=> false,
283 114 ),
284 115 $atts
285 116 );
286 117 $width = $vdo_args['width'];
@@ -311,18 +142,26 @@
311 142 return current_time($matches[1]);
312 143 }
313 144 }
314 145 if (get_option('vdo_annotate_code') != "") {
146 + $current_user = wp_get_current_user();
147 + $vdo_annotate_code = get_option('vdo_annotate_code');
148 + $vdo_annotate_code = apply_filters('vdocipher_annotate_preprocess', $vdo_annotate_code);
149 + if (is_user_logged_in()) {
150 + $vdo_annotate_code = str_replace('{name}', $current_user->display_name, $vdo_annotate_code);
151 + $vdo_annotate_code = str_replace('{email}', $current_user->user_email, $vdo_annotate_code);
152 + $vdo_annotate_code = str_replace('{username}', $current_user->user_login, $vdo_annotate_code);
153 + $vdo_annotate_code = str_replace('{id}', $current_user->ID, $vdo_annotate_code);
154 + }
155 + $vdo_annotate_code = str_replace('{ip}', $_SERVER['REMOTE_ADDR'], $vdo_annotate_code);
156 + $vdo_annotate_code = preg_replace_callback('/{date\.([^}]+)}/', "eval_date", $vdo_annotate_code);
157 + $vdo_annotate_code = apply_filters('vdocipher_annotate_postprocess', $vdo_annotate_code);
315 158 // Add annotate code to $otp_post_array, which will be
316 159 // converted to Json and then sent as POST body to API endpoint
317 160 if (!$no_annotate) {
318 - $otp_post_array["annotate"] = processWatermark(get_option('vdo_annotate_code'));
161 + $otp_post_array["annotate"] = $vdo_annotate_code;
319 162 }
320 163 }
321 - $userId = get_current_user_id();
322 - if (get_option('vdo_send_user_id_in_api') && $userId !== 0) {
323 - $otp_post_array["userId"] = $userId;
324 - }
325 164 // OTP is requested via vdo_otp function
326 165 $OTP_Response = vdo_otp($video, $otp_post_array);
327 166
328 167 // https://www.php.net/manual/en/function.isset.php#86313
@@ -333,8 +172,14 @@
333 172 if (is_null($OTP)) {
334 173 return "<div id='vdo$OTP'><strong>VdoCipher Error: $message</strong></div>";
335 174 }
336 175
176 + // Version, legacy, for flash only
177 + $version = 0;
178 + if (isset($atts['version'])) {
179 + $version = $atts['version'];
180 + }
181 +
337 182 // Video Embed version is retrieved from options table or from shortcode attribute
338 183 $vdo_embed_version_str = get_option('vdo_embed_version');
339 184
340 185 // Video Player theme, update and as shortcode attribute
@@ -344,46 +189,104 @@
344 189 $vdo_player_theme = $vdo_theme;
345 190 }
346 191 if (strpos($vdo_player_theme, 'v1/') === 0 || strlen($vdo_player_theme) === 32) {
347 192 $vdo_embed_version_str = '1.6.10';
348 - } elseif (strlen($vdo_player_theme) === 16) {
193 + } else if (strlen($vdo_player_theme) === 16) {
349 194 $vdo_embed_version_str = 'v2';
350 195 }
351 196 $speedOptions = esc_attr(get_option('vdo_player_speed'));
197 + $speedPattern = '/^\d.\d{1,2}(,\d.\d{1,2})+$/';
352 198
353 - $styleAttr = "height:$height;width:$width;max-width:100%;border:0;display: block;";
354 -
355 199 // Old Embed Code
356 200 if ($vdo_embed_version_str === '1.6.10') {
357 201 //Old embed code
358 - $output = buildPlayerV1($OTP, $playbackInfo, $styleAttr, $vdo_player_theme);
202 + $output = <<<END
203 + <div id='vdo$OTP' style='height:$height;width:$width;max-width:100%' ></div>
204 + <script>(function(v,i,d,e,o){v[o]=v[o]||{}; v[o].add = v[o].add || function V(a){
205 + (v[o].d=v[o].d||[]).push(a);};
206 + if(!v[o].l) { v[o].l=1*new Date(); a=i.createElement(d), m=i.getElementsByTagName(d)[0];
207 + a.async=1; a.src=e; m.parentNode.insertBefore(a,m);}
208 + })(window,document,'script','https://d1z78r8i505acl.cloudfront.net/playerAssets/1.6.10/vdo.js','vdo');
209 + vdo.add({
210 + otp: '$OTP',
211 + playbackInfo: '$playbackInfo',
212 + theme: '$vdo_player_theme',
213 + plugins: [{
214 + name: 'keyboard',
215 + options: {
216 + preset: 'default',
217 + bindings: {
218 + 'Left' : (player) => player.seek(player.currentTime - 15),
219 + 'Right' : (player) => player.seek(player.currentTime + 15),
220 + },
221 + }
222 + }],
223 + container: document.querySelector('#vdo$OTP'),
224 + })
225 + </script>
226 +END;
359 227
360 - $speedPattern = '/^\d.\d{1,2}(,\d.\d{1,2})+$/';
361 -
362 228 if ($speedOptions !== false && preg_match($speedPattern, $speedOptions)) {
363 - $output .= buildPlayerV1Speed($speedOptions);
229 + $output .= <<<END
230 + <script>
231 + (function () {
232 + var originalReadyFunction = window.onVdoCipherAPIReady;
233 + // private API; do not use anywhere else; might change without notice
234 + var index = vdo.d.length - 1;
235 + window.onVdoCipherAPIReady = () => {
236 + if (originalReadyFunction) originalReadyFunction();
237 + var v_ = vdo.getObjects()[index];
238 + v_.addEventListener('load', () => {
239 + v_.availablePlaybackRates = [$speedOptions]
240 + });
241 + }
242 + })()
243 + </script>
244 +END;
364 245 }
365 - } elseif ($vdo_embed_version_str === 'v2') {
366 - $url = "https://player.vdocipher.com/v2/?otp=$OTP&playbackInfo=$playbackInfo";
367 - if (strlen($vdo_player_theme) === 16) {
368 - $url .= "&player=$vdo_player_theme";
246 + } else if ($vdo_embed_version_str === 'v2') {
247 + $uniq = 'u' . rand();
248 + $output = <<<END
249 +<script src="https://player.vdocipher.com/v2/api.js"></script>
250 +<iframe
251 + src="https://player.vdocipher.com/v2/?otp=$OTP&playbackInfo=$playbackInfo"
252 + id="$uniq"
253 + style="height:$height;width:$width;max-width:100%;border:0;display: block;"
254 + allow="encrypted-media"
255 + allowfullscreen
256 +></iframe>
257 +<script>
258 +(function() {
259 + const iframe = document.querySelector('#$uniq');
260 + const player = VdoPlayer.getInstance(iframe);
261 + player.video.addEventListener('loadstart', async () => {
262 + const aspectRatio = (await player.api.getMetaData()).aspectRatio;
263 + if (iframe.style.height === 'auto' && iframe.style.width.endsWith('px')) {
264 + iframe.style.maxHeight = '100vh';
265 + if (CSS.supports('aspect-ratio', 1)) {
266 + iframe.style.aspectRatio = aspectRatio;
267 + } else {
268 + const offsetWidth = iframe.offsetWidth;
269 + iframe.style.height = Math.round(offsetWidth / aspectRatio) + 'px';
270 + }
271 + }
272 + });
273 +})();
274 +</script>
275 +END;
276 + if ($speedOptions !== false && preg_match($speedPattern, $speedOptions)) {
277 + $output .= <<<END
278 +<script>
279 +(function() {
280 + const iframe = document.querySelector('#$uniq')
281 + const player = VdoPlayer.getInstance(iframe);
282 + player.video.addEventListener('loadstart', async () => {
283 + player.api.updatePlayerConfig({playbackSpeedOptions: [$speedOptions]});
284 + });
285 +})();
286 +</script>
287 +END;
369 288 }
370 - if ($vdo_args['autoplay']) {
371 - $url .= "&autoplay=true";
372 - }
373 - if ($vdo_args['loop']) {
374 - $url .= "&loop=true";
375 - }
376 - if (in_array($vdo_args['controls'], ['off', 'native'])) {
377 - $url .= "&controls=" . $vdo_args['controls'];
378 - }
379 - if ($vdo_args['cc_language']) {
380 - $url .= "&ccLanguage=" . $vdo_args['cc_language'];
381 - }
382 - if ($vdo_args['litemode'] === 'true') {
383 - $url .= "&litemode=true";
384 - }
385 - $output = buildPlayerV2($url, $styleAttr, $speedOptions);
386 289
387 290 } else {
388 291 $output = 'Invalid player selection: ' . $vdo_embed_version_str;
389 292 }
@@ -388,9 +291,8 @@
388 291 $output = 'Invalid player selection: ' . $vdo_embed_version_str;
389 292 }
390 293 return $output;
391 294 }
392 -
393 295 add_shortcode('vdo', 'vdo_shortcode');
394 296 // VdoCipher Shortcode ends
395 297
396 298 // adding the Settings link, starts
@@ -409,29 +311,28 @@
409 311 if (is_admin()) { // admin actions
410 312 add_action('admin_init', 'register_vdo_settings');
411 313 add_action('admin_menu', 'vdo_menu');
412 314 }
413 -
414 315 function vdo_menu()
415 316 {
416 - if (get_option('vdo_show_plugin_in_sidebar') === "") {
417 - add_options_page(
418 - 'VdoCipher Options',
419 - 'VdoCipher',
420 - 'manage_options',
421 - 'vdocipher',
422 - 'vdo_options'
423 - );
424 - } else {
425 - add_menu_page(
426 - 'VdoCipher Options',
427 - 'VdoCipher',
428 - 'manage_options',
429 - 'vdocipher',
430 - 'vdo_options',
431 - plugin_dir_url(__FILE__).'images/logo.png'
432 - );
433 - }
317 + if (get_option('vdo_show_plugin_in_sidebar') === "") {
318 + add_options_page(
319 + 'VdoCipher Options',
320 + 'VdoCipher',
321 + 'manage_options',
322 + 'vdocipher',
323 + 'vdo_options'
324 + );
325 + } else {
326 + add_menu_page(
327 + 'VdoCipher Options',
328 + 'VdoCipher',
329 + 'manage_options',
330 + 'vdocipher',
331 + 'vdo_options',
332 + plugin_dir_url(__FILE__).'images/logo.png'
333 + );
334 + }
434 335 }
435 336
436 337 function vdo_options()
437 338 {
@@ -449,9 +350,9 @@
449 350 }
450 351
451 352 function register_vdo_settings()
452 353 {
453 - // whitelist options
354 + // whitelist options
454 355 register_setting('vdo_option-group', 'vdo_client_key');
455 356 register_setting('vdo_option-group', 'vdo_default_height');
456 357 register_setting('vdo_option-group', 'vdo_default_width');
457 358 register_setting('vdo_option-group', 'vdo_annotate_code');
@@ -459,9 +360,8 @@
459 360 register_setting('vdo_option-group', 'vdo_player_theme');
460 361 register_setting('vdo_option-group', 'vdo_plugin_version');
461 362 register_setting('vdo_option-group', 'vdo_player_speed');
462 363 register_setting('vdo_option-group', 'vdo_show_plugin_in_sidebar');
463 - register_setting('vdo_option-group', 'vdo_send_user_id_in_api');
464 364 }
465 365 // add the menu item and register settings (3 functions), ends
466 366
467 367 // Activation Hook starts
@@ -486,8 +386,13 @@
486 386 plugins_url('/include/block/dist/blocks.build.js', __FILE__),
487 387 array('wp-blocks', 'wp-element', 'wp-editor', 'wp-i18n')
488 388 );
489 389 wp_register_style(
390 + 'vdo-block-base-style',
391 + plugins_url('/include/block/dist/blocks.style.build.css', __FILE__),
392 + array('wp-blocks')
393 + );
394 + wp_register_style(
490 395 'vdo-block-editor-style',
491 396 plugins_url('/include/block/dist/blocks.editor.build.css', __FILE__),
492 397 array('wp-edit-blocks')
493 398 );
@@ -493,32 +398,33 @@
493 398 );
494 399 register_block_type(
495 400 'vdo/block',
496 401 array(
497 - 'editor_script' => 'vdo-block-script',
498 - 'editor_style' => 'vdo-block-editor-style',
499 - 'attributes' => array(
500 - 'id' => array(
501 - 'type' => 'string',
502 - ),
503 - 'width' => array(
504 - 'type' => 'string',
505 - 'default' => get_option('vdo_default_width')
506 - ),
507 - 'height' => array(
508 - 'type' => 'string',
509 - 'default' => get_option('vdo_default_height')
510 - ),
511 - 'vdo_theme' => array(
512 - 'type' => 'string',
513 - 'default' => get_option('vdo_player_theme')
514 - ),
515 - 'vdo_version' => array(
516 - 'type' => 'string',
517 - 'default' => get_option('vdo_embed_version')
518 - ),
402 + 'editor_script'=>'vdo-block-script',
403 + 'editor_style'=>'vdo-block-editor-style',
404 + 'style'=>'vdo-block-base-style',
405 + 'attributes'=>array(
406 + 'id'=>array(
407 + 'type'=>'string',
519 408 ),
520 - 'render_callback' => 'vdo_shortcode'
409 + 'width'=>array(
410 + 'type'=>'string',
411 + 'default'=>get_option('vdo_default_width')
412 + ),
413 + 'height'=>array(
414 + 'type'=>'string',
415 + 'default'=>get_option('vdo_default_height')
416 + ),
417 + 'vdo_theme'=>array(
418 + 'type'=>'string',
419 + 'default'=>get_option('vdo_player_theme')
420 + ),
421 + 'vdo_version'=>array(
422 + 'type'=>'string',
423 + 'default'=>get_option('vdo_embed_version')
424 + ),
425 + ),
426 + 'render_callback'=>'vdo_shortcode'
521 427 )
522 428 );
523 429 }
524 430
@@ -535,9 +441,8 @@
535 441 delete_option('vdo_player_theme');
536 442 delete_option('vdo_plugin_version');
537 443 delete_option('vdo_player_speed');
538 444 delete_option('vdo_show_plugin_in_sidebar');
539 - delete_option('vdo_send_user_id_in_api');
540 445 }
541 446 register_uninstall_hook(__FILE__, 'vdo_uninstall');
542 447
543 448 // Admin notice to configure plugin for new installs, starts