STRATO-apps/wordpress_03/app/wp-content/plugins/bdthemes-element-pack/modules/post-list/module.php
SHA-256: f1e4145b3fd57ef5844e12a3889fd26f2b5df46b2a39a9f59b0d357612878428
<?php
namespace ElementPack\Modules\PostList;
use ElementPack\Base\Element_Pack_Module_Base;
use ElementPack\Traits\Global_Terms_Query_Controls;
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
class Module extends Element_Pack_Module_Base {
use Global_Terms_Query_Controls;
public function __construct() {
parent::__construct();
add_action('wp_ajax_bdt_post_list', [$this, 'bdt_post_list_callback']);
add_action('wp_ajax_nopriv_bdt_post_list', [$this, 'bdt_post_list_callback']);
}
public function get_name() {
return 'post-list';
}
public function get_widgets() {
$widgets = [
'Post_List',
];
return $widgets;
}
public function get_tab_output($output) {
$tags = [
'div' => ['class' => [], 'data-separator' => [], 'id' => []],
'a' => ['href' => [], 'target' => [], 'class' => [], 'data-bdt-tooltip' => []],
'span' => ['class' => [], 'style' => []],
'i' => ['class' => [], 'aria-hidden' => []],
'img' => ['src' => [], 'class' => []],
'h3' => [
'class' => []
],
];
if (isset($output)) {
echo wp_kses($output, $tags);
}
}
function bdt_post_list_callback() {
if (!isset($_POST['nonce']) || !wp_verify_nonce(sanitize_key( wp_unslash($_POST['nonce']) ), 'element-pack-site')) {
wp_send_json_error(['message' => 'Security check failed'], 403);
exit;
}
$settings = isset($_POST['settings']) ? map_deep( wp_unslash( $_POST['settings'] ), 'sanitize_text_field' ) : [];
// Restrict Allowed Post Types
$allowed_post_types = ['post', 'page', 'campaign', 'lightbox_library', 'tribe_events', 'product', 'portfolio', 'faq', 'bdthemes-testimonial', 'bdthemes-testimonial', 'knowledge_base'];
$post_type = isset($_POST['post_type']) ? sanitize_text_field( wp_unslash($_POST['post_type']) ) : 'post';
if (!in_array($post_type, $allowed_post_types)) {
wp_send_json_error(['message' => 'Invalid post type'], 403);
exit;
}
// Restrict posts_per_page to Prevent DoS
$posts_per_page = isset($settings['posts_per_page']) ? intval($settings['posts_per_page']) : 6;
$posts_per_page = min($posts_per_page, 50); // Max 50
$category_slug = isset($_POST['category']) ? sanitize_text_field( wp_unslash($_POST['category']) ) : '';
// Visibility
$show_title = isset($_POST['showHide']['show_title']) ? sanitize_text_field( wp_unslash($_POST['showHide']['show_title']) ) : '';
$show_category = isset($_POST['showHide']['show_category']) ? sanitize_text_field( wp_unslash($_POST['showHide']['show_category']) ) : '';
$show_image = isset($_POST['showHide']['show_image']) ? sanitize_text_field( wp_unslash($_POST['showHide']['show_image']) ) : '';
$icon = isset($_POST['showHide']['icon']) ? sanitize_text_field( wp_unslash($_POST['showHide']['icon']) ) : '';
$show_date = isset($_POST['showHide']['show_date']) ? sanitize_text_field( wp_unslash($_POST['showHide']['show_date']) ) : '';
$bdt_link_new_tab = isset($_POST['showHide']['bdt_link_new_tab']) ? sanitize_text_field( wp_unslash($_POST['showHide']['bdt_link_new_tab']) ) : '';
$human_diff_time = isset($_POST['showHide']['human_diff_time']) ? sanitize_text_field( wp_unslash($_POST['showHide']['human_diff_time']) ) : '';
$human_diff_time_short = isset($_POST['showHide']['human_diff_time_short']) ? sanitize_text_field( wp_unslash($_POST['showHide']['human_diff_time_short']) ) : '';
// Settings
$taxonomy = isset($settings['taxonomy']) ? sanitize_text_field( wp_unslash($settings['taxonomy']) ) : '';
$order = isset($settings['order']) ? sanitize_text_field( wp_unslash($settings['order']) ) : '';
$orderby = isset($settings['orderby']) ? sanitize_text_field( wp_unslash($settings['orderby']) ) : '';
// Get include/exclude term IDs for "ALL" filter
$include_term_ids = isset($settings['posts_include_term_ids']) ? $settings['posts_include_term_ids'] : '';
$exclude_term_ids = isset($settings['posts_exclude_term_ids']) ? $settings['posts_exclude_term_ids'] : '';
// Create a unique transient key
// $transient_key = 'bdt_post_list_' . md5(serialize([$category_slug, $post_type, $order, $orderby, $posts_per_page]));
// Try to get cached response
// $response = get_transient($transient_key);
// If no cached response, proceed with the query and cache it
// if (false === $response) {
$ajaxposts = $this->bdt_get_posts_by_ajax($post_type, $order, $orderby, $posts_per_page, $taxonomy, $category_slug, $include_term_ids, $exclude_term_ids);
$response = '';
if ($ajaxposts->have_posts()) {
$item_index = 1;
while ($ajaxposts->have_posts()) :
if ($item_index > $posts_per_page) {
break;
}
$ajaxposts->the_post();
$post_link = get_permalink();
$image_src = wp_get_attachment_image_url(get_post_thumbnail_id(), 'full');
$category = element_pack_get_category_list($post_type, ', ');
if ($human_diff_time == 'yes') {
$date = element_pack_post_time_diff(($human_diff_time_short == 'yes') ? 'short' : '');
} else {
$date = get_the_date();
}
$placeholder_image_src = \Elementor\Utils::get_placeholder_image_src();
$image_src = wp_get_attachment_image_src(get_post_thumbnail_id(), 'large');
if (!$image_src) {
$image_src = $placeholder_image_src;
} else {
$image_src = $image_src[0];
}
if ($bdt_link_new_tab == 'yes') {
$target = '_blank';
} else {
$target = '_self';
}
// Output structure for each post
$response .= '<div class="bdt-item-wrap bdt-flex">';
$response .= '<div class="bdt-item bdt-flex bdt-flex-middle">';
if ($icon) {
$response .= '<div class="bdt-list-icon">';
$response .= '<i class="'. esc_attr($icon) .'"></i>';
$response .= '</div>';
}
if ('yes' == $show_image) {
$response .= '<div class="bdt-image bdt-flex">';
$response .= '<a href="' . esc_url($post_link) . '"><img src="' . esc_url($image_src) . '" alt="' . get_the_title() . '"></a>';
$response .= '</div>';
}
$response .= '<div class="bdt-content">';
if ('yes' == $show_title) {
$response .= '<h3 class="bdt-title"><a href="' . esc_url($post_link) . '" class="bdt-link" target="'. $target .'">' . get_the_title() . '</a></h3>';
}
if ('yes' == $show_category || 'yes' == $show_date) {
$response .= '<div class="bdt-meta bdt-subnav bdt-flex-middle">';
if ($show_date == 'yes') {
$response .= '<span class="bdt-date">' . $date . '</span>';
}
if ($show_category == 'yes') {
$response .= '<span class="bdt-category">' . $category . '</span>';
}
$response .= '</div>';
}
$response .= '</div>';
$response .= '</div>';
$response .= '</div>';
$item_index++;
endwhile;
// Set the transient with the generated response
// set_transient($transient_key, $response, 6 * HOUR_IN_SECONDS); // Cache for 6 hours
} else {
$response = 'empty';
}
wp_reset_postdata();
// }
$this->get_tab_output($response);
exit();
}
}