PluginProbe ʕ •ᴥ•ʔ
EmbedPress – PDF Embedder, Embed PDF viewer, YouTube Videos, 3D FlipBook, Social feeds & more / 2.6.1
EmbedPress – PDF Embedder, Embed PDF viewer, YouTube Videos, 3D FlipBook, Social feeds & more v2.6.1
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 5 years ago Ends 5 years ago Includes 6 years ago Plugins 6 years ago Providers 5 years ago ThirdParty 6 years ago AutoLoader.php 6 years ago Compatibility.php 6 years ago Core.php 5 years ago CoreLegacy.php 6 years ago DisablerLegacy.php 6 years ago Loader.php 6 years ago RestAPI.php 6 years ago Shortcode.php 6 years ago index.html 7 years ago
Core.php
569 lines
1 <?php
2
3 namespace EmbedPress;
4
5 use EmbedPress\Ends\Back\Handler as EndHandlerAdmin;
6 use EmbedPress\Ends\Front\Handler as EndHandlerPublic;
7
8
9 (defined('ABSPATH') && defined('EMBEDPRESS_IS_LOADED')) or die("No direct script access allowed.");
10
11 /**
12 * Entity that glues together all pieces that the plugin is made of, for WordPress 5+.
13 *
14 * @package EmbedPress
15 * @author EmbedPress <help@embedpress.com>
16 * @copyright Copyright (C) 2020 WPDeveloper. All rights reserved.
17 * @license GPLv3 or later
18 * @since 1.0.0
19 */
20 class Core {
21 use \EmbedPress\Includes\Traits\Shared;
22
23 /**
24 * The name of the plugin.
25 *
26 * @since 1.0.0
27 * @access protected
28 *
29 * @var string $pluginName The name of the plugin.
30 */
31 protected $pluginName;
32
33 /**
34 * The version of the plugin.
35 *
36 * @since 1.0.0
37 * @access protected
38 *
39 * @var string $pluginVersion The version of the plugin.
40 */
41 protected $pluginVersion;
42
43 /**
44 * An instance of the plugin loader.
45 *
46 * @since 1.0.0
47 * @access protected
48 *
49 * @var Loader $pluginVersion The version of the plugin.
50 */
51 protected $loaderInstance;
52
53 /**
54 * An associative array storing all registered/active EmbedPress plugins and their namespaces.
55 *
56 * @since 1.4.0
57 * @access private
58 * @static
59 *
60 * @var array
61 */
62 private static $plugins = [];
63
64 /**
65 * Initialize the plugin and set its properties.
66 *
67 * @return void
68 * @since 1.0.0
69 *
70 */
71 public function __construct () {
72 $this->pluginName = EMBEDPRESS_PLG_NAME;
73 $this->pluginVersion = EMBEDPRESS_VERSION;
74
75 $this->loaderInstance = new Loader();
76
77 add_action('admin_notices',[$this,'embedpress_admin_notice']);
78 }
79
80 /**
81 * Method that retrieves the plugin name.
82 *
83 * @return string
84 * @since 1.0.0
85 *
86 */
87 public function getPluginName () {
88 return $this->pluginName;
89 }
90
91 /**
92 * Method that retrieves the plugin version.
93 *
94 * @return string
95 * @since 1.0.0
96 *
97 */
98 public function getPluginVersion () {
99 return $this->pluginVersion;
100 }
101
102 /**
103 * Method that retrieves the loader instance.
104 *
105 * @return Loader
106 * @since 1.0.0
107 *
108 */
109 public function getLoader () {
110 return $this->loaderInstance;
111 }
112
113 /**
114 * Method responsible to connect all required hooks in order to make the plugin work.
115 *
116 * @return void
117 * @since 1.0.0
118 *
119 */
120 public function initialize () {
121 global $wp_actions;
122
123 add_filter('oembed_providers', [$this, 'addOEmbedProviders']);
124 add_action('rest_api_init', [$this, 'registerOEmbedRestRoutes']);
125
126 if (is_admin()) {
127 $plgSettings = self::getSettings();
128 $this->admin_notice();
129 $settingsClassNamespace = '\\EmbedPress\\Ends\\Back\\Settings';
130 add_action('admin_menu', [$settingsClassNamespace, 'registerMenuItem']);
131 add_action('admin_init', [$settingsClassNamespace, 'registerActions']);
132 unset($settingsClassNamespace);
133
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 ((bool) $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->start_plugin_tracking();
161 $this->loaderInstance->run();
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 ]
363 );
364 }
365
366 /**
367 * Callback called right after the plugin has been activated.
368 *
369 * @return void
370 * @since 1.0.0
371 * @static
372 *
373 */
374 public static function onPluginActivationCallback () {
375 flush_rewrite_rules();
376 }
377
378 /**
379 * Callback called right after the plugin has been deactivated.
380 *
381 * @return void
382 * @since 1.0.0
383 * @static
384 *
385 */
386 public static function onPluginDeactivationCallback () {
387 flush_rewrite_rules();
388 }
389
390 /**
391 * Method that retrieves all additional service providers defined in the ~<plugin_root_path>/providers.php file.
392 *
393 * @return array
394 * @since 1.0.0
395 * @static
396 *
397 */
398 public static function getAdditionalServiceProviders () {
399 $additionalProvidersFilePath = EMBEDPRESS_PATH_BASE.'providers.php';
400 if (file_exists($additionalProvidersFilePath)) {
401 include $additionalProvidersFilePath;
402
403 if (isset($additionalServiceProviders)) {
404 return $additionalServiceProviders;
405 }
406 }
407
408 return [];
409 }
410
411 /**
412 * Method that checks if an embed of a given service provider can be responsive.
413 *
414 * @param string $serviceProviderAlias The service's slug.
415 *
416 * @return boolean
417 * @since 1.0.0
418 * @static
419 *
420 */
421 public static function canServiceProviderBeResponsive ($serviceProviderAlias) {
422 return in_array($serviceProviderAlias, [
423 "dailymotion",
424 "kickstarter",
425 "rutube",
426 "ted",
427 "vimeo",
428 "youtube",
429 "ustream",
430 "google-docs",
431 "animatron",
432 "amcharts",
433 "on-aol-com",
434 "animoto",
435 "videojug",
436 'issuu',
437 ]);
438 }
439
440 /**
441 * Method that retrieves the plugin settings defined by the user.
442 *
443 * @return object
444 * @since 1.0.0
445 * @static
446 *
447 */
448 public static function getSettings () {
449 $settings = get_option(EMBEDPRESS_PLG_NAME);
450
451 if (!isset($settings['enablePluginInAdmin'])) {
452 $settings['enablePluginInAdmin'] = true;
453 }
454
455 if (!isset($settings['enablePluginInFront'])) {
456 $settings['enablePluginInFront'] = true;
457 }
458
459 if (!isset($settings['enableGlobalEmbedResize'])) {
460 $settings['enableGlobalEmbedResize'] = false;
461 }
462
463 if (!isset($settings['enableEmbedResizeHeight'])) {
464 $settings['enableEmbedResizeHeight'] = 552;
465 }
466
467 if (!isset($settings['enableEmbedResizeWidth'])) {
468 $settings['enableEmbedResizeWidth'] = 652;
469 }
470
471 return (object) $settings;
472 }
473
474 /**
475 * Method that register an EmbedPress plugin.
476 *
477 * @param array $pluginMeta Associative array containing plugin's name, slug and namespace
478 *
479 * @return void
480 * @since 1.4.0
481 * @static
482 *
483 */
484 public static function registerPlugin ($pluginMeta) {
485 $pluginMeta = json_decode(json_encode($pluginMeta));
486
487 if (empty($pluginMeta->name) || empty($pluginMeta->slug) || empty($pluginMeta->namespace)) {
488 return;
489 }
490
491 if (!isset(self::$plugins[$pluginMeta->slug])) {
492 AutoLoader::register($pluginMeta->namespace,
493 WP_PLUGIN_DIR.'/'.EMBEDPRESS_PLG_NAME.'-'.$pluginMeta->slug.'/'.$pluginMeta->name);
494
495 $plugin = "{$pluginMeta->namespace}\Plugin";
496 if (\defined("{$plugin}::SLUG") && $plugin::SLUG !== null) {
497 self::$plugins[$pluginMeta->slug] = $pluginMeta->namespace;
498
499 $bsFilePath = $plugin::PATH.EMBEDPRESS_PLG_NAME.'-'.$plugin::SLUG.'.php';
500
501 register_activation_hook($bsFilePath, [$plugin::NAMESPACE_STRING, 'onActivationCallback']);
502 register_deactivation_hook($bsFilePath, [$plugin::NAMESPACE_STRING, 'onDeactivationCallback']);
503
504 add_action('admin_init', [$plugin, 'onLoadAdminCallback']);
505
506 add_action(EMBEDPRESS_PLG_NAME.':'.$plugin::SLUG.':settings:register',
507 [$plugin, 'registerSettings']);
508 add_action(EMBEDPRESS_PLG_NAME.':settings:render:tab', [$plugin, 'renderTab']);
509
510 add_filter('plugin_action_links_embedpress-'.$plugin::SLUG.'/embedpress-'.$plugin::SLUG.'.php',
511 [$plugin, 'handleActionLinks'], 10, 2);
512
513 $plugin::registerEvents();
514 }
515 }
516 }
517
518 /**
519 * Retrieve all registered plugins.
520 *
521 * @return array
522 * @since 1.4.0
523 * @static
524 *
525 */
526 public static function getPlugins () {
527 return self::$plugins;
528 }
529
530 /**
531 * Handle links displayed below the plugin name in the WordPress Installed Plugins page.
532 *
533 * @return array
534 * @since 1.4.0
535 * @static
536 *
537 */
538 public static function handleActionLinks ($links, $file) {
539 $settingsLink = '<a href="'.admin_url('admin.php?page=embedpress').'" aria-label="'.__('Open settings page',
540 'embedpress').'">'.__('Settings', 'embedpress').'</a>';
541
542 array_unshift($links, $settingsLink);
543
544 return $links;
545 }
546
547 /**
548 * Method that ensures the API's url are whitelisted to WordPress external requests.
549 *
550 * @param boolean $isAllowed
551 * @param string $host
552 * @param string $url
553 *
554 * @return boolean
555 * @since 1.4.0
556 * @static
557 *
558 */
559 public static function allowApiHost ($isAllowed, $host, $url) {
560 if ($host === EMBEDPRESS_LICENSES_API_HOST) {
561 $isAllowed = true;
562 }
563
564 return $isAllowed;
565 }
566
567
568 }
569