PluginProbe
VdoCipher: Secure Video Player and Hosting / 1.22
VdoCipher: Secure Video Player and Hosting v1.22
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 +193 -437 trunk1.22 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.22
7 7 * Author: VdoCipher
8 8 * Author URI: https://www.vdocipher.com
9 9 * License: GPL2
10 10 */
@@ -10,302 +10,80 @@
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()
19 +function vdo_send($action, $params, $posts = array())
34 20 {
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 ;
21 + $client_key = get_option('vdo_client_key');
22 + if ($client_key == false || $client_key == "") {
23 + return "Plugin not configured. Please set the 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);
52 - }
53 -}
54 25
55 -add_action('plugins_loaded', 'vdo_plugin_check_version');
56 -
57 -// Function called to get OTP, starts
58 -function vdo_otp($video, $otp_post_array = array())
59 -{
60 - $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."];
65 - }
66 - $url = "https://dev.vdocipher.com/api/videos/$video/otp";
67 - $pluginVersion = VDOCIPHER_PLUGIN_VERSION;
68 - $phpVersion = phpversion();
69 - $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
74 - );
75 - $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 - );
26 + $getData = http_build_query($params);
27 + $posts["clientSecretKey"] = $client_key;
28 + $url = "https://api.vdocipher.com/v2/$action/?$getData";
29 + $response = wp_safe_remote_post($url, array(
30 + 'method' => 'POST',
31 + 'body' => $posts
32 + ));
84 33 if (is_wp_error($response)) {
85 34 $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];
35 + echo "VdoCipher: Something went wrong: $error_message";
36 + return "";
92 37 }
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 - }
38 + return $response['body'];
108 39 }
109 -// Function called to get OTP, ends
110 -
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 -// VdoCipher Shortcode starts
269 40 function vdo_shortcode($atts)
270 41 {
271 - $vdo_args = shortcode_atts(
42 + extract(shortcode_atts(
272 43 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 - ),
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 + 'player_tech'=> ''
51 + ),
284 52 $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";
53 + ));
54 + if ((get_option('vdo_default_height')) == 'auto') {
55 + $height = 'auto';
294 56 }
295 - if (!preg_match('/.*px$/', $height)) {
296 - if ($height != 'auto') {
297 - $height = $height."px";
57 + if (!$atts['id']) {
58 + if (!$atts['title']) {
59 + return "Required argument id for embedded video not found.";
298 60 }
299 - }
300 - if (!$atts['id']) {
301 - return "Required argument id for embedded video not found.";
61 + $params = array(
62 + 'search'=>array(
63 + 'title'=>$title
64 + ),
65 + 'page'=>1,
66 + 'limit'=>30,
67 + 'type'=>'json'
68 + );
69 + $video = vdo_send("videos", $params);
70 + $video = json_decode($video);
71 + if ($video == null) {
72 + return "404. Video not found.";
73 + }
74 + $video = $video[0]->id;
75 + if ($video == null) {
76 + return "No video with given title found.";
77 + }
302 78 } else {
303 79 $video = $id;
304 80 }
305 81
306 - // Initialize $otp_post_array, to be sent as part of OTP request, as for time-to-live 300
307 - $otp_post_array = array("ttl" => 300);
82 + $params = array(
83 + 'video'=>$video
84 + );
85 + $anno = false;
308 86 if (!function_exists("eval_date")) {
309 87 function eval_date($matches)
310 88 {
311 89 return current_time($matches[1]);
@@ -311,90 +89,121 @@
311 89 return current_time($matches[1]);
312 90 }
313 91 }
314 92 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
93 + $current_user = wp_get_current_user();
94 + $vdo_annotate_code = get_option('vdo_annotate_code');
95 + $vdo_annotate_code = apply_filters('vdocipher_annotate_preprocess', $vdo_annotate_code);
96 + if (is_user_logged_in()) {
97 + $vdo_annotate_code = str_replace('{name}', $current_user->display_name, $vdo_annotate_code);
98 + $vdo_annotate_code = str_replace('{email}', $current_user->user_email, $vdo_annotate_code);
99 + $vdo_annotate_code = str_replace('{username}', $current_user->user_login, $vdo_annotate_code);
100 + $vdo_annotate_code = str_replace('{id}', $current_user->ID, $vdo_annotate_code);
101 + }
102 + $vdo_annotate_code = str_replace('{ip}', $_SERVER['REMOTE_ADDR'], $vdo_annotate_code);
103 + $vdo_annotate_code = preg_replace_callback('/\{date\.([^\}]+)\}/', "eval_date", $vdo_annotate_code);
104 + $vdo_annotate_code = apply_filters('vdocipher_annotate_postprocess', $vdo_annotate_code);
317 105 if (!$no_annotate) {
318 - $otp_post_array["annotate"] = processWatermark(get_option('vdo_annotate_code'));
106 + $anno = array("annotate" => $vdo_annotate_code);
319 107 }
320 108 }
321 - $userId = get_current_user_id();
322 - if (get_option('vdo_send_user_id_in_api') && $userId !== 0) {
323 - $otp_post_array["userId"] = $userId;
109 + $OTP = vdo_send("otp", $params, $anno);
110 + $OTP = json_decode($OTP);
111 + if (is_null($OTP)) {
112 + $output = "<span id='vdo$OTP' style='background:#555555;color:#FFFFFF'><h4>Video not found</h4></span>";
113 + return $output;
324 114 }
325 - // OTP is requested via vdo_otp function
326 - $OTP_Response = vdo_otp($video, $otp_post_array);
115 + $OTP = $OTP->otp;
327 116
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;
332 -
333 - if (is_null($OTP)) {
334 - return "<div id='vdo$OTP'><strong>VdoCipher Error: $message</strong></div>";
117 + $version = 0;
118 + if (isset($atts['version'])) {
119 + $version = $atts['version'];
335 120 }
336 -
337 - // Video Embed version is retrieved from options table or from shortcode attribute
121 + if ((get_option('vdo_embed_version')) == false) {
122 + update_option('vdo_embed_version', '1.6.4');
123 + }
124 + if ((get_option('vdo_player_theme')) == false) {
125 + update_option('vdo_player_theme', '9ae8bbe8dd964ddc9bdb932cca1cb59a');
126 + }
338 127 $vdo_embed_version_str = get_option('vdo_embed_version');
128 + $vdo_player_theme = get_option('vdo_player_theme');
339 129
340 - // Video Player theme, update and as shortcode attribute
341 - if (!$vdo_theme) {
342 - $vdo_player_theme = get_option('vdo_player_theme');
343 - } else {
344 - $vdo_player_theme = $vdo_theme;
130 + // tech override custom names start
131 + switch ($player_tech) {
132 + case "flash":
133 + $player_tech = "*,-dash";
134 + break;
135 + case "nohtml5":
136 + $player_tech = "*,-dash";
137 + break;
138 + case "noflash":
139 + $player_tech = "*,-hss";
140 + break;
141 + case "nozen":
142 + $player_tech = "*,-zen";
143 + break;
144 + case "noios":
145 + $player_tech = "*,-hlse";
146 + break;
147 + default:
148 + break;
345 149 }
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';
350 - }
351 - $speedOptions = esc_attr(get_option('vdo_player_speed'));
150 + // tech override ends
352 151
353 - $styleAttr = "height:$height;width:$width;max-width:100%;border:0;display: block;";
354 -
355 152 // 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);
153 + if ($vdo_embed_version_str === '0.5') {
154 + $output = "<div id='vdo$OTP' style='height:$height;width:$width;max-width:100%' ></div>";
155 + $output .= "<script> (function(v,i,d,e,o){v[o]=v[o]||{}; v[o].add = v[o].add || function V(a){".
156 + " (v[o].d=v[o].d||[]).push(a);};";
157 + $output .= "if(!v[o].l) { v[o].l=1*new Date();a=i.createElement(d),m=i.getElementsByTagName(d)[0];a.async=1;".
158 + "a.src=e; m.parentNode.insertBefore(a,m);}";
159 + $output .= " })(window,document,'script','//de122v0opjemw.cloudfront.net/vdo.js','vdo'); vdo.add({ ";
160 + $output .= "o: '$OTP', ";
161 + if ($version == 32) {
162 + $output .= "version: '$version' ";
364 163 }
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";
164 + $output .= "}); </script>";
165 + } else {
166 + //New embed code
167 + if ($player_tech === '') {
168 + if (get_option(vdo_watermark_flash_html) === 'flash') {
169 + $player_tech = "*,-dash";
170 + }
369 171 }
370 - if ($vdo_args['autoplay']) {
371 - $url .= "&autoplay=true";
172 + $output .= "<div id='vdo$OTP' style='height:$height;width:$width;max-width:100%' ></div>";
173 + $output .= "<script>(function(v,i,d,e,o){v[o]=v[o]||{}; v[o].add = v[o].add || function V(a){".
174 + "(v[o].d=v[o].d||[]).push(a);};";
175 + $output .= "if(!v[o].l) { v[o].l=1*new Date(); a=i.createElement(d), m=i.getElementsByTagName(d)[0];";
176 + $output .= "a.async=1; a.src=e; m.parentNode.insertBefore(a,m);}";
177 + $output .= "})(window,document,'script','https://d1z78r8i505acl.cloudfront.net/playerAssets/";
178 + $output .= "$vdo_embed_version_str";
179 + $output .= "/vdo.js','vdo');";
180 + $output .= "vdo.add({";
181 + $output .= "otp: '$OTP',";
182 + $output .= "playbackInfo: btoa(JSON.stringify({";
183 + $output .= "videoId: '$video'})),";
184 + $output .= "theme: '$vdo_player_theme',";
185 + if ($player_tech !== '') {
186 + $output .= "techoverride: [" ;
187 + $techarray = explode(',', $player_tech);
188 + for ($i = 0; $i < sizeof($techarray); $i++) {
189 + $techStr = $techarray[$i];
190 + $output .= "'$techStr'";
191 + if ($i !== sizeof($techarray)-1) {
192 + $output .= ", ";
193 + }
194 + }
195 + $output .= "],";
372 196 }
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;
197 + $output .= "container: document.querySelector('#vdo$OTP'),});";
198 + $output .= "</script>";
389 199 }
390 200 return $output;
391 201 }
392 202
393 203 add_shortcode('vdo', 'vdo_shortcode');
394 -// VdoCipher Shortcode ends
395 204
396 -// adding the Settings link, starts
205 +/// adding the settings link
397 206 $plugin = plugin_basename(__FILE__);
398 207 add_filter("plugin_action_links_$plugin", 'vdo_settings_link');
399 208
400 209 function vdo_settings_link($links)
@@ -402,38 +211,27 @@
402 211 $settings_link = '<a href="options-general.php?page=vdocipher">Settings</a>';
403 212 array_unshift($links, $settings_link);
404 213 return $links;
405 214 }
406 -// adding the Settings link, ends
407 215
408 -// add the menu item and register settings (3 functions), starts
216 +/// add the menu item and register settings
409 217 if (is_admin()) { // admin actions
218 + add_action('admin_menu', 'vdo_menu');
410 219 add_action('admin_init', 'register_vdo_settings');
411 - add_action('admin_menu', 'vdo_menu');
220 +} else {
221 + // non-admin enqueues, actions, and filters
412 222 }
413 -
414 223 function vdo_menu()
415 224 {
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 - }
225 + add_menu_page(
226 + 'VdoCipher Options',
227 + 'VdoCipher',
228 + 'manage_options',
229 + 'vdocipher',
230 + 'vdo_options',
231 + plugin_dir_url(__FILE__).'images/logo.png'
232 + );
434 233 }
435 -
436 234 function vdo_options()
437 235 {
438 236 if (!get_option('vdo_default_height')) {
439 237 update_option('vdo_default_height', 'auto');
@@ -440,18 +238,21 @@
440 238 }
441 239 if (!get_option('vdo_default_width')) {
442 240 update_option('vdo_default_width', '1280');
443 241 }
242 + $vdo_client_key = get_option('vdo_client_key');
243 + if (!$vdo_client_key && strlen($vdo_client_key) != 64) {
244 + vdo_show_form_client_key();
245 + return "";
246 + }
444 247 if (!current_user_can('manage_options')) {
445 - wp_die(__('You do not have sufficient permissions to access this page.'));
248 + wp_die(__('You do not have sufficient permissions to access this page.'));
446 249 }
447 250 include('include/options.php');
448 - return "";
449 251 }
450 -
451 252 function register_vdo_settings()
452 253 {
453 - // whitelist options
254 + // whitelist options
454 255 register_setting('vdo_option-group', 'vdo_client_key');
455 256 register_setting('vdo_option-group', 'vdo_default_height');
456 257 register_setting('vdo_option-group', 'vdo_default_width');
457 258 register_setting('vdo_option-group', 'vdo_annotate_code');
@@ -456,78 +257,19 @@
456 257 register_setting('vdo_option-group', 'vdo_default_width');
457 258 register_setting('vdo_option-group', 'vdo_annotate_code');
458 259 register_setting('vdo_option-group', 'vdo_embed_version');
459 260 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');
261 + register_setting('vdo_option-group', 'vdo_watermark_flash_html');
464 262 }
465 -// add the menu item and register settings (3 functions), ends
466 263
467 -// Activation Hook starts
468 -function vdo_activate()
264 +/// adding a section for asking for the client key
265 +function vdo_show_form_client_key()
469 266 {
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');
267 + include('include/setting_form.php');
475 268 }
476 -register_activation_hook(__FILE__, 'vdo_activate');
477 -
478 -// Registering and specifying Gutenberg block
479 -function vdo_register_block()
269 +register_deactivation_hook(__FILE__, 'vdo_deactivate');
270 +function vdo_deactivate()
480 271 {
481 - if (!function_exists('register_block_type')) {
482 - return ;
483 - }
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 - );
523 -}
524 -
525 -add_action('init', 'vdo_register_block');
526 -
527 -// Deactivation Hook starts
528 -function vdo_uninstall()
529 -{
530 272 delete_option('vdo_client_key');
531 273 delete_option('vdo_default_width');
532 274 delete_option('vdo_default_height');
533 275 delete_option('vdo_annotate_code');
@@ -532,16 +274,30 @@
532 274 delete_option('vdo_default_height');
533 275 delete_option('vdo_annotate_code');
534 276 delete_option('vdo_embed_version');
535 277 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');
278 + delete_option('vdo_watermark_flash_html');
540 279 }
541 -register_uninstall_hook(__FILE__, 'vdo_uninstall');
542 -
543 -// Admin notice to configure plugin for new installs, starts
280 +function vdo_activate()
281 +{
282 + if ((get_option('vdo_default_height')) == false) {
283 + update_option('vdo_default_height', 'auto');
284 + }
285 + if ((get_option('vdo_default_width')) == false) {
286 + update_option('vdo_default_width', '1280');
287 + }
288 + //https://stackoverflow.com/a/2173318/5022684
289 + if ((get_option('vdo_embed_version')) == false) {
290 + update_option('vdo_embed_version', '1.6.4');
291 + }
292 + if ((get_option('vdo_player_theme')) == false) {
293 + update_option('vdo_player_theme', '9ae8bbe8dd964ddc9bdb932cca1cb59a');
294 + }
295 + if ((get_option('vdo_watermark_flash_html')) == false) {
296 + update_option('vdo_watermark_flash_html', 'html5');
297 + }
298 +}
299 +register_activation_hook(__FILE__, 'vdo_activate');
544 300 function vdo_admin_notice()
545 301 {
546 302 if ((!get_option('vdo_client_key') || strlen(get_option('vdo_client_key')) != 64)
547 303 && basename($_SERVER['PHP_SELF']) == "plugins.php"