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