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