PluginProbe ʕ •ᴥ•ʔ
EmbedPress – PDF Embedder, 3D PDF FlipBook, Google Reviews, YouTube Videos, Upload & Embed PDF documents / 4.0.5
EmbedPress – PDF Embedder, 3D PDF FlipBook, Google Reviews, YouTube Videos, Upload & Embed PDF documents v4.0.5
4.6.0 4.5.6 4.5.5 4.5.4 4.5.3 4.5.2 trunk 1.0.0 1.1.0 1.1.1 1.1.2 1.1.3 1.2.0 1.3.0 1.3.1 1.4.0 1.4.1 1.4.2 1.4.3 1.4.4 1.5.0 1.6.0 1.6.1 1.6.2 1.6.3 1.7.0 1.7.1 1.7.2 1.7.3 1.7.4 1.7.5 2.0.0 2.0.1 2.0.2 2.0.3 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.2.0 2.2.1 2.2.2 2.3.0 2.3.1 2.3.2 2.3.3 2.4.0 2.4.1 2.5.0 2.5.1 2.5.2 2.5.3 2.5.4 2.5.5 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.7.6 2.7.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.1.3 3.2.0 3.2.1 3.3.0 3.3.1 3.3.2 3.3.3 3.3.4 3.3.5 3.3.6 3.3.7 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.5.3 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.6.8 3.7.0 3.7.1 3.7.2 3.7.3 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 3.9.1 3.9.10 3.9.11 3.9.12 3.9.13 3.9.14 3.9.15 3.9.16 3.9.17 3.9.2 3.9.3 3.9.4 3.9.5 3.9.6 3.9.7 3.9.8 3.9.9 4.0.0 4.0.1 4.0.10 4.0.11 4.0.12 4.0.13 4.0.14 4.0.2 4.0.3 4.0.4 4.0.5 4.0.6 4.0.7 4.0.8 4.0.9 4.1.0 4.1.1 4.1.10 4.1.2 4.1.3 4.1.4 4.1.5 4.1.6 4.1.7 4.1.8 4.1.9 4.2.0 4.2.1 4.2.2 4.2.3 4.2.4 4.2.5 4.2.6 4.2.7 4.2.8 4.2.9 4.3.0 4.3.1 4.4.0 4.4.1 4.4.10 4.4.11 4.4.2 4.4.3 4.4.4 4.4.5 4.4.6 4.4.7 4.4.8 4.4.9 4.5.0 4.5.1
embedpress / EmbedPress / Ends / Back / Handler.php
embedpress / EmbedPress / Ends / Back Last commit date
Settings 2 years ago Handler.php 2 years ago index.html 7 years ago
Handler.php
951 lines
1 <?php
2
3 namespace EmbedPress\Ends\Back;
4
5 use EmbedPress\Core;
6 use EmbedPress\Ends\Handler as EndHandlerAbstract;
7 use EmbedPress\Shortcode;
8 use Embera\Embera;
9 use EmbedPress\Includes\Classes\Helper;
10
11 (defined('ABSPATH') && defined('EMBEDPRESS_IS_LOADED')) or die("No direct script access allowed.");
12
13 /**
14 * The admin-facing functionality of the plugin.
15 * Defines the plugin name, version, and enqueue the admin-specific stylesheets and scripts.
16 *
17 * @package EmbedPress
18 * @subpackage EmbedPress/Ends/Back
19 * @author EmbedPress <help@embedpress.com>
20 * @copyright Copyright (C) 2023 WPDeveloper. All rights reserved.
21 * @license GPLv3 or later
22 * @since 1.0.0
23 */
24 class Handler extends EndHandlerAbstract
25 {
26 /**
27 * Method that register all scripts for the admin area.
28 *
29 * @return void
30 * @since 1.0.0
31 *
32 */
33
34 public function __construct($pluginName, $pluginVersion)
35 {
36 parent::__construct($pluginName, $pluginVersion);
37
38 add_action('wp_ajax_delete_instagram_account', [$this, 'delete_instagram_account']);
39 // add_action('init', [$this, 'handle_instagram_data']);
40
41 add_action('wp_ajax_get_instagram_userdata_ajax', [$this, 'get_instagram_userdata_ajax']);
42 add_action('wp_ajax_nopriv_get_instagram_userdata_ajax', [$this, 'get_instagram_userdata_ajax']);
43
44 if (!empty($_GET['page_type']) && $_GET['page_type'] == 'calendly') {
45 add_action('init', [$this, 'handle_calendly_data']);
46 }
47
48 if (defined('EMBEDPRESS_SL_ITEM_SLUG') && is_admin()) {
49 add_action('admin_enqueue_scripts', [$this, 'enqueueLisenceScripts']);
50 }
51
52 add_action('wp_ajax_sync_instagram_data_ajax', [$this, 'sync_instagram_data_ajax']);
53 add_action('wp_ajax_nopriv_sync_instagram_data_ajax', [$this, 'sync_instagram_data_ajax']);
54 }
55
56
57 public function get_instagram_userdata_ajax()
58 {
59
60 if (!current_user_can('manage_options')) {
61 wp_send_json_error(array('message' => 'You do not have sufficient permissions to access this functionality.'));
62 return;
63 }
64
65 if (isset($_POST['_nonce']) && wp_verify_nonce($_POST['_nonce'], 'embedpress_elements_action')) {
66 if (isset($_POST['access_token'])) {
67 $access_token = sanitize_text_field($_POST['access_token']);
68 $account_type = sanitize_text_field($_POST['account_type']);
69
70 $user_data = $this->get_instagram_userdata($access_token, $account_type);
71
72 $this->handle_instagram_data($user_data);
73
74 $access_token = sanitize_text_field($_POST['access_token']);
75 $account_type = sanitize_text_field($_POST['account_type']);
76 $user_id = $this->get_instagram_userid($access_token, $account_type);
77
78 $option_key = 'ep_instagram_feed_data';
79 $feed_data = get_option($option_key, array());
80
81 $feed_userinfo = Helper::getInstagramUserInfo($access_token, $account_type, $user_id, true);
82 $feed_posts = Helper::getInstagramPosts($access_token, $account_type, $user_id, 100, true);
83
84 if (!empty($user_id)) {
85 $feed_data[$user_id] = [
86 'feed_userinfo' => $feed_userinfo,
87 'feed_posts' => $feed_posts,
88 ];
89
90 delete_transient('instagram_user_info_' . $user_id);
91 delete_transient('instagram_posts_' . $user_id);
92 update_option('ep_instagram_feed_data', $feed_data);
93 } else {
94 $feed_data['error'] = "Access token Invalid or expired.";
95 }
96
97
98 wp_send_json($feed_data);
99 } else {
100 wp_send_json_error('Access token not provided');
101 }
102 } else {
103 wp_send_json_error('Nonce verification failed');
104 }
105 }
106
107 public function sync_instagram_data_ajax()
108 {
109 if (!current_user_can('manage_options')) {
110 wp_send_json_error(array('message' => 'You do not have sufficient permissions to access this functionality.'));
111 return;
112 }
113
114 if (isset($_POST['_nonce']) && wp_verify_nonce($_POST['_nonce'], 'embedpress_elements_action')) {
115 if (isset($_POST['access_token'])) {
116
117 $access_token = sanitize_text_field($_POST['access_token']);
118 $account_type = sanitize_text_field($_POST['account_type']);
119 $user_id = sanitize_text_field($_POST['user_id']);
120
121 $option_key = 'ep_instagram_feed_data';
122 $feed_data = get_option($option_key, array());
123
124 $feed_userinfo = Helper::getInstagramUserInfo($access_token, $account_type, $user_id, true);
125 $feed_posts = Helper::getInstagramPosts($access_token, $account_type, $user_id, 100, true);
126
127 $feed_data[$user_id] = [
128 'feed_userinfo' => $feed_userinfo,
129 'feed_posts' => $feed_posts,
130 ];
131
132 delete_transient('instagram_user_info_' . $user_id);
133 delete_transient('instagram_posts_' . $user_id);
134 update_option('ep_instagram_feed_data', $feed_data);
135
136
137 wp_send_json($feed_data);
138 } else {
139 wp_send_json_error('Access token not provided');
140 }
141 } else {
142 wp_send_json_error('Nonce verification failed');
143 }
144 }
145
146
147 public function get_instagram_userid($access_token)
148 {
149 $response = "https://graph.facebook.com/v19.0/me/accounts?fields=connected_instagram_account{id}&access_token=$access_token";
150 if (!is_wp_error($response)) {
151
152 $body = wp_remote_retrieve_body($response);
153 $data = json_decode($body, true);
154
155 // Extract the connected Instagram account ID
156 if (isset($data['data'][0]['connected_instagram_account']['id'])) {
157 return $data['data'][0]['connected_instagram_account']['id'];
158 } else {
159 return '';
160 }
161 } else {
162 $user_data['error'] = "Error: Unable to connect to Instagram API.";
163 }
164 }
165
166 public function get_instagram_profile_picture($access_token, $userid)
167 { }
168
169 public function get_instagram_user_id($access_token, $account_type)
170 {
171 // Check if user data is already cached
172 $user_id = get_transient('instagram_user_id_' . $access_token);
173
174 if (!$user_id) {
175 $user_id = array();
176
177 if ($account_type == 'personal') {
178 $response = wp_remote_get('https://graph.instagram.com/me?fields=id,username,account_type&access_token=' . $access_token);
179 } else {
180 $response = wp_remote_get('https://graph.facebook.com/v19.0/me/accounts?fields=connected_instagram_account{id,name,username,followers_count}&access_token=' . $access_token);
181 }
182
183
184 if (!is_wp_error($response)) {
185
186 $body = wp_remote_retrieve_body($response);
187 $data = json_decode($body, true);
188
189 if ($account_type == 'personal') {
190
191 if (isset($data['id']) && isset($data['username'])) {
192 return $data['id'];
193
194 set_transient('instagram_user_id_' . $access_token, $data['id'], HOUR_IN_SECONDS);
195 return $data['id'];
196 } else {
197 $data['error'] = "Access token Invalid or expired.";
198 }
199 } else {
200 if (isset($data['data'][0]['connected_instagram_account']['id']) && isset($data['data'][0]['connected_instagram_account']['username'])) {
201 set_transient('instagram_user_id_' . $access_token, $data['data'][0]['connected_instagram_account']['id'], HOUR_IN_SECONDS);
202 return $data['data'][0]['connected_instagram_account']['id'];
203 } else {
204 $data['error'] = "Access token Invalid or expired.";
205 }
206 }
207 } else {
208 $data['error'] = "Error: Unable to connect to Instagram API.";
209 }
210 }
211
212 return $data;
213 }
214
215 public function get_instagram_userdata($access_token, $account_type)
216 {
217 // Check if user data is already cached
218 $user_data = get_transient('instagram_user_data_' . $access_token);
219
220 if (!$user_data) {
221 $user_data = array();
222
223 if ($account_type == 'personal') {
224 $response = wp_remote_get('https://graph.instagram.com/me?fields=id,username,account_type&access_token=' . $access_token);
225 } else {
226 $response = wp_remote_get('https://graph.facebook.com/v19.0/me/accounts?fields=connected_instagram_account{id,name,username,followers_count}&access_token=' . $access_token);
227 }
228
229
230 if (!is_wp_error($response)) {
231
232 $body = wp_remote_retrieve_body($response);
233 $data = json_decode($body, true);
234
235 if ($account_type == 'personal') {
236
237 if (isset($data['id']) && isset($data['username'])) {
238 $user_data['access_token'] = $access_token;
239 $user_data['user_id'] = $data['id'];
240 $user_data['username'] = $data['username'];
241 $user_data['account_type'] = $account_type;
242
243 set_transient('instagram_user_data_' . $access_token, $user_data, HOUR_IN_SECONDS);
244 } else {
245 $user_data['error'] = "Access token Invalid or expired.";
246 }
247 } else {
248 if (isset($data['data'][0]['connected_instagram_account']['id']) && isset($data['data'][0]['connected_instagram_account']['username'])) {
249 $user_data['access_token'] = $access_token;
250 $user_data['user_id'] = $data['data'][0]['connected_instagram_account']['id']; // Assuming 'id' refers to Facebook account ID
251 $user_data['instagram_id'] = $data['data'][0]['connected_instagram_account']['id'];
252 $user_data['username'] = $data['data'][0]['connected_instagram_account']['username'];
253 $user_data['account_type'] = $account_type;
254
255 set_transient('instagram_user_data_' . $access_token, $user_data, HOUR_IN_SECONDS);
256 } else {
257 $user_data['error'] = "Access token Invalid or expired.";
258 }
259 }
260 } else {
261 $user_data['error'] = "Error: Unable to connect to Instagram API.";
262 }
263 }
264
265 return $user_data;
266 }
267
268
269
270
271 public function handle_instagram_data($user_data)
272 {
273 if (empty($user_data['error'])) {
274 $user_id = isset($user_data['user_id']) ? $user_data['user_id'] : '';
275 $username = isset($user_data['username']) ? $user_data['username'] : '';
276 $account_type = isset($user_data['account_type']) ? $user_data['account_type'] : '';
277 $access_token = isset($user_data['access_token']) ? $user_data['access_token'] : '';
278
279 $get_instagram_data = get_option('ep_instagram_account_data');
280
281 $token_data = [
282 [
283 'user_id' => $user_id,
284 'username' => $username,
285 'account_type' => $account_type,
286 'access_token' => $access_token,
287 ]
288 ];
289
290 if (!empty($get_instagram_data)) {
291 $updated = false;
292
293 foreach ($get_instagram_data as &$data) {
294
295 if ($data['user_id'] === $user_id) {
296
297 // If user_id matches, update the data
298 $data['username'] = $username;
299 $data['account_type'] = $account_type;
300 $data['access_token'] = $access_token;
301
302 $updated = true;
303 break;
304 }
305 }
306
307 if (!$updated) {
308 // If user_id does not exist, add new data
309 $get_instagram_data[] = $token_data[0];
310 }
311 } else {
312 // If $get_instagram_data is empty, add the new data directly
313 $get_instagram_data = $token_data;
314 }
315
316 update_option('ep_instagram_account_data', $get_instagram_data);
317
318 wp_redirect(admin_url('admin.php?page=embedpress&page_type=instagram'), 301);
319
320 exit();
321 }
322 }
323
324 public function handle_calendly_data()
325 {
326
327 if (empty($_GET['_nonce'])) {
328 return false;
329 }
330
331 $verify = wp_verify_nonce($_GET['_nonce'], 'calendly_nonce');
332
333 // Check if access_token or calendly_status is present and nonce is invalid
334 if (!$verify) {
335 echo esc_html__('Invalid nonce', 'embedpress');
336 die;
337 }
338
339 if ((!empty($_GET['_nonce']) && $verify) && (!empty($_GET['access_token']) && isset($_GET['page_type']) && $_GET['page_type'] == 'calendly') || (isset($_GET['calendly_status']) && ($_GET['calendly_status'] == 'sync' || $_GET['calendly_status'] == 'connect'))) {
340
341 if ($_GET['calendly_status'] === 'connect') {
342 update_option('is_calendly_connected', true);
343 }
344
345 if (isset($_GET['access_token']) && !empty($_GET['access_token'])) {
346 $access_token = $_GET['access_token'];
347 $refresh_token = $_GET['refresh_token'];
348 $expires_in = $_GET['expires_in'];
349 $created_at = $_GET['created_at'];
350 } elseif (isset($_GET['calendly_status']) && ($_GET['calendly_status'] == 'sync' || $_GET['calendly_status'] == 'connect')) {
351 $token_data = get_option('calendly_tokens');
352 $access_token = $token_data['access_token'];
353 $refresh_token = $token_data['refresh_token'];
354 $expires_in = $token_data['expires_in'];
355 $created_at = $token_data['created_at'];
356 }
357
358
359 // Create an array to store the tokens and expiration time
360 $token_data = array(
361 'access_token' => $access_token,
362 'refresh_token' => $refresh_token,
363 'expires_in' => $expires_in,
364 'created_at' => $created_at
365 );
366
367 // Save the serialized data in a single option key
368 update_option('calendly_tokens', $token_data);
369
370 $user_info = json_decode(Helper::getCalendlyUserInfo($access_token), true);
371
372 if (!empty($user_info['resource']['uri'])) {
373 $event_types = Helper::getCalaendlyEventTypes($user_info['resource']['uri'], $access_token);
374 $scheduled_events = Helper::getCalaendlyScheduledEvents($user_info['resource']['uri'], $access_token);
375
376 $invite_list = [];
377
378 if (is_array($scheduled_events['collection'])) {
379 foreach ($scheduled_events['collection'] as $event) :
380 $uuid = Helper::getCalendlyUuid($event['uri']);
381 $invite_list[$uuid] = Helper::getListEventInvitee($uuid, $access_token);
382 endforeach;
383 }
384
385 update_option('calendly_user_info', $user_info);
386
387 if (is_embedpress_pro_active() && (empty($event_types['title']))) {
388
389 update_option('calendly_event_types', $event_types);
390 update_option('calendly_scheduled_events', $scheduled_events);
391 update_option('calendly_invitees_list', $invite_list);
392 }
393
394 if (!is_embedpress_pro_active()) {
395 update_option('calendly_event_types', []);
396 update_option('calendly_scheduled_events', []);
397 update_option('calendly_invitees_list', []);
398 }
399 }
400
401 wp_redirect(admin_url('admin.php?page=embedpress&page_type=calendly'), 302);
402 exit();
403 }
404 }
405
406 public function enqueueScripts()
407 {
408 global $pagenow;
409 if ('post.php' === $pagenow) {
410 $urlSchemes = apply_filters('embedpress:getAdditionalURLSchemes', $this->getUrlSchemes());
411
412 wp_enqueue_script(
413 'embedpress-pdfobject',
414 EMBEDPRESS_URL_ASSETS . 'js/pdfobject.min.js',
415 [],
416 $this->pluginVersion,
417 false
418 );
419
420 wp_enqueue_script("bootbox-bootstrap", EMBEDPRESS_URL_ASSETS . 'js/vendor/bootstrap/bootstrap.min.js', ['jquery'], $this->pluginVersion, false);
421 wp_enqueue_script("bootbox", EMBEDPRESS_URL_ASSETS . 'js/vendor/bootbox.min.js', ['jquery', 'bootbox-bootstrap'], $this->pluginVersion, true);
422 wp_enqueue_script($this->pluginName, EMBEDPRESS_URL_ASSETS . 'js/preview.js', ['jquery', 'bootbox'], $this->pluginVersion, true);
423
424
425 wp_localize_script($this->pluginName, '$data', [
426 'previewSettings' => [
427 'baseUrl' => get_site_url() . '/',
428 'versionUID' => $this->pluginVersion,
429 'debug' => true,
430 ],
431 'EMBEDPRESS_SHORTCODE' => EMBEDPRESS_SHORTCODE,
432 'EMBEDPRESS_URL_ASSETS' => EMBEDPRESS_URL_ASSETS,
433 'urlSchemes' => $urlSchemes,
434 ]);
435 }
436
437 if ('post.php' === $pagenow || 'post-new.php' === $pagenow) {
438 wp_enqueue_script(
439 'plyr.polyfilled',
440 EMBEDPRESS_URL_ASSETS . 'js/plyr.polyfilled.js',
441 [],
442 $this->pluginVersion,
443 false
444 );
445 wp_enqueue_script(
446 'gutenberg-general',
447 EMBEDPRESS_URL_ASSETS . 'js/gutneberg-script.js',
448 ['wp-data'],
449 $this->pluginVersion,
450 false
451 );
452
453 wp_enqueue_style('plyr', EMBEDPRESS_URL_ASSETS . 'css/plyr.css', array(), $this->pluginVersion);
454 wp_enqueue_style($this->pluginName, EMBEDPRESS_URL_ASSETS . 'css/embedpress.css', array(), $this->pluginVersion);
455
456
457 wp_enqueue_script(
458 'cg-carousel',
459 EMBEDPRESS_URL_ASSETS . 'js/carousel.min.js',
460 ['jquery'],
461 $this->pluginVersion,
462 false
463 );
464 wp_enqueue_script(
465 'init-carousel',
466 EMBEDPRESS_URL_ASSETS . 'js/initCarousel.js',
467 ['jquery', 'cg-carousel'],
468 $this->pluginVersion,
469 false
470 );
471
472 wp_enqueue_style('cg-carousel', EMBEDPRESS_URL_ASSETS . 'css/carousel.min.css', $this->pluginVersion, true);
473
474 wp_enqueue_style($this->pluginName, EMBEDPRESS_URL_ASSETS . 'css/embedpress.css', $this->pluginVersion, true);
475 }
476
477 //load embedpress admin js
478
479 wp_enqueue_script(
480 'embedpress-admin',
481 EMBEDPRESS_URL_ASSETS . 'js/admin.js',
482 ['jquery', 'wp-i18n', 'wp-url'],
483 $this->pluginVersion,
484 true
485 );
486
487 wp_localize_script($this->pluginName, 'EMBEDPRESS_ADMIN_PARAMS', [
488 'ajaxurl' => admin_url('admin-ajax.php'),
489 'nonce' => wp_create_nonce('embedpress')
490 ]);
491
492
493 $installedPlugins = Core::getPlugins();
494 if (count($installedPlugins) > 0) {
495 foreach ($installedPlugins as $plgSlug => $plgNamespace) {
496 $plgScriptPathRelative = "assets/js/embedpress.{$plgSlug}.js";
497 $plgName = "embedpress-{$plgSlug}";
498
499 if (file_exists(WP_PLUGIN_DIR . "/{$plgName}/{$plgScriptPathRelative}")) {
500 wp_enqueue_script(
501 $plgName,
502 plugins_url($plgName) . '/' . $plgScriptPathRelative,
503 [$this->pluginName],
504 $this->pluginVersion,
505 true
506 );
507 }
508 }
509 }
510 }
511
512 public function enqueueLisenceScripts()
513 {
514 wp_enqueue_script(
515 'embedpress-lisence',
516 EMBEDPRESS_URL_ASSETS . 'js/license.js',
517 ['jquery', 'wp-i18n', 'wp-url'],
518 $this->pluginVersion,
519 true
520 );
521
522 wp_localize_script('embedpress-lisence', 'wpdeveloperLicenseManagerNonce', array('embedpress_lisence_nonce' => wp_create_nonce('wpdeveloper_sl_' . EMBEDPRESS_SL_ITEM_ID . '_nonce')));
523 }
524
525
526 /**
527 * Method that register all stylesheets for the admin area.
528 *
529 * @return void
530 * @since 1.0.0
531 * @static
532 *
533 */
534 public static function enqueueStyles()
535 {
536 if (isset($_GET['page']) && 'embedpress' === $_GET['page']) {
537 wp_enqueue_style('embedpress-admin', plugins_url('embedpress/assets/css/admin.css'));
538 }
539 }
540
541 /**
542 * Method that receive a string via AJAX and return the decoded-shortcoded-version of that string.
543 *
544 * @return void
545 * @since 1.0.0
546 *
547 */
548 public function doShortcodeReceivedViaAjax()
549 {
550 $subject = isset($_POST['subject']) ? $_POST['subject'] : "";
551
552 $response = [
553 'data' => Shortcode::parseContent($subject, true),
554 ];
555
556 header('Content-Type:application/json;charset=UTF-8');
557 echo json_encode($response);
558
559 exit();
560 }
561
562 /**
563 * Method that receive an url via AJAX and return the info about that url/embed.
564 *
565 * @return void
566 * @since 1.0.0
567 *
568 */
569 public function getUrlInfoViaAjax()
570 {
571 $url = isset($_GET['url']) ? trim($_GET['url']) : "";
572
573 $response = [
574 'url' => $url,
575 'canBeResponsive' => false,
576 ];
577
578 if (!!strlen($response['url'])) {
579
580 $additionalServiceProviders = Core::getAdditionalServiceProviders();
581 if (!empty($additionalServiceProviders)) {
582 foreach ($additionalServiceProviders as $serviceProviderClassName => $serviceProviderUrls) {
583 Shortcode::addServiceProvider($serviceProviderClassName, $serviceProviderUrls);
584 }
585 }
586 $embera = new Embera([], Shortcode::get_collection());
587
588 $urlInfo = $embera->getUrlData($response['url']);
589 if (isset($urlInfo[$response['url']]) && $urlInfo[$response['url']]['provider_name']) {
590 $response['canBeResponsive'] = Core::canServiceProviderBeResponsive(strtolower($urlInfo[$response['url']]['provider_name']));
591 }
592 }
593
594 header('Content-Type:application/json;charset=UTF-8');
595 echo json_encode($response);
596
597 exit();
598 }
599
600 /**
601 * Returns a list of supported URL schemes for the preview script
602 *
603 * @return array
604 */
605 public function getUrlSchemes()
606 {
607 return [
608 // Apple podcasts
609 'podcasts.apple.com/*',
610 // PollDaddy
611 '*.polldaddy.com/s/*',
612 '*.polldaddy.com/poll/*',
613 '*.polldaddy.com/ratings/*',
614 'polldaddy.com/s/*',
615 'polldaddy.com/poll/*',
616 'polldaddy.com/ratings/*',
617
618 // VideoPress
619 'videopress.com/v/*',
620
621 // Tumblr
622 '*.tumblr.com/post/*',
623
624 // SmugMug
625 'smugmug.com/*',
626 '*.smugmug.com/*',
627
628 // SlideShare
629 'slideshare.net/*/*',
630 '*.slideshare.net/*/*',
631
632 // Reddit
633 'reddit.com/r/[^/]+/comments/*',
634
635 // Photobucket
636 'i*.photobucket.com/albums/*',
637 'gi*.photobucket.com/groups/*',
638
639 // Cloudup
640 'cloudup.com/*',
641
642 // Imgur
643 'imgur.com/*',
644 'i.imgur.com/*',
645
646 // YouTube (http://www.youtube.com/)
647 'youtube.com/watch\\?*',
648 'youtube.com/playlist\\?*',
649 'youtube.com/channel/*',
650 'youtube.com/c/*',
651 'youtube.com/user/*',
652 'youtube.com/(\w+)[^?\/]*$',
653
654 // opensea
655 'opensea.io/collection/*',
656
657 // Flickr (http://www.flickr.com/)
658 'flickr.com/photos/*/*',
659 'flic.kr/p/*',
660
661 // Viddler (http://www.viddler.com/)
662 'viddler.com/v/*',
663
664 // Hulu (http://www.hulu.com/)
665 'hulu.com/watch/*',
666
667 // Vimeo (http://vimeo.com/)
668 'vimeo.com/*',
669 'vimeo.com/groups/*/videos/*',
670
671 // CollegeHumor (http://www.collegehumor.com/)
672 'collegehumor.com/video/*',
673
674 // Deviantart.com (http://www.deviantart.com)
675 '*.deviantart.com/art/*',
676 '*.deviantart.com/*#/d*',
677 'fav.me/*',
678 'sta.sh/*',
679
680 // SlideShare (http://www.slideshare.net/)
681
682 // chirbit.com (http://www.chirbit.com/)
683 'chirb.it/*',
684
685 // nfb.ca (http://www.nfb.ca/)
686 '*.nfb.ca/film/*',
687
688 // Scribd (http://www.scribd.com/)
689 '*.scribd.com/doc/*',
690 '*.scribd.com/document/*',
691
692 // Dotsub (http://dotsub.com/)
693 'dotsub.com/view/*',
694
695 // Animoto (http://animoto.com/)
696 'animoto.com/play/*',
697
698 // Rdio (http://rdio.com/)
699 '*.rdio.com/artist/*',
700 '*.rdio.com/people/*',
701
702 // MixCloud (http://mixcloud.com/)
703 'mixcloud.com/*/*/',
704
705 // FunnyOrDie (http://www.funnyordie.com/)
706 'funnyordie.com/videos/*',
707
708 // Ted (http://ted.com)
709 'ted.com/talks/*',
710
711 // Sapo Videos (http://videos.sapo.pt)
712 'videos.sapo.pt/*',
713
714 // Official FM (http://official.fm)
715 'official.fm/tracks/*',
716 'official.fm/playlists/*',
717
718 // HuffDuffer (http://huffduffer.com)
719 'huffduffer.com/*/*',
720
721 // Shoudio (http://shoudio.com)
722 'shoudio.com/*',
723 'shoud.io/*',
724
725 // Moby Picture (http://www.mobypicture.com)
726 'mobypicture.com/user/*/view/*',
727 'moby.to/*',
728
729 // 23HQ (http://www.23hq.com)
730 '23hq.com/*/photo/*',
731
732 // Cacoo (https://cacoo.com)
733 'cacoo.com/diagrams/*',
734
735 // Dipity (http://www.dipity.com)
736 'dipity.com/*/*/',
737
738 // Roomshare (http://roomshare.jp)
739 'roomshare.jp/post/*',
740 'roomshare.jp/en/post/*',
741
742 // Dailymotion (http://www.dailymotion.com)
743 'dailymotion.com/video/*',
744
745 // Crowd Ranking (http://crowdranking.com)
746 'c9ng.com/*/*',
747
748 // CircuitLab (https://www.circuitlab.com/)
749 'circuitlab.com/circuit/*',
750
751 // Coub (http://coub.com/)
752 'coub.com/view/*',
753 'coub.com/embed/*',
754
755 // SpeakerDeck (https://speakerdeck.com)
756 'speakerdeck.com/*/*',
757
758 // Instagram (https://instagram.com)
759 'instagram.com/p/*',
760 'instagr.am/p/*',
761
762 // SoundCloud (http://soundcloud.com/)
763 'soundcloud.com/*',
764
765 // Kickstarter (http://www.kickstarter.com)
766 'kickstarter.com/projects/*',
767
768 // Ustream (http://www.ustream.tv)
769 '*.ustream.tv/*',
770 '*.ustream.com/*',
771
772 // Daily Mile (http://www.dailymile.com)
773 'dailymile.com/people/*/entries/*',
774
775 // Sketchfab (http://sketchfab.com)
776 'sketchfab.com/models/*',
777 'sketchfab.com/*/folders/*',
778
779 // Meetup (http://www.meetup.com)
780 'meetup.com/*',
781 'meetu.ps/*',
782
783 // AudioSnaps (http://audiosnaps.com)
784 'audiosnaps.com/k/*',
785
786 // RapidEngage (https://rapidengage.com)
787 'rapidengage.com/s/*',
788
789 // Getty Images (http://www.gettyimages.com/)
790 'gty.im/*',
791 'gettyimages.com/detail/photo/*',
792
793 // amCharts Live Editor (http://live.amcharts.com/)
794 'live.amcharts.com/*',
795
796 // Infogram (https://infogr.am/)
797 'infogr.am/*',
798 'infogram.com/*',
799
800 // ChartBlocks (http://www.chartblocks.com/)
801 'public.chartblocks.com/c/*',
802
803 // ReleaseWire (http://www.releasewire.com/)
804 'rwire.com/*',
805
806 // ShortNote (https://www.shortnote.jp/)
807 'shortnote.jp/view/notes/*',
808
809 // EgliseInfo (http://egliseinfo.catholique.fr/)
810 'egliseinfo.catholique.fr/*',
811
812 // Silk (http://www.silk.co/)
813 '*.silk.co/explore/*',
814 '*.silk.co/s/embed/*',
815
816 // Twitter
817 'twitter.com/*/status/*',
818 'twitter.com/i/moments/*',
819 'twitter.com/*/timelines/*',
820
821 // http://bambuser.com
822 'bambuser.com/v/*',
823
824 // https://clyp.it
825 'clyp.it/*',
826
827 // https://gist.github.com
828 'gist.github.com/*/*',
829
830 // http://issuu.com
831 'issuu.com/*',
832
833 // https://portfolium.com
834 'portfolium.com/*',
835
836 // https://www.reverbnation.com
837 'reverbnation.com/*',
838
839 // http://rutube.ru
840 'rutube.ru/video/*',
841
842 // https://spotify.com/
843 'open.spotify.com/*',
844
845 // http://www.videojug.com
846 'videojug.com/*',
847
848 // https://vine.com
849 'vine.co/v/*',
850
851 // Facebook
852 'facebook.com/*',
853 'fb.watch/*',
854
855 // Google Shortened Url
856 'goo.gl/*',
857
858 // Google Maps
859 'google.com/*',
860 'google.com.*/*',
861 'google.co.*/*',
862 'maps.google.com/*',
863
864 // Google Docs
865 'docs.google.com/presentation/*',
866 'docs.google.com/document/*',
867 'docs.google.com/spreadsheets/*',
868 'docs.google.com/forms/*',
869 'docs.google.com/drawings/*',
870
871 // Twitch.tv
872 '*.twitch.tv/*',
873 'twitch.tv/*',
874
875 // Giphy
876 '*.giphy.com/gifs/*',
877 'giphy.com/gifs/*',
878 'i.giphy.com/*',
879 'gph.is/*',
880
881 // Wistia
882 '*.wistia.com/medias/*',
883 'fast.wistia.com/embed/medias/*.jsonp',
884 // Boomplay (http://boomplay.com/)
885 'boomplay.com/*',
886 'codepen.io/*',
887 'archivos.digital/*',
888 'audioclip.naver.com/*',
889 'app.blogcast.host/*',
890 'codepoints.net/*',
891 'codesandbox.io/*',
892 'commaful.com/*',
893 '*.survey.fm/*',
894 'survey.fm/*',
895 'datawrapper.dwcdn.net/*',
896 '*.didacte.com/*',
897 'didacte.com/*',
898 'digiteka.com/*',
899 'docdro.id/*',
900 'edumedia-sciences.com/*',
901 'ethfiddle.com/*',
902 'eyrie.io/*',
903 '*.getfader.com/*',
904 'getfader.com/*',
905 'fitapp.pro/*',
906 'fite.tv/*',
907 'public.flourish.studio/*',
908 'geograph.org.gg/*',
909 'geo-en.hlipp.de/*',
910 'geograph.org.uk/*',
911 'fortest.getshow.io/*',
912 'opensea.io/assets/*',
913 ];
914 }
915
916 public function delete_instagram_account()
917 {
918 if (!current_user_can('manage_options')) {
919 wp_send_json_error(array('message' => 'You do not have sufficient permissions to access this functionality.'));
920 return;
921 }
922
923 if (isset($_POST['_nonce']) && wp_verify_nonce($_POST['_nonce'], 'embedpress_elements_action')) {
924 $user_id = isset($_POST['user_id']) ? $_POST['user_id'] : '';
925 $account_type = isset($_POST['account_type']) ? $_POST['account_type'] : '';
926 $account_data = get_option('ep_instagram_account_data');
927
928 $data = array_filter($account_data, function ($item) use ($user_id) {
929 return $item['user_id'] !== $user_id;
930 });
931 $data = array_values($data);
932 update_option('ep_instagram_account_data', $data);
933 } else {
934 wp_die('Nonce verification failed.');
935 }
936 }
937
938
939
940 /**
941 * Update admin notice view status
942 *
943 * @since 2.5.1
944 */
945 public static function embedpress_notice_dismiss()
946 {
947 check_ajax_referer('embedpress', 'security');
948 update_option('embedpress_social_dismiss_notice', true);
949 }
950 }
951