PluginProbe
VdoCipher: Secure Video Player and Hosting / 1.18
VdoCipher: Secure Video Player and Hosting v1.18
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 +113 -334 1.271.18 View file →
@@ -1,74 +1,35 @@
1 1 <?php
2 2 /**
3 3 * Plugin Name: VdoCipher
4 - * Plugin URI: https://www.vdocipher.com
5 - * Description: Secured video hosting for WordPress
6 - * Version: 1.27
4 + * Plugin URI: http://www.vdocipher.com
5 + * Description: Secured video hosting for wordpress
6 + * Version: 1.18
7 7 * Author: VdoCipher
8 - * Author URI: https://www.vdocipher.com
8 + * Author URI: http://www.vdocipher.com
9 9 * License: GPL2
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 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><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 -if (!defined('VDOCIPHER_PLUGIN_VERSION')) {
20 - define('VDOCIPHER_PLUGIN_VERSION', '1.27');
21 -}
22 -
23 -if (!defined('VDOCIPHER_PLAYER_VERSION')) {
24 - define('VDOCIPHER_PLAYER_VERSION', '1.6.10');
25 -}
26 -
27 -if (!defined('VDOCIPHER_DEFAULT_THEME')) {
28 - define('VDOCIPHER_DEFAULT_THEME', '9ae8bbe8dd964ddc9bdb932cca1cb59a');
29 -}
30 -
31 -function vdo_plugin_check_version()
19 +function vdo_send($action, $params, $posts = array())
32 20 {
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 ;
43 - }
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);
50 - }
51 -}
52 -
53 -add_action('plugins_loaded', 'vdo_plugin_check_version');
54 -
55 -// Function called to retrieve id for when title given, starts
56 -function vdo_retrieve_id($title)
57 -{
58 21 $client_key = get_option('vdo_client_key');
59 22 if ($client_key == false || $client_key == "") {
60 - return "Plugin not configured. Please set the API key to embed videos.";
23 + return "Plugin not configured. Please set the key to embed videos.";
61 24 }
62 - $url = "https://dev.vdocipher.com/api/videos?q=$title";
63 - $headers = array(
64 - 'Authorization'=>'Apisecret '.$client_key,
65 - 'Content-Type'=>'application/json',
66 - 'Accept'=>'application/json'
67 - );
68 - $response = wp_remote_post($url, array(
69 - 'method' => 'GET',
70 - 'headers' => $headers
25 +
26 + $getData = http_build_query($params);
27 + $posts["clientSecretKey"] = $client_key;
28 + $url = "http://api.vdocipher.com/v2/$action/?$getData";
29 + $response = wp_safe_remote_post($url, array(
30 + 'method' => 'POST',
31 + 'body' => $posts
71 32 ));
72 33 if (is_wp_error($response)) {
73 34 $error_message = $response->get_error_message();
74 35 echo "VdoCipher: Something went wrong: $error_message";
@@ -73,96 +34,52 @@
73 34 $error_message = $response->get_error_message();
74 35 echo "VdoCipher: Something went wrong: $error_message";
75 36 return "";
76 37 }
77 - $video_json_response = $response['body'];
78 - $video_list_object = json_decode($video_json_response);
79 - $video_list = $video_list_object->rows;
80 - $video_object = $video_list[0];
81 - return $video_object->id;
38 + return $response['body'];
82 39 }
83 -// Function called to retrieve id for when title given, ends
84 -
85 -// Function called to get OTP, starts
86 -function vdo_otp($video, $otp_post_array = array())
87 -{
88 - $client_key = get_option('vdo_client_key');
89 - if ($client_key == false || $client_key == "") {
90 - return "Plugin not configured. Please set the API key to embed videos.";
91 - }
92 - $url = "https://dev.vdocipher.com/api/videos/$video/otp";
93 - $headers = array(
94 - 'Authorization'=>'Apisecret '.$client_key,
95 - 'Content-Type'=>'application/json',
96 - 'Accept'=>'application/json'
97 - );
98 - $otp_post_json = json_encode($otp_post_array);
99 - $response = wp_remote_post(
100 - $url,
101 - array(
102 - 'method' => 'POST',
103 - 'headers' => $headers,
104 - 'body' => $otp_post_json
105 - )
106 - );
107 - if (is_wp_error($response)) {
108 - $error_message = $response->get_error_message();
109 - echo "VdoCipher: Something went wrong: $error_message";
110 - return "";
111 - }
112 - $OTP_Response = $response['body'];
113 - return json_decode($OTP_Response);
114 -}
115 -// Function called to get OTP, ends
116 -
117 -// VdoCipher Shortcode starts
118 40 function vdo_shortcode($atts)
119 41 {
120 - $vdo_args = shortcode_atts(
42 + extract(shortcode_atts(
121 43 array(
122 - 'title' => 'TITLE_OF_VIDEO',
123 - 'width' => get_option('vdo_default_width'),
124 - 'height' => get_option('vdo_default_height'),
125 - 'id' => 'id',
126 - 'no_annotate'=> false,
127 - 'vdo_theme'=> false,
128 - 'vdo_version'=> false,
129 - 'player_tech'=> ''
130 - ),
44 + 'title' => 'TITLE_OF_VIDEO',
45 + 'width' => get_option('vdo_default_width') . "px",
46 + 'height' => get_option('vdo_default_height') . "px",
47 + 'id' => 'id',
48 + 'no_annotate'=> false,
49 + 'version'=> 0,
50 + ),
131 51 $atts
132 - );
133 - $title = $vdo_args['title'];
134 - $width = $vdo_args['width'];
135 - $height = $vdo_args['height'];
136 - $id = $vdo_args['id'];
137 - $no_annotate = $vdo_args['no_annotate'];
138 - $vdo_theme = $vdo_args['vdo_theme'];
139 - $vdo_version = $vdo_args['vdo_version'];
140 - $player_tech = $vdo_args['player_tech'];
141 -
142 - if (!preg_match('/.*px$/', $width)) {
143 - $width = $width."px";
144 - }
145 - if (!preg_match('/.*px$/', $height)) {
146 - if ($height != 'auto') {
147 - $height = $height."px";
148 - }
149 - }
52 + ));
150 53 if (!$atts['id']) {
151 54 if (!$atts['title']) {
152 55 return "Required argument id for embedded video not found.";
153 - } else {
154 - $video = vdo_retrieve_id($title);
155 - if ($video == null) {
156 - return "404. Video not found.";
157 - }
158 56 }
57 + $params = array(
58 + 'search'=>array(
59 + 'title'=>$title
60 + ),
61 + 'page'=>1,
62 + 'limit'=>30,
63 + 'type'=>'json'
64 + );
65 + $video = vdo_send("videos", $params);
66 + $video = json_decode($video);
67 + if ($video == null) {
68 + return "404. Video not found.";
69 + }
70 + $video = $video[0]->id;
71 + if ($video == null) {
72 + return "No video with given title found.";
73 + }
159 74 } else {
160 75 $video = $id;
161 76 }
162 77
163 - // Initialize $otp_post_array, to be sent as part of OTP request, as for time-to-live 300
164 - $otp_post_array = array("ttl" => 300);
78 + $params = array(
79 + 'video'=>$video
80 + );
81 + $anno = false;
165 82 if (!function_exists("eval_date")) {
166 83 function eval_date($matches)
167 84 {
168 85 return current_time($matches[1]);
@@ -178,70 +95,41 @@
178 95 $vdo_annotate_code = str_replace('{username}', $current_user->user_login, $vdo_annotate_code);
179 96 $vdo_annotate_code = str_replace('{id}', $current_user->ID, $vdo_annotate_code);
180 97 }
181 98 $vdo_annotate_code = str_replace('{ip}', $_SERVER['REMOTE_ADDR'], $vdo_annotate_code);
182 - $vdo_annotate_code = preg_replace_callback('/{date\.([^}]+)}/', "eval_date", $vdo_annotate_code);
99 + $vdo_annotate_code = preg_replace_callback('/\{date\.([^\}]+)\}/', "eval_date", $vdo_annotate_code);
183 100 $vdo_annotate_code = apply_filters('vdocipher_annotate_postprocess', $vdo_annotate_code);
184 - // Add annotate code to $otp_post_array, which will be
185 - // converted to Json and then sent as POST body to API endpoint
186 101 if (!$no_annotate) {
187 - $otp_post_array["annotate"] = $vdo_annotate_code;
102 + $anno = array("annotate" => $vdo_annotate_code);
188 103 }
189 104 }
190 - // OTP is requested via vdo_otp function
191 - $OTP_Response = vdo_otp($video, $otp_post_array);
192 - $OTP = $OTP_Response->otp;
193 - $playbackInfo = $OTP_Response->playbackInfo;
194 -
105 + $OTP = vdo_send("otp", $params, $anno);
106 + $OTP = json_decode($OTP);
195 107 if (is_null($OTP)) {
196 - return "<span id='vdo$OTP' style='background:#555555;color:#FFFFFF'><h4>Video not found</h4></span>";
108 + $output = "<span id='vdo$OTP' style='background:#555555;color:#FFFFFF'><h4>Video not found</h4></span>";
109 + return $output;
197 110 }
111 + $OTP = $OTP->otp;
198 112
199 - // Version, legacy, for flash only
200 113 $version = 0;
201 114 if (isset($atts['version'])) {
202 115 $version = $atts['version'];
203 116 }
204 -
205 - // Video Embed version is retrieved from options table or from shortcode attribute
206 - if (!$vdo_version) {
207 - $vdo_embed_version_str = get_option('vdo_embed_version');
208 - } else {
209 - $vdo_embed_version_str = $vdo_version;
117 + if ((get_option('vdo_embed_version')) == false) {
118 + update_option('vdo_embed_version', '0.5');
210 119 }
211 -
212 - // Video Player theme, update and as shortcode attribute
213 - if (!$vdo_theme) {
214 - $vdo_player_theme = get_option('vdo_player_theme');
215 - } else {
216 - $vdo_player_theme = $vdo_theme;
120 + if ((get_option('vdo_player_theme')) == false) {
121 + update_option('vdo_player_theme','9ae8bbe8dd964ddc9bdb932cca1cb59a');
217 122 }
123 + $vdo_embed_version_str = get_option('vdo_embed_version');
124 + $vdo_player_theme = get_option('vdo_player_theme');
218 125
219 - // tech override custom names
220 - switch ($player_tech) {
221 - case "flash":
222 - case "nohtml5":
223 - $player_tech = "*,-dash";
224 - break;
225 - case "noflash":
226 - $player_tech = "*,-hss";
227 - break;
228 - case "nozen":
229 - $player_tech = "*,-zen";
230 - break;
231 - case "noios":
232 - $player_tech = "*,-hlse";
233 - break;
234 - default:
235 - break;
236 - }
237 -
238 126 // Old Embed Code
239 - if ($vdo_embed_version_str === '0.5') {
127 + if($vdo_embed_version_str === '0.5') {
240 128 $output = "<div id='vdo$OTP' style='height:$height;width:$width;max-width:100%' ></div>";
241 129 $output .= "<script> (function(v,i,d,e,o){v[o]=v[o]||{}; v[o].add = v[o].add || function V(a){".
242 130 " (v[o].d=v[o].d||[]).push(a);};";
243 - $output .= "if(!v[o].l) { v[o].l=1*new Date();a=i.createElement(d),m=i.getElementsByTagName(d)[0];a.async=1;".
131 + $output .= "if(!v[o].l) { v[o].l=1*new Date(); a=i.createElement(d), m=i.getElementsByTagName(d)[0]; a.async=1; ".
244 132 "a.src=e; m.parentNode.insertBefore(a,m);}";
245 133 $output .= " })(window,document,'script','//de122v0opjemw.cloudfront.net/vdo.js','vdo'); vdo.add({ ";
246 134 $output .= "o: '$OTP', ";
247 135 if ($version == 32) {
@@ -247,81 +135,32 @@
247 135 if ($version == 32) {
248 136 $output .= "version: '$version' ";
249 137 }
250 138 $output .= "}); </script>";
251 - } else {
252 - //New embed code
253 - if ($player_tech === '') {
254 - if (get_option('vdo_watermark_flash_html') === 'flash') {
255 - $player_tech = "*,-dash";
256 - }
257 - }
258 - $techOverrideProperty = '';
259 - if ($player_tech !== '') {
260 - $techOverrideProperty = "techoverride: [" ;
261 - $techArray = explode(',', $player_tech);
262 - for ($i = 0; $i < sizeof($techArray); $i++) {
263 - $techStr = $techArray[$i];
264 - $techOverrideProperty .= "'$techStr'";
265 - if ($i !== sizeof($techArray)-1) {
266 - $techOverrideProperty .= ", ";
267 - }
268 - }
269 - $techOverrideProperty .= "],";
270 - }
271 - $output = <<<END
272 - <div id='vdo$OTP' style='height:$height;width:$width;max-width:100%' ></div>
273 - <script>(function(v,i,d,e,o){v[o]=v[o]||{}; v[o].add = v[o].add || function V(a){
274 - (v[o].d=v[o].d||[]).push(a);};
275 - if(!v[o].l) { v[o].l=1*new Date(); a=i.createElement(d), m=i.getElementsByTagName(d)[0];
276 - a.async=1; a.src=e; m.parentNode.insertBefore(a,m);}
277 - })(window,document,'script','https://d1z78r8i505acl.cloudfront.net/playerAssets/$vdo_embed_version_str/vdo.js','vdo');
278 - vdo.add({
279 - otp: '$OTP',
280 - playbackInfo: '$playbackInfo',
281 - theme: '$vdo_player_theme',
282 - plugins: [{
283 - name: 'keyboard',
284 - options: {
285 - preset: 'default',
286 - bindings: {
287 - 'Left' : (player) => player.seek(player.currentTime - 15),
288 - 'Right' : (player) => player.seek(player.currentTime + 15),
289 - },
290 - }
291 - }],
292 - container: document.querySelector('#vdo$OTP'),
293 - $techOverrideProperty
294 - })
295 - </script>
296 -END;
297 - $speedOptions = esc_attr(get_option('vdo_player_speed'));
298 - $speedPattern = '/^\d.\d{1,2}(,\d.\d{1,2})+$/';
299 - if ($speedOptions !== false && preg_match($speedPattern, $speedOptions)) {
300 - $output .= <<<END
301 - <script>
302 - (function () {
303 - var originalReadyFunction = window.onVdoCipherAPIReady;
304 - // private API; do not use anywhere else; might change without notice
305 - var index = vdo.d.length - 1;
306 - window.onVdoCipherAPIReady = () => {
307 - if (originalReadyFunction) originalReadyFunction();
308 - var v_ = vdo.getObjects()[index];
309 - v_.addEventListener('load', () => {
310 - v_.availablePlaybackRates = [$speedOptions]
311 - });
312 - }
313 - })()
314 - </script>
315 -END;
316 - }
317 139 }
140 + //New embed code
141 + else {
142 + $output .= "<div id='vdo$OTP' style='height:$height;width:$width;max-width:100%' ></div>";
143 + $output .= "<script>(function(v,i,d,e,o){v[o]=v[o]||{}; v[o].add = v[o].add || function V(a){ (v[o].d=v[o].d||[]).push(a);};";
144 + $output .= "if(!v[o].l) { v[o].l=1*new Date(); a=i.createElement(d), m=i.getElementsByTagName(d)[0];";
145 + $output .= "a.async=1; a.src=e; m.parentNode.insertBefore(a,m);}";
146 + $output .= "})(window,document,'script','https://d1z78r8i505acl.cloudfront.net/playerAssets/";
147 + $output .= "$vdo_embed_version_str";
148 + $output .= "/vdo.js','vdo');";
149 + $output .= "vdo.add({";
150 + $output .= "otp: '$OTP',";
151 + $output .= "playbackInfo: btoa(JSON.stringify({";
152 + $output .= "videoId: '$video'})),";
153 + $output .= "theme: '$vdo_player_theme',";
154 + $output .= "container: document.querySelector('#vdo$OTP'),});";
155 + $output .= "</script>";
156 + }
318 157 return $output;
319 158 }
159 +
320 160 add_shortcode('vdo', 'vdo_shortcode');
321 -// VdoCipher Shortcode ends
322 161
323 -// adding the Settings link, starts
162 +/// adding the settings link
324 163 $plugin = plugin_basename(__FILE__);
325 164 add_filter("plugin_action_links_$plugin", 'vdo_settings_link');
326 165
327 166 function vdo_settings_link($links)
@@ -329,42 +168,38 @@
329 168 $settings_link = '<a href="options-general.php?page=vdocipher">Settings</a>';
330 169 array_unshift($links, $settings_link);
331 170 return $links;
332 171 }
333 -// adding the Settings link, ends
334 172
335 -// add the menu item and register settings (3 functions), starts
173 +/// add the menu item and register settings
336 174 if (is_admin()) { // admin actions
175 + add_action('admin_menu', 'vdo_menu');
337 176 add_action('admin_init', 'register_vdo_settings');
338 - add_action('admin_menu', 'vdo_menu');
177 +} else {
178 + // non-admin enqueues, actions, and filters
339 179 }
340 180 function vdo_menu()
341 181 {
342 - add_menu_page(
343 - 'VdoCipher Options',
344 - 'VdoCipher',
345 - 'manage_options',
346 - 'vdocipher',
347 - 'vdo_options',
348 - plugin_dir_url(__FILE__).'images/logo.png'
349 - );
182 + add_menu_page('VdoCipher Options', 'VdoCipher', 'manage_options', 'vdocipher', 'vdo_options');
350 183 }
351 -
352 184 function vdo_options()
353 185 {
354 186 if (!get_option('vdo_default_height')) {
355 - update_option('vdo_default_height', 'auto');
187 + update_option('vdo_default_height', '360');
356 188 }
357 189 if (!get_option('vdo_default_width')) {
358 - update_option('vdo_default_width', '1280');
190 + update_option('vdo_default_width', '640');
359 191 }
192 + $vdo_client_key = get_option('vdo_client_key');
193 + if (!$vdo_client_key && strlen($vdo_client_key) != 64) {
194 + vdo_show_form_client_key();
195 + return "";
196 + }
360 197 if (!current_user_can('manage_options')) {
361 - wp_die(__('You do not have sufficient permissions to access this page.'));
198 + wp_die(__('You do not have sufficient permissions to access this page.'));
362 199 }
363 200 include('include/options.php');
364 - return "";
365 201 }
366 -
367 202 function register_vdo_settings()
368 203 {
369 204 // whitelist options
370 205 register_setting('vdo_option-group', 'vdo_client_key');
@@ -372,82 +207,16 @@
372 207 register_setting('vdo_option-group', 'vdo_default_width');
373 208 register_setting('vdo_option-group', 'vdo_annotate_code');
374 209 register_setting('vdo_option-group', 'vdo_embed_version');
375 210 register_setting('vdo_option-group', 'vdo_player_theme');
376 - register_setting('vdo_option-group', 'vdo_watermark_flash_html');
377 - register_setting('vdo_option-group', 'vdo_plugin_version');
378 - register_setting('vdo_option-group', 'vdo_player_speed');
379 - register_setting('vdo_custom_theme', 'vdo_player_theme_options');
380 211 }
381 -// add the menu item and register settings (3 functions), ends
382 212
383 -// Activation Hook starts
384 -function vdo_activate()
213 +/// adding a section for asking for the client key
214 +function vdo_show_form_client_key()
385 215 {
386 - add_option('vdo_default_height', 'auto');
387 - add_option('vdo_default_width', 1280);
388 - add_option('vdo_embed_version', VDOCIPHER_PLAYER_VERSION);
389 - add_option('vdo_player_theme', VDOCIPHER_DEFAULT_THEME);
390 - add_option('vdo_watermark_flash_html', 'html5');
216 + include('include/setting_form.php');
391 217 }
392 -register_activation_hook(__FILE__, 'vdo_activate');
393 -
394 -// Registering and specifying Gutenberg block
395 -function vdo_register_block()
396 -{
397 - if (!function_exists('register_block_type')) {
398 - return ;
399 - }
400 - wp_register_script(
401 - 'vdo-block-script',
402 - plugins_url('/include/block/dist/blocks.build.js', __FILE__),
403 - array('wp-blocks', 'wp-element', 'wp-editor', 'wp-i18n')
404 - );
405 - wp_register_style(
406 - 'vdo-block-base-style',
407 - plugins_url('/include/block/dist/blocks.style.build.css', __FILE__),
408 - array('wp-blocks')
409 - );
410 - wp_register_style(
411 - 'vdo-block-editor-style',
412 - plugins_url('/include/block/dist/blocks.editor.build.css', __FILE__),
413 - array('wp-edit-blocks')
414 - );
415 - register_block_type(
416 - 'vdo/block',
417 - array(
418 - 'editor_script'=>'vdo-block-script',
419 - 'editor_style'=>'vdo-block-editor-style',
420 - 'style'=>'vdo-block-base-style',
421 - 'attributes'=>array(
422 - 'id'=>array(
423 - 'type'=>'string',
424 - ),
425 - 'width'=>array(
426 - 'type'=>'string',
427 - 'default'=>get_option('vdo_default_width')
428 - ),
429 - 'height'=>array(
430 - 'type'=>'string',
431 - 'default'=>get_option('vdo_default_height')
432 - ),
433 - 'vdo_theme'=>array(
434 - 'type'=>'string',
435 - 'default'=>get_option('vdo_player_theme')
436 - ),
437 - 'vdo_version'=>array(
438 - 'type'=>'string',
439 - 'default'=>get_option('vdo_embed_version')
440 - ),
441 - ),
442 - 'render_callback'=>'vdo_shortcode'
443 - )
444 - );
445 -}
446 -
447 -add_action('init', 'vdo_register_block');
448 -
449 -// Deactivation Hook starts
218 +register_deactivation_hook(__FILE__, 'vdo_deactivate');
450 219 function vdo_deactivate()
451 220 {
452 221 delete_option('vdo_client_key');
453 222 delete_option('vdo_default_width');
@@ -454,16 +223,26 @@
454 223 delete_option('vdo_default_height');
455 224 delete_option('vdo_annotate_code');
456 225 delete_option('vdo_embed_version');
457 226 delete_option('vdo_player_theme');
458 - delete_option('vdo_watermark_flash_html');
459 - delete_option('vdo_player_theme_options');
460 - delete_option('vdo_plugin_version');
461 - delete_option('vdo_player_speed');
462 227 }
463 -register_deactivation_hook(__FILE__, 'vdo_deactivate');
464 -
465 -// Admin notice to configure plugin for new installs, starts
228 +function vdo_activate()
229 +{
230 + if ((get_option('vdo_default_height')) == false) {
231 + update_option('vdo_default_height', '360');
232 + }
233 + if ((get_option('vdo_default_width')) == false) {
234 + update_option('vdo_default_width', '640');
235 + }
236 + //https://stackoverflow.com/a/2173318/5022684
237 + if ((get_option('vdo_embed_version')) == false) {
238 + update_option('vdo_embed_version', '0.5');
239 + }
240 + if ((get_option('vdo_player_theme')) == false) {
241 + update_option('vdo_player_theme','9ae8bbe8dd964ddc9bdb932cca1cb59a');
242 + }
243 +}
244 +register_activation_hook(__FILE__, 'vdo_activate');
466 245 function vdo_admin_notice()
467 246 {
468 247 if ((!get_option('vdo_client_key') || strlen(get_option('vdo_client_key')) != 64)
469 248 && basename($_SERVER['PHP_SELF']) == "plugins.php"