/home/skemvmse/www/wp-content/plugins/ultimate-elementor/modules/posts/widgets/posts-base.php
<?php
/**
* UAEL Posts Abstract Base Class.
*
* @package UAEL
*/
namespace UltimateElementor\Modules\Posts\Widgets;
use Elementor\Controls_Manager;
use UltimateElementor\Base\Common_Widget;
use UltimateElementor\Classes\UAEL_Posts_Helper;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
/**
* Class Posts_Base
*/
abstract class Posts_Base extends Common_Widget {
/**
* Query object
*
* @since 1.7.0
* @var object $query
*/
protected $query = null;
/**
* Query object
*
* @since 1.7.0
* @var boolean $_has_template_content
*/
protected $_has_template_content = false; // phpcs:ignore PSR2.Classes.PropertyDeclaration.Underscore
/**
* Retrieve the list of scripts the widget depended on.
*
* Used to set scripts dependencies required to run the widget.
*
* @since 1.7.0
* @access public
*
* @return array Widget scripts dependencies.
*/
public function get_script_depends() {
return array(
'imagesloaded',
'uael-slick',
'uael-isotope',
'uael-posts',
'uael-element-resize',
);
}
/**
* Render current query.
*
* @since 1.7.0
* @access protected
*/
public function get_query() {
return $this->query;
}
/**
* Render output on the frontend.
*
* Written in PHP and used to generate the final HTML.
*
* @since 1.7.0
* @access protected
*/
public function render() {}
/**
* Set current query.
*
* @since 1.7.0
* @access protected
*/
abstract public function query_posts();
/**
* Register controls.
*
* @since 1.29.2
* @access protected
*/
protected function register_controls() {
$this->start_controls_section(
'section_layout',
array(
'label' => __( 'Skin', 'uael' ),
'tab' => Controls_Manager::TAB_CONTENT,
)
);
if ( parent::is_internal_links() ) {
$settings_page = admin_url( 'options-general.php?page=' . UAEL_SLUG . '&action=post' );
$this->add_control(
'deactivate_post_skin',
array(
'type' => Controls_Manager::RAW_HTML,
/* translators: %1$s doc link */
'raw' => sprintf( __( '<b>Note:</b> To add/remove more skins, click %1$s here. %2$s', 'uael' ), '<a href="' . $settings_page . '" target="_blank" rel="noopener">', '</a>' ),
'content_classes' => 'elementor-panel-alert elementor-panel-alert-warning',
)
);
}
$this->end_controls_section();
$this->register_content_query_controls();
$this->register_helpful_information();
}
/**
* Register Posts Query Controls.
*
* @since 1.7.0
* @access public
*/
public function register_content_query_controls() {
$this->start_controls_section(
'section_filter_field',
array(
'label' => __( 'Query', 'uael' ),
'tab' => Controls_Manager::TAB_CONTENT,
)
);
$this->add_control(
'query_type',
array(
'label' => __( 'Query Type', 'uael' ),
'type' => Controls_Manager::SELECT,
'default' => 'custom',
'label_block' => true,
'options' => array(
'main' => __( 'Main Query', 'uael' ),
'custom' => __( 'Custom Query', 'uael' ),
),
)
);
$post_types = UAEL_Posts_Helper::get_post_types();
$this->add_control(
'post_type_filter',
array(
'label' => __( 'Post Type', 'uael' ),
'type' => Controls_Manager::SELECT,
'default' => 'post',
'label_block' => true,
'options' => $post_types,
'separator' => 'after',
'condition' => array(
'query_type' => 'custom',
),
)
);
foreach ( $post_types as $key => $type ) {
// Get all the taxanomies associated with the post type.
$taxonomy = UAEL_Posts_Helper::get_taxonomy( $key );
if ( ! empty( $taxonomy ) ) {
// Get all taxonomy values under the taxonomy.
foreach ( $taxonomy as $index => $tax ) {
$terms = get_terms( $index );
$related_tax = array();
if ( ! empty( $terms ) ) {
foreach ( $terms as $t_index => $t_obj ) {
$related_tax[ $t_obj->slug ] = $t_obj->name;
}
$this->add_control(
$index . '_' . $key . '_filter_rule',
array(
/* translators: %s Label */
'label' => sprintf( __( '%s Filter Rule', 'uael' ), $tax->label ),
'type' => Controls_Manager::SELECT,
'default' => 'IN',
'label_block' => true,
'options' => array(
/* translators: %s label */
'IN' => sprintf( __( 'Match %s', 'uael' ), $tax->label ),
/* translators: %s label */
'NOT IN' => sprintf( __( 'Exclude %s', 'uael' ), $tax->label ),
),
'condition' => array(
'post_type_filter' => $key,
'query_type' => 'custom',
),
)
);
// Add control for all taxonomies.
$this->add_control(
'tax_' . $index . '_' . $key . '_filter',
array(
/* translators: %s label */
'label' => sprintf( __( '%s Filter', 'uael' ), $tax->label ),
'type' => Controls_Manager::SELECT2,
'multiple' => true,
'default' => '',
'label_block' => true,
'options' => $related_tax,
'condition' => array(
'post_type_filter' => $key,
'query_type' => 'custom',
),
'separator' => 'after',
)
);
}
}
}
}
$this->add_control(
'author_filter_rule',
array(
'label' => __( 'Author Filter Rule', 'uael' ),
'type' => Controls_Manager::SELECT,
'default' => 'author__in',
'label_block' => true,
'options' => array(
'author__in' => __( 'Match Author', 'uael' ),
'author__not_in' => __( 'Exclude Author', 'uael' ),
),
'condition' => array(
'query_type' => 'custom',
),
)
);
$this->add_control(
'author_filter',
array(
'label' => __( 'Author Filter', 'uael' ),
'type' => Controls_Manager::SELECT2,
'multiple' => true,
'default' => '',
'label_block' => true,
'options' => UAEL_Posts_Helper::get_users(),
'separator' => 'after',
'condition' => array(
'query_type' => 'custom',
),
)
);
$this->add_control(
'post_filter_rule',
array(
'label' => __( 'Post Filter Rule', 'uael' ),
'type' => Controls_Manager::SELECT,
'default' => 'post__in',
'label_block' => true,
'options' => array(
'post__in' => __( 'Match Posts', 'uael' ),
'post__not_in' => __( 'Exclude Posts', 'uael' ),
),
'condition' => array(
'query_type' => 'custom',
),
)
);
$this->add_control(
'post_filter',
array(
'label' => __( 'Post Filter', 'uael' ),
'type' => 'uael-query-posts',
'post_type' => 'all',
'multiple' => true,
'label_block' => true,
'separator' => 'after',
'condition' => array(
'query_type' => 'custom',
),
)
);
$this->add_control(
'ignore_sticky_posts',
array(
'label' => __( 'Ignore Sticky Posts', 'uael' ),
'description' => __( 'Note: Sticky-posts ordering is visible on frontend only.', 'uael' ),
'type' => Controls_Manager::SWITCHER,
'label_on' => __( 'Yes', 'uael' ),
'label_off' => __( 'No', 'uael' ),
'return_value' => 'yes',
'default' => 'yes',
'condition' => array(
'query_type' => 'custom',
),
)
);
$this->add_control(
'offset',
array(
'label' => __( 'Offset', 'uael' ),
'type' => Controls_Manager::NUMBER,
'default' => 0,
'description' => __( 'Use this setting to exclude number of initial posts from being display.', 'uael' ),
'condition' => array(
'query_type' => 'custom',
),
)
);
$this->add_control(
'query_exclude_current',
array(
'label' => __( 'Exclude Current Post', 'uael' ),
'type' => Controls_Manager::SWITCHER,
'label_on' => __( 'Yes', 'uael' ),
'label_off' => __( 'No', 'uael' ),
'return_value' => 'yes',
'default' => '',
'description' => __( 'Enable this option to remove current post from the query.', 'uael' ),
'condition' => array(
'query_type' => 'custom',
),
)
);
$this->add_control(
'orderby_heading',
array(
'label' => __( 'Post Order', 'uael' ),
'type' => Controls_Manager::HEADING,
'condition' => array(
'query_type' => 'custom',
),
'separator' => 'before',
)
);
$this->add_control(
'orderby',
array(
'label' => __( 'Order by', 'uael' ),
'type' => Controls_Manager::SELECT,
'default' => 'date',
'options' => array(
'date' => __( 'Date', 'uael' ),
'title' => __( 'Title', 'uael' ),
'rand' => __( 'Random', 'uael' ),
'menu_order' => __( 'Menu Order', 'uael' ),
),
'condition' => array(
'query_type' => 'custom',
),
)
);
$this->add_control(
'order',
array(
'label' => __( 'Order', 'uael' ),
'type' => Controls_Manager::SELECT,
'default' => 'desc',
'options' => array(
'desc' => __( 'Descending', 'uael' ),
'asc' => __( 'Ascending', 'uael' ),
),
'condition' => array(
'query_type' => 'custom',
),
)
);
$this->add_control(
'noposts_heading',
array(
'label' => __( 'If Posts Not Found', 'uael' ),
'type' => Controls_Manager::HEADING,
'separator' => 'before',
)
);
$this->add_control(
'no_results_text',
array(
'label' => __( 'Display Message', 'uael' ),
'type' => Controls_Manager::TEXT,
'label_block' => true,
'default' => __( 'Sorry, we couldn\'t find any posts. Please try a different search.', 'uael' ),
)
);
$this->add_control(
'show_search_box',
array(
'label' => __( 'Display Search Box', 'uael' ),
'type' => Controls_Manager::SWITCHER,
'label_on' => __( 'Yes', 'uael' ),
'label_off' => __( 'No', 'uael' ),
'return_value' => 'yes',
'default' => 'no',
'description' => __( 'Enable this setting to display search box if posts not found in your query.', 'uael' ),
)
);
$this->end_controls_section();
}
/**
* Helpful Information.
*
* @since 1.7.0
* @access protected
*/
protected function register_helpful_information() {
if ( parent::is_internal_links() ) {
$this->start_controls_section(
'section_helpful_info',
array(
'label' => __( 'Helpful Information', 'uael' ),
)
);
$this->add_control(
'help_doc_0',
array(
'type' => Controls_Manager::RAW_HTML,
/* translators: %1$s doc link */
'raw' => sprintf( __( '%1$s Getting started article » %2$s', 'uael' ), '<a href=' . UAEL_DOMAIN . 'docs/posts-widget/?utm_source=uael-pro-dashboard&utm_medium=uael-editor-screen&utm_campaign=uael-pro-plugin" target="_blank" rel="noopener">', '</a>' ),
'content_classes' => 'uael-editor-doc',
)
);
$this->add_control(
'help_doc_1',
array(
'type' => Controls_Manager::RAW_HTML,
/* translators: %1$s doc link */
'raw' => sprintf( __( '%1$s Getting started video » %2$s', 'uael' ), '<a href="https://www.youtube.com/watch?v=8fu8W4quFg0&index=20&list=PL1kzJGWGPrW_7HabOZHb6z88t_S8r-xAc" target="_blank" rel="noopener">', '</a>' ),
'content_classes' => 'uael-editor-doc',
)
);
$this->add_control(
'help_doc_2',
array(
'type' => Controls_Manager::RAW_HTML,
/* translators: %1$s doc link */
'raw' => sprintf( __( '%1$s How query builder works for post? » %2$s', 'uael' ), '<a href=' . UAEL_DOMAIN . 'docs/how-query-builder-works-for-posts-widget/?utm_source=uael-pro-dashboard&utm_medium=uael-editor-screen&utm_campaign=uael-pro-plugin" target="_blank" rel="noopener">', '</a>' ),
'content_classes' => 'uael-editor-doc',
)
);
$this->add_control(
'help_doc_3',
array(
'type' => Controls_Manager::RAW_HTML,
/* translators: %1$s doc link */
'raw' => sprintf( __( '%1$s Enable infinite load pagination » %2$s', 'uael' ), '<a href=' . UAEL_DOMAIN . 'docs/how-to-enable-infinite-load-pagination-for-posts/?utm_source=uael-pro-dashboard&utm_medium=uael-editor-screen&utm_campaign=uael-pro-plugin" target="_blank" rel="noopener">', '</a>' ),
'content_classes' => 'uael-editor-doc',
)
);
$this->add_control(
'help_doc_4',
array(
'type' => Controls_Manager::RAW_HTML,
/* translators: %1$s doc link */
'raw' => sprintf( __( '%1$s Filters/Actions » %2$s', 'uael' ), '<a href=' . UAEL_DOMAIN . 'docs/filters-actions-for-posts-widget/?utm_source=uael-pro-dashboard&utm_medium=uael-editor-screen&utm_campaign=uael-pro-plugin" target="_blank" rel="noopener">', '</a>' ),
'content_classes' => 'uael-editor-doc',
)
);
$this->add_control(
'help_doc_5',
array(
'type' => Controls_Manager::RAW_HTML,
/* translators: %1$s doc link */
'raw' => sprintf( __( '%1$s Using filterable tabs » %2$s', 'uael' ), '<a href=' . UAEL_DOMAIN . 'docs/filterable-tabs-for-posts-widget/?utm_source=uael-pro-dashboard&utm_medium=uael-editor-screen&utm_campaign=uael-pro-plugin" target="_blank" rel="noopener">', '</a>' ),
'content_classes' => 'uael-editor-doc',
)
);
$this->add_control(
'help_doc_6',
array(
'type' => Controls_Manager::RAW_HTML,
/* translators: %1$s doc link */
'raw' => sprintf( __( '%1$s Layouts in Post » %2$s', 'uael' ), '<a href=' . UAEL_DOMAIN . 'docs/layouts-for-posts-widget/?utm_source=uael-pro-dashboard&utm_medium=uael-editor-screen&utm_campaign=uael-pro-plugin" target="_blank" rel="noopener">', '</a>' ),
'content_classes' => 'uael-editor-doc',
)
);
$this->end_controls_section();
}
}
}