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