/home/ivoiecob/www/wp-content/plugins/elementskit/widgets/protected-content/protected-content.php
<?php
namespace Elementor;
use \Elementor\ElementsKit_Widget_Protected_Content_Handler as Handler;
use \ElementsKit_Lite\Modules\Controls\Controls_Manager as ElementsKit_Controls_Manager;
if ( ! defined( 'ABSPATH' ) ) exit;
class ElementsKit_Widget_Protected_Content extends Widget_Base {
use \ElementsKit_Lite\Widgets\Widget_Notice;
public $base;
public function __construct($data = [], $args = null) {
add_action('elementor/editor/after_enqueue_scripts', function() {
wp_enqueue_script('ekit-protected-content', Handler::get_url() . 'assets/js/script.js', ['elementor-editor'], \ElementsKit_Lite::version(), true);
});
parent::__construct($data, $args);
}
public function get_name() {
return Handler::get_name();
}
public function get_title() {
return Handler::get_title();
}
public function get_icon() {
return Handler::get_icon();
}
public function get_categories() {
return Handler::get_categories();
}
public function get_keywords() {
return Handler::get_keywords();
}
public function get_help_url() {
return "https://wpmet.com/doc/protected-content";
}
protected function is_dynamic_content(): bool {
return true;
}
public function has_widget_inner_wrapper(): bool {
return ! Plugin::$instance->experiments->is_feature_active( 'e_optimized_markup' );
}
protected function register_controls() {
$this->start_controls_section(
'ekit_pc_content_section',
[
'label' => esc_html__('Content', 'elementskit'),
'tab' => Controls_Manager::TAB_CONTENT,
]
);
$this->add_control(
'ekit_pc_content_type',
[
'label' => esc_html__('Content Type', 'elementskit'),
'type' => Controls_Manager::SELECT,
'options' => [
'custom_content' => esc_html__('Custom Content', 'elementskit'),
'elementor_template' => esc_html__('Elementor Template', 'elementskit'),
],
'default' => 'custom_content',
]
);
$this->add_control(
'ekit_pc_protected_content',
[
'label' => esc_html__('Protected Content', 'elementskit'),
'type' => Controls_Manager::WYSIWYG,
'label_block' => true,
'dynamic' => [
'active' => true
],
'default' => esc_html('Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.'),
'condition' => [
'ekit_pc_content_type' => 'custom_content'
]
]
);
$this->add_control(
'ekit_pc_elementor_template',
[
'label' => esc_html__('Elementor Templates', 'elementskit'),
'type' => ElementsKit_Controls_Manager::AJAXSELECT2,
'options' =>'ajaxselect2/elementor_template_list',
'label_block' => true,
'multiple' => false,
'condition' => [
'ekit_pc_content_type' => 'elementor_template'
]
]
);
$this->add_control(
'ekit_pc_elementor_template_edit',
[
'type' => Controls_Manager::RAW_HTML,
'raw' => sprintf(
'<a href="#" target="_blank" class="elementor-button ekit_elementor_template_edit_link" style="border:none;">
<i class="eicon-pencil"></i>
%1$s
</a>',
esc_html__('Edit Template', 'elementskit')
),
'condition' => [
'ekit_pc_elementor_template!' => '',
'ekit_pc_content_type' => 'elementor_template'
]
]
);
$this->end_controls_section();
// Protection content start
$this->start_controls_section(
'ekit_pc_protection_type_section',
[
'label' => esc_html__('Protection Type', 'elementskit'),
'tab' => Controls_Manager::TAB_CONTENT,
]
);
$this->add_control(
'ekit_pc_protection_type',
[
'label' => esc_html__('Protection Type', 'elementskit'),
'label_block' => false,
'type' => Controls_Manager::SELECT,
'options' => [
'roles' => esc_html__('User Role', 'elementskit'),
'password' => esc_html__('Password', 'elementskit'),
],
'default' => 'password'
]
);
$this->add_control(
'ekit_pc_allowed_roles',
[
'label' => esc_html__('Select Roles', 'elementskit'),
'type' => Controls_Manager::SELECT2,
'label_block' => true,
'multiple' => true,
'options' => self::get_user_roles(),
'dynamic' => [
'active' => true
],
'condition' => [
'ekit_pc_protection_type' => 'roles'
]
]
);
$this->add_control(
'ekit_pc_set_password',
[
'label' => esc_html__('Set Password', 'elementskit'),
'type' => Controls_Manager::TEXT,
'input_type' => 'text',
'dynamic' => [
'active' => true
],
'condition' => [
'ekit_pc_protection_type' => 'password'
]
]
);
$this->add_control(
'ekit_pc_show_content',
[
'label' => esc_html__('Show Content', 'elementskit'),
'type' => Controls_Manager::SWITCHER,
'default' => 'no',
'label_on' => esc_html__('Show', 'elementskit'),
'label_off' => esc_html__('Hide', 'elementskit'),
'return_value' => 'yes',
'description' => esc_html__('You can show your protected content in the editor for design purposes.', 'elementskit'),
'condition' => [
'ekit_pc_protection_type' => ['password']
]
]
);
$this->add_control(
'ekit_pc_enable_cookie',
[
'label' => esc_html__('Cookie', 'elementskit'),
'type' => Controls_Manager::SWITCHER,
'default' => 'no',
'label_on' => esc_html__('Enable', 'elementskit'),
'label_off' => esc_html__('Disable', 'elementskit'),
'separator' => 'before',
'condition' => [
'ekit_pc_protection_type' => ['password']
]
]
);
$this->add_control(
'ekit_pc_cookie',
[
'label' => esc_html__('Cookie', 'elementskit'),
'label_block' => false,
'type' => Controls_Manager::SELECT,
'options' => [
'time' => esc_html__('Time', 'elementskit'),
'days' => esc_html__('Days', 'elementskit'),
],
'default' => 'time',
'condition' => [
'ekit_pc_enable_cookie' => 'yes',
'ekit_pc_protection_type' => ['password']
],
]
);
$this->add_control(
'ekit_pc_cookie_time',
[
'label' => esc_html__('Expire Time', 'elementskit'),
'description' => esc_html__('Enter expiration time in minutes', 'elementskit'),
'type' => Controls_Manager::NUMBER,
'dynamic' => [
'active' => true,
],
'min' => 1,
'default' => 1000,
'condition' => [
'ekit_pc_cookie' => 'time',
'ekit_pc_enable_cookie' => 'yes',
'ekit_pc_protection_type' => ['password']
],
]
);
$this->add_control(
'ekit_pc_cookie_days',
[
'label' => esc_html__('Days', 'elementskit'),
'description' => esc_html__('Enter expiration in days', 'elementskit'),
'type' => Controls_Manager::NUMBER,
'dynamic' => [
'active' => true,
],
'min' => 1,
'max' => 365,
'default' => 1,
'condition' => [
'ekit_pc_cookie' => 'days',
'ekit_pc_enable_cookie' => 'yes',
'ekit_pc_protection_type' => ['password']
],
]
);
$this->end_controls_section();
// Message Type section Start
$this->start_controls_section(
'ekit_pc_message_type_section',
[
'label' => esc_html__('Message Type' , 'elementskit'),
'tab' => Controls_Manager::TAB_CONTENT,
]
);
$this->add_control(
'ekit_pc_message_source',
[
'label' => esc_html__('Message Source', 'elementskit'),
'label_block' => false,
'type' => Controls_Manager::SELECT,
'description' => esc_html__('Set a message or a saved template when the content is protected.', 'elementskit'),
'options' => [
'none' => esc_html__('None', 'elementskit'),
'text' => esc_html__('Message', 'elementskit'),
'elementor_template' => esc_html__('Elementor Templates', 'elementskit')
],
'default' => 'text'
]
);
$this->add_control(
'ekit_pc_message_text',
[
'label' => esc_html__('Text', 'elementskit'),
'type' => Controls_Manager::WYSIWYG,
'default' => esc_html__('You do not have permission to see this content.','elementskit'),
'dynamic' => [
'active' => true
],
'condition' => [
'ekit_pc_message_source' => 'text'
]
]
);
$this->add_control(
'ekit_pc_message_template',
[
'label' => esc_html__('Choose Elementor Template', 'elementskit'),
'type' => ElementsKit_Controls_Manager::AJAXSELECT2,
'options' =>'ajaxselect2/elementor_template_list',
'label_block' => true,
'multiple' => false,
'condition' => [
'ekit_pc_message_source' => 'elementor_template',
],
]
);
$this->end_controls_section();
// Input Field section start
$this->start_controls_section(
'ekit_pc_form_field_section',
[
'label' => esc_html__('Form Field' , 'elementskit'),
'tab' => Controls_Manager::TAB_CONTENT,
]
);
$this->add_control(
'ekit_pc_input_text',
[
'label' => esc_html__('Input text', 'elementskit'),
'type' => Controls_Manager::TEXT,
'default' => esc_html__('Enter Password', 'elementskit'),
'placeholder' => esc_html__('Enter Password', 'elementskit'),
'dynamic' => ['active' => true,],
]
);
$this->add_control(
'ekit_pc_submit_text',
[
'label' => esc_html__('Submit text', 'elementskit'),
'type' => Controls_Manager::TEXT,
'default' => esc_html__('Submit', 'elementskit'),
'placeholder' => esc_html__('Submit', 'elementskit'),
'dynamic' => ['active' => true,],
]
);
$this->end_controls_section();
// error message start
$this->start_controls_section(
'ekit_pc_warning_message_section',
[
'label' => esc_html__('Warning Message' , 'elementskit'),
'tab' => Controls_Manager::TAB_CONTENT,
]
);
$this->add_control(
'ekit_pc_show_warning',
[
'label' => esc_html__('Show Warning', 'elementskit'),
'type' => Controls_Manager::SWITCHER,
'default' => 'no',
'label_on' => esc_html__('Show', 'elementskit'),
'label_off' => esc_html__('Hide', 'elementskit'),
'description' => esc_html__('You can show your incorrect message in the editor for design purposes.', 'elementskit'),
'return_value' => 'yes',
]
);
$this->add_control(
'ekit_pc_incorrect_message',
[
'label' => esc_html__('Incorrect Message', 'elementskit'),
'type' => Controls_Manager::TEXTAREA,
'default' => esc_html__('Oops, you entered the wrong password! Please try again.', 'elementskit'),
'placeholder' => esc_html__('Oops, you entered the wrong password! Please try again.', 'elementskit'),
'dynamic' => ['active' => true,],
]
);
$this->end_controls_section();
//Style Wrapper section start
$this->start_controls_section(
'ekit_pc_wrapper_style',
[
'label' => esc_html__('Wrapper', 'elementskit'),
'tab' => Controls_Manager::TAB_STYLE,
]
);
$this->add_control(
'ekit_pc_wrapper_alignment',
[
'label' => esc_html__('Alignment', 'elementskit'),
'type' => Controls_Manager::CHOOSE,
'options' => [
'flex-start' => [
'title' => esc_html__('Left', 'elementskit'),
'icon' => 'eicon-text-align-left',
],
'center' => [
'title' => esc_html__('Center', 'elementskit'),
'icon' => 'eicon-text-align-center',
],
'flex-end' => [
'title' => esc_html__('Right', 'elementskit'),
'icon' => 'eicon-text-align-right',
],
],
'toggle' => false,
'default' => 'center',
'selectors' => [
'{{WRAPPER}} .ekit-protected-content' => 'display: flex; flex-direction: column; align-items: {{VALUE}};',
],
]
);
$this->add_control(
'ekit_pc_wrapper_direction',
[
'label' => esc_html__( 'Direction', 'elementskit' ),
'type' => Controls_Manager::CHOOSE,
'options' => [
'row' => [
'title' => esc_html__( 'Row - horizontal', 'elementskit' ),
'icon' => 'eicon-arrow-right',
],
'row-reverse' => [
'title' => esc_html__( 'Row - reversed', 'elementskit' ),
'icon' => 'eicon-arrow-left',
],
'column' => [
'title' => esc_html__( 'Column - vertical', 'elementskit' ),
'icon' => 'eicon-arrow-down',
],
'column-reverse' => [
'title' => esc_html__( 'Column - reversed', 'elementskit' ),
'icon' => 'eicon-arrow-up',
],
],
'toggle' => false,
'default' => 'row',
'selectors_dictionary' => [
'row' => 'flex-direction: row; flex-wrap: wrap;',
'row-reverse' => 'flex-direction: row-reverse; flex-wrap: wrap;',
'column' => 'flex-direction: column;',
'column-reverse' => 'flex-direction: column-reverse;',
],
'selectors' => [
'{{WRAPPER}} .ekit-protected-content .protected-content-form-fields form' => '{{VALUE}}',
],
]
);
$this->end_controls_section();
//Style Content section start
$this->start_controls_section(
'ekit_pc_content_style',
[
'label' => esc_html__('Content', 'elementskit'),
'tab' => Controls_Manager::TAB_STYLE,
'condition' => [
'ekit_pc_content_type' => 'custom_content'
]
]
);
$this->add_control(
'ekit_pc_text_color',
[
'label' => esc_html__('Text Color', 'elementskit'),
'type' => Controls_Manager::COLOR,
'selectors' => [
'{{WRAPPER}} .ekit-protected-content .protected-content' => 'color: {{VALUE}}',
],
]
);
$this->add_group_control(
Group_Control_Typography::get_type(),
[
'name' => 'ekit_protected_content_typography',
'selector' => '{{WRAPPER}} .ekit-protected-content .protected-content',
]
);
$this->add_responsive_control(
'ekit_pc_padding',
[
'label' => esc_html__('Padding', 'elementskit'),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => [ 'px', '%', 'em', 'custom' ],
'selectors' => [
'{{WRAPPER}} .ekit-protected-content .protected-content' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
]
);
$this->end_controls_section();
// Message Type style start
$this->start_controls_section(
'ekit_pc_message_style',
[
'label' => esc_html__('Message Type', 'elementskit'),
'tab' => Controls_Manager::TAB_STYLE,
]
);
$this->add_control(
'ekit_pc_massage_text_color',
[
'label' => esc_html__('Text Color', 'elementskit'),
'type' => Controls_Manager::COLOR,
'selectors' => [
'{{WRAPPER}} .ekit-protected-content .protected-content-message' => 'color: {{VALUE}}',
],
]
);
$this->add_group_control(
Group_Control_Typography::get_type(),
[
'name' => 'ekit_protected_content_message_typography',
'selector' => '{{WRAPPER}} .ekit-protected-content .protected-content-message',
]
);
$this->add_responsive_control(
'ekit_pc_message_margin',
[
'label' => esc_html__('Margin', 'elementskit'),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => [ 'px', '%', 'em', 'custom' ],
'default' => [
'top' => '10',
'right' => '10',
'bottom' => '10',
'left' => '10',
'unit' => 'px',
//'isLinked' => '',
],
'selectors' => [
'{{WRAPPER}} .ekit-protected-content .protected-content-message' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
]
);
$this->end_controls_section();
// Form Style section
$this->start_controls_section(
'ekit_pc_form_field_style',
[
'label' => esc_html__('Form Field' , 'elementskit'),
'tab' => Controls_Manager::TAB_STYLE,
]
);
$this->add_responsive_control(
'ekit_pc_form_input_width',
[
'type' => Controls_Manager::SLIDER,
'label' => esc_html__('Width', 'elementskit'),
'size_units' => [ 'px', '%', 'em', 'custom' ],
'range' => [
'px' => [
'min' => 100,
'max' => 1200,
'step' => 5,
],
'%' => [
'min' => 10,
'max' => 100,
'step' => 1,
],
],
'default' => [
'unit' => 'px',
'size' => 250,
],
'render_type' => 'template',
'selectors' => [
'{{WRAPPER}} .ekit-protected-content .password' => 'width: {{SIZE}}{{UNIT}}',
],
]
);
$this->add_group_control(
Group_Control_Box_Shadow::get_type(),
[
'name' => 'ekit_pc_form_shadow',
'selector' => '{{WRAPPER}} .ekit-protected-content .password',
]
);
$this->add_group_control(
Group_Control_Typography::get_type(),
[
'name' => 'ekit_pc_form_input_typography',
'selector' => '{{WRAPPER}} .ekit-protected-content .password',
]
);
$this->add_control(
'ekit_pc_form_input_placeholder',
[
'label' => esc_html__('Placeholder Color', 'elementskit'),
'type' => Controls_Manager::COLOR,
'selectors' => [
'{{WRAPPER}} .ekit-protected-content .protected-content-form input::-webkit-input-placeholder' => 'color: {{VALUE}};',
],
]
);
$this->start_controls_tabs(
'ekit_pc_form_input_tabs'
);
$this->start_controls_tab(
'ekit_pc_form_tab_input',
[
'label' => esc_html__('Normal', 'elementskit'),
]
);
$this->add_control(
'ekit_pc_form_input_color',
[
'label' => esc_html__('Color', 'elementskit'),
'type' => Controls_Manager::COLOR,
'selectors' => [
'{{WRAPPER}} .ekit-protected-content .password' => 'color: {{VALUE}};',
],
]
);
$this->add_control(
'ekit_pc_form_input_bg',
[
'label' => esc_html__('Background', 'elementskit'),
'type' => Controls_Manager::COLOR,
'selectors' => [
'{{WRAPPER}} .ekit-protected-content .password' => 'background: {{VALUE}};',
],
]
);
$this->add_group_control(
Group_Control_Border::get_type(),
[
'name' => 'ekit_pc_form_input_border',
'label' => esc_html__('Border', 'elementskit'),
'selector' => '{{WRAPPER}} .ekit-protected-content .password',
]
);
$this->add_responsive_control(
'ekit_pc_form_input_border_radius',
[
'label' => esc_html__('Border Radius', 'elementskit'),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => [ 'px', '%', 'em', 'custom' ],
'selectors' => [
'{{WRAPPER}} .ekit-protected-content .password' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
]
);
$this->end_controls_tab();
$this->start_controls_tab(
'ekit_pc_form_tab_input_focus',
[
'label' => esc_html__('Focus', 'elementskit'),
]
);
$this->add_control(
'ekit_pc_form_input_focus_color',
[
'label' => esc_html__('Color', 'elementskit'),
'type' => Controls_Manager::COLOR,
'selectors' => [
'{{WRAPPER}} .ekit-protected-content .password:focus' => 'color: {{VALUE}};',
],
]
);
$this->add_control(
'ekit_pc_form_input_focus_bg',
[
'label' => esc_html__('Background', 'elementskit'),
'type' => Controls_Manager::COLOR,
'selectors' => [
'{{WRAPPER}} .ekit-protected-content .password:focus' => 'background: {{VALUE}};',
],
]
);
$this->add_group_control(
Group_Control_Border::get_type(),
[
'name' => 'ekit_pc_form_input_focus_border',
'label' => esc_html__('Border', 'elementskit'),
'selector' => '{{WRAPPER}} .ekit-protected-content .password:focus',
]
);
$this->add_responsive_control(
'ekit_pc_form_input_focus_border_radius',
[
'label' => esc_html__('Border Radius', 'elementskit'),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => [ 'px', '%', 'em', 'custom' ],
'selectors' => [
'{{WRAPPER}} .ekit-protected-content .password:focus' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
]
);
$this->end_controls_tab();
$this->end_controls_tabs();
$this->add_responsive_control(
'ekit_pc_form_input_padding',
[
'label' => esc_html__('Padding', 'elementskit'),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => [ 'px', '%', 'em', 'custom' ],
'separator' => "before",
'selectors' => [
'{{WRAPPER}} .ekit-protected-content .password' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
]
);
$this->add_responsive_control(
'ekit_pc_form_input_margin',
[
'label' => esc_html__('Margin', 'elementskit'),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => [ 'px', '%', 'em', 'custom' ],
'default' => [
'top' => '5',
'right' => '5',
'bottom' => '5',
'left' => '5',
'unit' => 'px',
//'isLinked' => '',
],
'selectors' => [
'{{WRAPPER}} .ekit-protected-content .password' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
]
);
$this->end_controls_section();
// Submit Button Style section
$this->start_controls_section(
'ekit_pc_submit_button_style',
[
'label' => esc_html__('Submit Button' , 'elementskit'),
'tab' => Controls_Manager::TAB_STYLE,
]
);
$this->add_group_control(
Group_Control_Box_Shadow::get_type(),
[
'name' => 'ekit_pc_form_button_shadow',
'selector' => '{{WRAPPER}} .ekit-protected-content .protected-content-submit',
]
);
$this->add_group_control(
Group_Control_Typography::get_type(),
[
'name' => 'ekit_pc_form_button_typography',
'selector' => '{{WRAPPER}} .ekit-protected-content .protected-content-submit',
]
);
$this->start_controls_tabs(
'ekit_pc_form_button_tabs'
);
$this->start_controls_tab(
'ekit_pc_form_tab_button',
[
'label' => esc_html__('Normal', 'elementskit'),
]
);
$this->add_control(
'ekit_pc_button_color',
[
'label' => esc_html__('Color', 'elementskit'),
'type' => Controls_Manager::COLOR,
'default' => '#ffff',
'selectors' => [
'{{WRAPPER}} .ekit-protected-content .protected-content-submit' => 'color: {{VALUE}};',
],
]
);
$this->add_control(
'ekit_pc_button_background',
[
'label' => esc_html__('Background', 'elementskit'),
'type' => Controls_Manager::COLOR,
'default' => '#CC3366',
'selectors' => [
'{{WRAPPER}} .ekit-protected-content .protected-content-submit' => 'background: {{VALUE}};',
],
]
);
$this->add_group_control(
Group_Control_Border::get_type(),
[
'name' => 'ekit_pc_button_border',
'label' => esc_html__('Border', 'elementskit'),
'selector' => '{{WRAPPER}} .ekit-protected-content .protected-content-submit',
]
);
$this->add_responsive_control(
'ekit_pc_button_border_radius',
[
'label' => esc_html__('Border Radius', 'elementskit'),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => [ 'px', '%', 'em', 'custom' ],
'selectors' => [
'{{WRAPPER}} .ekit-protected-content .protected-content-submit' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
]
);
$this->end_controls_tab();
$this->start_controls_tab(
'ekit_pc_form_tab_button_hover',
[
'label' => esc_html__('Hover', 'elementskit'),
]
);
$this->add_control(
'ekit_pc_button_color_hover',
[
'label' => esc_html__('Color', 'elementskit'),
'type' => Controls_Manager::COLOR,
'default' => '#CC3366',
'selectors' => [
'{{WRAPPER}} .ekit-protected-content .protected-content-submit:hover' => 'color: {{VALUE}};',
],
]
);
$this->add_control(
'ekit_pc_button_background_hover',
[
'label' => esc_html__('Background', 'elementskit'),
'type' => Controls_Manager::COLOR,
'default' => '#ffff',
'selectors' => [
'{{WRAPPER}} .ekit-protected-content .protected-content-submit:hover' => 'background: {{VALUE}};',
],
]
);
$this->add_group_control(
Group_Control_Border::get_type(),
[
'name' => 'ekit_pc_button_border_hover',
'label' => esc_html__('Border', 'elementskit'),
'selector' => '{{WRAPPER}} .ekit-protected-content .protected-content-submit:hover',
]
);
$this->add_responsive_control(
'ekit_pc_button_border_radius_hover',
[
'label' => esc_html__('Border Radius', 'elementskit'),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => [ 'px', '%', 'em', 'custom' ],
'selectors' => [
'{{WRAPPER}} .ekit-protected-content .protected-content-submit:hover' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
]
);
$this->end_controls_tab();
$this->end_controls_tabs();
$this->add_responsive_control(
'ekit_pc_button_padding',
[
'label' => esc_html__('Padding', 'elementskit'),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => [ 'px', '%', 'em', 'custom' ],
'separator' => "before",
'selectors' => [
'{{WRAPPER}} .ekit-protected-content .protected-content-submit' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
]
);
$this->add_responsive_control(
'ekit_pc_button_margin',
[
'label' => esc_html__('Margin', 'elementskit'),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => [ 'px', '%', 'em', 'custom' ],
'default' => [
'top' => '5',
'right' => '5',
'bottom' => '5',
'left' => '5',
'unit' => 'px',
//'isLinked' => '',
],
'selectors' => [
'{{WRAPPER}} .ekit-protected-content .protected-content-submit' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
]
);
$this->end_controls_section();
// Warning Style section
$this->start_controls_section(
'ekit_pc_warning_message_style',
[
'label' => esc_html__('Warning Message' , 'elementskit'),
'tab' => Controls_Manager::TAB_STYLE,
]
);
$this->add_control(
'ekit_pc_warning_message_text_color',
[
'label' => esc_html__('Text Color', 'elementskit'),
'type' => Controls_Manager::COLOR,
'selectors' => [
'{{WRAPPER}} .ekit-protected-content .protected-content-warning' => 'color: {{VALUE}}',
],
]
);
$this->add_group_control(
Group_Control_Typography::get_type(),
[
'name' => 'ekit_pc_warning_message_typography',
'selector' => '{{WRAPPER}} .ekit-protected-content .protected-content-warning',
]
);
$this->add_responsive_control(
'ekit_pc_warning_message_margin',
[
'label' => esc_html__('Margin', 'elementskit'),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => [ 'px', '%', 'em', 'custom' ],
'default' => [
'top' => '5',
'right' => '5',
'bottom' => '5',
'left' => '5',
'unit' => 'px',
//'isLinked' => '',
],
'selectors' => [
'{{WRAPPER}} .ekit-protected-content .protected-content-warning' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
]
);
$this->end_controls_section();
}
protected function render() {
?>
<div class="ekit-wid-con">
<div class="ekit-protected-content">
<?php $this->render_raw(); ?>
</div>
</div>
<?php
}
protected function render_raw() {
$form_submitted = $validate = false;
$settings = $this->get_settings_for_display();
extract($settings);
// check validation for password
if($ekit_pc_protection_type === 'password' && (isset($_POST['nonce_' . $this->get_id()]) && wp_verify_nonce($_POST['nonce_' . $this->get_id()], 'protected_form_nonce'))) {
$form_submitted = true;
if(isset($_POST['password_' . $this->get_id()]) && ($ekit_pc_set_password === $_POST['password_' . $this->get_id()])) {
$validate = true;
// set cookie
$this->set_cookie($settings);
}
}
// check validation for roles
if ($ekit_pc_protection_type === 'roles' && $this->current_user_can_see($settings)) {
$validate = true;
}
// check validation for cookie
if($ekit_pc_enable_cookie === 'yes' && isset($_COOKIE['protection_content_' . $this->get_id()])) {
$validate = true;
}
// render content
if (($this->is_editor() && $ekit_pc_show_content === 'yes') || $validate) {
$this->get_protected_content($settings);
} elseif ($ekit_pc_protection_type === 'password') {
$this->get_protected_form($settings);
}
// show warning message
if ($this->is_editor() && $ekit_pc_show_warning === 'yes' ||
(!$this->is_editor() && $ekit_pc_protection_type === 'roles' && !$validate) ||
(!$this->is_editor() && $ekit_pc_protection_type === 'password' && $form_submitted && !$validate)
) {
$this->get_protected_warning($settings);
}
}
public function set_cookie($settings) {
extract($settings);
if ($ekit_pc_enable_cookie === 'yes') {
$expiry_time = 0;
if ($ekit_pc_cookie === 'time') {
$expiry_time = (int)$ekit_pc_cookie_time * 60 * 1000; // Convert minutes to milliseconds
} elseif ($ekit_pc_cookie === 'days') {
$expiry_time = (int)$ekit_pc_cookie_days * 24 * 60 * 60 * 1000; // Convert days to milliseconds
}
echo "<script>
var pcDate = new Date();
pcDate.setTime(pcDate.getTime() + parseInt($expiry_time));
var expires = 'expires=' + pcDate.toUTCString();
document.cookie = 'protection_content_{$this->get_id()}=true;' + expires + ';';
</script>";
}
}
protected function get_protected_form($settings) {
extract($settings); ?>
<div class="protected-content-message">
<?php if($ekit_pc_message_source === 'text') :
echo wp_kses($ekit_pc_message_text, \ElementsKit_Lite\Utils::get_kses_array());
elseif($ekit_pc_message_source === 'elementor_template' && !empty($ekit_pc_message_template)) :
echo Plugin::$instance->frontend->get_builder_content_for_display( $ekit_pc_message_template, false );
endif; ?>
</div>
<div class="protected-content-form">
<div class="protected-content-form-fields">
<form action="<?php the_permalink(); ?>" name="<?php echo esc_attr('protected_form_' . $this->get_id()); ?>"
method="POST">
<input type="hidden" name="<?php echo esc_attr('nonce_' . $this->get_id()); ?>"
value="<?php echo esc_attr(wp_create_nonce('protected_form_nonce')); ?>">
<input type="password" name="<?php echo esc_attr('password_' . $this->get_id()); ?>" class="password"
placeholder="<?php echo esc_attr($ekit_pc_input_text); ?>">
<input type="submit" name="submit" value="<?php echo esc_attr($ekit_pc_submit_text); ?>"
class="protected-content-submit">
</form>
</div>
</div>
<?php
}
protected function get_protected_warning($settings) {
extract($settings); ?>
<div class="protected-content-warning">
<p class="protected-content-warning-text">
<?php echo wp_kses($ekit_pc_incorrect_message, \ElementsKit_Lite\Utils::get_kses_array()); ?>
</p>
</div>
<?php
}
protected function get_protected_content($settings) {
extract($settings); ?>
<div class="protected-content">
<?php if($ekit_pc_content_type === 'custom_content') :
echo wp_kses($ekit_pc_protected_content, \ElementsKit_Lite\Utils::get_kses_array());
elseif($ekit_pc_content_type === 'elementor_template') :
echo Plugin::$instance->frontend->get_builder_content_for_display( $ekit_pc_elementor_template, false );
endif; ?>
</div>
<?php
}
// Get list of user role for protected content widget start
protected function get_user_roles() {
global $wp_roles;
$all = $wp_roles->roles;
$all_roles = array();
if(!empty($all)){
foreach($all as $key => $value){
$all_roles[$key] = $all[$key]['name'];
}
}
return $all_roles;
}
// Check current user role exists inside of the roles array.
protected function current_user_can_see($settings) {
extract($settings);
if ( !is_user_logged_in() ) {
return;
}
$user_role = wp_get_current_user()->roles ;
return !empty( array_intersect( $user_role, $ekit_pc_allowed_roles));
}
// Is elementor editor
protected function is_editor() {
return Plugin::$instance->editor->is_edit_mode();
}
}