ElementorPro/modules/social/widgets/facebook-comments.php
2024-07-07 01:00:30 +02:00

152 lines
3.9 KiB
PHP

<?php
namespace ElementorPro\Modules\Social\Widgets;
use Elementor\Controls_Manager;
use ElementorPro\Base\Base_Widget;
use ElementorPro\Modules\Social\Classes\Facebook_SDK_Manager;
use ElementorPro\Modules\Social\Module;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
class Facebook_Comments extends Base_Widget {
public function get_name() {
return 'facebook-comments';
}
public function get_title() {
return esc_html__( 'Facebook Comments', 'elementor-pro' );
}
public function get_icon() {
return 'eicon-facebook-comments';
}
public function get_keywords() {
return [ 'facebook', 'comments', 'embed' ];
}
protected function register_controls() {
$this->start_controls_section(
'section_content',
[
'label' => esc_html__( 'Comments Box', 'elementor-pro' ),
]
);
Facebook_SDK_Manager::add_app_id_control( $this );
$this->add_control(
'comments_number',
[
'label' => esc_html__( 'Comment Count', 'elementor-pro' ),
'type' => Controls_Manager::NUMBER,
'min' => 5,
'max' => 100,
'default' => '10',
'description' => esc_html__( 'Minimum number of comments: 5', 'elementor-pro' ),
'dynamic' => [
'active' => true,
],
]
);
$this->add_control(
'order_by',
[
'label' => esc_html__( 'Order By', 'elementor-pro' ),
'type' => Controls_Manager::SELECT,
'default' => 'social',
'options' => [
'social' => esc_html__( 'Social', 'elementor-pro' ),
'reverse_time' => esc_html__( 'Reverse Time', 'elementor-pro' ),
'time' => esc_html__( 'Time', 'elementor-pro' ),
],
]
);
$this->add_control(
'url_type',
[
'label' => esc_html__( 'Target URL', 'elementor-pro' ),
'type' => Controls_Manager::SELECT,
'options' => [
Module::URL_TYPE_CURRENT_PAGE => esc_html__( 'Current Page', 'elementor-pro' ),
Module::URL_TYPE_CUSTOM => esc_html__( 'Custom', 'elementor-pro' ),
],
'default' => Module::URL_TYPE_CURRENT_PAGE,
'separator' => 'before',
]
);
$this->add_control(
'url_format',
[
'label' => esc_html__( 'URL Format', 'elementor-pro' ),
'type' => Controls_Manager::SELECT,
'options' => [
Module::URL_FORMAT_PLAIN => esc_html__( 'Plain Permalink', 'elementor-pro' ),
Module::URL_FORMAT_PRETTY => esc_html__( 'Pretty Permalink', 'elementor-pro' ),
],
'default' => Module::URL_FORMAT_PLAIN,
'condition' => [
'url_type' => Module::URL_TYPE_CURRENT_PAGE,
],
]
);
$this->add_control(
'url',
[
'label' => esc_html__( 'Link', 'elementor-pro' ),
'placeholder' => esc_html__( 'https://your-link.com', 'elementor-pro' ),
'label_block' => true,
'condition' => [
'url_type' => Module::URL_TYPE_CUSTOM,
],
]
);
$this->end_controls_section();
}
public function render() {
$settings = $this->get_settings_for_display();
if ( Module::URL_TYPE_CURRENT_PAGE === $settings['url_type'] ) {
$permalink = Facebook_SDK_Manager::get_permalink( $settings );
} else {
if ( ! filter_var( $settings['url'], FILTER_VALIDATE_URL ) ) {
echo $this->get_title() . ': ' . esc_html__( 'Please enter a valid URL', 'elementor-pro' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
return;
}
$permalink = esc_url( $settings['url'] );
}
$attributes = [
'class' => 'elementor-facebook-widget fb-comments',
'data-href' => $permalink,
'data-width' => '100%',
'data-numposts' => $settings['comments_number'],
'data-order-by' => $settings['order_by'],
// The style prevent's the `widget.handleEmptyWidget` to set it as an empty widget
'style' => 'min-height: 1px',
];
$this->add_render_attribute( 'embed_div', $attributes );
?>
<div <?php $this->print_render_attribute_string( 'embed_div' ); ?>></div>
<?php
}
public function render_plain_content() {}
public function get_group_name() {
return 'social';
}
}