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 +281 -191 1.231.28 View file →
@@ -1,10 +1,10 @@
1 1 <?php
2 2 /**
3 3 * Plugin Name: VdoCipher
4 4 * Plugin URI: https://www.vdocipher.com
5 - * Description: Secured video hosting for wordpress
6 - * Version: 1.23
5 + * Description: Secured video hosting for WordPress
6 + * Version: 1.28
7 7 * Author: VdoCipher
8 8 * Author URI: https://www.vdocipher.com
9 9 * License: GPL2
10 10 */
@@ -10,48 +10,57 @@
10 10 */
11 11
12 12 if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) {
13 13 header($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found');
14 - exit("<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\r\n<html><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".
15 15 "</head><body>\r\n<h1>Not Found</h1>\r\n<p>The requested URL " . $_SERVER['SCRIPT_NAME'] . " was not found on ".
16 16 "this server.</p>\r\n</body></html>");
17 17 }
18 18
19 -// Function called to retrieve id for when title given, starts
20 -function vdo_retrieve_id($title) {
21 - $client_key = get_option('vdo_client_key');
22 - if ($client_key == false || $client_key == "") {
23 - return "Plugin not configured. Please set the API key to embed videos.";
19 +if (!defined('VDOCIPHER_PLUGIN_VERSION')) {
20 + define('VDOCIPHER_PLUGIN_VERSION', '1.28');
21 +}
22 +
23 +if (!defined('VDOCIPHER_PLAYER_VERSION')) {
24 + define('VDOCIPHER_PLAYER_VERSION', 'v2');
25 +}
26 +
27 +if (!defined('VDOCIPHER_DEFAULT_THEME')) {
28 + define('VDOCIPHER_DEFAULT_THEME', '');
29 +}
30 +
31 +function vdo_plugin_check_version()
32 +{
33 + // This applies only for installs 1.24 and below
34 + if (!get_option('vdo_plugin_version')) {
35 + if (preg_match('/^1\.[0123456]\.[0-9]{1,2}$/', get_option('vdo_embed_version'))) {
36 + update_option('vdo_embed_version', VDOCIPHER_PLAYER_VERSION);
37 + }
38 + if (preg_match('/^1\.[01234]\.[0-9]{1,2}$/', get_option('vdo_embed_version'))) {
39 + update_option('vdo_default_height', 'auto');
40 + }
41 + update_option('vdo_plugin_version', VDOCIPHER_PLUGIN_VERSION);
42 + return ;
24 43 }
25 - $url = "https://dev.vdocipher.com/api/videos?q=$title";
26 - $headers = array(
27 - 'Authorization'=>'Apisecret '.$client_key,
28 - 'Content-Type'=>'application/json',
29 - 'Accept'=>'application/json'
30 - );
31 - $response = wp_remote_post($url, array(
32 - 'method' => 'GET',
33 - 'headers' => $headers
34 - ));
35 - if (is_wp_error($response)) {
36 - $error_message = $response->get_error_message();
37 - echo "VdoCipher: Something went wrong: $error_message";
38 - return "";
44 + // This applies for all new installations after 1.25
45 + if (VDOCIPHER_PLUGIN_VERSION !== get_option('vdo_plugin_version')) {
46 + if (preg_match('/^1\.[0-9]{1,2}\.[0-9]{1,2}$/', get_option('vdo_embed_version'))) {
47 + update_option('vdo_embed_version', VDOCIPHER_PLAYER_VERSION);
48 + }
49 + update_option('vdo_plugin_version', VDOCIPHER_PLUGIN_VERSION);
39 50 }
40 - $video_json_response = $response['body'];
41 - $video_list_object = json_decode($video_json_response);
42 - $video_list = $video_list_object->rows;
43 - $video_object = $video_list[0];
44 - $video_id = $video_object->id;
45 - return $video_id;
46 51 }
47 -// Function called to retrieve id for when title given, ends
48 52
53 +add_action('plugins_loaded', 'vdo_plugin_check_version');
54 +
49 55 // Function called to get OTP, starts
50 -function vdo_otp($video, $otp_post_array = array()) {
56 +function vdo_otp($video, $otp_post_array = array())
57 +{
51 58 $client_key = get_option('vdo_client_key');
52 59 if ($client_key == false || $client_key == "") {
53 - return "Plugin not configured. Please set the API key to embed videos.";
60 + return (object)['message' => 'Plugin not configured. API Key missing.'];
61 + } else if (strlen($client_key) !== 64) {
62 + return (object)["message" => "Invalid API Key."];
54 63 }
55 64 $url = "https://dev.vdocipher.com/api/videos/$video/otp";
56 65 $headers = array(
57 66 'Authorization'=>'Apisecret '.$client_key,
@@ -58,20 +67,38 @@
58 67 'Content-Type'=>'application/json',
59 68 'Accept'=>'application/json'
60 69 );
61 70 $otp_post_json = json_encode($otp_post_array);
62 - $response = wp_remote_post($url, array(
63 - 'method' => 'POST',
64 - 'headers' => $headers,
65 - 'body' => $otp_post_json
66 - ));
71 + $response = wp_remote_post(
72 + $url,
73 + array(
74 + 'method' => 'POST',
75 + 'headers' => $headers,
76 + 'body' => $otp_post_json
77 + )
78 + );
67 79 if (is_wp_error($response)) {
68 80 $error_message = $response->get_error_message();
69 - echo "VdoCipher: Something went wrong: $error_message";
70 - return "";
81 + if (false !== stripos($error_message, 'Operation timed out')) {
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.';
85 + }
86 + return ["message" => $error_message];
71 87 }
72 - $OTP_Response = $response['body'];
73 - return json_decode($OTP_Response);
88 +
89 + $responseCode = $response['response']['code'];
90 + if ($responseCode === 404) {
91 + return (object)["message" => "Video ID not found"];
92 + }
93 + else if ($responseCode === 403) {
94 + return (object)["message" => "API key does not have OTP creator permission"];
95 + }
96 + else if ($responseCode === 400 || $responseCode === 401) {
97 + return (object)["message" => "Incorrect API key"];
98 + } else {
99 + return json_decode($response['body']);
100 + }
74 101 }
75 102 // Function called to get OTP, ends
76 103
77 104 // VdoCipher Shortcode starts
@@ -76,36 +103,35 @@
76 103
77 104 // VdoCipher Shortcode starts
78 105 function vdo_shortcode($atts)
79 106 {
80 - extract(shortcode_atts(
107 + $vdo_args = shortcode_atts(
81 108 array(
82 - 'title' => 'TITLE_OF_VIDEO',
83 - 'width' => get_option('vdo_default_width') . "px",
84 - 'height' => get_option('vdo_default_height') . "px",
85 - 'id' => 'id',
86 - 'no_annotate'=> false,
87 - 'version'=> 0,
88 - 'vdo_theme'=> false,
89 - 'player_tech'=> ''
90 - ),
109 + 'width' => get_option('vdo_default_width'),
110 + 'height' => get_option('vdo_default_height'),
111 + 'id' => 'id',
112 + 'no_annotate'=> false,
113 + 'vdo_theme'=> false,
114 + ),
91 115 $atts
92 - ));
93 - if ((get_option('vdo_default_height')) == 'auto') {
94 - $height = 'auto';
116 + );
117 + $width = $vdo_args['width'];
118 + $height = $vdo_args['height'];
119 + $id = $vdo_args['id'];
120 + $no_annotate = $vdo_args['no_annotate'];
121 + $vdo_theme = $vdo_args['vdo_theme'];
122 +
123 + if (!preg_match('/.*px$/', $width)) {
124 + $width = $width."px";
95 125 }
96 - if (!$atts['id']) {
97 - if (!$atts['title']) {
98 - return "Required argument id for embedded video not found.";
126 + if (!preg_match('/.*px$/', $height)) {
127 + if ($height != 'auto') {
128 + $height = $height."px";
99 129 }
100 - else {
101 - $video = vdo_retrieve_id($title);
102 - if ($video == null) {
103 - return "404. Video not found.";
104 - }
105 - }
106 130 }
107 - else {
131 + if (!$atts['id']) {
132 + return "Required argument id for embedded video not found.";
133 + } else {
108 134 $video = $id;
109 135 }
110 136
111 137 // Initialize $otp_post_array, to be sent as part of OTP request, as for time-to-live 300
@@ -118,8 +144,9 @@
118 144 }
119 145 if (get_option('vdo_annotate_code') != "") {
120 146 $current_user = wp_get_current_user();
121 147 $vdo_annotate_code = get_option('vdo_annotate_code');
148 + $vdo_annotate_code = apply_filters('vdocipher_annotate_preprocess', $vdo_annotate_code);
122 149 if (is_user_logged_in()) {
123 150 $vdo_annotate_code = str_replace('{name}', $current_user->display_name, $vdo_annotate_code);
124 151 $vdo_annotate_code = str_replace('{email}', $current_user->user_email, $vdo_annotate_code);
125 152 $vdo_annotate_code = str_replace('{username}', $current_user->user_login, $vdo_annotate_code);
@@ -125,10 +152,12 @@
125 152 $vdo_annotate_code = str_replace('{username}', $current_user->user_login, $vdo_annotate_code);
126 153 $vdo_annotate_code = str_replace('{id}', $current_user->ID, $vdo_annotate_code);
127 154 }
128 155 $vdo_annotate_code = str_replace('{ip}', $_SERVER['REMOTE_ADDR'], $vdo_annotate_code);
129 - $vdo_annotate_code = preg_replace_callback('/\{date\.([^\}]+)\}/', "eval_date", $vdo_annotate_code);
130 - // Add annotate code to $otp_post_array, which will be converted to Json and then sent as POST body to API endpoint
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);
158 + // Add annotate code to $otp_post_array, which will be
159 + // converted to Json and then sent as POST body to API endpoint
131 160 if (!$no_annotate) {
132 161 $otp_post_array["annotate"] = $vdo_annotate_code;
133 162 }
134 163 }
@@ -133,15 +162,16 @@
133 162 }
134 163 }
135 164 // OTP is requested via vdo_otp function
136 165 $OTP_Response = vdo_otp($video, $otp_post_array);
137 - $OTP = $OTP_Response->otp;
138 - $playbackInfo = $OTP_Response->playbackInfo;
139 166
167 + // https://www.php.net/manual/en/function.isset.php#86313
168 + $message = (isset($OTP_Response->message)) ? $OTP_Response->message : null;
169 + $OTP = (isset($OTP_Response->otp)) ? $OTP_Response->otp : null;
170 + $playbackInfo = (isset($OTP_Response->playbackInfo)) ? $OTP_Response->playbackInfo : null;
171 +
140 172 if (is_null($OTP)) {
141 -
142 - $output = "<span id='vdo$OTP' style='background:#555555;color:#FFFFFF'><h4>Video not found</h4></span>";
143 - return $output;
173 + return "<div id='vdo$OTP'><strong>VdoCipher Error: $message</strong></div>";
144 174 }
145 175
146 176 // Version, legacy, for flash only
147 177 $version = 0;
@@ -148,92 +178,118 @@
148 178 if (isset($atts['version'])) {
149 179 $version = $atts['version'];
150 180 }
151 181
152 - // Video Embed version is updated
153 - if ((get_option('vdo_embed_version')) == false) {
154 - update_option('vdo_embed_version', '1.6.4');
155 - }
182 + // Video Embed version is retrieved from options table or from shortcode attribute
156 183 $vdo_embed_version_str = get_option('vdo_embed_version');
157 184
158 185 // Video Player theme, update and as shortcode attribute
159 - if ((get_option('vdo_player_theme')) == false) {
160 - update_option('vdo_player_theme', '9ae8bbe8dd964ddc9bdb932cca1cb59a');
161 - }
162 - if(!$vdo_theme){
186 + if (!$vdo_theme) {
163 187 $vdo_player_theme = get_option('vdo_player_theme');
164 - }
165 - else {
188 + } else {
166 189 $vdo_player_theme = $vdo_theme;
167 190 }
168 -
169 - // tech override custom names
170 - switch ($player_tech) {
171 - case "flash":
172 - $player_tech = "*,-dash";
173 - break;
174 - case "nohtml5":
175 - $player_tech = "*,-dash";
176 - break;
177 - case "noflash":
178 - $player_tech = "*,-hss";
179 - break;
180 - case "nozen":
181 - $player_tech = "*,-zen";
182 - break;
183 - case "noios":
184 - $player_tech = "*,-hlse";
185 - break;
186 - default:
187 - break;
191 + if (strpos($vdo_player_theme, 'v1/') === 0 || strlen($vdo_player_theme) === 32) {
192 + $vdo_embed_version_str = '1.6.10';
193 + } else if (strlen($vdo_player_theme) === 16) {
194 + $vdo_embed_version_str = 'v2';
188 195 }
196 + $speedOptions = esc_attr(get_option('vdo_player_speed'));
197 + $speedPattern = '/^\d.\d{1,2}(,\d.\d{1,2})+$/';
189 198
190 199 // Old Embed Code
191 - if ($vdo_embed_version_str === '0.5') {
192 - $output = "<div id='vdo$OTP' style='height:$height;width:$width;max-width:100%' ></div>";
193 - $output .= "<script> (function(v,i,d,e,o){v[o]=v[o]||{}; v[o].add = v[o].add || function V(a){".
194 - " (v[o].d=v[o].d||[]).push(a);};";
195 - $output .= "if(!v[o].l) { v[o].l=1*new Date();a=i.createElement(d),m=i.getElementsByTagName(d)[0];a.async=1;".
196 - "a.src=e; m.parentNode.insertBefore(a,m);}";
197 - $output .= " })(window,document,'script','//de122v0opjemw.cloudfront.net/vdo.js','vdo'); vdo.add({ ";
198 - $output .= "o: '$OTP', ";
199 - if ($version == 32) {
200 - $output .= "version: '$version' ";
200 + if ($vdo_embed_version_str === '1.6.10') {
201 + //Old embed code
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;
227 +
228 + if ($speedOptions !== false && preg_match($speedPattern, $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;
201 245 }
202 - $output .= "}); </script>";
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;
288 + }
289 +
203 290 } else {
204 - //New embed code
205 - if ($player_tech === '') {
206 - if (get_option('vdo_watermark_flash_html') === 'flash') {
207 - $player_tech = "*,-dash";
208 - }
209 - }
210 - $output .= "<div id='vdo$OTP' style='height:$height;width:$width;max-width:100%' ></div>";
211 - $output .= "<script>(function(v,i,d,e,o){v[o]=v[o]||{}; v[o].add = v[o].add || function V(a){".
212 - "(v[o].d=v[o].d||[]).push(a);};";
213 - $output .= "if(!v[o].l) { v[o].l=1*new Date(); a=i.createElement(d), m=i.getElementsByTagName(d)[0];";
214 - $output .= "a.async=1; a.src=e; m.parentNode.insertBefore(a,m);}";
215 - $output .= "})(window,document,'script','https://d1z78r8i505acl.cloudfront.net/playerAssets/";
216 - $output .= "$vdo_embed_version_str";
217 - $output .= "/vdo.js','vdo');";
218 - $output .= "vdo.add({";
219 - $output .= "otp: '$OTP',";
220 - $output .= "playbackInfo: '$playbackInfo',";
221 - $output .= "theme: '$vdo_player_theme',";
222 - if ($player_tech !== '') {
223 - $output .= "techoverride: [" ;
224 - $techarray = explode(',', $player_tech);
225 - for ($i = 0; $i < sizeof($techarray); $i++) {
226 - $techStr = $techarray[$i];
227 - $output .= "'$techStr'";
228 - if ($i !== sizeof($techarray)-1) {
229 - $output .= ", ";
230 - }
231 - }
232 - $output .= "],";
233 - }
234 - $output .= "container: document.querySelector('#vdo$OTP'),});";
235 - $output .= "</script>";
291 + $output = 'Invalid player selection: ' . $vdo_embed_version_str;
236 292 }
237 293 return $output;
238 294 }
239 295 add_shortcode('vdo', 'vdo_shortcode');
@@ -254,12 +310,20 @@
254 310 // add the menu item and register settings (3 functions), starts
255 311 if (is_admin()) { // admin actions
256 312 add_action('admin_init', 'register_vdo_settings');
257 313 add_action('admin_menu', 'vdo_menu');
258 -} else {
259 - // non-admin enqueues, actions, and filters
260 314 }
261 -function vdo_menu() {
315 +function vdo_menu()
316 +{
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 {
262 326 add_menu_page(
263 327 'VdoCipher Options',
264 328 'VdoCipher',
265 329 'manage_options',
@@ -266,22 +330,11 @@
266 330 'vdocipher',
267 331 'vdo_options',
268 332 plugin_dir_url(__FILE__).'images/logo.png'
269 333 );
270 - add_submenu_page(
271 - null,
272 - 'Video Player Themes',
273 - 'CustomPlayer',
274 - 'manage_options',
275 - 'themesvdo',
276 - 'themesvdo'
277 - );
334 + }
278 335 }
279 336
280 -function themesvdo() {
281 - include('include/player_themes.php');
282 -}
283 -
284 337 function vdo_options()
285 338 {
286 339 if (!get_option('vdo_default_height')) {
287 340 update_option('vdo_default_height', 'auto');
@@ -288,18 +341,15 @@
288 341 }
289 342 if (!get_option('vdo_default_width')) {
290 343 update_option('vdo_default_width', '1280');
291 344 }
292 - $vdo_client_key = get_option('vdo_client_key');
293 - if (!$vdo_client_key && strlen($vdo_client_key) != 64) {
294 - vdo_show_form_client_key();
295 - return "";
296 - }
297 345 if (!current_user_can('manage_options')) {
298 - wp_die(__('You do not have sufficient permissions to access this page.'));
346 + wp_die(__('You do not have sufficient permissions to access this page.'));
299 347 }
300 348 include('include/options.php');
349 + return "";
301 350 }
351 +
302 352 function register_vdo_settings()
303 353 {
304 354 // whitelist options
305 355 register_setting('vdo_option-group', 'vdo_client_key');
@@ -307,43 +357,82 @@
307 357 register_setting('vdo_option-group', 'vdo_default_width');
308 358 register_setting('vdo_option-group', 'vdo_annotate_code');
309 359 register_setting('vdo_option-group', 'vdo_embed_version');
310 360 register_setting('vdo_option-group', 'vdo_player_theme');
311 - register_setting('vdo_option-group', 'vdo_watermark_flash_html');
312 - register_setting('vdo_custom_theme', 'vdo_player_theme_options');
361 + register_setting('vdo_option-group', 'vdo_plugin_version');
362 + register_setting('vdo_option-group', 'vdo_player_speed');
363 + register_setting('vdo_option-group', 'vdo_show_plugin_in_sidebar');
313 364 }
314 365 // add the menu item and register settings (3 functions), ends
315 366
316 -// section for client key for new users
317 -function vdo_show_form_client_key()
367 +// Activation Hook starts
368 +function vdo_activate()
318 369 {
319 - include('include/setting_form.php');
370 + add_option('vdo_default_height', 'auto');
371 + add_option('vdo_default_width', 1280);
372 + add_option('vdo_embed_version', VDOCIPHER_PLAYER_VERSION);
373 + add_option('vdo_player_theme', VDOCIPHER_DEFAULT_THEME);
374 + add_option('vdo_show_plugin_in_sidebar', 'true');
320 375 }
376 +register_activation_hook(__FILE__, 'vdo_activate');
321 377
322 -// Activation Hook starts
323 -function vdo_activate()
378 +// Registering and specifying Gutenberg block
379 +function vdo_register_block()
324 380 {
325 - if ((get_option('vdo_default_height')) == false) {
326 - update_option('vdo_default_height', 'auto');
381 + if (!function_exists('register_block_type')) {
382 + return ;
327 383 }
328 - if ((get_option('vdo_default_width')) == false) {
329 - update_option('vdo_default_width', '1280');
330 - }
331 - //https://stackoverflow.com/a/2173318/5022684
332 - if ((get_option('vdo_embed_version')) == false) {
333 - update_option('vdo_embed_version', '1.6.4');
334 - }
335 - if ((get_option('vdo_player_theme')) == false) {
336 - update_option('vdo_player_theme', '9ae8bbe8dd964ddc9bdb932cca1cb59a');
337 - }
338 - if ((get_option('vdo_watermark_flash_html')) == false) {
339 - update_option('vdo_watermark_flash_html', 'html5');
340 - }
384 + wp_register_script(
385 + 'vdo-block-script',
386 + plugins_url('/include/block/dist/blocks.build.js', __FILE__),
387 + array('wp-blocks', 'wp-element', 'wp-editor', 'wp-i18n')
388 + );
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(
395 + 'vdo-block-editor-style',
396 + plugins_url('/include/block/dist/blocks.editor.build.css', __FILE__),
397 + array('wp-edit-blocks')
398 + );
399 + register_block_type(
400 + 'vdo/block',
401 + array(
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',
408 + ),
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'
427 + )
428 + );
341 429 }
342 -register_activation_hook(__FILE__, 'vdo_activate');
343 430
431 +add_action('init', 'vdo_register_block');
432 +
344 433 // Deactivation Hook starts
345 -function vdo_deactivate()
434 +function vdo_uninstall()
346 435 {
347 436 delete_option('vdo_client_key');
348 437 delete_option('vdo_default_width');
349 438 delete_option('vdo_default_height');
@@ -349,12 +438,13 @@
349 438 delete_option('vdo_default_height');
350 439 delete_option('vdo_annotate_code');
351 440 delete_option('vdo_embed_version');
352 441 delete_option('vdo_player_theme');
353 - delete_option('vdo_watermark_flash_html');
354 - delete_option('vdo_player_theme_options');
442 + delete_option('vdo_plugin_version');
443 + delete_option('vdo_player_speed');
444 + delete_option('vdo_show_plugin_in_sidebar');
355 445 }
356 -register_deactivation_hook(__FILE__, 'vdo_deactivate');
446 +register_uninstall_hook(__FILE__, 'vdo_uninstall');
357 447
358 448 // Admin notice to configure plugin for new installs, starts
359 449 function vdo_admin_notice()
360 450 {