HEX
Server: Apache
System: Linux webd006.cluster128.gra.hosting.ovh.net 6.18.42-ovh-vps-grsec-zfs+ #1 SMP PREEMPT_DYNAMIC Wed Aug 5 15:59:48 CEST 2026 x86_64
User: zwafgyp (177615)
PHP: 7.4.33
Disabled: _dyuweyrj4,_dyuweyrj4r,dl
Upload Files
File: /home/zwafgyp/lacalita/wp-content/plugins/rey-core/inc/modules/cards/sources/reviews.php
<?php
namespace ReyCore\Modules\Cards\Sources;

if (!defined('ABSPATH')) exit; // Exit if accessed directly

class Reviews extends Base {

	public function get_id(){
		return 'reviews';
	}

	public function get_title(){
		return esc_html__( 'Product Reviews', 'rey-core' );
	}

	public function controls($element){

		$element->start_controls_section(
			'section_product_reviews',
			[
				'label' => __( 'Product Reviews Settings', 'rey-core' ),
				'condition' => [
					'source' => 'reviews',
				],
			]
		);

			$element->add_control(
				'reviews_type',
				[
					'label' => esc_html__( 'Query Type', 'rey-core' ),
					'type' => \Elementor\Controls_Manager::SELECT,
					'default' => 'latest',
					'options' => [
						'latest'  => esc_html__( 'Latest reviews', 'rey-core' ),
						'product'  => esc_html__( 'Specific Products reviews', 'rey-core' ),
					],
				]
			);

			$element->add_control(
				'reviews_limit',
				[
					'label' => __( 'Limit', 'rey-core' ),
					'description' => __( 'Select the number of items to load from query.', 'rey-core' ),
					'type' => \Elementor\Controls_Manager::NUMBER,
					'default' => 8,
					'min' => 1,
					'max' => 100,
				]
			);

			$element->add_control(
				'reviews_min',
				[
					'label' => esc_html__( 'Minimum rating', 'rey-core' ),
					'type' => \Elementor\Controls_Manager::SELECT,
					'default' => 4,
					'options' => [
						'5'  => esc_html__( '5 Stars', 'rey-core' ),
						'4'  => esc_html__( '4 Stars', 'rey-core' ),
						'3'  => esc_html__( '3 Stars', 'rey-core' ),
						'2'  => esc_html__( '2 Stars', 'rey-core' ),
						'1'  => esc_html__( '1 Stars', 'rey-core' ),
					],
				]
			);

			$element->add_control(
				'reviews_products',
				[
					'label'       => __( 'Select Products', 'rey-core' ),
					'type'        => 'rey-query',
					'default'     => '',
					'label_block' => true,
					'multiple'    => true,
					'placeholder' => esc_html__('- Select -', 'rey-core'),
					'query_args'  => [
						'type'      => 'posts',
						'post_type' => 'product',
					],
					'condition' => [
						'reviews_type' => 'product',
					],
				]
			);

			$element->add_control(
				'reviews_color',
				[
					'label' => esc_html__( 'Color', 'rey-core' ),
					'type' => \Elementor\Controls_Manager::COLOR,
					'selectors' => [
						'{{WRAPPER}}' => '--star-rating-color: {{VALUE}}',
					],
				]
			);

			$element->add_control(
				'reviews_size',
				[
					'label' => esc_html__( 'Size', 'rey-core' ),
					'type' => \Elementor\Controls_Manager::NUMBER,
					'default' => '',
					'min' => 0,
					'max' => 1000,
					'step' => 1,
					'selectors' => [
						'{{WRAPPER}}' => '--star-rating-size: {{VALUE}}px',
					],
				]
			);

			$element->add_control(
				'reviews_spacing',
				[
					'label' => esc_html__( 'Spacing', 'rey-core' ),
					'type' => \Elementor\Controls_Manager::NUMBER,
					'default' => '',
					'min' => 0,
					'max' => 1000,
					'step' => 1,
					'selectors' => [
						'{{WRAPPER}} .star-rating' => '--star-rating-spacing: {{VALUE}}px',
					],
				]
			);

		$element->end_controls_section();

	}

	public function query($element){

		$args = [
			'status'  => 'approve',
			'type'    => 'review',
			'parent'  => 0,
			'number'  => $element->_settings['reviews_limit'],
			// 'fields'  => 'ids',
			// 'orderby' => '',
			// 'order'   => 'DESC',
		];

		if( isset($element->_settings['load_more_enable']) && '' !== $element->_settings['load_more_enable'] ){
			if( $offset = $element->get_offset() ){
				$args['offset'] = $offset;
			}
		}

		if( 'product' === $element->_settings['reviews_type'] && ($product_ids = $element->_settings['reviews_products']) ){

			// $args['post_id'] = $product_id;
			$args['post__in'] = array_map('absint', $product_ids);
		}

		if( $min_rating = $element->_settings['reviews_min'] ){
			$args['meta_query']['relation'] = 'AND';
			$args['meta_query'][] = [
				'key'     => 'rating',
				'type'    => 'NUMERIC',
				'compare' => '>=',
				'value'   => absint($min_rating),
			];
		}

		$comments_query = new \WP_Comment_Query;
		$comments = $comments_query->query( $args );

		return $comments;
	}

	public function parse_item($element){

		if( ! (isset($element->_items[$element->item_key]) && ($item = $element->_items[$element->item_key])) ){
			return [];
		}

		$args = [
			'image'        => [],
			'_id'          => 'posts-' . $item->comment_ID,
			'post_id'      => $item->comment_ID,
			'item_classes' => [
				'post-' . $item->comment_ID,
				'review',
			],
			'button_url'   => [],
			'button_text'  => '',
			'button_show'  => 'no',
			'captions'     => 'yes',
			'title'        => $item->comment_author,
			'subtitle'     => $item->comment_content,
		];

		$element->_settings['button_show'] = 'no';

		if( $rating = intval( get_comment_meta( $item->comment_ID, 'rating', true ) ) ){
			$args['before_title'] = sprintf('<div class="star-rtng-wrapper">%s</div>', wc_get_rating_html( $rating ));
		}

		return $args;
	}

	public function load_more_button_per_page($element){
		return isset($element->_settings['reviews_limit']) && ($limit = $element->_settings['reviews_limit']) ? $limit : false;
	}
}