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