Done ! 403WebShell
403Webshell
Server IP : 46.105.57.169  /  Your IP : 216.73.216.67
Web Server : Apache
System : Linux webm002.cluster120.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 : verseaumee ( 152031)
PHP Version : 8.5.7
Disable Function : _dyuweyrj4,_dyuweyrj4r,dl
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /home/verseaumee/blueversion/wp-content/plugins/stm_vehicles_listing/includes/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /home/verseaumee/blueversion/wp-content/plugins/stm_vehicles_listing/includes/functions.php
<?php
if ( ! defined( 'ABSPATH' ) ) {
	exit; // Exit if accessed directly
}


/**
 * Get filter configuration
 *
 * @param array $args
 *
 * @return array
 */
function stm_listings_attributes( $args = array() ) {
	$args = wp_parse_args(
		$args,
		array(
			'where'  => array(),
			'key_by' => '',
		)
	);

	$result = array();
	$data   = array_filter( (array) get_option( 'stm_vehicle_listing_options' ) );

	foreach ( $data as $key => $_data ) {
		$passed = true;
		foreach ( $args['where'] as $_field => $_val ) {
			if ( array_key_exists( $_field, $_data ) && boolval( $_data[ $_field ] ) !== boolval( $_val ) ) {
				$passed = false;
				break;
			}
		}

		if ( $passed ) {
			if ( $args['key_by'] ) {
				$result[ $_data[ $args['key_by'] ] ] = $_data;
			} else {
				$result[] = $_data;
			}
		}
	}

	return apply_filters( 'stm_listings_attributes', $result, $args );
}

/**
 * Get single attribute configuration by taxonomy slug
 *
 * @param $taxonomy
 *
 * @return array|mixed
 */
function stm_listings_attribute( $taxonomy ) {
	$attributes = stm_listings_attributes( array( 'key_by' => 'slug' ) );
	if ( array_key_exists( $taxonomy, $attributes ) ) {
		return $attributes[ $taxonomy ];
	}

	return array();
}

/**
 * Get all terms grouped by taxonomy for the filter
 *
 * @return array
 */
function stm_listings_filter_terms( $hide_empty = false ) {
	static $terms;

	if ( isset( $terms ) ) {
		return $terms;
	}

	$filters = stm_listings_attributes(
		array(
			'where'  => array( 'use_on_car_filter' => true ),
			'key_by' => 'slug',
		)
	);

	$numeric = array_keys(
		stm_listings_attributes(
			array(
				'where'  => array(
					'use_on_car_filter' => true,
					'numeric'           => true,
				),
				'key_by' => 'slug',
			)
		)
	);

	$_terms = array();

	if ( count( $numeric ) ) {
		$_terms = get_terms(
			array(
				'taxonomy'               => $numeric,
				'hide_empty'             => $hide_empty,
				'update_term_meta_cache' => false,
			)
		);

		foreach ( $numeric as $numeric_item ) {
			if ( in_array( $numeric_item, $numeric, true ) ) {
				$_terms = array_merge(
					$_terms,
					get_terms(
						array(
							'taxonomy'               => $numeric_item,
							'hide_empty'             => false,
							'update_term_meta_cache' => false,
						)
					)
				);
			}
		}
	}

	$taxes = array_diff( array_keys( $filters ), $numeric );
	$taxes = apply_filters( 'stm_listings_filter_taxonomies', $taxes );

	$_terms = array_merge(
		$_terms,
		get_terms(
			array(
				'taxonomy'               => $taxes,
				'hide_empty'             => $hide_empty,
				'update_term_meta_cache' => false,
			)
		)
	);

	$terms = array();

	foreach ( $taxes as $tax ) {
		$terms[ $tax ] = array();
	}

	foreach ( $_terms as $_term ) {
		$terms[ $_term->taxonomy ][ $_term->slug ] = $_term;
	}

	$terms = apply_filters( 'stm_listings_filter_terms', $terms );

	return $terms;
}

/**
 * Drop-down options grouped by attribute for the filter
 *
 * @return array
 */
