PluginProbe ʕ •ᴥ•ʔ
EmbedPress – PDF Embedder, Embed PDF viewer, YouTube Videos, 3D FlipBook, Social feeds & more / 3.5.2
EmbedPress – PDF Embedder, Embed PDF viewer, YouTube Videos, 3D FlipBook, Social feeds & more v3.5.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
460 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' => 'alignleft',
252 'right' => 'alignright',
253 'wide' => 'alignwide',
254 'full' => 'alignfull'
255 ];
256 $alignment = isset($attributes['align']) && isset($aligns[$attributes['align']]) ? $aligns[$attributes['align']] : '';
257 $dimension = "width:$width;height:$height";
258 ob_start();
259 ?>
260 <div class="embedpress-document-embed embedpress-pdf ose-document ep-doc-<?php echo esc_attr($hash) . ' ' . esc_attr($alignment) ?>">
261 <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>
262
263 <?php do_action('embedpress_pdf_gutenberg_after_embed', $hash, 'pdf', $attributes, $pdf_url); ?>
264
265 <?php
266 if ($powered_by) {
267 printf('<p class="embedpress-el-powered">%s</p>', __('Powered By EmbedPress', 'embedpress'));
268 } ?>
269
270 </div>
271 <?php ep_pdf_block_frontend_style($attributes, 'pdf');
272
273 return ob_get_clean();
274 }
275 }
276
277 function embedpress_calendar_render_block($attributes)
278 {
279
280 $id = !empty($attributes['id']) ? $attributes['id'] : 'embedpress-calendar-' . rand(100, 10000);
281 $url = !empty($attributes['url']) ? $attributes['url'] : '';
282 $is_private = isset($attributes['is_public']);
283 $hash = md5($id);
284 $width = !empty($attributes['width']) ? $attributes['width'] . 'px' : '600px';
285 $height = !empty($attributes['height']) ? $attributes['height'] . 'px' : '600px';
286 $gen_settings = get_option(EMBEDPRESS_PLG_NAME);
287 $powered_by = isset($gen_settings['embedpress_document_powered_by']) && 'yes' === $gen_settings['embedpress_document_powered_by'];
288 if (isset($attributes['powered_by'])) {
289 $powered_by = $attributes['powered_by'];
290 }
291
292 $aligns = [
293 'left' => 'alignleft',
294 'right' => 'alignright',
295 'wide' => 'alignwide',
296 'full' => 'alignfull'
297 ];
298 $alignment = isset($attributes['align']) && isset($aligns[$attributes['align']]) ? $aligns[$attributes['align']] : '';
299 $dimension = "width:$width;height:$height";
300 ob_start();
301 ?>
302 <div class="embedpress-calendar-gutenberg embedpress-calendar ose-calendar <?php echo esc_attr($alignment) ?>" style="<?php echo esc_attr($dimension); ?>; max-width:100%;">
303
304 <?php
305 if (!empty($url) && !$is_private) {
306 ?>
307 <iframe style="<?php echo esc_attr($dimension); ?>; max-width:100%; display: inline-block" src="<?php echo esc_attr($url); ?>"></iframe>
308 <?php } else {
309 if (is_embedpress_pro_active()) {
310 echo Embedpress_Google_Helper::shortcode();
311 }
312 } ?>
313 <?php do_action('embedpress_calendar_gutenberg_after_embed', $hash, 'calendar', $attributes); ?>
314
315 <?php
316 if ($powered_by) {
317 printf('<p class="embedpress-el-powered">%s</p>', __('Powered By EmbedPress', 'embedpress'));
318 } ?>
319
320 </div>
321 <?php
322 return ob_get_clean();
323 }
324
325
326 /**
327 * FrontEnd Style for PDF Block
328 */
329 function ep_pdf_block_frontend_style($attributes, $embed)
330 {
331 if ($embed === 'pdf') : ?>
332 <script>
333 {
334 let x = 0;
335 const setEmbedInterval = setInterval(() => {
336 x++;
337 if (document.querySelector('<?php echo esc_html('.' . $attributes['id']); ?>')) {
338 const isDisplay = (selectorName) => {
339 if (!selectorName) {
340 selectorName = 'none';
341 } else {
342 selectorName = 'block';
343 }
344
345 return selectorName;
346 }
347
348 const frm = document.querySelector('<?php echo esc_html('.' . $attributes['id']); ?>').contentWindow.document;
349 const otherhead = frm.getElementsByTagName("head")[0];
350 const style = frm.createElement("style");
351 style.setAttribute('id', 'EBiframeStyleID');
352
353 let toolbar = <?php echo esc_html($attributes['toolbar'] ? $attributes['toolbar'] : 0); ?>;
354 let presentation = <?php echo esc_html($attributes['presentation'] ? $attributes['presentation'] : 0); ?>;
355 let download = <?php echo esc_html($attributes['download'] ? $attributes['download'] : 0); ?>;
356 let open = <?php echo esc_html($attributes['open'] ? $attributes['open'] : 0); ?>;
357 let copy_text = <?php echo esc_html($attributes['copy_text'] ? $attributes['copy_text'] : 0); ?>;
358 let doc_details = <?php echo esc_html($attributes['doc_details'] ? $attributes['doc_details'] : 0); ?>;
359 let doc_rotation = <?php echo esc_html($attributes['doc_rotation'] ? $attributes['doc_rotation'] : 0); ?>;
360 let toolbar_position = '<?php echo esc_html($attributes['position'] ? $attributes['position'] : 0); ?>';
361
362 toolbar = isDisplay(toolbar);
363 presentation = isDisplay(presentation);
364 download = isDisplay(download);
365 open = isDisplay(open);
366 copy_text = isDisplay(copy_text);
367
368
369 <?php if(!defined('EMBEDPRESS_PRO_PLUGIN_FILE')): ?>
370 download = 'block';
371 copy_text = 'block';
372 <?php endif; ?>
373
374 if (copy_text === 'block') {
375 copy_text = 'all';
376 }
377
378 doc_details = isDisplay(doc_details);
379 doc_rotation = isDisplay(doc_rotation);
380
381 if (toolbar_position == 'top') {
382 toolbar_position = 'top:0;bottom:auto;';
383 settingsPos = '';
384 } else {
385 toolbar_position = 'bottom:0;top:auto;'
386 settingsPos = `
387 .findbar, .secondaryToolbar {
388 top: auto;bottom: 32px;
389 }
390 .doorHangerRight:after{
391 transform: rotate(180deg);
392 bottom: -16px;
393 }
394 .doorHangerRight:before {
395 transform: rotate(180deg);
396 bottom: -18px;
397 }
398
399 .findbar.doorHanger:before {
400 bottom: -18px;
401 transform: rotate(180deg);
402 }
403 .findbar.doorHanger:after {
404 bottom: -16px;
405 transform: rotate(180deg);
406 }
407 `;
408 }
409 style.textContent = `
410 .toolbar{
411 display: ${toolbar}!important;
412 position: absolute;
413 ${toolbar_position}
414
415 }
416 #secondaryToolbar{
417 display: ${toolbar};
418 }
419 #secondaryPresentationMode, #toolbarViewerRight #presentationMode{
420 display: ${presentation}!important;
421 }
422 #secondaryOpenFile, #toolbarViewerRight #openFile{
423 display: none!important;
424 }
425 #secondaryDownload, #secondaryPrint, #toolbarViewerRight #print, #toolbarViewerRight #download{
426 display: ${download}!important;
427 }
428
429 #pageRotateCw{
430 display: ${doc_rotation}!important;
431 }
432 #pageRotateCcw{
433 display: ${doc_rotation}!important;
434 }
435 #documentProperties{
436 display: ${doc_details}!important;
437 }
438 .textLayer{
439 user-select: ${copy_text}!important;
440 }
441 ${settingsPos}
442 `;
443 if (otherhead) {
444 if(frm.getElementById("EBiframeStyleID")){
445 frm.getElementById("EBiframeStyleID").remove();
446 }
447 otherhead.appendChild(style);
448 clearInterval(setEmbedInterval);
449 }
450 }
451 if (x > 50) {
452 clearInterval(setEmbedInterval);
453 }
454 }, 100);
455 }
456 </script>
457 <?php
458 endif;
459 }
460