PluginProbe ʕ •ᴥ•ʔ
EmbedPress – PDF Embedder, Embed PDF viewer, YouTube Videos, 3D FlipBook, Social feeds & more / 3.3.2
EmbedPress – PDF Embedder, Embed PDF viewer, YouTube Videos, 3D FlipBook, Social feeds & more v3.3.2
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 / Core.php
embedpress / EmbedPress Last commit date
AMP 6 years ago Elementor 4 years ago Ends 4 years ago Includes 4 years ago Plugins 4 years ago Providers 5 years ago ThirdParty 4 years ago AutoLoader.php 6 years ago Compatibility.php 6 years ago Core.php 4 years ago CoreLegacy.php 4 years ago DisablerLegacy.php 6 years ago Loader.php 6 years ago RestAPI.php 5 years ago Shortcode.php 4 years ago index.html 7 years ago simple_html_dom.php 4 years ago
Core.php
540 lines
1 <?php
2
3 namespace EmbedPress;
4
5 use EmbedPress\Ends\Back\Handler as EndHandlerAdmin;
6 use EmbedPress\Ends\Back\Settings\EmbedpressSettings;
7 use EmbedPress\Ends\Front\Handler as EndHandlerPublic;
8 use EmbedPress\Includes\Traits\Shared;
9
10
11 (defined('ABSPATH') && defined('EMBEDPRESS_IS_LOADED')) or die("No direct script access allowed.");
12
13 /**
14 * Entity that glues together all pieces that the plugin is made of, for WordPress 5+.
15 *
16 * @package EmbedPress
17 * @author EmbedPress <help@embedpress.com>
18 * @copyright Copyright (C) 2021 WPDeveloper. All rights reserved.
19 * @license GPLv3 or later
20 * @since 1.0.0
21 */
22 class Core {
23 use Shared;
24
25 /**
26 * The name of the plugin.
27 *
28 * @since 1.0.0
29 * @access protected
30 *
31 * @var string $pluginName The name of the plugin.
32 */
33 protected $pluginName;
34
35 /**
36 * The version of the plugin.
37 *
38 * @since 1.0.0
39 * @access protected
40 *
41 * @var string $pluginVersion The version of the plugin.
42 */
43 protected $pluginVersion;
44
45 /**
46 * An instance of the plugin loader.
47 *
48 * @since 1.0.0
49 * @access protected
50 *
51 * @var Loader $pluginVersion The version of the plugin.
52 */
53 protected $loaderInstance;
54
55 /**
56 * An associative array storing all registered/active EmbedPress plugins and their namespaces.
57 *
58 * @since 1.4.0
59 * @access private
60 * @static
61 *
62 * @var array
63 */
64 private static $plugins = [];
65
66 /**
67 * Initialize the plugin and set its properties.
68 *
69 * @return void
70 * @since 1.0.0
71 *
72 */
73 public function __construct () {
74 $this->pluginName = EMBEDPRESS_PLG_NAME;
75 $this->pluginVersion = EMBEDPRESS_VERSION;
76
77 $this->loaderInstance = new Loader();
78
79 add_action('admin_notices',[$this,'embedpress_admin_notice']);
80 }
81
82 /**
83 * Method that retrieves the plugin name.
84 *
85 * @return string
86 * @since 1.0.0
87 *
88 */
89 public function getPluginName () {
90 return $this->pluginName;
91 }
92
93 /**
94 * Method that retrieves the plugin version.
95 *
96 * @return string
97 * @since 1.0.0
98 *
99 */
100 public function getPluginVersion () {
101 return $this->pluginVersion;
102 }
103
104 /**
105 * Method that retrieves the loader instance.
106 *
107 * @return Loader
108 * @since 1.0.0
109 *
110 */
111 public function getLoader () {
112 return $this->loaderInstance;
113 }
114
115 /**
116 * Method responsible to connect all required hooks in order to make the plugin work.
117 *
118 * @return void
119 * @since 1.0.0
120 *
121 */
122 public function initialize () {
123 global $wp_actions;
124 add_filter('oembed_providers', [$this, 'addOEmbedProviders']);
125 add_action('rest_api_init', [$this, 'registerOEmbedRestRoutes']);
126
127 if (is_admin()) {
128 new EmbedpressSettings();
129 $plgSettings = self::getSettings();
130 $this->admin_notice();
131 add_filter('plugin_action_links_embedpress/embedpress.php', ['\\EmbedPress\\Core', 'handleActionLinks'], 10,
132 2);
133
134 add_action('admin_enqueue_scripts', ['\\EmbedPress\\Ends\\Back\\Handler', 'enqueueStyles']);
135 add_action('wp_ajax_embedpress_notice_dismiss', ['\\EmbedPress\\Ends\\Back\\Handler', 'embedpress_notice_dismiss']);
136
137 $plgHandlerAdminInstance = new EndHandlerAdmin($this->getPluginName(), $this->getPluginVersion());
138
139 if ( $plgSettings->enablePluginInAdmin ) {
140 $this->loaderInstance->add_action('admin_enqueue_scripts', $plgHandlerAdminInstance, 'enqueueScripts');
141 }
142 } else {
143 $plgHandlerPublicInstance = new EndHandlerPublic($this->getPluginName(), $this->getPluginVersion());
144
145 $this->loaderInstance->add_action('wp_enqueue_scripts', $plgHandlerPublicInstance, 'enqueueScripts');
146 $this->loaderInstance->add_action('wp_enqueue_scripts', $plgHandlerPublicInstance, 'enqueueStyles');
147
148 unset($plgHandlerPublicInstance);
149 }
150
151 // Add support for embeds on AMP pages
152 add_filter('pp_embed_parsed_content', ['\\EmbedPress\\AMP\\EmbedHandler', 'processParsedContent'], 10, 3);
153
154 // Add support for our embeds on Beaver Builder. Without this it only run the native embeds.
155 add_filter('fl_builder_before_render_shortcodes',
156 ['\\EmbedPress\\ThirdParty\\BeaverBuilder', 'before_render_shortcodes']);
157 $this->start_plugin_tracking();
158 $this->loaderInstance->run();
159
160 }
161
162 /**
163 * @param $providers
164 *
165 * @return mixed
166 */
167 public function addOEmbedProviders ($providers) {
168 $newProviders = [
169 // Viddler
170 '#https?://(.+\.)?viddler\.com/v/.+#i' => 'viddler',
171
172 // Deviantart.com (http://www.deviantart.com)
173 // '#https?://(.+\.)?deviantart\.com/art/.+#i' => 'devianart',
174 // '#https?://(.+\.)?deviantart\.com/.+#i' => 'devianart',
175 // '#https?://(.+\.)?deviantart\.com/.*/d.+#i' => 'devianart',
176 // '#https?://(.+\.)?fav\.me/.+#i' => 'devianart',
177 // '#https?://(.+\.)?sta\.sh/.+#i' => 'devianart',
178
179 // chirbit.com (http://www.chirbit.com/)
180 //'#https?://(.+\.)?chirb\.it/.+#i' => 'chirbit',
181
182
183 // nfb.ca (http://www.nfb.ca/)
184 //'#https?://(.+\.)?nfb\.ca/film/.+#i' => 'nfb',
185
186 // Dotsub (http://dotsub.com/)
187 //'#https?://(.+\.)?dotsub\.com/view/.+#i' => 'dotsub',
188
189 // Rdio (http://rdio.com/)
190 '#https?://(.+\.)?rdio\.com/(artist|people)/.+#i' => 'rdio',
191
192 // Sapo Videos (http://videos.sapo.pt)
193 //'#https?://(.+\.)?videos\.sapo\.pt/.+#i' => 'sapo',
194
195 // Official FM (http://official.fm)
196 '#https?://(.+\.)?official\.fm/(tracks|playlists)/.+#i' => 'officialfm',
197
198 // HuffDuffer (http://huffduffer.com)
199 //'#https?://(.+\.)?huffduffer\.com/.+#i' => 'huffduffer',
200
201 // Shoudio (http://shoudio.com)
202 //'#https?://(.+\.)?shoudio\.(com|io)/.+#i' => 'shoudio',
203
204 // Moby Picture (http://www.mobypicture.com)
205 '#https?://(.+\.)?mobypicture\.com/user/.+/view/.+#i' => 'mobypicture',
206 '#https?://(.+\.)?moby\.to/.+#i' => 'mobypicture',
207
208 // 23HQ (http://www.23hq.com)
209 //'#https?://(.+\.)?23hq\.com/.+/photo/.+#i' => '23hq',
210
211 // Cacoo (https://cacoo.com)
212 '#https?://(.+\.)?cacoo\.com/diagrams/.+#i' => 'cacoo',
213
214 // Dipity (http://www.dipity.com)
215 '#https?://(.+\.)?dipity\.com/.+#i' => 'dipity',
216
217 // Roomshare (http://roomshare.jp)
218 //'#https?://(.+\.)?roomshare\.jp/(en/)?post/.+#i' => 'roomshare',
219
220 // Crowd Ranking (http://crowdranking.com)
221 '#https?://(.+\.)?c9ng\.com/.+#i' => 'crowd',
222
223 // CircuitLab (https://www.circuitlab.com/)
224 //'#https?://(.+\.)?circuitlab\.com/circuit/.+#i' => 'circuitlab',
225
226 // Coub (http://coub.com/)
227 //'#https?://(.+\.)?coub\.com/(view|embed)/.+#i' => 'coub',
228
229 // Ustream (http://www.ustream.tv)
230 //'#https?://(.+\.)?ustream\.(tv|com)/.+#i' => 'ustream',
231
232 // Daily Mile (http://www.dailymile.com)
233 '#https?://(.+\.)?dailymile\.com/people/.+/entries/.+#i' => 'daily',
234
235 // Sketchfab (http://sketchfab.com)
236 '#https?://(.+\.)?sketchfab\.com/models/.+#i' => 'sketchfab',
237 '#https?://(.+\.)?sketchfab\.com/.+/folders/.+#i' => 'sketchfab',
238
239 // AudioSnaps (http://audiosnaps.com)
240 '#https?://(.+\.)?audiosnaps\.com/k/.+#i' => 'audiosnaps',
241
242 // RapidEngage (https://rapidengage.com)
243 '#https?://(.+\.)?rapidengage\.com/s/.+#i' => 'rapidengage',
244
245 // Getty Images (http://www.gettyimages.com/)
246 //'#https?://(.+\.)?gty\.im/.+#i' => 'gettyimages',
247 //'#https?://(.+\.)?gettyimages\.com/detail/photo/.+#i' => 'gettyimages',
248
249 // amCharts Live Editor (http://live.amcharts.com/)
250 //'#https?://(.+\.)?live\.amcharts\.com/.+#i' => 'amcharts',
251
252 // Infogram (https://infogr.am/)
253 //'#https?://(.+\.)?infogr\.am/.+#i' => 'infogram',
254 //(https://infogram.com/)
255 //'#https?://(.+\.)?infogram\.com/.+#i' => 'infogram',
256
257 // ChartBlocks (http://www.chartblocks.com/)
258 //'#https?://(.+\.)?public\.chartblocks\.com/c/.+#i' => 'chartblocks',
259
260 // ReleaseWire (http://www.releasewire.com/)
261 //'#https?://(.+\.)?rwire\.com/.+#i' => 'releasewire',
262
263 // ShortNote (https://www.shortnote.jp/)
264 //'#https?://(.+\.)?shortnote\.jp/view/notes/.+#i' => 'shortnote',
265
266 // EgliseInfo (http://egliseinfo.catholique.fr/)
267 '#https?://(.+\.)?egliseinfo\.catholique\.fr/.+#i' => 'egliseinfo',
268
269 // Silk (http://www.silk.co/)
270 '#https?://(.+\.)?silk\.co/explore/.+#i' => 'silk',
271 '#https?://(.+\.)?silk\.co/s/embed/.+#i' => 'silk',
272
273 // http://bambuser.com
274 '#https?://(.+\.)?bambuser\.com/v/.+#i' => 'bambuser',
275
276 // https://clyp.it
277 //'#https?://(.+\.)?clyp\.it/.+#i' => 'clyp',
278
279 // https://gist.github.com
280 '#https?://(.+\.)?gist\.github\.com/.+#i' => 'github',
281
282 // https://portfolium.com
283 //'#https?://(.+\.)?portfolium\.com/.+#i' => 'portfolium',
284
285 // http://rutube.ru
286 '#https?://(.+\.)?rutube\.ru/video/.+#i' => 'rutube',
287
288 // http://www.videojug.com
289 '#https?://(.+\.)?videojug\.com/.+#i' => 'videojug',
290
291 // https://vine.com
292 //'#https?://(.+\.)?vine\.co/v/.+#i' => 'vine',
293
294 // Google Shortened Url
295 '#https?://(.+\.)?goo\.gl/.+#i' => 'google',
296
297 // Google Maps
298 //'#https?://(.+\.)?google\.com/maps/.+#i' => 'googlemaps',
299 //'#https?://(.+\.)?maps\.google\.com/.+#i' => 'googlemaps',
300
301 // Google Docs
302 //'#https?://(.+\.)?docs\.google\.com/(.+/)?(document|presentation|spreadsheets|forms|drawings)/.+#i' => 'googledocs',
303
304 // Twitch.tv
305 //'#https?://(.+\.)?twitch\.tv/.+#i' => 'twitch',
306
307 // Giphy
308 //'#https?://(.+\.)?giphy\.com/gifs/.+#i' => 'giphy',
309 //'#https?://(.+\.)?i\.giphy\.com/.+#i' => 'giphy',
310 //'#https?://(.+\.)?gph\.is/.+#i' => 'giphy',
311
312 // Wistia
313 //'#https?://(.+\.)?wistia\.com/medias/.+#i' => 'wistia',
314 //'#https?://(.+\.)?fast\.wistia\.com/embed/medias/.+#i\.jsonp' => 'wistia',
315 ];
316
317 /**
318 * ========================================
319 * Make sure the $wp_write global is set.
320 * This fix compatibility with JetPack, Classical Editor and Disable Gutenberg. JetPack makes
321 * the oembed_providers filter be called and this activates our class too, but one dependency
322 * of the rest_url method is not loaded yet.
323 */
324 global $wp_rewrite;
325
326 if (!class_exists('\\WP_Rewrite')) {
327 $path = ABSPATH.WPINC.'/class-wp-rewrite.php';
328 if (file_exists($path)) {
329 require_once $path;
330 }
331 }
332
333 if (!is_object($wp_rewrite)) {
334 $wp_rewrite = new \WP_Rewrite();
335 $_GLOBALS['wp_write'] = $wp_rewrite;
336 }
337 /*========================================*/
338
339 foreach ($newProviders as $url => &$data) {
340 $data = [
341 rest_url('embedpress/v1/oembed/'.$data),
342 true,
343 ];
344 }
345
346 $providers = array_merge($providers, $newProviders);
347
348 return $providers;
349 }
350
351 /**
352 * Register OEmbed Rest Routes
353 */
354 public function registerOEmbedRestRoutes () {
355 register_rest_route(
356 'embedpress/v1', '/oembed/(?P<provider>[a-zA-Z0-9\-]+)',
357 [
358 'methods' => \WP_REST_Server::READABLE,
359 'callback' => ['\\EmbedPress\\RestAPI', 'oembed'],
360 'permission_callback' => '__return_true',
361 ]
362 );
363 }
364
365 /**
366 * Callback called right after the plugin has been activated.
367 *
368 * @return void
369 * @since 1.0.0
370 * @static
371 *
372 */
373 public static function onPluginActivationCallback () {
374 $dirname = wp_get_upload_dir()['basedir'].'/embedpress';
375 if (!file_exists($dirname)) {
376 mkdir($dirname, 0777);
377 }
378 flush_rewrite_rules();
379 embedpress_schedule_cache_cleanup();
380 }
381
382 /**
383 * Callback called right after the plugin has been deactivated.
384 *
385 * @return void
386 * @since 1.0.0
387 * @static
388 *
389 */
390 public static function onPluginDeactivationCallback () {
391 flush_rewrite_rules();
392 embedpress_cache_cleanup();
393 $timestamp = wp_next_scheduled( 'embedpress_backup_cleanup_action' );
394 if ( $timestamp ) {
395 wp_unschedule_event( $timestamp, 'embedpress_backup_cleanup_action' );
396 }
397 }
398
399 /**
400 * Method that retrieves all additional service providers defined in the ~<plugin_root_path>/providers.php file.
401 *
402 * @return array
403 * @since 1.0.0
404 * @static
405 *
406 */
407 public static function getAdditionalServiceProviders () {
408 $additionalProvidersFilePath = EMBEDPRESS_PATH_BASE.'providers.php';
409 if (file_exists($additionalProvidersFilePath)) {
410 include $additionalProvidersFilePath;
411
412 if (isset($additionalServiceProviders)) {
413 return apply_filters( 'embedpress_additional_service_providers', $additionalServiceProviders);
414 }
415 }
416
417 return apply_filters( 'embedpress_additional_service_providers', []);
418
419 }
420
421 /**
422 * Method that checks if an embed of a given service provider can be responsive.
423 *
424 * @param string $serviceProviderAlias The service's slug.
425 *
426 * @return boolean
427 * @since 1.0.0
428 * @static
429 *
430 */
431 public static function canServiceProviderBeResponsive ($serviceProviderAlias) {
432 return in_array($serviceProviderAlias, [
433 "dailymotion",
434 "kickstarter",
435 "rutube",
436 "ted",
437 "vimeo",
438 "youtube",
439 "ustream",
440 "google-docs",
441 "animatron",
442 "amcharts",
443 "on-aol-com",
444 "animoto",
445 "videojug",
446 'issuu',
447 ]);
448 }
449
450 /**
451 * Method that retrieves the plugin settings defined by the user.
452 *
453 * @return object
454 * @since 1.0.0
455 * @static
456 *
457 */
458 public static function getSettings () {
459 $settings = get_option(EMBEDPRESS_PLG_NAME);
460
461 if (!isset($settings['enablePluginInAdmin'])) {
462 $settings['enablePluginInAdmin'] = true;
463 }
464
465 if (!isset($settings['enablePluginInFront'])) {
466 $settings['enablePluginInFront'] = true;
467 }
468
469 if (!isset($settings['enableGlobalEmbedResize'])) {
470 $settings['enableGlobalEmbedResize'] = false;
471 }
472
473 if (!isset($settings['enableEmbedResizeHeight'])) {
474 $settings['enableEmbedResizeHeight'] = 550; // old 552
475 }
476
477 if (!isset($settings['enableEmbedResizeWidth'])) {
478 $settings['enableEmbedResizeWidth'] = 600; // old 652
479 }
480
481 return (object) $settings;
482 }
483
484
485 /**
486 * Retrieve all registered plugins.
487 *
488 * @return array
489 * @since 1.4.0
490 * @static
491 *
492 */
493 public static function getPlugins () {
494 return self::$plugins;
495 }
496
497 /**
498 * Handle links displayed below the plugin name in the WordPress Installed Plugins page.
499 *
500 * @return array
501 * @since 1.4.0
502 * @static
503 *
504 */
505 public static function handleActionLinks($links, $file)
506 {
507 $settingsLink = '<a href="' . admin_url('admin.php?page=embedpress') . '" aria-label="' . __('Open settings page',
508 'embedpress') . '">' . __('Settings', 'embedpress') . '</a>';
509
510 array_unshift($links, $settingsLink);
511 if ( !is_embedpress_pro_active() ) {
512 $links[] = '<a href="https://wpdeveloper.com/in/upgrade-embedpress" target="_blank" class="embedpress-go-pro-action" style="color: green">'.__('Go Pro', 'embedpress').'</a>';
513 }
514 return $links;
515 }
516
517
518 /**
519 * Method that ensures the API's url are whitelisted to WordPress external requests.
520 *
521 * @param boolean $isAllowed
522 * @param string $host
523 * @param string $url
524 *
525 * @return boolean
526 * @since 1.4.0
527 * @static
528 *
529 */
530 public static function allowApiHost ($isAllowed, $host, $url) {
531 if ($host === EMBEDPRESS_LICENSES_API_HOST) {
532 $isAllowed = true;
533 }
534
535 return $isAllowed;
536 }
537
538
539 }
540