PluginProbe ʕ •ᴥ•ʔ
EmbedPress – PDF Embedder, Embed PDF viewer, YouTube Videos, 3D FlipBook, Social feeds & more / 4.1.10
EmbedPress – PDF Embedder, Embed PDF viewer, YouTube Videos, 3D FlipBook, Social feeds & more v4.1.10
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 1 year ago Handler.php 1 year ago index.html 7 years ago
Handler.php
955 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 (!apply_filters('embedpress/is_allow_rander', false)) {
388 update_option('calendly_event_types', []);
389 update_option('calendly_scheduled_events', []);
390 update_option('calendly_invitees_list', []);
391 } else {
392 do_action('embedepress/calendly_event_data', $event_types, $scheduled_events, $invite_list);
393 }
394
395 }
396
397 wp_redirect(admin_url('admin.php?page=embedpress&page_type=calendly'), 302);
398 exit();
399 }
400 }
401
402 public function enqueueScripts()
403 {
404 global $pagenow;
405 if ('post.php' === $pagenow || 'post-new.php' === $pagenow) {
406 $urlSchemes = apply_filters('embedpress:getAdditionalURLSchemes', $this->getUrlSchemes());
407
408 wp_enqueue_script(
409 'embedpress-pdfobject',
410 EMBEDPRESS_URL_ASSETS . 'js/pdfobject.js',
411 [],
412 $this->pluginVersion,
413 false
414 );
415
416 wp_enqueue_script("bootbox-bootstrap", EMBEDPRESS_URL_ASSETS . 'js/vendor/bootstrap/bootstrap.min.js', ['jquery'], $this->pluginVersion, false);
417 wp_enqueue_script("bootbox", EMBEDPRESS_URL_ASSETS . 'js/vendor/bootbox.min.js', ['jquery', 'bootbox-bootstrap'], $this->pluginVersion, true);
418 wp_enqueue_script($this->pluginName, EMBEDPRESS_URL_ASSETS . 'js/preview.js', ['jquery', 'bootbox'], $this->pluginVersion, true);
419
420
421 wp_localize_script($this->pluginName, '$data', [
422 'previewSettings' => [
423 'baseUrl' => get_site_url() . '/',
424 'versionUID' => $this->pluginVersion,
425 'debug' => true,
426 ],
427 'EMBEDPRESS_SHORTCODE' => EMBEDPRESS_SHORTCODE,
428 'EMBEDPRESS_URL_ASSETS' => EMBEDPRESS_URL_ASSETS,
429 'urlSchemes' => $urlSchemes,
430 ]);
431 }
432
433 if ('post.php' === $pagenow || 'post-new.php' === $pagenow) {
434 wp_enqueue_script(
435 'plyr.polyfilled',
436 EMBEDPRESS_URL_ASSETS . 'js/plyr.polyfilled.js',
437 [],
438 $this->pluginVersion,
439 false
440 );
441 wp_enqueue_script(
442 'gutenberg-general',
443 EMBEDPRESS_URL_ASSETS . 'js/gutneberg-script.js',
444 ['wp-data'],
445 $this->pluginVersion,
446 false
447 );
448
449
450 wp_enqueue_style('plyr', EMBEDPRESS_URL_ASSETS . 'css/plyr.css', array(), $this->pluginVersion);
451 wp_enqueue_style($this->pluginName, EMBEDPRESS_URL_ASSETS . 'css/embedpress.css', array(), $this->pluginVersion);
452
453
454 wp_enqueue_script(
455 'cg-carousel',
456 EMBEDPRESS_URL_ASSETS . 'js/carousel.min.js',
457 ['jquery'],
458 $this->pluginVersion,
459 false
460 );
461 wp_enqueue_script(
462 'init-carousel',
463 EMBEDPRESS_URL_ASSETS . 'js/initCarousel.js',
464 ['jquery', 'cg-carousel'],
465 $this->pluginVersion,
466 false
467 );
468 wp_enqueue_script(
469 'embedpress-google-photos-album',
470 EMBEDPRESS_URL_ASSETS . 'js/embed-ui.min.js',
471 [],
472 $this->pluginVersion,
473 true
474 );
475
476 wp_enqueue_style('cg-carousel', EMBEDPRESS_URL_ASSETS . 'css/carousel.min.css', $this->pluginVersion, true);
477
478 wp_enqueue_style($this->pluginName, EMBEDPRESS_URL_ASSETS . 'css/embedpress.css', $this->pluginVersion, true);
479 }
480
481 //load embedpress admin js
482
483 wp_enqueue_script(
484 'embedpress-admin',
485 EMBEDPRESS_URL_ASSETS . 'js/admin.js',
486 ['jquery', 'wp-i18n', 'wp-url'],
487 $this->pluginVersion,
488 true
489 );
490
491 wp_localize_script($this->pluginName, 'EMBEDPRESS_ADMIN_PARAMS', [
492 'ajaxurl' => admin_url('admin-ajax.php'),
493 'nonce' => wp_create_nonce('embedpress')
494 ]);
495
496
497 $installedPlugins = Core::getPlugins();
498 if (count($installedPlugins) > 0) {
499 foreach ($installedPlugins as $plgSlug => $plgNamespace) {
500 $plgScriptPathRelative = "assets/js/embedpress.{$plgSlug}.js";
501 $plgName = "embedpress-{$plgSlug}";
502
503 if (file_exists(WP_PLUGIN_DIR . "/{$plgName}/{$plgScriptPathRelative}")) {
504 wp_enqueue_script(
505 $plgName,
506 plugins_url($plgName) . '/' . $plgScriptPathRelative,
507 [$this->pluginName],
508 $this->pluginVersion,
509 true
510 );
511 }
512 }
513 }
514 }
515
516 public function enqueueLisenceScripts()
517 {
518 wp_enqueue_script(
519 'embedpress-lisence',
520 EMBEDPRESS_URL_ASSETS . 'js/license.js',
521 ['jquery', 'wp-i18n', 'wp-url'],
522 $this->pluginVersion,
523 true
524 );
525
526 wp_localize_script('embedpress-lisence', 'wpdeveloperLicenseManagerNonce', array('embedpress_lisence_nonce' => wp_create_nonce('wpdeveloper_sl_' . EMBEDPRESS_SL_ITEM_ID . '_nonce')));
527 }
528
529
530 /**
531 * Method that register all stylesheets for the admin area.
532 *
533 * @return void
534 * @since 1.0.0
535 * @static
536 *
537 */
538 public static function enqueueStyles()
539 {
540 if (isset($_GET['page']) && 'embedpress' === $_GET['page']) {
541 wp_enqueue_style('embedpress-admin', plugins_url('embedpress/assets/css/admin.css'));
542 }
543 }
544
545 /**
546 * Method that receive a string via AJAX and return the decoded-shortcoded-version of that string.
547 *
548 * @return void
549 * @since 1.0.0
550 *
551 */
552 public function doShortcodeReceivedViaAjax()
553 {
554 $subject = isset($_POST['subject']) ? $_POST['subject'] : "";
555
556 $response = [
557 'data' => Shortcode::parseContent($subject, true),
558 ];
559
560 header('Content-Type:application/json;charset=UTF-8');
561 echo json_encode($response);
562
563 exit();
564 }
565
566 /**
567 * Method that receive an url via AJAX and return the info about that url/embed.
568 *
569 * @return void
570 * @since 1.0.0
571 *
572 */
573 public function getUrlInfoViaAjax()
574 {
575 $url = isset($_GET['url']) ? trim($_GET['url']) : "";
576
577 $response = [
578 'url' => $url,
579 'canBeResponsive' => false,
580 ];
581
582 if (!!strlen($response['url'])) {
583
584 $additionalServiceProviders = Core::getAdditionalServiceProviders();
585 if (!empty($additionalServiceProviders)) {
586 foreach ($additionalServiceProviders as $serviceProviderClassName => $serviceProviderUrls) {
587 Shortcode::addServiceProvider($serviceProviderClassName, $serviceProviderUrls);
588 }
589 }
590 $embera = new Embera([], Shortcode::get_collection());
591
592 $urlInfo = $embera->getUrlData($response['url']);
593 if (isset($urlInfo[$response['url']]) && $urlInfo[$response['url']]['provider_name']) {
594 $response['canBeResponsive'] = Core::canServiceProviderBeResponsive(strtolower($urlInfo[$response['url']]['provider_name']));
595 }
596 }
597
598 header('Content-Type:application/json;charset=UTF-8');
599 echo json_encode($response);
600
601 exit();
602 }
603
604 /**
605 * Returns a list of supported URL schemes for the preview script
606 *
607 * @return array
608 */
609 public function getUrlSchemes()
610 {
611 return [
612 // Apple podcasts
613 'podcasts.apple.com/*',
614 // PollDaddy
615 '*.polldaddy.com/s/*',
616 '*.polldaddy.com/poll/*',
617 '*.polldaddy.com/ratings/*',
618 'polldaddy.com/s/*',
619 'polldaddy.com/poll/*',
620 'polldaddy.com/ratings/*',
621
622 // VideoPress
623 'videopress.com/v/*',
624
625 // Tumblr
626 '*.tumblr.com/post/*',
627
628 // SmugMug
629 'smugmug.com/*',
630 '*.smugmug.com/*',
631
632 // SlideShare
633 'slideshare.net/*/*',
634 '*.slideshare.net/*/*',
635
636 // Reddit
637 'reddit.com/r/[^/]+/comments/*',
638
639 // Photobucket
640 'i*.photobucket.com/albums/*',
641 'gi*.photobucket.com/groups/*',
642
643 // Cloudup
644 'cloudup.com/*',
645
646 // Imgur
647 'imgur.com/*',
648 'i.imgur.com/*',
649
650 // YouTube (http://www.youtube.com/)
651 'youtube.com/watch\\?*',
652 'youtube.com/playlist\\?*',
653 'youtube.com/channel/*',
654 'youtube.com/c/*',
655 'youtube.com/user/*',
656 'youtube.com/(\w+)[^?\/]*$',
657
658 // opensea
659 'opensea.io/collection/*',
660
661 // Flickr (http://www.flickr.com/)
662 'flickr.com/photos/*/*',
663 'flic.kr/p/*',
664
665 // Viddler (http://www.viddler.com/)
666 'viddler.com/v/*',
667
668 // Hulu (http://www.hulu.com/)
669 'hulu.com/watch/*',
670
671 // Vimeo (http://vimeo.com/)
672 'vimeo.com/*',
673 'vimeo.com/groups/*/videos/*',
674
675 // CollegeHumor (http://www.collegehumor.com/)
676 'collegehumor.com/video/*',
677
678 // Deviantart.com (http://www.deviantart.com)
679 '*.deviantart.com/art/*',
680 '*.deviantart.com/*#/d*',
681 'fav.me/*',
682 'sta.sh/*',
683
684 // SlideShare (http://www.slideshare.net/)
685
686 // chirbit.com (http://www.chirbit.com/)
687 'chirb.it/*',
688
689 // nfb.ca (http://www.nfb.ca/)
690 '*.nfb.ca/film/*',
691
692 // Scribd (http://www.scribd.com/)
693 '*.scribd.com/doc/*',
694 '*.scribd.com/document/*',
695
696 // Dotsub (http://dotsub.com/)
697 'dotsub.com/view/*',
698
699 // Animoto (http://animoto.com/)
700 'animoto.com/play/*',
701
702 // Rdio (http://rdio.com/)
703 '*.rdio.com/artist/*',
704 '*.rdio.com/people/*',
705
706 // MixCloud (http://mixcloud.com/)
707 'mixcloud.com/*/*/',
708
709 // FunnyOrDie (http://www.funnyordie.com/)
710 'funnyordie.com/videos/*',
711
712 // Ted (http://ted.com)
713 'ted.com/talks/*',
714
715 // Sapo Videos (http://videos.sapo.pt)
716 'videos.sapo.pt/*',
717
718 // Official FM (http://official.fm)
719 'official.fm/tracks/*',
720 'official.fm/playlists/*',
721
722 // HuffDuffer (http://huffduffer.com)
723 'huffduffer.com/*/*',
724
725 // Shoudio (http://shoudio.com)
726 'shoudio.com/*',
727 'shoud.io/*',
728
729 // Moby Picture (http://www.mobypicture.com)
730 'mobypicture.com/user/*/view/*',
731 'moby.to/*',
732
733 // 23HQ (http://www.23hq.com)
734 '23hq.com/*/photo/*',
735
736 // Cacoo (https://cacoo.com)
737 'cacoo.com/diagrams/*',
738
739 // Dipity (http://www.dipity.com)
740 'dipity.com/*/*/',
741
742 // Roomshare (http://roomshare.jp)
743 'roomshare.jp/post/*',
744 'roomshare.jp/en/post/*',
745
746 // Dailymotion (http://www.dailymotion.com)
747 'dailymotion.com/video/*',
748
749 // Crowd Ranking (http://crowdranking.com)
750 'c9ng.com/*/*',
751
752 // CircuitLab (https://www.circuitlab.com/)
753 'circuitlab.com/circuit/*',
754
755 // Coub (http://coub.com/)
756 'coub.com/view/*',
757 'coub.com/embed/*',
758
759 // SpeakerDeck (https://speakerdeck.com)
760 'speakerdeck.com/*/*',
761
762 // Instagram (https://instagram.com)
763 'instagram.com/p/*',
764 'instagr.am/p/*',
765
766 // SoundCloud (http://soundcloud.com/)
767 'soundcloud.com/*',
768
769 // Kickstarter (http://www.kickstarter.com)
770 'kickstarter.com/projects/*',
771
772 // Ustream (http://www.ustream.tv)
773 '*.ustream.tv/*',
774 '*.ustream.com/*',
775
776 // Daily Mile (http://www.dailymile.com)
777 'dailymile.com/people/*/entries/*',
778
779 // Sketchfab (http://sketchfab.com)
780 'sketchfab.com/models/*',
781 'sketchfab.com/*/folders/*',
782
783 // Meetup (http://www.meetup.com)
784 'meetup.com/*',
785 'meetu.ps/*',
786
787 // AudioSnaps (http://audiosnaps.com)
788 'audiosnaps.com/k/*',
789
790 // RapidEngage (https://rapidengage.com)
791 'rapidengage.com/s/*',
792
793 // Getty Images (http://www.gettyimages.com/)
794 'gty.im/*',
795 'gettyimages.com/detail/photo/*',
796
797 // amCharts Live Editor (http://live.amcharts.com/)
798 'live.amcharts.com/*',
799
800 // Infogram (https://infogr.am/)
801 'infogr.am/*',
802 'infogram.com/*',
803
804 // ChartBlocks (http://www.chartblocks.com/)
805 'public.chartblocks.com/c/*',
806
807 // ReleaseWire (http://www.releasewire.com/)
808 'rwire.com/*',
809
810 // ShortNote (https://www.shortnote.jp/)
811 'shortnote.jp/view/notes/*',
812
813 // EgliseInfo (http://egliseinfo.catholique.fr/)
814 'egliseinfo.catholique.fr/*',
815
816 // Silk (http://www.silk.co/)
817 '*.silk.co/explore/*',
818 '*.silk.co/s/embed/*',
819
820 // Twitter
821 'twitter.com/*/status/*',
822 'twitter.com/i/moments/*',
823 'twitter.com/*/timelines/*',
824
825 // http://bambuser.com
826 'bambuser.com/v/*',
827
828 // https://clyp.it
829 'clyp.it/*',
830
831 // https://gist.github.com
832 'gist.github.com/*/*',
833
834 // http://issuu.com
835 'issuu.com/*',
836
837 // https://portfolium.com
838 'portfolium.com/*',
839
840 // https://www.reverbnation.com
841 'reverbnation.com/*',
842
843 // http://rutube.ru
844 'rutube.ru/video/*',
845
846 // https://spotify.com/
847 'open.spotify.com/*',
848
849 // http://www.videojug.com
850 'videojug.com/*',
851
852 // https://vine.com
853 'vine.co/v/*',
854
855 // Facebook
856 'facebook.com/*',
857 'fb.watch/*',
858
859 // Google Shortened Url
860 'goo.gl/*',
861
862 // Google Maps
863 'google.com/*',
864 'google.com.*/*',
865 'google.co.*/*',
866 'maps.google.com/*',
867
868 // Google Docs
869 'docs.google.com/presentation/*',
870 'docs.google.com/document/*',
871 'docs.google.com/spreadsheets/*',
872 'docs.google.com/forms/*',
873 'docs.google.com/drawings/*',
874
875 // Twitch.tv
876 '*.twitch.tv/*',
877 'twitch.tv/*',
878
879 // Giphy
880 '*.giphy.com/gifs/*',
881 'giphy.com/gifs/*',
882 'i.giphy.com/*',
883 'gph.is/*',
884
885 // Wistia
886 '*.wistia.com/medias/*',
887 'fast.wistia.com/embed/medias/*.jsonp',
888 // Boomplay (http://boomplay.com/)
889 'boomplay.com/*',
890 'codepen.io/*',
891 'archivos.digital/*',
892 'audioclip.naver.com/*',
893 'app.blogcast.host/*',
894 'codepoints.net/*',
895 'codesandbox.io/*',
896 'commaful.com/*',
897 '*.survey.fm/*',
898 'survey.fm/*',
899 'datawrapper.dwcdn.net/*',
900 '*.didacte.com/*',
901 'didacte.com/*',
902 'digiteka.com/*',
903 'docdro.id/*',
904 'edumedia-sciences.com/*',
905 'ethfiddle.com/*',
906 'eyrie.io/*',
907 '*.getfader.com/*',
908 'getfader.com/*',
909 'fitapp.pro/*',
910 'fite.tv/*',
911 'public.flourish.studio/*',
912 'geograph.org.gg/*',
913 'geo-en.hlipp.de/*',
914 'geograph.org.uk/*',
915 'fortest.getshow.io/*',
916 'opensea.io/assets/*',
917 ];
918 }
919
920 public function delete_instagram_account()
921 {
922 if (!current_user_can('manage_options')) {
923 wp_send_json_error(array('message' => 'You do not have sufficient permissions to access this functionality.'));
924 return;
925 }
926
927 if (isset($_POST['_nonce']) && wp_verify_nonce($_POST['_nonce'], 'embedpress_elements_action')) {
928 $user_id = isset($_POST['user_id']) ? $_POST['user_id'] : '';
929 $account_type = isset($_POST['account_type']) ? $_POST['account_type'] : '';
930 $account_data = get_option('ep_instagram_account_data');
931
932 $data = array_filter($account_data, function ($item) use ($user_id) {
933 return $item['user_id'] !== $user_id;
934 });
935 $data = array_values($data);
936 update_option('ep_instagram_account_data', $data);
937 } else {
938 wp_die('Nonce verification failed.');
939 }
940 }
941
942
943
944 /**
945 * Update admin notice view status
946 *
947 * @since 2.5.1
948 */
949 public static function embedpress_notice_dismiss()
950 {
951 check_ajax_referer('embedpress', 'security');
952 update_option('embedpress_social_dismiss_notice', true);
953 }
954 }
955