PluginProbe ʕ •ᴥ•ʔ
EmbedPress – PDF Embedder, Embed PDF viewer, YouTube Videos, 3D FlipBook, Social feeds & more / 3.6.2
EmbedPress – PDF Embedder, Embed PDF viewer, YouTube Videos, 3D FlipBook, Social feeds & more v3.6.2
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 / Gutenberg / plugin.php
embedpress / Gutenberg Last commit date
block-backend 3 years ago dist 3 years ago plugin.php 3 years ago
plugin.php
477 lines
1 <?php
2
3 /**
4 * Blocks Initializer
5 *
6 * Enqueue CSS/JS of all the blocks.
7 *
8 * @since 1.0.0
9 * @package CGB
10 */
11
12 // Exit if accessed directly.
13 use EmbedPress\Includes\Classes\Helper;
14
15 if (!defined('ABSPATH')) {
16 exit;
17 }
18
19
20 /**
21 * Enqueue Gutenberg block assets for both frontend + backend.
22 *
23 * @uses {wp-editor} for WP editor styles.
24 * @since 1.0.0
25 */
26 function embedpress_blocks_cgb_block_assets()
27 { // phpcs:ignore
28 // Styles.
29 wp_enqueue_style(
30 'embedpress_blocks-cgb-style-css', // Handle.
31 EMBEDPRESS_GUTENBERG_DIR_URL . 'dist/blocks.style.build.css', // Block style CSS.
32 is_admin() ? array('wp-editor') : null, // Dependency to include the CSS after it.
33 filemtime(EMBEDPRESS_GUTENBERG_DIR_PATH . 'dist/blocks.style.build.css') // Version: File modification time.
34 );
35 }
36
37 // Hook: Frontend assets.
38 add_action('enqueue_block_assets', 'embedpress_blocks_cgb_block_assets');
39
40 /**
41 * Enqueue Gutenberg block assets for backend editor.
42 *
43 * @uses {wp-blocks} for block type registration & related functions.
44 * @uses {wp-element} for WP Element abstraction — structure of blocks.
45 * @uses {wp-i18n} to internationalize the block's text.
46 * @uses {wp-editor} for WP editor styles.
47 * @since 1.0.0
48 */
49 function embedpress_blocks_cgb_editor_assets()
50 { // phpcs:ignore
51 // Scripts.
52 if (!wp_script_is('embedpress-pdfobject')) {
53 wp_enqueue_script(
54 'embedpress-pdfobject',
55 EMBEDPRESS_URL_ASSETS . 'js/pdfobject.min.js',
56 [],
57 EMBEDPRESS_VERSION
58 );
59 }
60
61 wp_enqueue_script(
62 'embedpress_blocks-cgb-block-js', // Handle.
63 EMBEDPRESS_GUTENBERG_DIR_URL . '/dist/blocks.build.js', // Block.build.js: We register the block here. Built with Webpack.
64 array('wp-blocks', 'wp-i18n', 'wp-element', 'wp-editor', 'wp-components', 'embedpress-pdfobject'), // Dependencies, defined above.
65 filemtime(EMBEDPRESS_GUTENBERG_DIR_PATH . 'dist/blocks.build.js'), // Version: File modification time.
66 true // Enqueue the script in the footer.
67 );
68 $wistia_labels = array(
69 'watch_from_beginning' => __('Watch from the beginning', 'embedpress'),
70 'skip_to_where_you_left_off' => __('Skip to where you left off', 'embedpress'),
71 'you_have_watched_it_before' => __('It looks like you\'ve watched<br />part of this video before!', 'embedpress'),
72 );
73 $elements = (array) get_option(EMBEDPRESS_PLG_NAME . ":elements", []);
74 $active_blocks = isset($elements['gutenberg']) ? (array) $elements['gutenberg'] : [];
75
76 $wistia_labels = json_encode($wistia_labels);
77 $wistia_options = null;
78 if (function_exists('embedpress_wisita_pro_get_options')) :
79 $wistia_options = embedpress_wisita_pro_get_options();
80 endif;
81 $pars_url = wp_parse_url(get_site_url());
82 $documents_cta_options = (array) get_option(EMBEDPRESS_PLG_NAME . ':document');
83 wp_localize_script('embedpress_blocks-cgb-block-js', 'embedpressObj', array(
84 'wistia_labels' => $wistia_labels,
85 'wisita_options' => $wistia_options,
86 'embedpress_powered_by' => apply_filters('embedpress_document_block_powered_by', true),
87 'embedpress_pro' => defined('EMBEDPRESS_PRO_PLUGIN_FILE'),
88 'twitch_host' => !empty($pars_url['host']) ? $pars_url['host'] : '',
89 'site_url' => site_url(),
90 'active_blocks' => $active_blocks,
91 'document_cta' => $documents_cta_options,
92 'pdf_renderer' => Helper::get_pdf_renderer(),
93 'is_pro_plugin_active' => defined('EMBEDPRESS_SL_ITEM_SLUG'),
94 ));
95
96 // Styles.
97 wp_enqueue_style(
98 'embedpress_blocks-cgb-block-editor-css', // Handle.
99 EMBEDPRESS_GUTENBERG_DIR_URL . 'dist/blocks.editor.build.css', // Block editor CSS.
100 array('wp-edit-blocks'), // Dependency to include the CSS after it.
101 filemtime(EMBEDPRESS_GUTENBERG_DIR_PATH . 'dist/blocks.editor.build.css') // Version: File modification time.
102 );
103 }
104
105 // Hook: Editor assets.
106 add_action('enqueue_block_editor_assets', 'embedpress_blocks_cgb_editor_assets');
107
108
109 function embedpress_block_category($categories, $post)
110 {
111 return array_merge(
112 $categories,
113 array(
114 array(
115 'slug' => 'embedpress',
116 'title' => 'EmbedPress',
117 'icon' => '',
118 ),
119 )
120 );
121 }
122 $wp_version = get_bloginfo('version', 'display');
123 if (version_compare($wp_version, '5.8', '>=')) {
124 add_filter('block_categories_all', 'embedpress_block_category', 10, 2);
125 } else {
126 add_filter('block_categories', 'embedpress_block_category', 10, 2);
127 }
128
129
130
131
132 foreach (glob(EMBEDPRESS_GUTENBERG_DIR_PATH . 'block-backend/*.php') as $block_logic) {
133 require_once $block_logic;
134 }
135
136 /**
137 * Registers the embedpress gutneberg block on server.
138 */
139
140 function embedpress_gutenberg_register_all_block()
141 {
142 if (function_exists('register_block_type')) :
143
144 $elements = (array) get_option(EMBEDPRESS_PLG_NAME . ":elements", []);
145 $g_blocks = isset($elements['gutenberg']) ? (array) $elements['gutenberg'] : [];
146 $blocks_to_registers = ['twitch-block', 'google-slides-block', 'google-sheets-block', 'google-maps-block', 'google-forms-block', 'google-drawings-block', 'google-docs-block', 'embedpress', 'embedpress-pdf', 'embedpress-calendar', 'document'];
147
148 foreach ($blocks_to_registers as $blocks_to_register) {
149 if (!empty($g_blocks[$blocks_to_register])) {
150 if ('embedpress' === $blocks_to_register) {
151 register_block_type('embedpress/embedpress', [
152 'render_callback' => 'embedpress_render_block',
153 'attributes' => array(
154 'height' => [
155 'type' => 'string',
156 'default' => '450'
157 ],
158 'width' => [
159 'type' => 'string',
160 'default' => '600'
161 ],
162 ),
163 ]);
164 } elseif ('embedpress-pdf' === $blocks_to_register) {
165 register_block_type('embedpress/embedpress-pdf', [
166 'attributes' => array(
167 'powered_by' => [
168 'type' => 'boolean',
169 'default' => true
170 ],
171 'presentation' => [
172 'type' => "boolean",
173 'default' => true,
174 ],
175 'position' => [
176 'type' => "string",
177 'default' => 'top',
178 ],
179
180 'print' => [
181 'type' => "boolean",
182 'default' => true,
183 ],
184
185 'download' => [
186 'type' => "boolean",
187 'default' => true,
188 ],
189 'open' => [
190 'type' => "boolean",
191 'default' => true,
192 ],
193 'copy_text' => [
194 'type' => "boolean",
195 'default' => true,
196 ],
197 'toolbar' => [
198 'type' => "boolean",
199 'default' => true,
200 ],
201 'doc_details' => [
202 'type' => "boolean",
203 'default' => true,
204 ],
205 'doc_rotation' => [
206 'type' => "boolean",
207 'default' => true,
208 ],
209 ),
210 'render_callback' => 'embedpress_pdf_render_block',
211 ]);
212 } elseif ('embedpress-calendar' === $blocks_to_register) {
213 register_block_type('embedpress/embedpress-calendar', [
214 'render_callback' => 'embedpress_calendar_render_block',
215 ]);
216 } else {
217 register_block_type('embedpress/' . $blocks_to_register);
218 }
219 } else {
220
221 if (WP_Block_Type_Registry::get_instance()->is_registered('embedpress/' . $blocks_to_register)) {
222 unregister_block_type('embedpress/' . $blocks_to_register);
223 }
224 }
225 }
226
227 endif;
228 }
229
230 add_action('init', 'embedpress_gutenberg_register_all_block');
231
232 function embedpress_pdf_render_block($attributes)
233 {
234
235 if (!empty($attributes['href'])) {
236 $renderer = Helper::get_pdf_renderer();
237 $pdf_url = $attributes['href'];
238 $id = !empty($attributes['id']) ? $attributes['id'] : 'embedpress-pdf-' . rand(100, 10000);
239 $width = !empty($attributes['width']) ? $attributes['width'] . 'px' : '600px';
240 $height = !empty($attributes['height']) ? $attributes['height'] . 'px' : '600px';
241 $gen_settings = get_option(EMBEDPRESS_PLG_NAME);
242
243 $powered_by = isset($gen_settings['embedpress_document_powered_by']) && 'yes' === $gen_settings['embedpress_document_powered_by'];
244 if (isset($attributes['powered_by'])) {
245 $powered_by = $attributes['powered_by'];
246 }
247
248 $src = $renderer . ((strpos($renderer, '?') == false) ? '?' : '&') . 'file=' . $attributes['href'];
249 $hash = md5($id);
250 $aligns = [
251 'left' => 'ep-alignleft',
252 'right' => 'ep-alignright',
253 'center' => 'ep-aligncenter',
254 'wide' => 'ep-alignwide',
255 'full' => 'ep-alignfull'
256 ];
257 $alignment = isset($attributes['align']) && isset($aligns[$attributes['align']]) ? $aligns[$attributes['align']] : '';
258 $dimension = "width:$width;height:$height";
259 ob_start();
260 ?>
261 <div class="embedpress-document-embed embedpress-pdf ose-document ep-doc-<?php echo esc_attr($hash) . ' ' . esc_attr($alignment) ?>">
262 <div class="embedpress-inner-iframe">
263 <iframe class="embedpress-embed-document-pdf <?php echo esc_attr($id); ?>" style="<?php echo esc_attr($dimension); ?>; max-width:100%; display: inline-block" src="<?php echo esc_attr($src); ?>" frameborder="0"></iframe>
264
265 <?php do_action('embedpress_pdf_gutenberg_after_embed', $hash, 'pdf', $attributes, $pdf_url); ?>
266
267 <?php
268 if ($powered_by) {
269 printf('<p class="embedpress-el-powered">%s</p>', __('Powered By EmbedPress', 'embedpress'));
270 } ?>
271 </div>
272
273 </div>
274 <?php ep_pdf_block_frontend_style($attributes, 'pdf');
275
276 return ob_get_clean();
277 }
278 }
279
280 function embedpress_calendar_render_block($attributes)
281 {
282
283 $id = !empty($attributes['id']) ? $attributes['id'] : 'embedpress-calendar-' . rand(100, 10000);
284 $url = !empty($attributes['url']) ? $attributes['url'] : '';
285 $is_private = isset($attributes['is_public']);
286 $hash = md5($id);
287 $width = !empty($attributes['width']) ? $attributes['width'] . 'px' : '600px';
288 $height = !empty($attributes['height']) ? $attributes['height'] . 'px' : '600px';
289 $gen_settings = get_option(EMBEDPRESS_PLG_NAME);
290 $powered_by = isset($gen_settings['embedpress_document_powered_by']) && 'yes' === $gen_settings['embedpress_document_powered_by'];
291 if (isset($attributes['powered_by'])) {
292 $powered_by = $attributes['powered_by'];
293 }
294
295 $aligns = [
296 'left' => 'alignleft',
297 'right' => 'alignright',
298 'wide' => 'alignwide',
299 'full' => 'alignfull'
300 ];
301 $alignment = isset($attributes['align']) && isset($aligns[$attributes['align']]) ? $aligns[$attributes['align']] : '';
302 $dimension = "width:$width;height:$height";
303 ob_start();
304 ?>
305 <div class="embedpress-calendar-gutenberg embedpress-calendar ose-calendar <?php echo esc_attr($alignment) ?>" style="<?php echo esc_attr($dimension); ?>; max-width:100%;">
306
307 <?php
308 if (!empty($url) && !$is_private) {
309 ?>
310 <iframe style="<?php echo esc_attr($dimension); ?>; max-width:100%; display: inline-block" src="<?php echo esc_attr($url); ?>"></iframe>
311 <?php } else {
312 if (is_embedpress_pro_active()) {
313 echo Embedpress_Google_Helper::shortcode();
314 }
315 } ?>
316 <?php do_action('embedpress_calendar_gutenberg_after_embed', $hash, 'calendar', $attributes); ?>
317
318 <?php
319 if ($powered_by) {
320 printf('<p class="embedpress-el-powered" style="width:'.esc_attr( $width ).'" >%s</p>', __('Powered By EmbedPress', 'embedpress'));
321 } ?>
322
323 </div>
324 <?php
325 return ob_get_clean();
326 }
327
328
329 /**
330 * FrontEnd Style for PDF Block
331 */
332 function ep_pdf_block_frontend_style($attributes, $embed)
333 {
334 if ($embed === 'pdf') : ?>
335 <script>
336 {
337 let x = 0;
338
339 const setThemeMode = (frm, themeMode) => {
340 const htmlEL = frm.getElementsByTagName("html")[0];
341 if(htmlEL){
342 htmlEL.setAttribute('ep-data-theme', themeMode);
343 }
344 }
345
346 const setEmbedInterval = setInterval(() => {
347 x++;
348 if (document.querySelector('<?php echo esc_html('.' . $attributes['id']); ?>')) {
349 const isDisplay = (selectorName) => {
350 if (!selectorName) {
351 selectorName = 'none';
352 } else {
353 selectorName = 'block';
354 }
355
356 return selectorName;
357 }
358
359 const frm = document.querySelector('<?php echo esc_html('.' . $attributes['id']); ?>').contentWindow.document;
360 const otherhead = frm.getElementsByTagName("head")[0];
361 const style = frm.createElement("style");
362 style.setAttribute('id', 'EBiframeStyleID');
363
364 let themeMode = '<?php echo esc_html(!empty($attributes['themeMode']) ? $attributes['themeMode'] : 'default'); ?>';
365 let toolbar = <?php echo esc_html($attributes['toolbar'] ? $attributes['toolbar'] : 0); ?>;
366 let presentation = <?php echo esc_html($attributes['presentation'] ? $attributes['presentation'] : 0); ?>;
367 let download = <?php echo esc_html($attributes['download'] ? $attributes['download'] : 0); ?>;
368 let open = <?php echo esc_html($attributes['open'] ? $attributes['open'] : 0); ?>;
369 let copy_text = <?php echo esc_html($attributes['copy_text'] ? $attributes['copy_text'] : 0); ?>;
370 let doc_details = <?php echo esc_html($attributes['doc_details'] ? $attributes['doc_details'] : 0); ?>;
371 let doc_rotation = <?php echo esc_html($attributes['doc_rotation'] ? $attributes['doc_rotation'] : 0); ?>;
372 let toolbar_position = '<?php echo esc_html($attributes['position'] ? $attributes['position'] : 0); ?>';
373
374 toolbar = isDisplay(toolbar);
375 presentation = isDisplay(presentation);
376 download = isDisplay(download);
377 open = isDisplay(open);
378 copy_text = isDisplay(copy_text);
379
380
381 <?php if(!defined('EMBEDPRESS_PRO_PLUGIN_FILE')): ?>
382 download = 'block';
383 copy_text = 'block';
384 <?php endif; ?>
385
386 if (copy_text === 'block') {
387 copy_text = 'all';
388 }
389
390 doc_details = isDisplay(doc_details);
391 doc_rotation = isDisplay(doc_rotation);
392
393 if (toolbar_position == 'top') {
394 toolbar_position = 'top:0;bottom:auto;';
395 settingsPos = '';
396 } else {
397 toolbar_position = 'bottom:0;top:auto;'
398 settingsPos = `
399 .findbar, .secondaryToolbar {
400 top: auto;bottom: 32px;
401 }
402 .doorHangerRight:after{
403 transform: rotate(180deg);
404 bottom: -16px;
405 }
406 .doorHangerRight:before {
407 transform: rotate(180deg);
408 bottom: -18px;
409 }
410
411 .findbar.doorHanger:before {
412 bottom: -18px;
413 transform: rotate(180deg);
414 }
415 .findbar.doorHanger:after {
416 bottom: -16px;
417 transform: rotate(180deg);
418 }
419 `;
420 }
421 style.textContent = `
422 .toolbar{
423 display: ${toolbar}!important;
424 position: absolute;
425 ${toolbar_position}
426
427 }
428 #secondaryToolbar{
429 display: ${toolbar};
430 }
431 #secondaryPresentationMode, #toolbarViewerRight #presentationMode{
432 display: ${presentation}!important;
433 }
434 #secondaryOpenFile, #toolbarViewerRight #openFile{
435 display: none!important;
436 }
437 #secondaryDownload, #secondaryPrint, #toolbarViewerRight #print, #toolbarViewerRight #download{
438 display: ${download}!important;
439 }
440
441 #pageRotateCw{
442 display: ${doc_rotation}!important;
443 }
444 #pageRotateCcw{
445 display: ${doc_rotation}!important;
446 }
447 #documentProperties{
448 display: ${doc_details}!important;
449 }
450 .textLayer{
451 user-select: ${copy_text}!important;
452 }
453 ${settingsPos}
454 `;
455 if(frm){
456 setThemeMode(frm, themeMode);
457 }
458 if (otherhead) {
459 if(frm.getElementById("EBiframeStyleID")){
460 frm.getElementById("EBiframeStyleID").remove();
461 }
462 otherhead.appendChild(style);
463 clearInterval(setEmbedInterval);
464 }
465 }
466 if (x > 50) {
467 clearInterval(setEmbedInterval);
468 }
469 }, 100);
470 }
471
472
473 </script>
474 <?php
475 endif;
476 }
477