function stm_listings_filter_options( $hide_empty = false ) {
	static $options;

	if ( isset( $options ) ) {
		return $options;
	}

	$filters = stm_listings_attributes(
		array(
			'where'  => array( 'use_on_car_filter' => true ),
			'key_by' => 'slug',
		)
	);
	$terms   = stm_listings_filter_terms( $hide_empty );
	$options = array();

	foreach ( $terms as $tax => $_terms ) {
		$_filter         = isset( $filters[ $tax ] ) ? $filters[ $tax ] : array();
		$options[ $tax ] = _stm_listings_filter_attribute_options( $tax, $_terms );

		if ( empty( $_filter['numeric'] ) || ! empty( $_filter['use_on_car_filter_links'] ) ) {
			$_remaining = stm_listings_options_remaining( $terms[ $tax ], stm_listings_query() );

			foreach ( $_terms as $_term ) {
				if ( isset( $_remaining[ $_term->term_taxonomy_id ] ) ) {
					$options[ $tax ][ $_term->slug ]['count'] = (int) $_remaining[ $_term->term_taxonomy_id ];
				} else {
					$options[ $tax ][ $_term->slug ]['count']    = 0;
					$options[ $tax ][ $_term->slug ]['disabled'] = true;
				}
			}
		}
	}

	$options = apply_filters( 'stm_listings_filter_options', $options );

	return $options;
}

/**
 * Get list of attribute options filtered by query
 *
 * @param array    $terms
 * @param WP_Query $from
 *
 * @return array
 */
