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