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