PluginProbe ʕ •ᴥ•ʔ
EmbedPress – PDF Embedder, 3D PDF FlipBook, Google Reviews, YouTube Videos, Upload & Embed PDF documents / 4.5.4
EmbedPress – PDF Embedder, 3D PDF FlipBook, Google Reviews, YouTube Videos, Upload & Embed PDF documents v4.5.4
4.6.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 / Elementor / Widgets / Embedpress_Document.php
embedpress / EmbedPress / Elementor / Widgets Last commit date
Embedpress_Calendar.php 1 month ago Embedpress_Document.php 1 month ago Embedpress_Elementor.php 2 months ago Embedpress_Pdf.php 1 month ago Embedpress_Pdf_Gallery.php 2 months ago
Embedpress_Document.php
954 lines
1 <?php
2
3 namespace EmbedPress\Elementor\Widgets;
4
5
6 use \Elementor\Controls_Manager as Controls_Manager;
7 use \Elementor\Modules\DynamicTags\Module as TagsModule;
8 use \Elementor\Widget_Base as Widget_Base;
9 use \Elementor\Plugin;
10 use EmbedPress\Includes\Classes\DynamicFieldResolver;
11 use EmbedPress\Includes\Traits\Branding;
12 use EmbedPress\Includes\Classes\Helper;
13
14 ( defined( 'ABSPATH' ) ) or die( "No direct script access allowed." );
15
16 class Embedpress_Document extends Widget_Base
17 {
18 use Branding;
19 protected $pro_class = '';
20 protected $pro_text = '';
21 public function get_name()
22 {
23 return 'embedpres_document';
24 }
25
26 public function get_title()
27 {
28 return esc_html__( 'EmbedPress Document', 'embedpress' );
29 }
30
31 public function get_categories()
32 {
33 return ['embedpress'];
34 }
35
36 public function get_custom_help_url()
37 {
38 return 'https://embedpress.com/documentation';
39 }
40
41 public function get_icon()
42 {
43 return 'icon-document';
44 }
45
46 public function get_style_depends()
47 {
48 return [
49 'embedpress-elementor-css',
50 'embedpress-css'
51 ];
52 }
53
54 public function get_script_depends()
55 {
56
57 $handler_keys = get_option('enabled_elementor_scripts', []);
58
59 $handles = [];
60
61 $handles[] = 'embedpress-pdfobject';
62 $handles[] = 'embedpress-front';
63
64 if (isset($handler_keys['enabled_ads']) && $handler_keys['enabled_ads'] === 'yes') {
65 $handles[] = 'embedpress-ads';
66 }
67 if (isset($handler_keys['enabled_docs_custom_viewer']) && $handler_keys['enabled_docs_custom_viewer'] === 'yes') {
68 $handles[] = 'embedpress-documents-viewer';
69 }
70
71 return $handles;
72 }
73
74 /**
75 * Get widget keywords.
76 *
77 * Retrieve the list of keywords the widget belongs to.
78 *
79 * @return array Widget keywords.
80 * @since 2.5.5
81 * @access public
82 *
83 */
84 public function get_keywords()
85 {
86 return ['embedpress', 'pdf', 'doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx', 'embedpress-document'];
87 }
88
89 /**
90 * Performance Settings Section
91 */
92 public function init_performance_controls()
93 {
94 // Get global lazy load setting
95 $g_settings = get_option(EMBEDPRESS_PLG_NAME, []);
96 $lazy_load_default = isset($g_settings['g_lazyload']) && $g_settings['g_lazyload'] == 1 ? 'yes' : '';
97
98 $this->start_controls_section(
99 'embedpress_performance_section',
100 [
101 'label' => __('Performance', 'embedpress'),
102 ]
103 );
104
105 $this->add_control(
106 'enable_lazy_load',
107 [
108 'label' => sprintf(__('Enable Lazy Loading %s', 'embedpress'), $this->pro_text),
109 'type' => \Elementor\Controls_Manager::SWITCHER,
110 'label_on' => __('Yes', 'embedpress'),
111 'label_off' => __('No', 'embedpress'),
112 'return_value' => 'yes',
113 'default' => $lazy_load_default,
114 'description' => __('Load iframe only when it enters the viewport for better performance', 'embedpress'),
115 'classes' => $this->pro_class,
116 ]
117 );
118
119 $this->end_controls_section();
120 }
121
122 protected function register_controls()
123 {
124 $class = 'embedpress-pro-control not-active';
125 $text = '<sup class="embedpress-pro-label" style="color:red">' . __('Pro', 'embedpress') . '</sup>';
126 $this->pro_class = apply_filters('embedpress/pro_class', $class);
127 $this->pro_text = apply_filters('embedpress/pro_text', $text);
128
129 /**
130 * EmbedPress Content Settings
131 */
132 $this->start_controls_section(
133 'embedpress_document_content_settings',
134 [
135 'label' => esc_html__( 'General', 'embedpress' ),
136 ]
137 );
138
139 $this->add_control(
140 'embedpress_document_type',
141 [
142 'label' => __( 'Document Type', 'embedpress' ),
143 'type' => Controls_Manager::SELECT,
144 'default' => 'file',
145 'options' => [
146 'file' => __( 'File', 'embedpress' ),
147 'url' => __( 'URL', 'embedpress' )
148 ],
149 ]
150 );
151 $this->add_control(
152 'embedpress_document_Uploader',
153 [
154
155 'label' => __( 'Upload File', 'embedpress' ),
156 'type' => Controls_Manager::MEDIA,
157 'dynamic' => [
158 'active' => true,
159 'categories' => [
160 TagsModule::MEDIA_CATEGORY,
161 ],
162 ],
163 'media_type' => [
164 'application/pdf',
165 'application/msword',
166 'application/vnd.ms-powerpoint',
167 'application/vnd.ms-excel',
168 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
169 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
170 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
171 'application/vnd.openxmlformats-officedocument.presentationml.slideshow' // Added PPSX MIME type
172
173 ],
174 'description' => __( 'Upload a file or pick one from your media library for embed. Supported File Type: PDF, DOC/DOCX, PPT/PPTX, XLS/XLSX etc.',
175 'embedpress' ),
176 'condition' => [
177 'embedpress_document_type' => 'file'
178 ],
179 ]
180 );
181
182 $this->add_control(
183 'embedpress_document_file_link',
184 [
185 'label' => __( 'URL', 'embedpress' ),
186 'type' => Controls_Manager::URL,
187 'placeholder' => __( 'https://your-link.com/file.pdf', 'embedpress' ),
188 'show_external' => false,
189 'dynamic' => [
190 'active' => true,
191 ],
192 'default' => [
193 'url' => ''
194 ],
195 'condition' => [
196 'embedpress_document_type' => 'url'
197 ],
198 ]
199 );
200
201 $this->add_responsive_control(
202 'embedpress_elementor_document_width',
203 [
204 'type' => \Elementor\Controls_Manager::SLIDER,
205 'label' => esc_html__( 'Width', 'embedpress' ),
206 'range' => [
207 'px' => [
208 'min' => 1,
209 'max' => 1000,
210 ],
211 ],
212 // 'devices' => [ 'desktop', 'tablet', 'mobile' ],
213 'default' => [
214 'unit' => 'px',
215 'size' => !empty($value = intval(Helper::get_options_value('enableEmbedResizeWidth'))) ? $value : 600,
216 ],
217 // 'desktop_default' => [
218 // 'unit' => 'px',
219 // 'size' => 600,
220 // ],
221 // 'tablet_default' => [
222 // 'size' => 400,
223 // 'unit' => 'px',
224 // ],
225 // 'mobile_default' => [
226 // 'size' => 300,
227 // 'unit' => 'px',
228 // ],
229 'selectors' => [
230 '{{WRAPPER}} .embedpress-document-embed iframe' => 'width: {{SIZE}}{{UNIT}} !important; max-width: 100%; background-color: #fff',
231 '{{WRAPPER}} .embedpress-document-embed .pdfobject-container' => 'width: {{SIZE}}{{UNIT}} !important; max-width: 100%',
232 '{{WRAPPER}} .embedpress-document-embed' => 'width: {{SIZE}}{{UNIT}} !important; max-width: 100%',
233 ],
234 ]
235 );
236 $this->add_responsive_control(
237 'embedpress_elementor_document_height',
238 [
239 'type' => \Elementor\Controls_Manager::SLIDER,
240 'label' => esc_html__( 'Height', 'embedpress' ),
241 'range' => [
242 'px' => [
243 'min' => 1,
244 'max' => 1500,
245 ],
246 ],
247 // 'devices' => [ 'desktop', 'tablet', 'mobile' ],
248 'default' => [
249 'unit' => 'px',
250 'size' => !empty($value = intval(Helper::get_options_value('enableEmbedResizeHeight'))) ? $value : 600,
251 ],
252 // 'desktop_default' => [
253 // 'unit' => 'px',
254 // 'size' => 600,
255 // ],
256 // 'tablet_default' => [
257 // 'size' => 400,
258 // 'unit' => 'px',
259 // ],
260 // 'mobile_default' => [
261 // 'size' => 300,
262 // 'unit' => 'px',
263 // ],
264 'selectors' => [
265 '{{WRAPPER}} .embedpress-document-embed iframe' => 'height: {{SIZE}}{{UNIT}}!important;',
266 '{{WRAPPER}} .embedpress-document-embed .pdfobject-container' => 'height: {{SIZE}}{{UNIT}};',
267 '{{WRAPPER}} .embedpress-document-embed ' => 'max-height: {{SIZE}}{{UNIT}};',
268 ],
269 ]
270 );
271
272 $this->add_responsive_control(
273 'embedpress_elementor_document_align',
274 [
275 'label' => __( 'Alignment', 'embedpress' ),
276 'type' => Controls_Manager::CHOOSE,
277 'options' => [
278 'left' => [
279 'title' => __( 'Left', 'embedpress' ),
280 'icon' => 'eicon-text-align-left',
281 ],
282 'center' => [
283 'title' => __( 'Center', 'embedpress' ),
284 'icon' => 'eicon-text-align-center',
285 ],
286 'right' => [
287 'title' => __( 'Right', 'embedpress' ),
288 'icon' => 'eicon-text-align-right',
289 ]
290 ],
291 'prefix_class' => 'elementor%s-align-',
292 'default' => '',
293 ]
294 );
295
296 // Get global powered_by setting
297 $g_settings = get_option(EMBEDPRESS_PLG_NAME, []);
298 $powered_by_default = isset($g_settings['embedpress_document_powered_by']) && $g_settings['embedpress_document_powered_by'] === 'yes' ? 'yes' : 'no';
299
300 $this->add_control(
301 'embedpress_document_powered_by',
302 [
303 'label' => __( 'Powered By', 'embedpress' ),
304 'type' => Controls_Manager::SWITCHER,
305 'label_on' => __( 'Show', 'embedpress' ),
306 'label_off' => __( 'Hide', 'embedpress' ),
307 'return_value' => 'yes',
308 'default' => apply_filters( 'embedpress_document_powered_by_control', $powered_by_default ),
309 ]
310 );
311
312 $this->init_branding_controls( 'document');
313
314
315
316 $this->end_controls_section();
317
318 /**
319 * EmbedPress Document control settings
320 */
321
322 $this->start_controls_section(
323 'embedpress_doc_content_settings',
324 [
325 'label' => esc_html__('Controls', 'embedpress'),
326 ]
327 );
328
329 $this->add_control(
330 'important_note',
331 [
332 'type' => \Elementor\Controls_Manager::RAW_HTML,
333 'raw' => esc_html__( 'Download feature is available when link has the document extension at the end.', 'embedpress' ),
334 'content_classes' => 'elementor-panel-alert elementor-panel-alert-info',
335 'condition' => [
336 'embedpress_document_type' => 'url',
337 ],
338 ]
339 );
340
341 $this->add_control(
342 'important_note_2',
343 [
344 'type' => \Elementor\Controls_Manager::RAW_HTML,
345 'raw' => esc_html__( 'Toolbar and additional feature options become accessible upon selecting the Custom Viewer mode.', 'embedpress' ),
346 'content_classes' => 'elementor-panel-alert elementor-panel-alert-info',
347 'condition' => [
348 'embedpress_document_type' => 'file',
349 'embedpress_document_viewer' => 'office',
350 ],
351 ]
352 );
353
354
355 $this->add_control(
356 'embedpress_document_viewer',
357 [
358 'label' => __('Viewer', 'embedpress'),
359 'type' => Controls_Manager::SELECT,
360 'default' => 'custom',
361 'options' => [
362 'custom' => __('Custom', 'embedpress'),
363 'office' => __('MS Office', 'embedpress'),
364 'google' => __('Google', 'embedpress'),
365 ],
366 ]
367 );
368
369 $this->add_control(
370 'embedpress_theme_mode',
371 [
372 'label' => __('Theme', 'embedpress'),
373 'type' => Controls_Manager::SELECT,
374 'default' => 'default',
375 'options' => [
376 'default' => __('System Default', 'embedpress'),
377 'dark' => __('Dark', 'embedpress'),
378 'light' => __('Light', 'embedpress'),
379 'custom' => __('Custom', 'embedpress')
380 ],
381 'condition' => [
382 'embedpress_document_viewer' => 'custom',
383 ],
384
385 ]
386 );
387
388 $this->add_control(
389 'embedpress_doc_custom_color',
390 [
391 'label' => esc_html__( 'Color', 'embedpress' ),
392 'type' => \Elementor\Controls_Manager::COLOR,
393 'condition' => [
394 'embedpress_theme_mode' => 'custom',
395 'embedpress_document_viewer' => 'custom',
396 ],
397 ]
398 );
399
400 $this->add_control(
401 'doc_toolbar',
402 [
403 'label' => sprintf(__('Toolbar %s', 'embedpress'), $this->pro_text),
404 'type' => Controls_Manager::SWITCHER,
405 'label_on' => __('Show', 'embedpress'),
406 'label_off' => __('Hide', 'embedpress'),
407 'return_value' => 'yes',
408 'default' => 'yes',
409 'classes' => $this->pro_class,
410 'condition' => [
411 'embedpress_document_viewer' => 'custom',
412 ],
413 ]
414 );
415
416
417 $this->add_control(
418 'doc_fullscreen_mode',
419 [
420 'label' => __('Fullscreen', 'embedpress'),
421 'type' => Controls_Manager::SWITCHER,
422 'label_on' => __('Show', 'embedpress'),
423 'label_off' => __('Hide', 'embedpress'),
424 'return_value' => 'yes',
425 'default' => 'yes',
426 'condition' => [
427 'doc_toolbar' => 'yes',
428 'embedpress_document_viewer' => 'custom',
429 ],
430 ]
431 );
432
433 $this->add_control(
434 'doc_print_download',
435 [
436 'label' => sprintf(__('Print/Download %s', 'embedpress'), $this->pro_text),
437 'type' => Controls_Manager::SWITCHER,
438 'label_on' => __('Show', 'embedpress'),
439 'label_off' => __('Hide', 'embedpress'),
440 'return_value' => 'yes',
441 'default' => 'yes',
442 'classes' => $this->pro_class,
443 'condition' => [
444 'doc_toolbar' => 'yes',
445 'embedpress_document_viewer' => 'custom',
446 ],
447 ]
448 );
449
450
451 $this->add_control(
452 'doc_draw',
453 [
454 'label' => __('Draw', 'embedpress'),
455 'type' => Controls_Manager::SWITCHER,
456 'label_on' => __('Show', 'embedpress'),
457 'label_off' => __('Hide', 'embedpress'),
458 'return_value' => 'yes',
459 'default' => 'yes',
460 'condition' => [
461 'doc_toolbar' => 'yes',
462 'embedpress_document_viewer' => 'custom',
463 ],
464 ]
465 );
466
467
468 $this->end_controls_section();
469
470 do_action( 'extend_elementor_controls', $this, '_doc_', $this->pro_text, $this->pro_class);
471
472 $this->init_performance_controls();
473
474
475 }
476
477 private function getParamData($settings)
478 {
479 $urlParamData = array(
480 'themeMode' => isset($settings['embedpress_theme_mode']) ? $settings['embedpress_theme_mode'] : 'default',
481 'toolbar' => !empty($settings['doc_toolbar']) ? 'true' : 'false',
482 'position' => 'top',
483 'presentation' => 'false',
484 'lazyLoad' => 'false',
485 'download' => defined('EMBEDPRESS_PRO_PLUGIN_VERSION') ? $settings['doc_print_download'] : 'true',
486 'copy_text' => 'true',
487 'add_text' => 'false',
488 'draw' => !empty($settings['doc_draw']) ? 'true' : 'false',
489 'add_image' => 'false',
490 'pdf_rotation' => 'false',
491 'pdf_details' => 'false',
492 'zoom_in' => 'true',
493 'zoom_out' => 'true',
494 'fit_view' => 'true',
495 'bookmark' => 'false',
496 'sound' => 'false',
497 'flipbook_toolbar_position' => 'bottom',
498 'selection_tool' => '0',
499 'scrolling' => '-1',
500 'spreads' => '-1',
501 'is_pro_active' => apply_filters('embedpress/is_allow_rander', false),
502 'watermark_text' => '',
503 'watermark_font_size' => '48',
504 'watermark_color' => '#000000',
505 'watermark_opacity' => '15',
506 'watermark_style' => 'center',
507 );
508
509 $custom_color = Helper::get_elementor_global_color($settings, 'embedpress_doc_custom_color');
510
511 if (isset($settings['embedpress_theme_mode']) && $settings['embedpress_theme_mode'] == 'custom') {
512 $urlParamData['customColor'] = $custom_color;
513 }
514
515 return "#key=" . base64_encode(mb_convert_encoding(http_build_query($urlParamData), "UTF-8"));
516 }
517
518 private function is_pdf( $url )
519 {
520 $arr = explode( '.', $url );
521 return end( $arr ) === 'pdf';
522 }
523
524 protected function render()
525 {
526 $settings = $this->get_settings();
527
528 Helper::get_enable_settings_data_for_scripts($settings);
529
530 $is_editor_view = Plugin::$instance->editor->is_edit_mode();
531 $client_id = esc_attr($this->get_id());
532 $pass_hash_key = md5($settings['embedpress_doc_lock_content_password']);
533 $url = esc_url($this->get_file_url());
534 $id = 'embedpress-pdf-' . esc_attr($this->get_id());
535
536 if ($settings['embedpress_document_type'] === 'url' && !empty($settings['__dynamic__']['embedpress_document_file_link'])) {
537 $resolved = DynamicFieldResolver::resolve_elementor_dynamic($settings['__dynamic__']['embedpress_document_file_link']);
538 if ($resolved !== '') {
539 $url = $resolved;
540 }
541 }
542 $hash_pass = hash('sha256', wp_salt(32) . md5($settings['embedpress_doc_lock_content_password']));
543
544 $dimension = '';
545 if (
546 empty($settings['embedpress_doc_lock_content']) &&
547 empty($settings['embedpress_doc_lock_content_password']) &&
548 isset($settings['embedpress_elementor_document_width']) &&
549 isset($settings['embedpress_elementor_document_height'])
550 ) {
551 $dimension = "width: " . esc_attr($settings['embedpress_elementor_document_width']['size']) . "px; height: " . esc_attr($settings['embedpress_elementor_document_height']['size']) . "px";
552 }
553
554 $content_locked_class = '';
555 if (!empty($settings['embedpress_doc_lock_content']) && !empty($settings['embedpress_doc_lock_content_password'])) {
556 $content_locked_class = 'ep-content-locked';
557 }
558
559 // Generate content ID for analytics tracking
560 $content_id = md5($url . 'document-elementor');
561
562 // Track Document widget usage for analytics
563 $this->track_document_widget_usage($settings, $url, $content_id);
564
565 $this->add_render_attribute('embedpres-pdf-render', [
566 'class' => ['embedpress-embed-document-pdf', $id],
567 'data-emid' => esc_attr($id),
568 'data-embedpress-content' => esc_attr($content_id),
569 'data-embed-type' => 'Document'
570 ]);
571
572 Helper::get_source_data(md5($this->get_id()) . '_eb_elementor', $url, 'elementor_source_data', 'elementor_temp_source_data');
573
574 $this->add_render_attribute('embedpress-document', [
575 'class' => ['embedpress-document-embed', 'ep-doc-' . md5($id), 'ose-document', $content_locked_class]
576 ]);
577
578 $embed_settings = [];
579 $embed_settings['customThumbnail'] = !empty($settings['embedpress_doc_content_share_custom_thumbnail']['url']) ? esc_url($settings['embedpress_doc_content_share_custom_thumbnail']['url']) : '';
580
581 $embed_settings['customTitle'] = !empty($settings['embedpress_doc_content_title']) ? sanitize_text_field($settings['embedpress_doc_content_title']) : sanitize_text_field(Helper::get_file_title($url));
582
583 $embed_settings['customDescription'] = !empty($settings['embedpress_doc_content_descripiton']) ? sanitize_text_field($settings['embedpress_doc_content_descripiton']) : sanitize_text_field(Helper::get_file_title($url));
584
585 $embed_settings['sharePosition'] = !empty($settings['embedpress_doc_content_share_position']) ? esc_attr($settings['embedpress_doc_content_share_position']) : 'right';
586
587 // Add social share platform settings
588 $embed_settings['shareFacebook'] = !empty($settings['embedpress_doc_share_facebook']) ? true : false;
589 $embed_settings['shareTwitter'] = !empty($settings['embedpress_doc_share_twitter']) ? true : false;
590 $embed_settings['sharePinterest'] = !empty($settings['embedpress_doc_share_pinterest']) ? true : false;
591 $embed_settings['shareLinkedin'] = !empty($settings['embedpress_doc_share_linkedin']) ? true : false;
592
593 $embed_settings['lockHeading'] = !empty($settings['embedpress_doc_lock_content_heading']) ? sanitize_text_field($settings['embedpress_doc_lock_content_heading']) : '';
594
595 $embed_settings['lockSubHeading'] = !empty($settings['embedpress_doc_lock_content_sub_heading']) ? sanitize_text_field($settings['embedpress_doc_lock_content_sub_heading']) : '';
596
597 $embed_settings['lockErrorMessage'] = !empty($settings['embedpress_doc_lock_content_error_message']) ? sanitize_text_field($settings['embedpress_doc_lock_content_error_message']) : '';
598
599 $embed_settings['passwordPlaceholder'] = !empty($settings['embedpress_doc_password_placeholder']) ? esc_attr($settings['embedpress_doc_password_placeholder']) : '';
600
601 $embed_settings['submitButtonText'] = !empty($settings['embedpress_doc_submit_button_text']) ? sanitize_text_field($settings['embedpress_doc_submit_button_text']) : '';
602
603 $embed_settings['submitUnlockingText'] = !empty($settings['embedpress_doc_submit_Unlocking_text']) ? sanitize_text_field($settings['embedpress_doc_submit_Unlocking_text']) : '';
604
605 $embed_settings['enableFooterMessage'] = !empty($settings['embedpress_doc_enable_footer_message']) ? esc_attr($settings['embedpress_doc_enable_footer_message']) : '';
606
607 $embed_settings['footerMessage'] = !empty($settings['embedpress_doc_lock_content_footer_message']) ? sanitize_text_field($settings['embedpress_doc_lock_content_footer_message']) : '';
608
609 $embed_settings['userRole'] = !empty($settings['embedpress_doc_select_roles']) ? $settings['embedpress_doc_select_roles'] : [];
610
611 $embed_settings['protectionMessage'] = !empty($settings['embedpress_doc_protection_message']) ? $settings['embedpress_doc_protection_message'] : '';
612
613
614 $content_share_class = '';
615 $share_position_class = '';
616 $share_position = isset($settings['embedpress_doc_content_share_position']) ? esc_attr($settings['embedpress_doc_content_share_position']) : 'right';
617
618 if (!empty($settings['embedpress_doc_content_share'])) {
619 $content_share_class = 'ep-content-share-enabled';
620 $share_position_class = 'ep-share-position-' . $share_position;
621 }
622
623 $password_correct = isset($_COOKIE['password_correct_' . $client_id]) ? sanitize_text_field($_COOKIE['password_correct_' . $client_id]) : '';
624
625 $content_protection_class = 'ep-content-protection-enabled';
626 if (empty($settings['embedpress_doc_lock_content']) || empty($settings['embedpress_doc_lock_content_password']) || $hash_pass === $password_correct) {
627 $content_protection_class = 'ep-content-protection-disabled';
628 }
629
630 $adsAtts = '';
631
632 if (!empty($settings['adManager'])) {
633 $ad = base64_encode(json_encode($settings)); // Using WordPress JSON encoding function
634 $adsAtts = 'data-sponsored-id="' . esc_attr($client_id) . '" data-sponsored-attrs="' . esc_attr($ad) . '" class="sponsored-mask"';
635 }
636
637 ?>
638
639 <div <?php echo $this->get_render_attribute_string('embedpress-document'); ?> style="<?php echo esc_attr($dimension); ?>; max-width:100%; display: inline-block">
640
641 <?php
642 do_action('embedpress_document_after_embed', $settings, $url, $id, $this);
643
644 if ($url != '') {
645 $url = esc_url($url);
646
647 if ($this->is_pdf($url)) {
648 $renderer = Helper::get_pdf_renderer();
649 $src = $renderer . ((strpos($renderer, '?') === false) ? '?' : '&')
650 . 'file=' . urlencode($url)
651 . $this->getParamData($settings);
652
653 $this->add_render_attribute('embedpres-pdf-render', 'data-emsrc', esc_url($url));
654 $embed_content = '<div ' . $this->get_render_attribute_string('embedpres-pdf-render') . '>';
655
656 $embed_content .= '<iframe title="' . esc_attr(Helper::get_file_title($url)) . '" class="embedpress-embed-document-pdf ' . esc_attr($id) . '" style="' . esc_attr($dimension) . '; max-width:100%; display: inline-block" src="' . esc_url($src) . '" frameborder="0"></iframe>';
657
658 if ($settings['embedpress_document_powered_by'] === 'yes') {
659 $embed_content .= sprintf('<p class="embedpress-el-powered">%s</p>', esc_html__('Powered By EmbedPress', 'embedpress'));
660 }
661 $embed_content .= '</div>';
662 } else {
663 if (Helper::is_file_url($url)) {
664 $view_link = '//view.officeapps.live.com/op/embed.aspx?src=' . urlencode($url) . '&embedded=true';
665 } else {
666 $view_link = 'https://drive.google.com/viewerng/viewer?url=' . urlencode($url) . '&embedded=true&chrome=false';
667 }
668
669
670 if($settings['embedpress_document_viewer'] === 'custom')
671 {
672 if (Helper::is_file_url($url)) {
673 $view_link = '//view.officeapps.live.com/op/embed.aspx?src=' . urlencode($url) . '&embedded=true';
674 } else {
675 $view_link = 'https://drive.google.com/viewerng/viewer?url=' . urlencode($url) . '&embedded=true&chrome=false';
676 }
677 }
678 elseif($settings['embedpress_document_viewer'] === 'office')
679 {
680 $view_link = '//view.officeapps.live.com/op/embed.aspx?src=' . urlencode($url) . '&embedded=true';
681 }
682 elseif($settings['embedpress_document_viewer'] === 'google')
683 {
684 $view_link = '//docs.google.com/gview?embedded=true&url=' . urlencode($url);
685 }
686
687 $hostname = parse_url($url, PHP_URL_HOST);
688 $domain = implode(".", array_slice(explode(".", $hostname), -2));
689
690 if ($domain == "google.com") {
691 $view_link = $url . '?embedded=true';
692 if (strpos($view_link, '/presentation/')) {
693 $view_link = Helper::get_google_presentation_url($url);
694 }
695 }
696
697 $embed_content = '<div ' . $this->get_render_attribute_string('embedpres-pdf-render') . '>';
698
699 $is_powered_by = '';
700 if ($settings['embedpress_document_powered_by'] === 'yes') {
701 $is_powered_by = 'ep-powered-by-enabled';
702 }
703
704 $is_download_enabled = ' enabled-file-download';
705 if ($settings['doc_print_download'] !== 'yes') {
706 $is_download_enabled = '';
707 }
708
709 $file_extenstion = 'link';
710 if (!empty(Helper::is_file_url($url))) {
711 $file_extenstion = Helper::get_extension_from_file_url($url);
712 }
713
714 $is_masked = '';
715
716 if($settings['embedpress_document_viewer'] === 'custom')
717 {
718 $is_masked = 'ep-file-download-option-masked ';
719 }
720
721 $is_custom_theme = '';
722
723 if ($settings['embedpress_theme_mode'] == 'custom') {
724 $custom_color = sanitize_text_field($settings['embedpress_doc_custom_color']);
725
726 $is_custom_theme = 'data-custom-color="'.esc_attr($custom_color).'"';
727 }
728
729 $embed_content .= '<div class="'.esc_attr( $is_masked ).'ep-file-' . esc_attr($file_extenstion) . ' ' . $is_powered_by . '' . $is_download_enabled . '" data-theme-mode="' . esc_attr($settings['embedpress_theme_mode']) . '"' . $is_custom_theme . ' data-id="' . esc_attr($this->get_id()) . '">';
730
731 $sandbox = '';
732 if ($settings['doc_print_download'] === 'yes') {
733 $sandbox = 'sandbox="allow-forms allow-modals allow-orientation-lock allow-pointer-lock allow-presentation allow-same-origin allow-scripts allow-top-navigation allow-top-navigation-by-user-activation"';
734 }
735
736 $embed_content .= '<iframe title="' . esc_attr(Helper::get_file_title($url)) . '" allowfullscreen="true" mozallowfullscreen="true" webkitallowfullscreen="true" style="' . esc_attr($dimension) . '; max-width:100%;" src="' . esc_url($view_link) . '" ' . $sandbox . '>
737 </iframe>';
738
739 if ($settings['embedpress_document_viewer'] === 'custom' && $settings['doc_print_download'] === 'yes' && (Helper::get_extension_from_file_url($url) === 'pptx' || Helper::get_extension_from_file_url($url) === 'ppt' || Helper::get_extension_from_file_url($url) === 'xls' || Helper::get_extension_from_file_url($url) === 'xlsx')) {
740 $embed_content .= '<div class="embed-download-disabled"></div>';
741 }
742
743 if (
744 $settings['doc_draw'] === 'yes' &&
745 isset($settings['embedpress_elementor_document_width']) &&
746 isset($settings['embedpress_elementor_document_height'])
747 ) {
748 $embed_content .= '<canvas class="ep-doc-canvas" width="' . esc_attr($settings['embedpress_elementor_document_width']['size']) . '" height="' . esc_attr($settings['embedpress_elementor_document_height']['size']) . '" ></canvas>';
749 }
750
751 if ($settings['doc_print_download'] === 'yes' && Helper::get_extension_from_file_url($url) !== 'pptx') {
752 $embed_content .= '<div style="width: 40px; height: 40px; position: absolute; opacity: 0; right: 12px; top: 12px;"></div>';
753 }
754
755 if (!empty($settings['doc_toolbar']) && $settings['embedpress_document_viewer'] === 'custom') {
756 $embed_content .= '<div class="ep-external-doc-icons">';
757
758 if (empty(Helper::is_file_url($url))) {
759 $embed_content .= Helper::ep_get_popup_icon();
760 }
761
762 if (!empty(Helper::is_file_url($url))) {
763 if (!empty($settings['doc_print_download'])) {
764 $embed_content .= Helper::ep_get_print_icon();
765 $embed_content .= Helper::ep_get_download_icon();
766 }
767 }
768 if (!empty($settings['doc_draw'])) {
769 $embed_content .= Helper::ep_get_draw_icon();
770 }
771 if (!empty($settings['doc_fullscreen_mode'])) {
772 $embed_content .= Helper::ep_get_fullscreen_icon();
773 $embed_content .= Helper::ep_get_minimize_icon();
774 }
775
776 $embed_content .= '</div>';
777 }
778 $embed_content .= '</div>';
779
780 if ($settings['embedpress_document_powered_by'] === 'yes') {
781 $embed_content .= '<div>';
782 $embed_content .= sprintf('<p class="embedpress-el-powered">%s</p>', esc_html__('Powered By EmbedPress', 'embedpress'));
783 $embed_content .= '</div>';
784 }
785
786 $embed_content .= '</div>';
787 }
788 }
789
790
791 ?>
792 <div <?php echo $adsAtts; ?>>
793
794 <div id="ep-elementor-content-<?php echo esc_attr($client_id) ?>" class="ep-elementor-content <?php if (!empty($settings['embedpress_doc_content_share'])) : echo esc_attr('position-' . $settings['embedpress_doc_content_share_position'] . '-wraper'); endif; ?> <?php echo esc_attr($content_share_class . ' ' . $share_position_class . ' ' . $content_protection_class); ?>">
795 <div id="<?php echo esc_attr($this->get_id()); ?>" class="ep-embed-content-wraper">
796 <?php
797
798 $content_id = $client_id;
799 if (
800 (empty($settings['embedpress_doc_lock_content']) || ($settings['embedpress_doc_protection_type'] == 'password' && empty($settings['embedpress_doc_lock_content_password'])) || $settings['embedpress_doc_lock_content'] == 'no') ||
801 ($settings['embedpress_doc_protection_type'] == 'password' && !empty(Helper::is_password_correct($client_id)) && ($hash_pass === $password_correct) ) ||
802 !apply_filters('embedpress/is_allow_rander', false) ||
803 ($settings['embedpress_doc_protection_type'] == 'user-role' && Helper::has_allowed_roles($embed_settings['userRole']))
804 ) {
805
806 if (!empty($settings['embedpress_doc_content_share'])) {
807 $embed_content .= Helper::embed_content_share($content_id, $embed_settings);
808 }
809
810 // Apply lazy loading if enabled (but not in editor mode)
811 if (!empty($settings['enable_lazy_load']) && $settings['enable_lazy_load'] === 'yes' && !empty($embed_content) && !$is_editor_view) {
812 $embed_content = preg_replace_callback(
813 '/<iframe([^>]*)src=["\']([^"\']+)["\']([^>]*)>/i',
814 function($matches) {
815 $before = $matches[1];
816 $src = $matches[2];
817 $after = $matches[3];
818
819 // Extract style attribute if exists
820 $style = '';
821 if (preg_match('/style=["\']([^"\']+)["\']/i', $before . $after, $style_match)) {
822 $style = $style_match[1];
823 }
824
825 return sprintf(
826 '<div class="ep-lazy-iframe-placeholder" data-ep-lazy-src="%s" data-ep-iframe-style="%s" %s %s style="%s"></div>',
827 esc_attr($src),
828 esc_attr($style),
829 $before,
830 $after,
831 esc_attr($style)
832 );
833 },
834 $embed_content
835 );
836 }
837
838 if (!empty($embed_content)) {
839 echo $embed_content;
840 }
841 } else {
842 if (!empty($settings['embedpress_doc_content_share'])) {
843 $embed_content .= Helper::embed_content_share($content_id, $embed_settings);
844 }
845
846 // Apply lazy loading if enabled (but not in editor mode)
847 if (!empty($settings['enable_lazy_load']) && $settings['enable_lazy_load'] === 'yes' && !empty($embed_content) && !$is_editor_view) {
848 $embed_content = preg_replace_callback(
849 '/<iframe([^>]*)src=["\']([^"\']+)["\']([^>]*)>/i',
850 function($matches) {
851 $before = $matches[1];
852 $src = $matches[2];
853 $after = $matches[3];
854
855 // Extract style attribute if exists
856 $style = '';
857 if (preg_match('/style=["\']([^"\']+)["\']/i', $before . $after, $style_match)) {
858 $style = $style_match[1];
859 }
860
861 return sprintf(
862 '<div class="ep-lazy-iframe-placeholder" data-ep-lazy-src="%s" data-ep-iframe-style="%s" %s %s style="%s"></div>',
863 esc_attr($src),
864 esc_attr($style),
865 $before,
866 $after,
867 esc_attr($style)
868 );
869 },
870 $embed_content
871 );
872 }
873
874 if ($settings['embedpress_doc_protection_type'] == 'password') {
875 do_action('embedpress/display_password_form', $client_id, $embed_content, $pass_hash_key, $embed_settings);
876 } else {
877 do_action('embedpress/content_protection_content', $client_id, $embed_settings['protectionMessage'], $embed_settings['userRole']);
878 }
879 }
880 ?>
881 </div>
882 </div>
883 <?php
884 if (!empty($settings['adManager'])) {
885 $embed_content = apply_filters('embedpress/generate_ad_template', $embed_content, $client_id, $settings, 'elementor');
886 }
887 ?>
888 </div>
889 </div>
890
891 <?php
892 }
893
894
895 private function get_file_url()
896 {
897 $settings = $this->get_settings();
898 $file_url = $settings['embedpress_document_type'] === 'url' ? esc_url($settings['embedpress_document_file_link']['url']) : esc_url($settings['embedpress_document_Uploader']['url']);
899 return $file_url;
900 }
901
902
903 protected function render_editor_script( $id, $url )
904 {
905 ?>
906 <script>
907 (function ($) {
908 'use strict';
909 $(document).ready(function () {
910 var selector = $('.embedpress-embed-document-pdf');
911 let option = {
912 forceObject: false,
913 };
914 if (selector.length && typeof PDFObject !== 'undefined') {
915 PDFObject.embed("<?php echo $url; ?>", "<?php echo '.' . $id; ?>", option);
916 }
917 });
918 })(jQuery);
919 </script>
920 <?php
921 }
922
923 /**
924 * Track Document widget usage for analytics
925 *
926 * @param array $settings
927 * @param string $url
928 * @param string $content_id
929 * @return void
930 */
931 private function track_document_widget_usage($settings, $url, $content_id)
932 {
933 // Only track if analytics is enabled and we have the necessary classes
934 if (class_exists('EmbedPress\Includes\Classes\Analytics\Analytics_Manager')) {
935 if (empty($url)) {
936 return;
937 }
938
939 $provider_name = 'Document';
940
941 $tracking_data = [
942 'embed_type' => $provider_name,
943 'embed_url' => $url,
944 'post_id' => get_the_ID(),
945 'page_url' => get_permalink(),
946 'title' => get_the_title()
947 ];
948
949 // Track content creation
950 do_action('embedpress_content_embedded', $content_id, 'elementor-document', $tracking_data);
951 }
952 }
953 }
954