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