: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
namespace EmbedPress\Elementor\Widgets;
use \Elementor\Controls_Manager as Controls_Manager;
use \Elementor\Modules\DynamicTags\Module as TagsModule;
use \Elementor\Widget_Base as Widget_Base;
use EmbedPress\Includes\Traits\Branding;
use EmbedPress\Includes\Classes\Helper;
( defined( 'ABSPATH' ) ) or die( "No direct script access allowed." );
class Embedpress_Document extends Widget_Base
protected $pro_class = '';
protected $pro_text = '';
public function get_name()
return 'embedpres_document';
public function get_title()
return esc_html__( 'EmbedPress Document', 'embedpress' );
public function get_categories()
public function get_custom_help_url()
return 'https://embedpress.com/documentation';
public function get_icon()
public function get_style_depends()
'embedpress-elementor-css',
public function get_script_depends()
$handler_keys = get_option('enabled_elementor_scripts', []);
$handles[] = 'embedpress-pdfobject';
$handles[] = 'embedpress-front';
if (isset($handler_keys['enabled_ads']) && $handler_keys['enabled_ads'] === 'yes') {
$handles[] = 'embedpress-ads';
if (isset($handler_keys['enabled_docs_custom_viewer']) && $handler_keys['enabled_docs_custom_viewer'] === 'yes') {
$handles[] = 'embedpress_documents_viewer_script';
* Retrieve the list of keywords the widget belongs to.
* @return array Widget keywords.
public function get_keywords()
return ['embedpress', 'pdf', 'doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx', 'embedpress-document'];
protected function register_controls()
$this->pro_class = is_embedpress_pro_active() ? '': 'embedpress-pro-control not-active';
$this->pro_text = is_embedpress_pro_active() ? '': '<sup class="embedpress-pro-label" style="color:red">'.__('Pro', 'embedpress').'</sup>';
* EmbedPress Content Settings
$this->start_controls_section(
'embedpress_document_content_settings',
'label' => esc_html__( 'General', 'embedpress' ),
'embedpress_document_type',
'label' => __( 'Document Type', 'embedpress' ),
'type' => Controls_Manager::SELECT,
'file' => __( 'File', 'embedpress' ),
'url' => __( 'URL', 'embedpress' )
'embedpress_document_Uploader',
'label' => __( 'Upload File', 'embedpress' ),
'type' => Controls_Manager::MEDIA,
TagsModule::MEDIA_CATEGORY,
'application/vnd.ms-powerpoint',
'application/vnd.ms-excel',
'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
'application/vnd.openxmlformats-officedocument.presentationml.presentation',
'application/vnd.openxmlformats-officedocument.presentationml.slideshow' // Added PPSX MIME type
'description' => __( 'Upload a file or pick one from your media library for embed. Supported File Type: PDF, DOC/DOCX, PPT/PPTX, XLS/XLSX etc.',
'embedpress_document_type' => 'file'
'embedpress_document_file_link',
'label' => __( 'URL', 'embedpress' ),
'type' => Controls_Manager::URL,
'placeholder' => __( 'https://your-link.com/file.pdf', 'embedpress' ),
'show_external' => false,
'embedpress_document_type' => 'url'
$this->add_responsive_control(
'embedpress_elementor_document_width',
'type' => \Elementor\Controls_Manager::SLIDER,
'label' => esc_html__( 'Width', 'embedpress' ),
'devices' => [ 'desktop', 'tablet', 'mobile' ],
'size' => Helper::get_options_value('enableEmbedResizeWidth'),
'{{WRAPPER}} .embedpress-document-embed iframe' => 'width: {{SIZE}}{{UNIT}} !important; max-width: 100%',
'{{WRAPPER}} .embedpress-document-embed .pdfobject-container' => 'width: {{SIZE}}{{UNIT}} !important; max-width: 100%',
'{{WRAPPER}} .embedpress-document-embed' => 'width: {{SIZE}}{{UNIT}} !important; max-width: 100%',
$this->add_responsive_control(
'embedpress_elementor_document_height',
'type' => \Elementor\Controls_Manager::SLIDER,
'label' => esc_html__( 'Height', 'embedpress' ),
'devices' => [ 'desktop', 'tablet', 'mobile' ],
'size' => Helper::get_options_value('enableEmbedResizeHeight'),
'{{WRAPPER}} .embedpress-document-embed iframe' => 'height: {{SIZE}}{{UNIT}}!important;',
'{{WRAPPER}} .embedpress-document-embed .pdfobject-container' => 'height: {{SIZE}}{{UNIT}};',
'{{WRAPPER}} .embedpress-document-embed ' => 'max-height: {{SIZE}}{{UNIT}};',
$this->add_responsive_control(
'embedpress_elementor_document_align',
'label' => __( 'Alignment', 'embedpress' ),
'type' => Controls_Manager::CHOOSE,
'title' => __( 'Left', 'embedpress' ),
'icon' => 'eicon-text-align-left',
'title' => __( 'Center', 'embedpress' ),
'icon' => 'eicon-text-align-center',
'title' => __( 'Right', 'embedpress' ),
'icon' => 'eicon-text-align-right',
'prefix_class' => 'elementor%s-align-',
'embedpress_document_powered_by',
'label' => __( 'Powered By', 'embedpress' ),
'type' => Controls_Manager::SWITCHER,
'label_on' => __( 'Show', 'embedpress' ),
'label_off' => __( 'Hide', 'embedpress' ),
'default' => apply_filters( 'embedpress_document_powered_by_control', 'yes' ),
$this->init_branding_controls( 'document');
$this->end_controls_section();
* EmbedPress Document control settings
$this->start_controls_section(
'embedpress_doc_content_settings',
'label' => esc_html__('Controls', 'embedpress'),
'type' => \Elementor\Controls_Manager::RAW_HTML,
'raw' => esc_html__( 'Download feature is available when link has the document extension at the end.', 'embedpress' ),
'content_classes' => 'elementor-panel-alert elementor-panel-alert-info',
'embedpress_document_type' => 'url',
'type' => \Elementor\Controls_Manager::RAW_HTML,
'raw' => esc_html__( 'Toolbar and additional feature options become accessible upon selecting the Custom Viewer mode.', 'embedpress' ),
'content_classes' => 'elementor-panel-alert elementor-panel-alert-info',
'embedpress_document_type' => 'file',
'embedpress_document_viewer' => 'office',
'embedpress_document_viewer',
'label' => __('Viewer', 'embedpress'),
'type' => Controls_Manager::SELECT,
'custom' => __('Custom', 'embedpress'),
'office' => __('MS Office', 'embedpress'),
'google' => __('Google', 'embedpress'),
'label' => __('Theme', 'embedpress'),
'type' => Controls_Manager::SELECT,
'default' => __('System Default', 'embedpress'),
'dark' => __('Dark', 'embedpress'),
'light' => __('Light', 'embedpress'),
'custom' => __('Custom', 'embedpress')
'embedpress_document_viewer' => 'custom',
'embedpress_doc_custom_color',
'label' => esc_html__( 'Color', 'embedpress' ),
'type' => \Elementor\Controls_Manager::COLOR,
'embedpress_theme_mode' => 'custom',
'embedpress_document_viewer' => 'custom',
'label' => sprintf(__('Toolbar %s', 'embedpress'), $this->pro_text),
'type' => Controls_Manager::SWITCHER,
'label_on' => __('Show', 'embedpress'),
'label_off' => __('Hide', 'embedpress'),
'classes' => $this->pro_class,
'embedpress_document_viewer' => 'custom',
'label' => __('Fullscreen', 'embedpress'),
'type' => Controls_Manager::SWITCHER,
'label_on' => __('Show', 'embedpress'),
'label_off' => __('Hide', 'embedpress'),
'embedpress_document_viewer' => 'custom',
'label' => sprintf(__('Print/Download %s', 'embedpress'), $this->pro_text),
'type' => Controls_Manager::SWITCHER,
'label_on' => __('Show', 'embedpress'),
'label_off' => __('Hide', 'embedpress'),
'classes' => $this->pro_class,
'embedpress_document_viewer' => 'custom',
'label' => __('Draw', 'embedpress'),
'type' => Controls_Manager::SWITCHER,
'label_on' => __('Show', 'embedpress'),
'label_off' => __('Hide', 'embedpress'),
'embedpress_document_viewer' => 'custom',
$this->end_controls_section();
do_action( 'extend_elementor_controls', $this, '_doc_', $this->pro_text, $this->pro_class);
if (! is_embedpress_pro_active()) {
$this->start_controls_section(
'embedpress_pro_section',
'label' => __('Go Premium for More Features', 'embedpress'),
'label' => __('Unlock more possibilities', 'embedpress'),
'type' => Controls_Manager::CHOOSE,
'description' => '<span class="pro-feature"> Get the <a href="https://wpdeveloper.com/in/upgrade-embedpress" target="_blank">Pro version</a> for more provider support and customization options.</span>',
$this->end_controls_section();
private function is_pdf( $url )
$arr = explode( '.', $url );
return end( $arr ) === 'pdf';
protected function render()
$settings = $this->get_settings();
Helper::get_enable_settings_data_for_scripts($settings);
$client_id = esc_attr($this->get_id());
$pass_hash_key = md5($settings['embedpress_doc_lock_content_password']);
$url = esc_url($this->get_file_url());
$id = 'embedpress-pdf-' . esc_attr($this->get_id());
if ($settings['embedpress_document_type'] === 'url') {
if (class_exists('ACF') && function_exists('get_field')) {
if (!empty($settings['__dynamic__']) && !empty($settings['__dynamic__']['embedpress_document_file_link'])) {
$decode_url = urldecode(($settings['__dynamic__']['embedpress_document_file_link']));
preg_match('/"key":"([^"]+):([^"]+)"/', $decode_url, $matches);
if (isset($matches[0])) {
if (isset($matches[1])) {
$get_acf_key = $matches[1];
$url = esc_url(get_field($get_acf_key));
$pattern = '/"fallback":"([^"]+)"/';
preg_match($pattern, $decode_url, $matches);
if (isset($matches[1])) {
$url = esc_url($matches[1]);
$hash_pass = hash('sha256', wp_salt(32) . md5($settings['embedpress_doc_lock_content_password']));
if (empty($settings['embedpress_doc_lock_content']) && empty($settings['embedpress_doc_lock_content_password'])) {