PluginProbe
VdoCipher: Secure Video Player and Hosting / 1.24
VdoCipher: Secure Video Player and Hosting v1.24
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 +221 -404 1.301.24 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.30
5 + * Description: Secured video hosting for wordpress
6 + * Version: 1.24
7 7 * Author: VdoCipher
8 8 * Author URI: https://www.vdocipher.com
9 9 * License: GPL2
10 10 */
@@ -10,297 +10,102 @@
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><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 -if (!defined('VDOCIPHER_PLUGIN_VERSION')) {
22 - define('VDOCIPHER_PLUGIN_VERSION', '1.30');
23 -}
24 -
25 -if (!defined('VDOCIPHER_PLAYER_VERSION')) {
26 - define('VDOCIPHER_PLAYER_VERSION', 'v2');
27 -}
28 -
29 -if (!defined('VDOCIPHER_DEFAULT_THEME')) {
30 - define('VDOCIPHER_DEFAULT_THEME', '');
31 -}
32 -
33 -function vdo_plugin_check_version()
34 -{
35 - // This applies only for installs 1.24 and below
36 - if (!get_option('vdo_plugin_version')) {
37 - if (preg_match('/^1\.[0123456]\.[0-9]{1,2}$/', get_option('vdo_embed_version'))) {
38 - update_option('vdo_embed_version', VDOCIPHER_PLAYER_VERSION);
39 - }
40 - if (preg_match('/^1\.[01234]\.[0-9]{1,2}$/', get_option('vdo_embed_version'))) {
41 - update_option('vdo_default_height', 'auto');
42 - }
43 - update_option('vdo_plugin_version', VDOCIPHER_PLUGIN_VERSION);
44 - return ;
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.";
45 24 }
46 - // This applies for all new installations after 1.25
47 - if (VDOCIPHER_PLUGIN_VERSION !== get_option('vdo_plugin_version')) {
48 - if (preg_match('/^1\.[0-9]{1,2}\.[0-9]{1,2}$/', get_option('vdo_embed_version'))) {
49 - update_option('vdo_embed_version', VDOCIPHER_PLAYER_VERSION);
50 - }
51 - update_option('vdo_plugin_version', VDOCIPHER_PLUGIN_VERSION);
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 "";
52 39 }
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;
53 46 }
47 +// Function called to retrieve id for when title given, ends
54 48
55 -add_action('plugins_loaded', 'vdo_plugin_check_version');
56 -
57 49 // Function called to get OTP, starts
58 -function vdo_otp($video, $otp_post_array = array())
59 -{
50 +function vdo_otp($video, $otp_post_array = array()) {
60 51 $client_key = get_option('vdo_client_key');
61 - if (empty($client_key)) {
62 - return (object)['message' => 'Plugin not configured. API Key missing.'];
63 - } elseif (strlen($client_key) !== 64) {
64 - return (object)["message" => "Invalid API Key."];
52 + if ($client_key == false || $client_key == "") {
53 + return "Plugin not configured. Please set the API key to embed videos.";
65 54 }
66 55 $url = "https://dev.vdocipher.com/api/videos/$video/otp";
67 - $pluginVersion = VDOCIPHER_PLUGIN_VERSION;
68 - $phpVersion = phpversion();
69 56 $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
57 + 'Authorization'=>'Apisecret '.$client_key,
58 + 'Content-Type'=>'application/json',
59 + 'Accept'=>'application/json'
74 60 );
75 61 $otp_post_json = json_encode($otp_post_array);
76 - $response = wp_remote_post(
77 - $url,
78 - array(
79 - 'method' => 'POST',
80 - 'headers' => $headers,
81 - 'body' => $otp_post_json
82 - )
83 - );
62 + $response = wp_remote_post($url, array(
63 + 'method' => 'POST',
64 + 'headers' => $headers,
65 + 'body' => $otp_post_json
66 + ));
84 67 if (is_wp_error($response)) {
85 68 $error_message = $response->get_error_message();
86 - 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.';
90 - }
91 - return (object)["message" => $error_message];
69 + echo "VdoCipher: Something went wrong: $error_message";
70 + return "";
92 71 }
93 -
94 - $responseCode = $response['response']['code'];
95 - if ($responseCode === 404) {
96 - return (object)["message" => "Video ID not found"];
97 - } elseif ($responseCode === 403) {
98 - return (object)["message" => "API key does not have OTP creator permission"];
99 - } elseif ($responseCode === 401) {
100 - 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 - } else {
106 - return json_decode($response['body']);
107 - }
72 + $OTP_Response = $response['body'];
73 + return json_decode($OTP_Response);
108 74 }
109 75 // Function called to get OTP, ends
110 76
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 77 // VdoCipher Shortcode starts
269 78 function vdo_shortcode($atts)
270 79 {
271 - $vdo_args = shortcode_atts(
80 + extract(shortcode_atts(
272 81 array(
273 - 'width' => get_option('vdo_default_width'),
274 - 'height' => get_option('vdo_default_height'),
275 - '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,
283 - ),
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 + ),
284 91 $atts
285 - );
286 - $width = $vdo_args['width'];
287 - $height = $vdo_args['height'];
288 - $id = $vdo_args['id'];
289 - $no_annotate = $vdo_args['no_annotate'];
290 - $vdo_theme = $vdo_args['vdo_theme'];
291 -
292 - if (!preg_match('/.*px$/', $width)) {
293 - $width = $width."px";
92 + ));
93 + if ((get_option('vdo_default_height')) == 'auto') {
94 + $height = 'auto';
294 95 }
295 - if (!preg_match('/.*px$/', $height)) {
296 - if ($height != 'auto') {
297 - $height = $height."px";
96 + if (!$atts['id']) {
97 + if (!$atts['title']) {
98 + return "Required argument id for embedded video not found.";
298 99 }
100 + else {
101 + $video = vdo_retrieve_id($title);
102 + if ($video == null) {
103 + return "404. Video not found.";
104 + }
105 + }
299 106 }
300 - if (!$atts['id']) {
301 - return "Required argument id for embedded video not found.";
302 - } else {
107 + else {
303 108 $video = $id;
304 109 }
305 110
306 111 // Initialize $otp_post_array, to be sent as part of OTP request, as for time-to-live 300
@@ -311,86 +116,129 @@
311 116 return current_time($matches[1]);
312 117 }
313 118 }
314 119 if (get_option('vdo_annotate_code') != "") {
315 - // Add annotate code to $otp_post_array, which will be
316 - // converted to Json and then sent as POST body to API endpoint
120 + $current_user = wp_get_current_user();
121 + $vdo_annotate_code = get_option('vdo_annotate_code');
122 + $vdo_annotate_code = apply_filters('vdocipher_annotate_preprocess', $vdo_annotate_code);
123 + if (is_user_logged_in()) {
124 + $vdo_annotate_code = str_replace('{name}', $current_user->display_name, $vdo_annotate_code);
125 + $vdo_annotate_code = str_replace('{email}', $current_user->user_email, $vdo_annotate_code);
126 + $vdo_annotate_code = str_replace('{username}', $current_user->user_login, $vdo_annotate_code);
127 + $vdo_annotate_code = str_replace('{id}', $current_user->ID, $vdo_annotate_code);
128 + }
129 + $vdo_annotate_code = str_replace('{ip}', $_SERVER['REMOTE_ADDR'], $vdo_annotate_code);
130 + $vdo_annotate_code = preg_replace_callback('/\{date\.([^\}]+)\}/', "eval_date", $vdo_annotate_code);
131 + $vdo_annotate_code = apply_filters('vdocipher_annotate_postprocess', $vdo_annotate_code);
132 + // Add annotate code to $otp_post_array, which will be converted to Json and then sent as POST body to API endpoint
317 133 if (!$no_annotate) {
318 - $otp_post_array["annotate"] = processWatermark(get_option('vdo_annotate_code'));
134 + $otp_post_array["annotate"] = $vdo_annotate_code;
319 135 }
320 136 }
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 137 // OTP is requested via vdo_otp function
326 138 $OTP_Response = vdo_otp($video, $otp_post_array);
139 + $OTP = $OTP_Response->otp;
140 + $playbackInfo = $OTP_Response->playbackInfo;
327 141
328 - // https://www.php.net/manual/en/function.isset.php#86313
329 - $message = (isset($OTP_Response->message)) ? $OTP_Response->message : null;
330 - $OTP = (isset($OTP_Response->otp)) ? $OTP_Response->otp : null;
331 - $playbackInfo = (isset($OTP_Response->playbackInfo)) ? $OTP_Response->playbackInfo : null;
142 + if (is_null($OTP)) {
332 143
333 - if (is_null($OTP)) {
334 - return "<div id='vdo$OTP'><strong>VdoCipher Error: $message</strong></div>";
144 + $output = "<span id='vdo$OTP' style='background:#555555;color:#FFFFFF'><h4>Video not found</h4></span>";
145 + return $output;
335 146 }
336 147
337 - // Video Embed version is retrieved from options table or from shortcode attribute
148 + // Version, legacy, for flash only
149 + $version = 0;
150 + if (isset($atts['version'])) {
151 + $version = $atts['version'];
152 + }
153 +
154 + // Video Embed version is updated
155 + if ((get_option('vdo_embed_version')) == false) {
156 + update_option('vdo_embed_version', '1.6.4');
157 + }
338 158 $vdo_embed_version_str = get_option('vdo_embed_version');
339 159
340 160 // Video Player theme, update and as shortcode attribute
341 - if (!$vdo_theme) {
161 + if ((get_option('vdo_player_theme')) == false) {
162 + update_option('vdo_player_theme', '9ae8bbe8dd964ddc9bdb932cca1cb59a');
163 + }
164 + if(!$vdo_theme){
342 165 $vdo_player_theme = get_option('vdo_player_theme');
343 - } else {
166 + }
167 + else {
344 168 $vdo_player_theme = $vdo_theme;
345 169 }
346 - if (strpos($vdo_player_theme, 'v1/') === 0 || strlen($vdo_player_theme) === 32) {
347 - $vdo_embed_version_str = '1.6.10';
348 - } elseif (strlen($vdo_player_theme) === 16) {
349 - $vdo_embed_version_str = 'v2';
170 +
171 + // tech override custom names
172 + switch ($player_tech) {
173 + case "flash":
174 + $player_tech = "*,-dash";
175 + break;
176 + case "nohtml5":
177 + $player_tech = "*,-dash";
178 + break;
179 + case "noflash":
180 + $player_tech = "*,-hss";
181 + break;
182 + case "nozen":
183 + $player_tech = "*,-zen";
184 + break;
185 + case "noios":
186 + $player_tech = "*,-hlse";
187 + break;
188 + default:
189 + break;
350 190 }
351 - $speedOptions = esc_attr(get_option('vdo_player_speed'));
352 191
353 - $styleAttr = "height:$height;width:$width;max-width:100%;border:0;display: block;";
354 -
355 192 // Old Embed Code
356 - if ($vdo_embed_version_str === '1.6.10') {
357 - //Old embed code
358 - $output = buildPlayerV1($OTP, $playbackInfo, $styleAttr, $vdo_player_theme);
359 -
360 - $speedPattern = '/^\d.\d{1,2}(,\d.\d{1,2})+$/';
361 -
362 - if ($speedOptions !== false && preg_match($speedPattern, $speedOptions)) {
363 - $output .= buildPlayerV1Speed($speedOptions);
193 + if ($vdo_embed_version_str === '0.5') {
194 + $output = "<div id='vdo$OTP' style='height:$height;width:$width;max-width:100%' ></div>";
195 + $output .= "<script> (function(v,i,d,e,o){v[o]=v[o]||{}; v[o].add = v[o].add || function V(a){".
196 + " (v[o].d=v[o].d||[]).push(a);};";
197 + $output .= "if(!v[o].l) { v[o].l=1*new Date();a=i.createElement(d),m=i.getElementsByTagName(d)[0];a.async=1;".
198 + "a.src=e; m.parentNode.insertBefore(a,m);}";
199 + $output .= " })(window,document,'script','//de122v0opjemw.cloudfront.net/vdo.js','vdo'); vdo.add({ ";
200 + $output .= "o: '$OTP', ";
201 + if ($version == 32) {
202 + $output .= "version: '$version' ";
364 203 }
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";
204 + $output .= "}); </script>";
205 + } else {
206 + //New embed code
207 + if ($player_tech === '') {
208 + if (get_option('vdo_watermark_flash_html') === 'flash') {
209 + $player_tech = "*,-dash";
210 + }
369 211 }
370 - if ($vdo_args['autoplay']) {
371 - $url .= "&autoplay=true";
212 + $output .= "<div id='vdo$OTP' style='height:$height;width:$width;max-width:100%' ></div>";
213 + $output .= "<script>(function(v,i,d,e,o){v[o]=v[o]||{}; v[o].add = v[o].add || function V(a){".
214 + "(v[o].d=v[o].d||[]).push(a);};";
215 + $output .= "if(!v[o].l) { v[o].l=1*new Date(); a=i.createElement(d), m=i.getElementsByTagName(d)[0];";
216 + $output .= "a.async=1; a.src=e; m.parentNode.insertBefore(a,m);}";
217 + $output .= "})(window,document,'script','https://d1z78r8i505acl.cloudfront.net/playerAssets/";
218 + $output .= "$vdo_embed_version_str";
219 + $output .= "/vdo.js','vdo');";
220 + $output .= "vdo.add({";
221 + $output .= "otp: '$OTP',";
222 + $output .= "playbackInfo: '$playbackInfo',";
223 + $output .= "theme: '$vdo_player_theme',";
224 + if ($player_tech !== '') {
225 + $output .= "techoverride: [" ;
226 + $techarray = explode(',', $player_tech);
227 + for ($i = 0; $i < sizeof($techarray); $i++) {
228 + $techStr = $techarray[$i];
229 + $output .= "'$techStr'";
230 + if ($i !== sizeof($techarray)-1) {
231 + $output .= ", ";
232 + }
233 + }
234 + $output .= "],";
372 235 }
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 -
387 - } else {
388 - $output = 'Invalid player selection: ' . $vdo_embed_version_str;
236 + $output .= "container: document.querySelector('#vdo$OTP'),});";
237 + $output .= "</script>";
389 238 }
390 239 return $output;
391 240 }
392 -
393 241 add_shortcode('vdo', 'vdo_shortcode');
394 242 // VdoCipher Shortcode ends
395 243
396 244 // adding the Settings link, starts
@@ -408,30 +256,32 @@
408 256 // add the menu item and register settings (3 functions), starts
409 257 if (is_admin()) { // admin actions
410 258 add_action('admin_init', 'register_vdo_settings');
411 259 add_action('admin_menu', 'vdo_menu');
260 +} else {
261 + // non-admin enqueues, actions, and filters
412 262 }
263 +function vdo_menu() {
264 + add_menu_page(
265 + 'VdoCipher Options',
266 + 'VdoCipher',
267 + 'manage_options',
268 + 'vdocipher',
269 + 'vdo_options',
270 + plugin_dir_url(__FILE__).'images/logo.png'
271 + );
272 + add_submenu_page(
273 + null,
274 + 'Video Player Themes',
275 + 'CustomPlayer',
276 + 'manage_options',
277 + 'themesvdo',
278 + 'themesvdo'
279 + );
280 +}
413 281
414 -function vdo_menu()
415 -{
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 - }
282 +function themesvdo() {
283 + include('include/player_themes.php');
434 284 }
435 285
436 286 function vdo_options()
437 287 {
@@ -440,18 +290,21 @@
440 290 }
441 291 if (!get_option('vdo_default_width')) {
442 292 update_option('vdo_default_width', '1280');
443 293 }
294 + $vdo_client_key = get_option('vdo_client_key');
295 + if (!$vdo_client_key && strlen($vdo_client_key) != 64) {
296 + vdo_show_form_client_key();
297 + return "";
298 + }
444 299 if (!current_user_can('manage_options')) {
445 - wp_die(__('You do not have sufficient permissions to access this page.'));
300 + wp_die(__('You do not have sufficient permissions to access this page.'));
446 301 }
447 302 include('include/options.php');
448 - return "";
449 303 }
450 -
451 304 function register_vdo_settings()
452 305 {
453 - // whitelist options
306 + // whitelist options
454 307 register_setting('vdo_option-group', 'vdo_client_key');
455 308 register_setting('vdo_option-group', 'vdo_default_height');
456 309 register_setting('vdo_option-group', 'vdo_default_width');
457 310 register_setting('vdo_option-group', 'vdo_annotate_code');
@@ -456,77 +309,43 @@
456 309 register_setting('vdo_option-group', 'vdo_default_width');
457 310 register_setting('vdo_option-group', 'vdo_annotate_code');
458 311 register_setting('vdo_option-group', 'vdo_embed_version');
459 312 register_setting('vdo_option-group', 'vdo_player_theme');
460 - register_setting('vdo_option-group', 'vdo_plugin_version');
461 - register_setting('vdo_option-group', 'vdo_player_speed');
462 - register_setting('vdo_option-group', 'vdo_show_plugin_in_sidebar');
463 - register_setting('vdo_option-group', 'vdo_send_user_id_in_api');
313 + register_setting('vdo_option-group', 'vdo_watermark_flash_html');
314 + register_setting('vdo_custom_theme', 'vdo_player_theme_options');
464 315 }
465 316 // add the menu item and register settings (3 functions), ends
466 317
467 -// Activation Hook starts
468 -function vdo_activate()
318 +// section for client key for new users
319 +function vdo_show_form_client_key()
469 320 {
470 - add_option('vdo_default_height', 'auto');
471 - add_option('vdo_default_width', 1280);
472 - add_option('vdo_embed_version', VDOCIPHER_PLAYER_VERSION);
473 - add_option('vdo_player_theme', VDOCIPHER_DEFAULT_THEME);
474 - add_option('vdo_show_plugin_in_sidebar', 'true');
321 + include('include/setting_form.php');
475 322 }
476 -register_activation_hook(__FILE__, 'vdo_activate');
477 323
478 -// Registering and specifying Gutenberg block
479 -function vdo_register_block()
324 +// Activation Hook starts
325 +function vdo_activate()
480 326 {
481 - if (!function_exists('register_block_type')) {
482 - return ;
327 + if ((get_option('vdo_default_height')) == false) {
328 + update_option('vdo_default_height', 'auto');
483 329 }
484 - wp_register_script(
485 - 'vdo-block-script',
486 - plugins_url('/include/block/dist/blocks.build.js', __FILE__),
487 - array('wp-blocks', 'wp-element', 'wp-editor', 'wp-i18n')
488 - );
489 - wp_register_style(
490 - 'vdo-block-editor-style',
491 - plugins_url('/include/block/dist/blocks.editor.build.css', __FILE__),
492 - array('wp-edit-blocks')
493 - );
494 - register_block_type(
495 - 'vdo/block',
496 - 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 - ),
519 - ),
520 - 'render_callback' => 'vdo_shortcode'
521 - )
522 - );
330 + if ((get_option('vdo_default_width')) == false) {
331 + update_option('vdo_default_width', '1280');
332 + }
333 + //https://stackoverflow.com/a/2173318/5022684
334 + if ((get_option('vdo_embed_version')) == false) {
335 + update_option('vdo_embed_version', '1.6.4');
336 + }
337 + if ((get_option('vdo_player_theme')) == false) {
338 + update_option('vdo_player_theme', '9ae8bbe8dd964ddc9bdb932cca1cb59a');
339 + }
340 + if ((get_option('vdo_watermark_flash_html')) == false) {
341 + update_option('vdo_watermark_flash_html', 'html5');
342 + }
523 343 }
344 +register_activation_hook(__FILE__, 'vdo_activate');
524 345
525 -add_action('init', 'vdo_register_block');
526 -
527 346 // Deactivation Hook starts
528 -function vdo_uninstall()
347 +function vdo_deactivate()
529 348 {
530 349 delete_option('vdo_client_key');
531 350 delete_option('vdo_default_width');
532 351 delete_option('vdo_default_height');
@@ -532,14 +351,12 @@
532 351 delete_option('vdo_default_height');
533 352 delete_option('vdo_annotate_code');
534 353 delete_option('vdo_embed_version');
535 354 delete_option('vdo_player_theme');
536 - delete_option('vdo_plugin_version');
537 - delete_option('vdo_player_speed');
538 - delete_option('vdo_show_plugin_in_sidebar');
539 - delete_option('vdo_send_user_id_in_api');
355 + delete_option('vdo_watermark_flash_html');
356 + delete_option('vdo_player_theme_options');
540 357 }
541 -register_uninstall_hook(__FILE__, 'vdo_uninstall');
358 +register_deactivation_hook(__FILE__, 'vdo_deactivate');
542 359
543 360 // Admin notice to configure plugin for new installs, starts
544 361 function vdo_admin_notice()
545 362 {