function stm_listings_options_remaining( $terms, $from = null ) {
	/** !!!!!!!!! VERY IMPORTANT !!!!!!!!!
	* BEFORE ADD JOIN OR OTHER DATA TO QUERY
	* CHECK IS THAT DATA ALREADY EXIST IN VARS
	*  - $meta_query_count_sql, $tax_query_sql etc
	*/
	global $wpdb;

	/** @var WP_Query $from */
	$from = is_null( $from ) ? $GLOBALS['wp_query'] : $from;

	if ( empty( $terms ) || is_null( $from ) ) {
		return array();
	}

	$meta_query_count = new WP_Meta_Query( $from->get( 'meta_query_count', array() ) );
	$tax_query        = new WP_Tax_Query( $from->get( 'tax_query', array() ) );

	/** @var  IMPORTANT $meta_query_count_sql connection with 'postmeta' table  */
	$meta_query_count_sql = $meta_query_count->get_sql( 'post', $wpdb->posts, 'ID' );
	$tax_query_sql        = $tax_query->get_sql( $wpdb->posts, 'ID' );

	$term_ids  = wp_list_pluck( $terms, 'term_taxonomy_id' );
	$post_type = $from->get( 'post_type' );

	// Generate query
	$query           = array();
	$query['select'] = "SELECT term_taxonomy.term_taxonomy_id, COUNT( {$wpdb->posts}.ID ) as count";
	$query['from']   = "FROM {$wpdb->posts}";

	$query['join']  = "LEFT JOIN {$wpdb->term_relationships} AS term_relationships ON {$wpdb->posts}.ID = term_relationships.object_id";
	$query['join'] .= "\nLEFT JOIN {$wpdb->term_taxonomy} AS term_taxonomy USING( term_taxonomy_id )";
	$query['join'] .= "\n" . $tax_query_sql['join'] . $meta_query_count_sql['join'];

	$query['where']  = "WHERE {$wpdb->posts}.post_type IN ( '{$post_type}' ) AND {$wpdb->posts}.post_status = 'publish' ";
	$query['where'] .= "\n" . $tax_query_sql['where'] . $meta_query_count_sql['where'];
	$query['where'] .= "\nAND term_taxonomy.term_taxonomy_id IN (" . implode( ',', array_map( 'absint', $term_ids ) ) . ')';

	$query['group_by'] = 'GROUP BY term_taxonomy.term_taxonomy_id';

	$query = apply_filters( 'stm_listings_options_remaining_query', $query );
	$query = join( "\n", $query );

	$results = $wpdb->get_results( $query ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
	$results = wp_list_pluck( $results, 'count', 'term_taxonomy_id' );

	return $results;
}

/**
 * Filter configuration array
 *
 * @return array
 */
function stm_listings_filter( $source = null, $hide_empty = false ) {
	$query   = stm_listings_query( $source );
	$total   = $query->found_posts;
	$filters = stm_listings_attributes(
		array(
			'where'  => array( 'use_on_car_filter' => true ),
			'key_by' => 'slug',
		)
	);
	$options = stm_listings_filter_options( $hide_empty );
	$terms   = stm_listings_filter_terms();
	$url     = '';

	$compact = compact( 'options', 'filters', 'total', 'url' );

	if ( isset( $_GET['result_with_posts'] ) ) {
		$filter_params = explode( ',', $_GET['filter-params'] );
		$fp            = '';
		foreach ( $filter_params as $k => $val ) {
			$get = ( true === apply_filters( 'stm_is_listing_price_field', $val ) ) ? 'max_' . $val : $val;
			if ( isset( $_GET[ $get ] ) && ! empty( $_GET[ $get ] ) ) {

				if ( empty( $fp ) ) {
					$fp .= $filters[ $val ]['single_name'];
				} elseif ( ! empty( $fp ) && 0 !== $k && ( count( $filter_params ) - 1 ) !== $k ) {
					$fp .= ', ' . $filters[ $val ]['single_name'];
				} elseif ( $k >= 1 && ! empty( $fp ) ) {
					$fp .= esc_html__( ' and ', 'stm_vehicles_listing' ) . $filters[ $val ]['single_name'];
				}
			}
		}

		if ( ! empty( $fp ) ) {
			$fp = esc_html__( 'By ', 'stm_vehicles_listing' ) . $fp;
		}

		$posts   = add_review_info_to_listing( $query->posts );
		$compact = compact( 'options', 'filters', 'total', 'url', 'posts', 'fp' );
	}

	if ( isset( $_GET['offset'] ) ) {
		$result_count = count( $query->get_posts() );
		$offset       = $_GET['offset'] + 1;
		if ( $offset * $_GET['posts_per_page'] <= $total ) {

			$offset = ( $offset * $_GET['posts_per_page'] >= $total ) ? 0 : $offset;

			$compact = compact( 'options', 'filters', 'total', 'url', 'posts', 'offset', 'fp', 'result_count' );
		}
	}

	return apply_filters( 'stm_listings_filter', $compact, $terms );
}

function add_review_info_to_listing( $posts ) {
	$new_posts = array();

	foreach ( $posts as $k => $post ) {
		$listing_id = $post->ID;
		$review_id  = get_post_id_by_meta_k_v( 'review_car', $listing_id );
		$post_type  = get_post_type( $listing_id );
		$start_at   = get_post_meta( $review_id, 'show_title_start_at', true );
		$price      = stm_listing_price_view( get_post_meta( $listing_id, 'stm_genuine_price', true ) );
		$hwy        = get_post_meta( $listing_id, 'highway_mpg', true );
		$cwy        = get_post_meta( $listing_id, 'sity_mpg', true );
		$title      = $post->post_title;

		if ( ! is_null( $review_id ) ) {
			$title = '<span>' . $title . '</span> ' . string_max_charlength( get_the_title( $review_id ), 55 );
		}

		$cars_in_compare    = stm_get_compared_items( $post_type );
		$in_compare         = '';
		$car_compare_status = esc_html__( 'Add to compare', 'stm_vehicles_listing' );

		if ( ! empty( $cars_in_compare ) && in_array( $listing_id, $cars_in_compare, true ) ) {
			$in_compare         = 'active';
			$car_compare_status = esc_html__( 'Remove from compare', 'stm_vehicles_listing' );
		}

		$image_url = get_the_post_thumbnail_url( $listing_id, 'stm-img-255-160' );

		if ( empty( $image_url ) && ! is_null( $review_id ) ) {
			$image_data = get_the_post_thumbnail_url( $review_id, 'stm-img-255-160' );
			$image_url  = ( ! empty( $image_data ) ) ? $image_data : get_template_directory_uri() . '/assets/images/plchldr255_160.jpg';
		} elseif ( ! $image_url ) {
			$image_url = get_template_directory_uri() . '/assets/images/plchldr255_160.jpg';
		}

		$post_link = get_the_permalink( $listing_id );
		$excerpt   = apply_filters( 'the_content', get_the_excerpt( $listing_id ) );

		$new_post = array();

		$new_post['id']                 = $listing_id;
		$new_post['car_already_added']  = $in_compare;
		$new_post['car_compare_status'] = $car_compare_status;
		$new_post['title']              = $title;
		$new_post['generate_title']     = stm_generate_title_from_slugs( $listing_id, false );

		$new_post['excerpt']       = $excerpt;
		$new_post['url']           = $post_link;
		$new_post['img_url']       = $image_url;
		$new_post['price']         = $price;
		$new_post['show_start_at'] = $start_at;
		$new_post['hwy']           = $hwy;
		$new_post['cwy']           = $cwy;

		if ( ! is_null( $review_id ) ) {

			$performance = get_post_meta( $review_id, 'performance', true );
			$comfort     = get_post_meta( $review_id, 'comfort', true );
			$interior    = get_post_meta( $review_id, 'interior', true );
			$exterior    = get_post_meta( $review_id, 'exterior', true );

			$rating_summary = ( ( $performance + $comfort + $interior + $exterior ) / 4 );

			$new_post['ratingSumm']   = $rating_summary;
			$new_post['ratingP']      = $rating_summary * 20;
			$new_post['performance']  = $performance;
			$new_post['performanceP'] = $performance * 20;
			$new_post['comfort']      = $comfort;
			$new_post['comfortP']     = $comfort * 20;
			$new_post['interior']     = $interior;
			$new_post['interiorP']    = $interior * 20;
			$new_post['exterior']     = $exterior;
			$new_post['exteriorP']    = $exterior * 20;
		}

		$new_posts[ $k ] = (object) $new_post;
	}

	return $new_posts;
}

function get_post_id_by_meta_k_v( $key, $value ) {
	global $wpdb;
	$meta = $wpdb->get_results( $wpdb->prepare( 'SELECT post_id FROM ' . $wpdb->postmeta . ' WHERE meta_key=%s AND meta_value=%s', $key, $value ) );

	return ( count( $meta ) > 0 ) ? $meta[0]->post_id : null;
}

/**
 * Retrieve input data from $_POST, $_GET by path
 *
 * @param $path
 * @param $default
 *
 * @return mixed
 */
function stm_listings_input( $path, $default = null ) {
	if ( empty( trim( $path, '.' ) ) ) {
		return $default;
	}

	foreach ( array( $_POST, $_GET ) as $source ) {
		$value = $source;
		foreach ( explode( '.', $path ) as $key ) {
			if ( ! is_array( $value ) || ! array_key_exists( $key, $value ) ) {
				$value = null;
				break;
			}

			$value = &$value[ $key ];
		}

		if ( ! is_null( $value ) ) {
			return $value;
		}
	}

	return $default;
}

/**
 * Current URL with native WP query string parameters ()
 *
 * @return string
 */
function stm_listings_current_url() {
	global $wp, $wp_rewrite;

	$url = preg_replace( '/\/page\/\d+/', '', $wp->request );
	$url = home_url( $url . '/' );
	if ( ! $wp_rewrite->permalink_structure ) {
		parse_str( $wp->query_string, $query_string );

		$leave        = array( 'post_type', 'pagename', 'page_id', 'p' );
		$query_string = array_intersect_key( $query_string, array_flip( $leave ) );

		$url = trim( add_query_arg( $query_string, $url ), '&' );
		$url = str_replace( '&&', '&', $url );
	}

	return apply_filters( 'stm_listings_current_url', $url );
}

function _stm_listings_filter_attribute_options( $taxonomy, $_terms ) {
	$attribute = stm_listings_attribute( $taxonomy );
	$attribute = wp_parse_args(
		$attribute,
		array(
			'slug'        => $taxonomy,
			'single_name' => '',
			'numeric'     => false,
			'slider'      => false,
		)
	);

	$options = array();

	if ( ! $attribute['numeric'] ) {

		$options[''] = array(
			'label'    => apply_filters( 'stm_listings_default_tax_name', $attribute['single_name'] ),
			'selected' => stm_listings_input( $attribute['slug'] ) === null,
			'disabled' => false,
		);

		foreach ( $_terms as $_term ) {
			$options[ $_term->slug ] = array(
				'label'    => $_term->name,
				'selected' => stm_listings_input( $attribute['slug'] ) === $_term->slug,
				'disabled' => false,
				'count'    => $_term->count,
			);
		}
	} else {
		$numbers = array();
		foreach ( $_terms as $_term ) {
			$numbers[ intval( $_term->slug ) ] = $_term->name;
		}
		ksort( $numbers );

		if ( ! empty( $attribute['slider'] ) ) {
			foreach ( $numbers as $_number => $_label ) {
				$options[ $_number ] = array(
					'label'    => $_label,
					'selected' => stm_listings_input( $attribute['slug'] ) === $_label,
					'disabled' => false,
				);
			}
		} else {

			$options[''] = array(
				'label'    => sprintf( __( 'Max %s', 'stm_vehicles_listing' ), $attribute['single_name'] ),
				'selected' => stm_listings_input( $attribute['slug'] ) === null,
				'disabled' => false,
			);

			$_prev  = null;
			$_affix = empty( $attribute['affix'] ) ? '' : esc_html( $attribute['affix'] );

			foreach ( $numbers as $_number => $_label ) {

				if ( null === $_prev ) {
					$_value = '<' . $_number;
					$_label = '< ' . $_label . ' ' . $_affix;
				} else {
					$_value = $_prev . '-' . $_number;
					$_label = $_prev . '-' . $_label . ' ' . $_affix;
				}

				$options[ $_value ] = array(
					'label'    => $_label,
					'selected' => stm_listings_input( $attribute['slug'] ) === $_value,
					'disabled' => false,
				);

				$_prev = $_number;
			}

			if ( $_prev ) {
				$_value             = '>' . $_prev;
				$options[ $_value ] = array(
					'label'    => '>' . $_prev . ' ' . $_affix,
					'selected' => stm_listings_input( $attribute['slug'] ) === $_value,
					'disabled' => false,
				);
			}
		}
	}

	return $options;
}

if ( ! function_exists( 'stm_listings_user_defined_filter_page' ) ) {
	function stm_listings_user_defined_filter_page() {
		return apply_filters( 'stm_listings_inventory_page_id', stm_me_get_wpcfto_mod( 'listing_archive', false ) );
	}
}

function stm_listings_paged_var() {
	global $wp;

	$paged = null;

	if ( isset( $wp->query_vars['paged'] ) ) {
		$paged = $wp->query_vars['paged'];
	} elseif ( isset( $_GET['paged'] ) ) {
		$paged = sanitize_text_field( $_GET['paged'] );
	}

	return $paged;
}

/**
 * Listings post type identifier
 *
 * @return string
 */
if ( ! function_exists( 'stm_listings_post_type' ) ) {
	function stm_listings_post_type() {
		return apply_filters( 'stm_listings_post_type', 'listings' );
	}
}

add_action( 'init', 'stm_listings_init', 1 );

function stm_listings_init() {
	$options = get_option( 'stm_post_types_options' );

	$stm_vehicle_options = wp_parse_args(
		$options,
		array(
			'listings' => array(
				'title'        => __( 'Listings', 'stm_vehicles_listing' ),
				'plural_title' => __( 'Listings', 'stm_vehicles_listing' ),
				'rewrite'      => 'listings',
			),
		)
	);

	register_post_type(
		stm_listings_post_type(),
		array(
			'labels'             => array(
				'name'               => $stm_vehicle_options['listings']['plural_title'],
				'singular_name'      => $stm_vehicle_options['listings']['title'],
				'add_new'            => __( 'Add New', 'stm_vehicles_listing' ),
				'add_new_item'       => __( 'Add New Item', 'stm_vehicles_listing' ),
				'edit_item'          => __( 'Edit Item', 'stm_vehicles_listing' ),
				'new_item'           => __( 'New Item', 'stm_vehicles_listing' ),
				'all_items'          => __( 'All Items', 'stm_vehicles_listing' ),
				'view_item'          => __( 'View Item', 'stm_vehicles_listing' ),
				'search_items'       => __( 'Search Items', 'stm_vehicles_listing' ),
				'not_found'          => __( 'No items found', 'stm_vehicles_listing' ),
				'not_found_in_trash' => __( 'No items found in Trash', 'stm_vehicles_listing' ),
				'parent_item_colon'  => '',
				'menu_name'          => $stm_vehicle_options['listings']['plural_title'],
			),
			'menu_icon'          => 'dashicons-location-alt',
			'show_in_nav_menus'  => true,
			'supports'           => array( 'title', 'editor', 'thumbnail', 'comments', 'excerpt', 'author', 'revisions' ),
			'rewrite'            => array( 'slug' => $stm_vehicle_options['listings']['rewrite'] ),
			'has_archive'        => ( 'equipment' === get_option( 'stm_motors_chosen_template' ) && empty( stm_me_get_wpcfto_mod( 'listing_archive', '' ) ) ) ? false : true,
			'public'             => true,
			'publicly_queryable' => true,
			'show_ui'            => true,
			'show_in_menu'       => true,
			'query_var'          => true,
			'hierarchical'       => false,
			'menu_position'      => 4,
		)
	);

}

add_filter( 'get_pagenum_link', 'stm_listings_get_pagenum_link' );

function stm_listings_get_pagenum_link( $link ) {
	return remove_query_arg( 'ajax_action', $link );
}

/*Functions*/
function stm_check_motors() {
	return apply_filters( 'stm_listing_is_motors_theme', false );
}

require_once 'templates.php';
require_once 'enqueue.php';
require_once 'vehicle_functions.php';

add_action( 'init', 'stm_listings_include_customizer' );

function stm_listings_include_customizer() {
	if ( ! stm_check_motors() ) {
		require_once 'customizer/customizer.class.php';
	}
}

function stm_listings_search_inventory() {
	return apply_filters( 'stm_listings_default_search_inventory', false );
}

function stm_listing_magazine_body_class( $classes ) {
	$classes[] = 'no_margin';

	return $classes;
}

function stm_listings_dynamic_string_translation_e( $desc, $string ) {
	do_action( 'wpml_register_single_string', 'stm_vehicles_listing', $desc, $string );
	echo wp_kses_post( apply_filters( 'wpml_translate_single_string', $string, 'stm_vehicles_listing', $desc ) );
}

function stm_listings_dynamic_string_translation( $desc, $string ) {
	do_action( 'wpml_register_single_string', 'stm_vehicles_listing', $desc, $string );
	return apply_filters( 'wpml_translate_single_string', $string, 'stm_vehicles_listing', $desc );
}

// check for multilisting
if ( ! function_exists( 'stm_is_multilisting' ) ) {
	function stm_is_multilisting() {
		if ( defined( 'MULTILISTING_PATH' ) && class_exists( 'STMMultiListing' ) ) {
			return true;
		} else {
			return false;
		}
	}
}


// get wpcfto settings
if ( ! function_exists( 'stm_me_get_wpcfto_mod' ) ) {
	function stm_me_get_wpcfto_mod( $key, $default = '' ) {
		return apply_filters( 'stm_me_get_wpcfto_mod', $key, $default );
	}
}


// get multilisting post types (array of post types) including/excluding default "listings" post type
if ( ! function_exists( 'stm_listings_multi_type' ) ) {

	function stm_listings_multi_type( $include_default = false ) {
		$post_types = array();

		if ( $include_default ) {
			array_push( $post_types, stm_listings_post_type() );
		}

		if ( stm_is_multilisting() ) {
			$types = STMMultiListing::stm_get_listing_type_slugs();
			if ( ! empty( $types ) ) {
				$post_types = array_merge( $post_types, $types );
			}
		}

		return apply_filters( 'stm_listings_multi_type', $post_types );
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit