1471 lines
42 KiB
PHP
Executable File
1471 lines
42 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* Mixes functions.
|
|
*
|
|
* @package opalestate
|
|
* @author Opal Team <info@wpopal.com >
|
|
*/
|
|
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit; // Exit if accessed directly
|
|
}
|
|
|
|
/**
|
|
* Output message json.
|
|
*
|
|
* @param bool $result
|
|
* @param string $message
|
|
* @param array $args
|
|
* @param bool $return
|
|
* @return false|mixed|string|void
|
|
*/
|
|
function opalestate_output_msg_json( $result = false, $message = '', $args = [], $return = false ) {
|
|
$out = new stdClass();
|
|
$out->status = $result;
|
|
$out->message = $message;
|
|
if ( $args ) {
|
|
foreach ( $args as $key => $arg ) {
|
|
$out->$key = $arg;
|
|
}
|
|
}
|
|
if ( $return ) {
|
|
return json_encode( $out );
|
|
} else {
|
|
echo json_encode( $out );
|
|
die;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Process upload images for properties
|
|
*/
|
|
function opalesate_upload_image( $submitted_file, $parent_id = 0 ) {
|
|
require_once ABSPATH . 'wp-admin/includes/image.php';
|
|
require_once ABSPATH . 'wp-admin/includes/file.php';
|
|
require_once ABSPATH . 'wp-admin/includes/media.php';
|
|
|
|
// Handle PHP uploads in WordPress, sanitizing file names, checking extensions for mime type, and moving the
|
|
// file to the appropriate directory within the uploads directory.
|
|
$uploaded_image = wp_handle_upload( $submitted_file, [ 'test_form' => false ] );
|
|
|
|
if ( isset( $uploaded_image['file'] ) ) {
|
|
$file_name = basename( $submitted_file['name'] );
|
|
$file_type = wp_check_filetype( $uploaded_image['file'] ); //Retrieve the file type from the file name.
|
|
|
|
// Prepare an array of post data for the attachment.
|
|
$attachment_details = [
|
|
'guid' => $uploaded_image['url'],
|
|
'post_mime_type' => $file_type['type'],
|
|
'post_title' => preg_replace( '/\.[^.]+$/', '', basename( $file_name ) ),
|
|
'post_content' => '',
|
|
'post_status' => 'inherit',
|
|
];
|
|
|
|
// This function inserts an attachment into the media library.
|
|
$attach_id = wp_insert_attachment( $attachment_details, $uploaded_image['file'], $parent_id );
|
|
|
|
// This function generates metadata for an image attachment.
|
|
// It also creates a thumbnail and other intermediate sizes of the image attachment based on the sizes defined
|
|
$attach_data = wp_generate_attachment_metadata( $attach_id, $uploaded_image['file'] );
|
|
|
|
// Update metadata for an attachment.
|
|
wp_update_attachment_metadata( $attach_id, $attach_data );
|
|
|
|
$thumbnail_url = opalestate_get_upload_image_url( $attach_data );
|
|
|
|
$ajax_response = [
|
|
'success' => true,
|
|
'url' => $thumbnail_url,
|
|
'attachment_id' => $attach_id,
|
|
];
|
|
|
|
update_post_meta( $attach_id, '_pending_to_use_', 1 );
|
|
|
|
return $ajax_response;
|
|
}
|
|
|
|
return [];
|
|
}
|
|
|
|
/**
|
|
* Upload an image with data base64 encoded.
|
|
*
|
|
* @param array $file File information (data, file_name, type)
|
|
* @return bool|int|\WP_Error
|
|
*/
|
|
function opalestate_upload_base64_image( $file, $parent_id = 0 ) {
|
|
// Upload dir.
|
|
$img = str_replace( ' ', '+', $file['data'] );
|
|
$decoded = base64_decode( $img );
|
|
$filename = $file['file_name'];
|
|
$file_type = $file['type'];
|
|
|
|
/*
|
|
* A writable uploads dir will pass this test. Again, there's no point
|
|
* overriding this one.
|
|
*/
|
|
if ( ! ( ( $uploads = wp_upload_dir() ) && false === $uploads['error'] ) ) {
|
|
return false;
|
|
}
|
|
|
|
$filename = wp_unique_filename( $uploads['path'], $filename );
|
|
|
|
// Move the file to the uploads dir.
|
|
$new_file = $uploads['path'] . "/$filename";
|
|
|
|
// Save the image in the uploads directory.
|
|
$upload_file = file_put_contents( $new_file, $decoded );
|
|
|
|
$attachment = [
|
|
'post_mime_type' => $file_type,
|
|
'post_title' => preg_replace( '/\.[^.]+$/', '', basename( $file['file_name'] ) ),
|
|
'post_content' => '',
|
|
'post_status' => 'inherit',
|
|
'guid' => $uploads['url'] . '/' . basename( $filename ),
|
|
];
|
|
|
|
$attach_id = wp_insert_attachment( $attachment, $new_file, $parent_id );
|
|
|
|
require_once( ABSPATH . 'wp-admin/includes/image.php' );
|
|
$attach_data = wp_generate_attachment_metadata( $attach_id, $new_file );
|
|
wp_update_attachment_metadata( $attach_id, $attach_data );
|
|
|
|
return $attach_id;
|
|
}
|
|
|
|
function opalestate_get_request_viewing_time_list() {
|
|
$range_time = opalestate_get_option( 'request_viewing_time_range', 15 );
|
|
|
|
return apply_filters( 'opalestate_request_viewing_time_list', opalestate_get_time_lapses( $range_time ) );
|
|
}
|
|
|
|
/**
|
|
* Gets time lapses.
|
|
*/
|
|
function opalestate_get_time_lapses( $lapse = 15 ) {
|
|
|
|
$output = [];
|
|
$start = '12:00AM';
|
|
$end = '11:59PM';
|
|
$interval = '+' . $lapse . ' minutes';
|
|
|
|
$start_str = strtotime( $start );
|
|
$end_str = strtotime( $end );
|
|
$now_str = $start_str;
|
|
|
|
$time_format_value = 'h:i a';
|
|
$time_format_show = 'h:i A';
|
|
|
|
if ( '24_hour' === opalestate_get_option( 'time_format' ) ) {
|
|
$time_format_value = 'H:i';
|
|
$time_format_show = 'H:i';
|
|
}
|
|
|
|
$time_format_value = apply_filters( 'opalestate_time_lapse_value', $time_format_value );
|
|
$time_format_show = apply_filters( 'opalestate_time_lapse_show', $time_format_show );
|
|
|
|
while ( $now_str <= $end_str ) {
|
|
$output[ date( $time_format_value, $now_str ) ] = date( $time_format_show, $now_str );
|
|
$now_str = strtotime( $interval, $now_str );
|
|
}
|
|
|
|
return $output;
|
|
}
|
|
|
|
|
|
function is_single_property() {
|
|
global $post;
|
|
|
|
$post_type = get_post_type();
|
|
|
|
return $post_type == 'opalestate_property' && is_single();
|
|
}
|
|
|
|
function is_single_agent() {
|
|
global $post;
|
|
|
|
$post_type = get_post_type();
|
|
|
|
return $post_type == 'opalestate_agent' && is_single();
|
|
}
|
|
|
|
function is_single_agency() {
|
|
global $post;
|
|
|
|
$post_type = get_post_type();
|
|
|
|
return $post_type == 'opalestate_agency' && is_single();
|
|
}
|
|
|
|
/**
|
|
* Gets search form styles.
|
|
*
|
|
* @return array
|
|
*/
|
|
function opalestate_search_properties_form_styles() {
|
|
return apply_filters( 'opalestate_search_properties_form_styles', [
|
|
'search-form-h' => esc_html__( 'Advanced V1', 'opalestate-pro' ),
|
|
'advanced-v2' => esc_html__( 'Advanced V2', 'opalestate-pro' ),
|
|
'advanced-v3' => esc_html__( 'Advanced V3', 'opalestate-pro' ),
|
|
'advanced-v4' => esc_html__( 'Advanced V4', 'opalestate-pro' ),
|
|
'advanced-v5' => esc_html__( 'Advanced V5', 'opalestate-pro' ),
|
|
'advanced-v6' => esc_html__( 'Advanced V6', 'opalestate-pro' ),
|
|
'search-form-v' => esc_html__( 'Vertical Advanced', 'opalestate-pro' ),
|
|
'search-form-v2' => esc_html__( 'Vertical Advanced V2', 'opalestate-pro' ),
|
|
'search-form-v3' => esc_html__( 'Vertical Advanced V3', 'opalestate-pro' ),
|
|
'simple-city' => esc_html__( 'Simple City', 'opalestate-pro' ),
|
|
'simple-keyword' => esc_html__( 'Simple Keyword', 'opalestate-pro' ),
|
|
'collapse-city' => esc_html__( 'Collapse City', 'opalestate-pro' ),
|
|
'collapse-keyword' => esc_html__( 'Collapse Keyword', 'opalestate-pro' ),
|
|
'collapse-advanced' => esc_html__( 'Collapse Advanced', 'opalestate-pro' ),
|
|
] );
|
|
}
|
|
|
|
/**
|
|
* Gets loop property layouts.
|
|
*
|
|
* @return array
|
|
*/
|
|
function opalestate_get_loop_property_layouts() {
|
|
return apply_filters( 'opalestate_get_loop_property_layouts', [
|
|
'grid' => esc_html__( 'Grid', 'opalestate-pro' ),
|
|
'grid-v2' => esc_html__( 'Grid v2', 'opalestate-pro' ),
|
|
'grid-v3' => esc_html__( 'Grid v3', 'opalestate-pro' ),
|
|
'list' => esc_html__( 'List', 'opalestate-pro' ),
|
|
'list-v2' => esc_html__( 'List v2', 'opalestate-pro' ),
|
|
'mark-hover' => esc_html__( 'Mark hover', 'opalestate-pro' ),
|
|
] );
|
|
}
|
|
|
|
/**
|
|
* Gets display modes.
|
|
*
|
|
* @return array
|
|
*/
|
|
function opalestate_display_modes() {
|
|
return apply_filters( 'opalestate_display_modes', [
|
|
'grid' => esc_html__( 'Grid', 'opalestate-pro' ),
|
|
'list' => esc_html__( 'List', 'opalestate-pro' ),
|
|
] );
|
|
}
|
|
|
|
/**
|
|
* Gets loop property grid layouts.
|
|
*
|
|
* @return array
|
|
*/
|
|
function opalestate_get_loop_property_grid_layouts() {
|
|
return apply_filters( 'opalestate_get_loop_property_grid_layouts', [
|
|
'grid' => esc_html__( 'Grid', 'opalestate-pro' ),
|
|
'grid-v2' => esc_html__( 'Grid v2', 'opalestate-pro' ),
|
|
'grid-v3' => esc_html__( 'Grid v3', 'opalestate-pro' ),
|
|
'mark-hover' => esc_html__( 'Mark hover', 'opalestate-pro' ),
|
|
] );
|
|
}
|
|
|
|
/**
|
|
* Gets loop property list layouts.
|
|
*
|
|
* @return array
|
|
*/
|
|
function opalestate_get_loop_property_list_layouts() {
|
|
return apply_filters( 'opalestate_get_loop_property_list_layouts', [
|
|
'list' => esc_html__( 'List', 'opalestate-pro' ),
|
|
'list-v2' => esc_html__( 'List v2', 'opalestate-pro' ),
|
|
] );
|
|
}
|
|
|
|
function opalestate_get_map_api_uri() {
|
|
|
|
$key = opalestate_options( 'google_map_api_keys' ) ?
|
|
opalestate_options( 'google_map_api_keys' ) : 'AIzaSyAvJkbm23fhVAYcbdeVB0nkHjZmDeZ62bc';
|
|
|
|
$api = 'https://maps.googleapis.com/maps/api/js?key=' . $key . '&libraries=geometry,places,drawing&ver=5.2.2';
|
|
$api = apply_filters( 'opalestate_google_map_api_uri', $api );
|
|
|
|
return $api;
|
|
}
|
|
|
|
function opalestate_get_map_search_api_uri( $address ) {
|
|
|
|
$key = opalestate_options( 'google_map_api_keys' ) ?
|
|
opalestate_options( 'google_map_api_keys' ) : 'AIzaSyAvJkbm23fhVAYcbdeVB0nkHjZmDeZ62bc';
|
|
|
|
$api = "https://maps.googleapis.com/maps/api/geocode/json?address={$address}&key={$key}";
|
|
|
|
return $api;
|
|
}
|
|
|
|
function opalestate_is_setting_enabled( $value, $compare_with = null ) {
|
|
if ( ! is_null( $compare_with ) ) {
|
|
|
|
if ( is_array( $compare_with ) ) {
|
|
// Output.
|
|
return in_array( $value, $compare_with );
|
|
}
|
|
|
|
// Output.
|
|
return ( $value === $compare_with );
|
|
}
|
|
|
|
return ( in_array( $value, [ 'enabled', 'on', 'yes' ] ) ? true : false );
|
|
}
|
|
|
|
|
|
function opalestate_get_dashdoard_page_uri() {
|
|
return home_url();
|
|
}
|
|
|
|
|
|
if ( ! function_exists( 'opalestate_is_ajax_request' ) ) {
|
|
function opalestate_is_ajax_request() {
|
|
return defined( 'DOING_AJAX' ) && DOING_AJAX;
|
|
}
|
|
}
|
|
|
|
if ( ! function_exists( 'opalmembership_add_notice' ) ) {
|
|
function opalestate_add_notice( $type = 'error', $message = '' ) {
|
|
if ( ! $type || ! $message ) {
|
|
return;
|
|
}
|
|
$notices = OpalEstate()->session->get( 'notices', [] );
|
|
if ( ! isset( $notices[ $type ] ) ) {
|
|
$notices[ $type ] = [];
|
|
}
|
|
$notices[ $type ][] = $message;
|
|
OpalEstate()->session->set( 'notices', $notices );
|
|
}
|
|
}
|
|
|
|
|
|
if ( ! function_exists( 'opalestate_print_notices' ) ) {
|
|
|
|
/**
|
|
* print all notices
|
|
*/
|
|
function opalestate_print_notices() {
|
|
|
|
$notices = OpalEstate()->session->get( 'notices', [] );
|
|
if ( empty( $notices ) ) {
|
|
return;
|
|
}
|
|
ob_start();
|
|
foreach ( $notices as $type => $messages ) {
|
|
echo opalestate_load_template_path( 'notices/' . $type, [ 'messages' => $messages ] );
|
|
}
|
|
OpalEstate()->session->set( 'notices', [] );
|
|
echo ob_get_clean();
|
|
}
|
|
}
|
|
|
|
|
|
function opalestate_user_roles_by_user_id( $user_id ) {
|
|
$user = get_userdata( $user_id );
|
|
|
|
return empty( $user ) ? [] : $user->roles;
|
|
}
|
|
|
|
/**
|
|
* Featured Image Sizes
|
|
*/
|
|
function opalestate_get_featured_image_sizes() {
|
|
global $_wp_additional_image_sizes;
|
|
$sizes = [ 'full' => esc_html__( 'Orginal Size', 'opalestate-pro' ) ];
|
|
|
|
foreach ( get_intermediate_image_sizes() as $_size ) {
|
|
|
|
if ( in_array( $_size, [ 'thumbnail', 'medium', 'medium_large', 'large' ] ) ) {
|
|
$sizes[ $_size ] = $_size . ' - ' . get_option( "{$_size}_size_w" ) . 'x' . get_option( "{$_size}_size_h" );
|
|
} elseif ( isset( $_wp_additional_image_sizes[ $_size ] ) ) {
|
|
$sizes[ $_size ] = $_size . ' - ' . $_wp_additional_image_sizes[ $_size ]['width'] . 'x' . $_wp_additional_image_sizes[ $_size ]['height'];
|
|
}
|
|
|
|
}
|
|
|
|
return apply_filters( 'opalestate_get_featured_image_sizes', $sizes );
|
|
}
|
|
|
|
/**
|
|
* Gets register page uri.
|
|
*
|
|
* @return string
|
|
*/
|
|
function opalestate_get_register_page_uri() {
|
|
global $opalmembership_options;
|
|
$register_page = isset( $opalmembership_options['register_page'] ) ? get_permalink( absint( $opalmembership_options['register_page'] ) ) : get_bloginfo( 'url' );
|
|
|
|
return apply_filters( 'opalestate_get_register_page_uri', $register_page );
|
|
}
|
|
|
|
/**
|
|
* Gets search agency uri.
|
|
*
|
|
* @return false|string
|
|
*/
|
|
function opalestate_search_agency_uri() {
|
|
return get_post_type_archive_link( 'opalestate_agency' );
|
|
}
|
|
|
|
/**
|
|
* Gets current uri.
|
|
*
|
|
* @return string
|
|
*/
|
|
function opalestate_get_current_uri() {
|
|
global $wp;
|
|
|
|
$current_url = home_url( add_query_arg( [], $wp->request ) );
|
|
|
|
return $current_url;
|
|
}
|
|
|
|
/**
|
|
* Gets URL sort mode.
|
|
*
|
|
* @param string $mode
|
|
* @return string
|
|
*/
|
|
function opalestate_get_url_sort_mode( $mode = "" ) {
|
|
global $wp;
|
|
|
|
$get = [];
|
|
|
|
if ( isset( $_GET ) ) {
|
|
$get = $_GET;
|
|
}
|
|
$get['display'] = $mode;
|
|
$current_url = home_url( add_query_arg( [ $get ], $wp->request ) );
|
|
|
|
return $current_url;
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
function opalestate_search_agent_uri() {
|
|
global $opalestate_options;
|
|
|
|
$search_agents = isset( $opalestate_options['search_agents'] ) ? get_permalink( absint( $opalestate_options['search_agents'] ) ) : opalestate_get_current_uri();
|
|
|
|
return apply_filters( 'opalestate_get_search_agents_page_uri', $search_agents );
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
function opalestate_get_session_location_val() {
|
|
return isset( $_SESSION['set_location'] ) ? $_SESSION['set_location'] : 0;
|
|
}
|
|
|
|
function opalestate_get_location_active() {
|
|
$location = opalestate_get_session_location_val();
|
|
if ( ! is_numeric( $location ) ) {
|
|
$term = get_term_by( 'slug', $location, 'opalestate_location' );
|
|
$name = is_object( $term ) ? $term->name : esc_html__( 'Your Location', 'opalestate-pro' );
|
|
|
|
return $name;
|
|
} else {
|
|
return esc_html__( 'Your Location', 'opalestate-pro' );
|
|
}
|
|
}
|
|
|
|
function opalestate_get_upload_image_url( $attach_data ) {
|
|
$upload_dir = wp_upload_dir();
|
|
$image_path_array = explode( '/', $attach_data['file'] );
|
|
$image_path_array = array_slice( $image_path_array, 0, count( $image_path_array ) - 1 );
|
|
$image_path = implode( '/', $image_path_array );
|
|
$thumbnail_name = null;
|
|
if ( isset( $attach_data['sizes']['user-image'] ) ) {
|
|
$thumbnail_name = $attach_data['sizes']['user-image']['file'];
|
|
} elseif ( isset( $attach_data['sizes']['thumbnail']['file'] ) ) {
|
|
$thumbnail_name = $attach_data['sizes']['thumbnail']['file'];
|
|
} else {
|
|
return $upload_dir['baseurl'] . '/' . $attach_data['file'];
|
|
}
|
|
|
|
return $upload_dir['baseurl'] . '/' . $image_path . '/' . $thumbnail_name;
|
|
}
|
|
|
|
function opalestate_update_attachement_used( $attachment_id ) {
|
|
|
|
}
|
|
|
|
/**
|
|
* batch including all files in a path.
|
|
*
|
|
* @param String $path : PATH_DIR/*.php or PATH_DIR with $ifiles not empty
|
|
*/
|
|
function opalestate_includes( $path, $ifiles = [] ) {
|
|
if ( ! empty( $ifiles ) ) {
|
|
foreach ( $ifiles as $key => $file ) {
|
|
$file = $path . '/' . $file;
|
|
if ( is_file( $file ) ) {
|
|
require( $file );
|
|
}
|
|
}
|
|
} else {
|
|
$files = glob( $path );
|
|
foreach ( $files as $key => $file ) {
|
|
if ( is_file( $file ) ) {
|
|
require( $file );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Gets property.
|
|
*
|
|
* @param $id
|
|
* @return \Opalestate_Property
|
|
*/
|
|
function opalesetate_property( $id ) {
|
|
global $property;
|
|
|
|
$property = new Opalestate_Property( $id );
|
|
|
|
return $property;
|
|
}
|
|
|
|
/**
|
|
* Gets agency
|
|
*
|
|
* @param $id
|
|
* @return \Opalestate_Agency
|
|
*/
|
|
function opalesetate_agency( $id ) {
|
|
global $agency;
|
|
|
|
$agency = new Opalestate_Agency( $id );
|
|
|
|
return $agency;
|
|
}
|
|
|
|
/**
|
|
* Gets agent.
|
|
*
|
|
* @param $id
|
|
* @return \Opalestate_Agent
|
|
*/
|
|
function opalesetate_agent( $id ) {
|
|
global $agent;
|
|
|
|
$agent = new Opalestate_Agent( $id );
|
|
|
|
return $agent;
|
|
}
|
|
|
|
/**
|
|
* Gets opalestate options.
|
|
*
|
|
* @param string $key
|
|
* @param string $default
|
|
* @return mixed|void
|
|
*/
|
|
function opalestate_options( $key, $default = '' ) {
|
|
global $opalestate_options;
|
|
|
|
$value = isset( $opalestate_options[ $key ] ) ? $opalestate_options[ $key ] : $default;
|
|
$value = apply_filters( 'opalestate_option_', $value, $key, $default );
|
|
|
|
return apply_filters( 'opalestate_option_' . $key, $value, $key, $default );
|
|
}
|
|
|
|
/**
|
|
* Gets image placeholder.
|
|
*
|
|
* @param string $size
|
|
* @param bool $url
|
|
* @return string
|
|
*/
|
|
function opalestate_get_image_placeholder( $size = '', $url = false ) {
|
|
$src = opalestate_get_image_placeholder_src();
|
|
|
|
$size = is_string( $size ) ? $size : '';
|
|
|
|
if ( $url ) {
|
|
return esc_url( $src );
|
|
}
|
|
|
|
return '<img src="' . esc_url( $src ) . '" alt="' . sprintf( esc_html__( 'Placeholder %s', 'opalestate-pro' ), $size ) . '" />';
|
|
}
|
|
|
|
/**
|
|
* Get image placeholder src.
|
|
*
|
|
* @return string
|
|
*/
|
|
function opalestate_get_image_placeholder_src() {
|
|
return apply_filters( 'opalestate_get_image_placeholder_src', OPALESTATE_PLUGIN_URL . 'assets/images/placeholder.png' );
|
|
}
|
|
|
|
/**
|
|
* Get User IP
|
|
*
|
|
* Returns the IP address of the current visitor
|
|
*
|
|
* @return string $ip User's IP address
|
|
*/
|
|
function opalestate_get_ip() {
|
|
$ip = '127.0.0.1';
|
|
|
|
if ( ! empty( $_SERVER['HTTP_CLIENT_IP'] ) ) {
|
|
//check ip from share internet
|
|
$ip = $_SERVER['HTTP_CLIENT_IP'];
|
|
} elseif ( ! empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {
|
|
//to check ip is pass from proxy
|
|
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
|
|
} elseif ( ! empty( $_SERVER['REMOTE_ADDR'] ) ) {
|
|
$ip = $_SERVER['REMOTE_ADDR'];
|
|
}
|
|
|
|
return apply_filters( 'opalestate_get_ip', $ip );
|
|
}
|
|
|
|
/**
|
|
* Gets currencies.
|
|
*
|
|
* @return array
|
|
*/
|
|
function opalestate_get_currencies() {
|
|
$currencies = [
|
|
'AED' => esc_html__( 'United Arab Emirates dirham', 'opalestate-pro' ),
|
|
'AFN' => esc_html__( 'Afghan afghani', 'opalestate-pro' ),
|
|
'ALL' => esc_html__( 'Albanian lek', 'opalestate-pro' ),
|
|
'AMD' => esc_html__( 'Armenian dram', 'opalestate-pro' ),
|
|
'ANG' => esc_html__( 'Netherlands Antillean guilder', 'opalestate-pro' ),
|
|
'AOA' => esc_html__( 'Angolan kwanza', 'opalestate-pro' ),
|
|
'ARS' => esc_html__( 'Argentine peso', 'opalestate-pro' ),
|
|
'AUD' => esc_html__( 'Australian dollar', 'opalestate-pro' ),
|
|
'AWG' => esc_html__( 'Aruban florin', 'opalestate-pro' ),
|
|
'AZN' => esc_html__( 'Azerbaijani manat', 'opalestate-pro' ),
|
|
'BAM' => esc_html__( 'Bosnia and Herzegovina convertible mark', 'opalestate-pro' ),
|
|
'BBD' => esc_html__( 'Barbadian dollar', 'opalestate-pro' ),
|
|
'BDT' => esc_html__( 'Bangladeshi taka', 'opalestate-pro' ),
|
|
'BGN' => esc_html__( 'Bulgarian lev', 'opalestate-pro' ),
|
|
'BHD' => esc_html__( 'Bahraini dinar', 'opalestate-pro' ),
|
|
'BIF' => esc_html__( 'Burundian franc', 'opalestate-pro' ),
|
|
'BMD' => esc_html__( 'Bermudian dollar', 'opalestate-pro' ),
|
|
'BND' => esc_html__( 'Brunei dollar', 'opalestate-pro' ),
|
|
'BOB' => esc_html__( 'Bolivian boliviano', 'opalestate-pro' ),
|
|
'BRL' => esc_html__( 'Brazilian real', 'opalestate-pro' ),
|
|
'BSD' => esc_html__( 'Bahamian dollar', 'opalestate-pro' ),
|
|
'BTC' => esc_html__( 'Bitcoin', 'opalestate-pro' ),
|
|
'BTN' => esc_html__( 'Bhutanese ngultrum', 'opalestate-pro' ),
|
|
'BWP' => esc_html__( 'Botswana pula', 'opalestate-pro' ),
|
|
'BYR' => esc_html__( 'Belarusian ruble', 'opalestate-pro' ),
|
|
'BZD' => esc_html__( 'Belize dollar', 'opalestate-pro' ),
|
|
'CAD' => esc_html__( 'Canadian dollar', 'opalestate-pro' ),
|
|
'CDF' => esc_html__( 'Congolese franc', 'opalestate-pro' ),
|
|
'CHF' => esc_html__( 'Swiss franc', 'opalestate-pro' ),
|
|
'CLP' => esc_html__( 'Chilean peso', 'opalestate-pro' ),
|
|
'CNY' => esc_html__( 'Chinese yuan', 'opalestate-pro' ),
|
|
'COP' => esc_html__( 'Colombian peso', 'opalestate-pro' ),
|
|
'CRC' => esc_html__( 'Costa Rican colón', 'opalestate-pro' ),
|
|
'CUC' => esc_html__( 'Cuban convertible peso', 'opalestate-pro' ),
|
|
'CUP' => esc_html__( 'Cuban peso', 'opalestate-pro' ),
|
|
'CVE' => esc_html__( 'Cape Verdean escudo', 'opalestate-pro' ),
|
|
'CZK' => esc_html__( 'Czech koruna', 'opalestate-pro' ),
|
|
'DJF' => esc_html__( 'Djiboutian franc', 'opalestate-pro' ),
|
|
'DKK' => esc_html__( 'Danish krone', 'opalestate-pro' ),
|
|
'DOP' => esc_html__( 'Dominican peso', 'opalestate-pro' ),
|
|
'DZD' => esc_html__( 'Algerian dinar', 'opalestate-pro' ),
|
|
'EGP' => esc_html__( 'Egyptian pound', 'opalestate-pro' ),
|
|
'ERN' => esc_html__( 'Eritrean nakfa', 'opalestate-pro' ),
|
|
'ETB' => esc_html__( 'Ethiopian birr', 'opalestate-pro' ),
|
|
'EUR' => esc_html__( 'Euro', 'opalestate-pro' ),
|
|
'FJD' => esc_html__( 'Fijian dollar', 'opalestate-pro' ),
|
|
'FKP' => esc_html__( 'Falkland Islands pound', 'opalestate-pro' ),
|
|
'GBP' => esc_html__( 'Pound sterling', 'opalestate-pro' ),
|
|
'GEL' => esc_html__( 'Georgian lari', 'opalestate-pro' ),
|
|
'GGP' => esc_html__( 'Guernsey pound', 'opalestate-pro' ),
|
|
'GHS' => esc_html__( 'Ghana cedi', 'opalestate-pro' ),
|
|
'GIP' => esc_html__( 'Gibraltar pound', 'opalestate-pro' ),
|
|
'GMD' => esc_html__( 'Gambian dalasi', 'opalestate-pro' ),
|
|
'GNF' => esc_html__( 'Guinean franc', 'opalestate-pro' ),
|
|
'GTQ' => esc_html__( 'Guatemalan quetzal', 'opalestate-pro' ),
|
|
'GYD' => esc_html__( 'Guyanese dollar', 'opalestate-pro' ),
|
|
'HKD' => esc_html__( 'Hong Kong dollar', 'opalestate-pro' ),
|
|
'HNL' => esc_html__( 'Honduran lempira', 'opalestate-pro' ),
|
|
'HRK' => esc_html__( 'Croatian kuna', 'opalestate-pro' ),
|
|
'HTG' => esc_html__( 'Haitian gourde', 'opalestate-pro' ),
|
|
'HUF' => esc_html__( 'Hungarian forint', 'opalestate-pro' ),
|
|
'IDR' => esc_html__( 'Indonesian rupiah', 'opalestate-pro' ),
|
|
'ILS' => esc_html__( 'Israeli new shekel', 'opalestate-pro' ),
|
|
'IMP' => esc_html__( 'Manx pound', 'opalestate-pro' ),
|
|
'INR' => esc_html__( 'Indian rupee', 'opalestate-pro' ),
|
|
'IQD' => esc_html__( 'Iraqi dinar', 'opalestate-pro' ),
|
|
'IRR' => esc_html__( 'Iranian rial', 'opalestate-pro' ),
|
|
'ISK' => esc_html__( 'Icelandic króna', 'opalestate-pro' ),
|
|
'JEP' => esc_html__( 'Jersey pound', 'opalestate-pro' ),
|
|
'JMD' => esc_html__( 'Jamaican dollar', 'opalestate-pro' ),
|
|
'JOD' => esc_html__( 'Jordanian dinar', 'opalestate-pro' ),
|
|
'JPY' => esc_html__( 'Japanese yen', 'opalestate-pro' ),
|
|
'KES' => esc_html__( 'Kenyan shilling', 'opalestate-pro' ),
|
|
'KGS' => esc_html__( 'Kyrgyzstani som', 'opalestate-pro' ),
|
|
'KHR' => esc_html__( 'Cambodian riel', 'opalestate-pro' ),
|
|
'KMF' => esc_html__( 'Comorian franc', 'opalestate-pro' ),
|
|
'KPW' => esc_html__( 'North Korean won', 'opalestate-pro' ),
|
|
'KRW' => esc_html__( 'South Korean won', 'opalestate-pro' ),
|
|
'KWD' => esc_html__( 'Kuwaiti dinar', 'opalestate-pro' ),
|
|
'KYD' => esc_html__( 'Cayman Islands dollar', 'opalestate-pro' ),
|
|
'KZT' => esc_html__( 'Kazakhstani tenge', 'opalestate-pro' ),
|
|
'LAK' => esc_html__( 'Lao kip', 'opalestate-pro' ),
|
|
'LBP' => esc_html__( 'Lebanese pound', 'opalestate-pro' ),
|
|
'LKR' => esc_html__( 'Sri Lankan rupee', 'opalestate-pro' ),
|
|
'LRD' => esc_html__( 'Liberian dollar', 'opalestate-pro' ),
|
|
'LSL' => esc_html__( 'Lesotho loti', 'opalestate-pro' ),
|
|
'LYD' => esc_html__( 'Libyan dinar', 'opalestate-pro' ),
|
|
'MAD' => esc_html__( 'Moroccan dirham', 'opalestate-pro' ),
|
|
'MDL' => esc_html__( 'Moldovan leu', 'opalestate-pro' ),
|
|
'MGA' => esc_html__( 'Malagasy ariary', 'opalestate-pro' ),
|
|
'MKD' => esc_html__( 'Macedonian denar', 'opalestate-pro' ),
|
|
'MMK' => esc_html__( 'Burmese kyat', 'opalestate-pro' ),
|
|
'MNT' => esc_html__( 'Mongolian tögrög', 'opalestate-pro' ),
|
|
'MOP' => esc_html__( 'Macanese pataca', 'opalestate-pro' ),
|
|
'MRO' => esc_html__( 'Mauritanian ouguiya', 'opalestate-pro' ),
|
|
'MUR' => esc_html__( 'Mauritian rupee', 'opalestate-pro' ),
|
|
'MVR' => esc_html__( 'Maldivian rufiyaa', 'opalestate-pro' ),
|
|
'MWK' => esc_html__( 'Malawian kwacha', 'opalestate-pro' ),
|
|
'MXN' => esc_html__( 'Mexican peso', 'opalestate-pro' ),
|
|
'MYR' => esc_html__( 'Malaysian ringgit', 'opalestate-pro' ),
|
|
'MZN' => esc_html__( 'Mozambican metical', 'opalestate-pro' ),
|
|
'NAD' => esc_html__( 'Namibian dollar', 'opalestate-pro' ),
|
|
'NGN' => esc_html__( 'Nigerian naira', 'opalestate-pro' ),
|
|
'NIO' => esc_html__( 'Nicaraguan córdoba', 'opalestate-pro' ),
|
|
'NOK' => esc_html__( 'Norwegian krone', 'opalestate-pro' ),
|
|
'NPR' => esc_html__( 'Nepalese rupee', 'opalestate-pro' ),
|
|
'NZD' => esc_html__( 'New Zealand dollar', 'opalestate-pro' ),
|
|
'OMR' => esc_html__( 'Omani rial', 'opalestate-pro' ),
|
|
'PAB' => esc_html__( 'Panamanian balboa', 'opalestate-pro' ),
|
|
'PEN' => esc_html__( 'Peruvian nuevo sol', 'opalestate-pro' ),
|
|
'PGK' => esc_html__( 'Papua New Guinean kina', 'opalestate-pro' ),
|
|
'PHP' => esc_html__( 'Philippine peso', 'opalestate-pro' ),
|
|
'PKR' => esc_html__( 'Pakistani rupee', 'opalestate-pro' ),
|
|
'PLN' => esc_html__( 'Polish złoty', 'opalestate-pro' ),
|
|
'PRB' => esc_html__( 'Transnistrian ruble', 'opalestate-pro' ),
|
|
'PYG' => esc_html__( 'Paraguayan guaraní', 'opalestate-pro' ),
|
|
'QAR' => esc_html__( 'Qatari riyal', 'opalestate-pro' ),
|
|
'RON' => esc_html__( 'Romanian leu', 'opalestate-pro' ),
|
|
'RSD' => esc_html__( 'Serbian dinar', 'opalestate-pro' ),
|
|
'RUB' => esc_html__( 'Russian ruble', 'opalestate-pro' ),
|
|
'RWF' => esc_html__( 'Rwandan franc', 'opalestate-pro' ),
|
|
'SAR' => esc_html__( 'Saudi riyal', 'opalestate-pro' ),
|
|
'SBD' => esc_html__( 'Solomon Islands dollar', 'opalestate-pro' ),
|
|
'SCR' => esc_html__( 'Seychellois rupee', 'opalestate-pro' ),
|
|
'SDG' => esc_html__( 'Sudanese pound', 'opalestate-pro' ),
|
|
'SEK' => esc_html__( 'Swedish krona', 'opalestate-pro' ),
|
|
'SGD' => esc_html__( 'Singapore dollar', 'opalestate-pro' ),
|
|
'SHP' => esc_html__( 'Saint Helena pound', 'opalestate-pro' ),
|
|
'SLL' => esc_html__( 'Sierra Leonean leone', 'opalestate-pro' ),
|
|
'SOS' => esc_html__( 'Somali shilling', 'opalestate-pro' ),
|
|
'SRD' => esc_html__( 'Surinamese dollar', 'opalestate-pro' ),
|
|
'SSP' => esc_html__( 'South Sudanese pound', 'opalestate-pro' ),
|
|
'STD' => esc_html__( 'São Tomé and Príncipe dobra', 'opalestate-pro' ),
|
|
'SYP' => esc_html__( 'Syrian pound', 'opalestate-pro' ),
|
|
'SZL' => esc_html__( 'Swazi lilangeni', 'opalestate-pro' ),
|
|
'THB' => esc_html__( 'Thai baht', 'opalestate-pro' ),
|
|
'TJS' => esc_html__( 'Tajikistani somoni', 'opalestate-pro' ),
|
|
'TMT' => esc_html__( 'Turkmenistan manat', 'opalestate-pro' ),
|
|
'TND' => esc_html__( 'Tunisian dinar', 'opalestate-pro' ),
|
|
'TOP' => esc_html__( 'Tongan paʻanga', 'opalestate-pro' ),
|
|
'TRY' => esc_html__( 'Turkish lira', 'opalestate-pro' ),
|
|
'TTD' => esc_html__( 'Trinidad and Tobago dollar', 'opalestate-pro' ),
|
|
'TWD' => esc_html__( 'New Taiwan dollar', 'opalestate-pro' ),
|
|
'TZS' => esc_html__( 'Tanzanian shilling', 'opalestate-pro' ),
|
|
'UAH' => esc_html__( 'Ukrainian hryvnia', 'opalestate-pro' ),
|
|
'UGX' => esc_html__( 'Ugandan shilling', 'opalestate-pro' ),
|
|
'USD' => esc_html__( 'United States dollar', 'opalestate-pro' ),
|
|
'UYU' => esc_html__( 'Uruguayan peso', 'opalestate-pro' ),
|
|
'UZS' => esc_html__( 'Uzbekistani som', 'opalestate-pro' ),
|
|
'VEF' => esc_html__( 'Venezuelan bolívar', 'opalestate-pro' ),
|
|
'VND' => esc_html__( 'Vietnamese đồng', 'opalestate-pro' ),
|
|
'VUV' => esc_html__( 'Vanuatu vatu', 'opalestate-pro' ),
|
|
'WST' => esc_html__( 'Samoan tālā', 'opalestate-pro' ),
|
|
'XAF' => esc_html__( 'Central African CFA franc', 'opalestate-pro' ),
|
|
'XCD' => esc_html__( 'East Caribbean dollar', 'opalestate-pro' ),
|
|
'XOF' => esc_html__( 'West African CFA franc', 'opalestate-pro' ),
|
|
'XPF' => esc_html__( 'CFP franc', 'opalestate-pro' ),
|
|
'YER' => esc_html__( 'Yemeni rial', 'opalestate-pro' ),
|
|
'ZAR' => esc_html__( 'South African rand', 'opalestate-pro' ),
|
|
'ZMW' => esc_html__( 'Zambian kwacha', 'opalestate-pro' ),
|
|
];
|
|
|
|
return apply_filters( 'opalestate_currencies', $currencies );
|
|
}
|
|
|
|
/**
|
|
* Get the price format depending on the currency position
|
|
*
|
|
* @return string
|
|
*/
|
|
function opalestate_price_format_position() {
|
|
global $opalestate_options;
|
|
$currency_pos = opalestate_options( 'currency_position', 'before' );
|
|
|
|
$format = '%1$s%2$s';
|
|
switch ( $currency_pos ) {
|
|
case 'before' :
|
|
$format = '%1$s%2$s';
|
|
break;
|
|
case 'after' :
|
|
$format = '%2$s%1$s';
|
|
break;
|
|
case 'left_space' :
|
|
$format = '%1$s %2$s';
|
|
break;
|
|
case 'right_space' :
|
|
$format = '%2$s %1$s';
|
|
break;
|
|
}
|
|
|
|
return apply_filters( 'opalestate_price_format_position', $format, $currency_pos );
|
|
}
|
|
|
|
/**
|
|
* Price format.
|
|
*
|
|
* @param string $price
|
|
* @param array $args
|
|
* @return mixed|void
|
|
*/
|
|
function opalestate_price_format( $price, $args = [] ) {
|
|
|
|
$price = opalestate_price( $price, $args );
|
|
$price = sprintf( opalestate_price_format_position(), opalestate_currency_symbol(), $price );
|
|
|
|
return apply_filters( 'opalestate_price_format', $price );
|
|
}
|
|
|
|
function opalestate_get_currency() {
|
|
return opalestate_options( 'currency', 'USD' );
|
|
}
|
|
|
|
/**
|
|
* Gets currency symbol
|
|
*
|
|
* @param string $currency
|
|
* @return string
|
|
*/
|
|
function opalestate_currency_symbol( $currency = '' ) {
|
|
if ( ! $currency ) {
|
|
$currency = opalestate_get_currency();
|
|
}
|
|
|
|
$symbols = apply_filters( 'opalestate_currency_symbols', [
|
|
'AED' => 'د.إ',
|
|
'AFN' => '؋',
|
|
'ALL' => 'L',
|
|
'AMD' => 'AMD',
|
|
'ANG' => 'ƒ',
|
|
'AOA' => 'Kz',
|
|
'ARS' => '$',
|
|
'AUD' => '$',
|
|
'AWG' => 'ƒ',
|
|
'AZN' => 'AZN',
|
|
'BAM' => 'KM',
|
|
'BBD' => '$',
|
|
'BDT' => '৳ ',
|
|
'BGN' => 'лв.',
|
|
'BHD' => '.د.ب',
|
|
'BIF' => 'Fr',
|
|
'BMD' => '$',
|
|
'BND' => '$',
|
|
'BOB' => 'Bs.',
|
|
'BRL' => 'R$',
|
|
'BSD' => '$',
|
|
'BTC' => '฿',
|
|
'BTN' => 'Nu.',
|
|
'BWP' => 'P',
|
|
'BYR' => 'Br',
|
|
'BZD' => '$',
|
|
'CAD' => '$',
|
|
'CDF' => 'Fr',
|
|
'CHF' => 'CHF',
|
|
'CLP' => '$',
|
|
'CNY' => '¥',
|
|
'COP' => '$',
|
|
'CRC' => '₡',
|
|
'CUC' => '$',
|
|
'CUP' => '$',
|
|
'CVE' => '$',
|
|
'CZK' => 'Kč',
|
|
'DJF' => 'Fr',
|
|
'DKK' => 'DKK',
|
|
'DOP' => 'RD$',
|
|
'DZD' => 'د.ج',
|
|
'EGP' => 'EGP',
|
|
'ERN' => 'Nfk',
|
|
'ETB' => 'Br',
|
|
'EUR' => '€',
|
|
'FJD' => '$',
|
|
'FKP' => '£',
|
|
'GBP' => '£',
|
|
'GEL' => 'ლ',
|
|
'GGP' => '£',
|
|
'GHS' => '₵',
|
|
'GIP' => '£',
|
|
'GMD' => 'D',
|
|
'GNF' => 'Fr',
|
|
'GTQ' => 'Q',
|
|
'GYD' => '$',
|
|
'HKD' => '$',
|
|
'HNL' => 'L',
|
|
'HRK' => 'Kn',
|
|
'HTG' => 'G',
|
|
'HUF' => 'Ft',
|
|
'IDR' => 'Rp',
|
|
'ILS' => '₪',
|
|
'IMP' => '£',
|
|
'INR' => '₹',
|
|
'IQD' => 'ع.د',
|
|
'IRR' => '﷼',
|
|
'ISK' => 'Kr.',
|
|
'JEP' => '£',
|
|
'JMD' => '$',
|
|
'JOD' => 'د.ا',
|
|
'JPY' => '¥',
|
|
'KES' => 'KSh',
|
|
'KGS' => 'лв',
|
|
'KHR' => '៛',
|
|
'KMF' => 'Fr',
|
|
'KPW' => '₩',
|
|
'KRW' => '₩',
|
|
'KWD' => 'د.ك',
|
|
'KYD' => '$',
|
|
'KZT' => 'KZT',
|
|
'LAK' => '₭',
|
|
'LBP' => 'ل.ل',
|
|
'LKR' => 'රු',
|
|
'LRD' => '$',
|
|
'LSL' => 'L',
|
|
'LYD' => 'ل.د',
|
|
'MAD' => 'د. م.',
|
|
'MAD' => 'د.م.',
|
|
'MDL' => 'L',
|
|
'MGA' => 'Ar',
|
|
'MKD' => 'ден',
|
|
'MMK' => 'Ks',
|
|
'MNT' => '₮',
|
|
'MOP' => 'P',
|
|
'MRO' => 'UM',
|
|
'MUR' => '₨',
|
|
'MVR' => '.ރ',
|
|
'MWK' => 'MK',
|
|
'MXN' => '$',
|
|
'MYR' => 'RM',
|
|
'MZN' => 'MT',
|
|
'NAD' => '$',
|
|
'NGN' => '₦',
|
|
'NIO' => 'C$',
|
|
'NOK' => 'kr',
|
|
'NPR' => '₨',
|
|
'NZD' => '$',
|
|
'OMR' => 'ر.ع.',
|
|
'PAB' => 'B/.',
|
|
'PEN' => 'S/.',
|
|
'PGK' => 'K',
|
|
'PHP' => '₱',
|
|
'PKR' => '₨',
|
|
'PLN' => 'zł',
|
|
'PRB' => 'р.',
|
|
'PYG' => '₲',
|
|
'QAR' => 'ر.ق',
|
|
'RMB' => '¥',
|
|
'RON' => 'lei',
|
|
'RSD' => 'дин.',
|
|
'RUB' => '₽',
|
|
'RWF' => 'Fr',
|
|
'SAR' => 'ر.س',
|
|
'SBD' => '$',
|
|
'SCR' => '₨',
|
|
'SDG' => 'ج.س.',
|
|
'SEK' => 'kr',
|
|
'SGD' => '$',
|
|
'SHP' => '£',
|
|
'SLL' => 'Le',
|
|
'SOS' => 'Sh',
|
|
'SRD' => '$',
|
|
'SSP' => '£',
|
|
'STD' => 'Db',
|
|
'SYP' => 'ل.س',
|
|
'SZL' => 'L',
|
|
'THB' => '฿',
|
|
'TJS' => 'ЅМ',
|
|
'TMT' => 'm',
|
|
'TND' => 'د.ت',
|
|
'TOP' => 'T$',
|
|
'TRY' => '₺',
|
|
'TTD' => '$',
|
|
'TWD' => 'NT$',
|
|
'TZS' => 'Sh',
|
|
'UAH' => '₴',
|
|
'UGX' => 'UGX',
|
|
'USD' => '$',
|
|
'UYU' => '$',
|
|
'UZS' => 'UZS',
|
|
'VEF' => 'Bs F',
|
|
'VND' => '₫',
|
|
'VUV' => 'Vt',
|
|
'WST' => 'T',
|
|
'XAF' => 'Fr',
|
|
'XCD' => '$',
|
|
'XOF' => 'Fr',
|
|
'XPF' => 'Fr',
|
|
'YER' => '﷼',
|
|
'ZAR' => 'R',
|
|
'ZMW' => 'ZK',
|
|
] );
|
|
|
|
$currency_symbol = isset( $symbols[ $currency ] ) ? $symbols[ $currency ] : '';
|
|
|
|
return apply_filters( 'opalestate_currency_symbol', $currency_symbol, $currency );
|
|
}
|
|
|
|
/**
|
|
* Return the thousand separator for prices
|
|
*
|
|
* @return string
|
|
*/
|
|
function opalestate_get_price_thousand_separator() {
|
|
$separator = stripslashes( opalestate_options( 'thousands_separator' ) );
|
|
|
|
return $separator;
|
|
}
|
|
|
|
/**
|
|
* Return the decimal separator for prices
|
|
*
|
|
* @return string
|
|
*/
|
|
function opalestate_get_price_decimal_separator() {
|
|
$separator = stripslashes( opalestate_options( 'decimal_separator', '.' ) );
|
|
|
|
return $separator ? $separator : '.';
|
|
}
|
|
|
|
/**
|
|
* Return the number of decimals after the decimal point.
|
|
*
|
|
* @return int
|
|
*/
|
|
function opalestate_get_price_decimals() {
|
|
return absint( opalestate_options( 'number_decimals', 2 ) );
|
|
}
|
|
|
|
|
|
/**
|
|
* Returns Price.
|
|
*
|
|
* @param int $price
|
|
* @param array $args
|
|
* @return bool|mixed|string|void
|
|
*/
|
|
function opalestate_price( $price, $args = [] ) {
|
|
|
|
$negative = $price < 0;
|
|
|
|
if ( $negative ) {
|
|
$price = substr( $price, 1 );
|
|
}
|
|
|
|
|
|
extract( apply_filters( 'opalestate_price_args', wp_parse_args( $args, [
|
|
'ex_tax_label' => false,
|
|
'decimal_separator' => opalestate_get_price_decimal_separator(),
|
|
'thousand_separator' => opalestate_get_price_thousand_separator(),
|
|
'decimals' => opalestate_get_price_decimals(),
|
|
|
|
] ) ) );
|
|
|
|
$negative = $price < 0;
|
|
$price = apply_filters( 'opalestate_raw_price', floatval( $negative ? $price * -1 : $price ) );
|
|
$price = apply_filters( 'opalestate_formatted_price', number_format( $price, $decimals, $decimal_separator, $thousand_separator ), $price, $decimals, $decimal_separator, $thousand_separator );
|
|
|
|
return $price;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* Applyer function to show unit for property
|
|
*/
|
|
|
|
function opalestate_areasize_unit_format( $value = '' ) {
|
|
$measurement_units = opalestate_get_measurement_units();
|
|
$unit = opalestate_options( 'measurement_unit', 'sqft' );
|
|
if ( isset( $measurement_units[ $unit ] ) ) {
|
|
$unit = $measurement_units[ $unit ];
|
|
}
|
|
|
|
return sprintf( _x( '%1$s <span>%2$s</span>', 'areasize info', 'opalestate-pro' ), $value, $unit );
|
|
}
|
|
|
|
add_filter( 'opalestate_areasize_unit_format', 'opalestate_areasize_unit_format' );
|
|
|
|
/**
|
|
*
|
|
* Applyer function to show unit for property
|
|
*/
|
|
if ( ! function_exists( 'opalestate_fnc_excerpt' ) ) {
|
|
//Custom Excerpt Function
|
|
function opalestate_fnc_excerpt( $limit, $afterlimit = '[...]' ) {
|
|
$excerpt = get_the_excerpt();
|
|
|
|
return opalestate_fnc_get_words( $excerpt, $limit, $afterlimit );
|
|
}
|
|
}
|
|
|
|
function opalestate_fnc_get_words( $excerpt, $limit, $afterlimit = '...' ) {
|
|
if ( $excerpt != '' ) {
|
|
$excerpt = explode( ' ', strip_tags( $excerpt ), $limit );
|
|
} else {
|
|
$excerpt = explode( ' ', strip_tags( get_the_content() ), $limit );
|
|
}
|
|
if ( count( $excerpt ) >= $limit ) {
|
|
array_pop( $excerpt );
|
|
$excerpt = implode( " ", $excerpt ) . ' ' . $afterlimit;
|
|
} else {
|
|
$excerpt = implode( " ", $excerpt );
|
|
}
|
|
$excerpt = preg_replace( '`[[^]]*]`', '', $excerpt );
|
|
|
|
return strip_shortcodes( $excerpt );
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
function opalestate_is_own_property( $post_id, $user_id ) {
|
|
$post = get_post( $post_id );
|
|
wp_reset_postdata();
|
|
if ( ! is_object( $post ) || ! $post->ID ) {
|
|
return false;
|
|
}
|
|
|
|
return $user_id == $post->post_author;
|
|
}
|
|
|
|
|
|
if ( ! function_exists( 'opalesate_insert_user_agent' ) ) {
|
|
|
|
function opalesate_insert_user_agent( $args = [] ) {
|
|
$userdata = wp_parse_args( $args, [
|
|
'first_name' => '',
|
|
'last_name' => '',
|
|
'avatar' => '',
|
|
'job' => '',
|
|
'email' => '',
|
|
'phone' => '',
|
|
'mobile' => '',
|
|
'fax' => '',
|
|
'web' => '',
|
|
'address' => '',
|
|
'twitter' => '',
|
|
'facebook' => '',
|
|
'google' => '',
|
|
'linkedin' => '',
|
|
'instagram' => '',
|
|
] );
|
|
|
|
$agent_id = wp_insert_post( [
|
|
'post_title' => $args['first_name'] && $args['last_name'] ? $args['first_name'] . ' ' . $args['last_name'] : $userdata['email'],
|
|
'post_content' => 'empty description',
|
|
'post_excerpt' => 'empty excerpt',
|
|
'post_type' => 'opalestate_agent',
|
|
'post_status' => 'publish',
|
|
'post_author' => 1,
|
|
], true );
|
|
|
|
foreach ( $userdata as $key => $value ) {
|
|
if ( in_array( $key, [ 'first_name', 'last_name' ] ) ) {
|
|
continue;
|
|
}
|
|
update_post_meta( $agent_id, OPALESTATE_AGENT_PREFIX . $key, $value );
|
|
}
|
|
do_action( 'opalesate_insert_user_agent', $agent_id );
|
|
|
|
return $agent_id;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns the multilingual instance.
|
|
*
|
|
* @return Opalestate_Multilingual
|
|
*/
|
|
function opalestate_multilingual() {
|
|
$multilingual = new Opalestate_Multilingual();
|
|
|
|
return $multilingual;
|
|
}
|
|
|
|
/**
|
|
* Is current WordPress is running on multi-languages.
|
|
*
|
|
* @return bool
|
|
*/
|
|
function opalestate_running_on_multilanguage() {
|
|
return apply_filters( 'opalestate_is_running_multilanguage', Opalestate_Multilingual::is_polylang() || Opalestate_Multilingual::is_wpml() );
|
|
}
|
|
|
|
/**
|
|
* Add hidden multilingual.
|
|
*/
|
|
function opalestate_add_hidden_multilingual() {
|
|
if ( ! opalestate_running_on_multilanguage() ) {
|
|
return;
|
|
}
|
|
?>
|
|
<input type="hidden" name="lang" value="<?php echo opalestate_multilingual()->get_current_language(); ?>">
|
|
<?php
|
|
}
|
|
|
|
add_action( 'opalestate_after_search_properties_form', 'opalestate_add_hidden_multilingual' );
|
|
|
|
/**
|
|
* Gets measurement units.
|
|
*
|
|
* @return array
|
|
*/
|
|
function opalestate_get_measurement_units() {
|
|
return apply_filters( 'opalestate_measurement_units', [
|
|
'sqft' => esc_html__( 'sq ft', 'opalestate-pro' ),
|
|
'sqm' => esc_html__( 'sq m', 'opalestate-pro' ),
|
|
'mq' => esc_html__( 'mq', 'opalestate-pro' ),
|
|
'm2' => esc_html__( 'm2', 'opalestate-pro' ),
|
|
] );
|
|
}
|
|
|
|
/**
|
|
* Gets time formats.
|
|
*
|
|
* @return array
|
|
*/
|
|
function opalestate_get_time_formats() {
|
|
return apply_filters( 'opalestate_time_formats', [
|
|
'12_hour' => esc_html__( '12-hour', 'opalestate-pro' ),
|
|
'24_hour' => esc_html__( '24-hour', 'opalestate-pro' ),
|
|
] );
|
|
}
|
|
|
|
/**
|
|
* Returns property statuses.
|
|
*
|
|
* @return array
|
|
*/
|
|
function opalestate_get_property_statuses() {
|
|
return apply_filters( 'opalestate_get_property_statuses', [
|
|
'all' => esc_html__( 'All', 'opalestate-pro' ),
|
|
'publish' => esc_html__( 'Published', 'opalestate-pro' ),
|
|
'published' => esc_html__( 'Published', 'opalestate-pro' ),
|
|
'pending' => esc_html__( 'Pending', 'opalestate-pro' ),
|
|
'expired' => esc_html__( 'Expired', 'opalestate-pro' ),
|
|
] );
|
|
}
|
|
|
|
/**
|
|
* Returns property meta icon classes.
|
|
*
|
|
* @param $key
|
|
*/
|
|
function opalestate_get_property_meta_icon( $key ) {
|
|
$classes = '';
|
|
$classes .= 'icon-property-' . esc_attr( $key );
|
|
|
|
switch ( $key ) {
|
|
case 'builtyear':
|
|
$icon = 'fas fa-calendar';
|
|
break;
|
|
case 'parking':
|
|
$icon = 'fas fa-car';
|
|
break;
|
|
case 'bedrooms':
|
|
$icon = 'fas fa-bed';
|
|
break;
|
|
case 'bathrooms':
|
|
$icon = 'fas fa-bath';
|
|
break;
|
|
case 'plotsize':
|
|
$icon = 'fas fa-map';
|
|
break;
|
|
case 'areasize':
|
|
$icon = 'fas fa-arrows-alt';
|
|
break;
|
|
case 'orientation':
|
|
$icon = 'fas fa-compass';
|
|
break;
|
|
case 'livingrooms':
|
|
$icon = 'fas fa-tv';
|
|
break;
|
|
case 'kitchens':
|
|
$icon = 'fas fa-utensils';
|
|
break;
|
|
case 'amountrooms':
|
|
$icon = 'fas fa-building';
|
|
break;
|
|
default:
|
|
$icon = $key;
|
|
break;
|
|
}
|
|
|
|
$classes .= ' ';
|
|
|
|
$classes .= apply_filters( 'opalestate_property_meta_icon', $icon, $key );
|
|
|
|
return $classes;
|
|
}
|
|
|
|
/**
|
|
* Is enable price field in the search forms?
|
|
*
|
|
* @return bool
|
|
*/
|
|
function opalestate_is_enable_price_field() {
|
|
return 'on' == opalestate_get_option( 'opalestate_ppt_price_opt', 'on' );
|
|
}
|
|
|
|
/**
|
|
* Is enable areasize field in the search forms?
|
|
*
|
|
* @return bool
|
|
*/
|
|
function opalestate_is_enable_areasize_field() {
|
|
return 'on' == opalestate_get_option( 'opalestate_ppt_areasize_opt', 'on' );
|
|
}
|
|
|
|
function opalestate_is_require_login_to_show_author_box() {
|
|
$require = opalestate_get_option( 'enable_single_login_to_show_author_box', 'off' );
|
|
|
|
return ! ( $require == 'on' ) || ( $require == 'on' && is_user_logged_in() );
|
|
}
|
|
|
|
/**
|
|
* Clean variables using sanitize_text_field. Arrays are cleaned recursively.
|
|
* Non-scalar values are ignored.
|
|
*
|
|
* @param string|array $var Data to sanitize.
|
|
* @return string|array
|
|
*/
|
|
function opalestate_clean( $var ) {
|
|
if ( is_array( $var ) ) {
|
|
return array_map( 'opalestate_clean', $var );
|
|
}
|
|
|
|
return is_scalar( $var ) ? sanitize_text_field( $var ) : $var;
|
|
}
|
|
|
|
/**
|
|
* Get unique ID.
|
|
*
|
|
* This is a PHP implementation of Underscore's uniqueId method. A static variable
|
|
* contains an integer that is incremented with each call. This number is returned
|
|
* with the optional prefix. As such the returned value is not universally unique,
|
|
* but it is unique across the life of the PHP process.
|
|
*
|
|
* @param string $prefix Prefix for the returned ID.
|
|
* @return string Unique ID.
|
|
* @see wp_unique_id() Themes requiring WordPress 5.0.3 and greater should use this instead.
|
|
*
|
|
* @staticvar int $id_counter
|
|
*
|
|
*/
|
|
function opalestate_unique_id( $prefix = '' ) {
|
|
static $id_counter = 0;
|
|
if ( function_exists( 'wp_unique_id' ) ) {
|
|
return wp_unique_id( $prefix );
|
|
}
|
|
|
|
return $prefix . (string) ++$id_counter;
|
|
}
|
|
|
|
/**
|
|
* Register widget area.
|
|
*
|
|
* @link https://developer.wordpress.org/themes/functionality/sidebars/#registering-a-sidebar
|
|
*/
|
|
function opalestate_widgets_init() {
|
|
register_sidebar( [
|
|
'name' => esc_html__( 'Single Property Sidebar', 'opalestate-pro' ),
|
|
'id' => 'opalestate-single-property',
|
|
'description' => esc_html__( 'Add widgets here to appear in your single property sidebar area.', 'opalestate-pro' ),
|
|
'before_widget' => '<div id="%1$s" class="widget opalestate-single-property-widget %2$s">',
|
|
'after_widget' => '</div>',
|
|
'before_title' => '<h5 class="widget-title">',
|
|
'after_title' => '</h5>',
|
|
] );
|
|
}
|
|
|
|
add_action( 'widgets_init', 'opalestate_widgets_init' );
|
|
|
|
/**
|
|
* Get email date format.
|
|
*
|
|
* @return string
|
|
*/
|
|
function opalestate_email_date_format() {
|
|
return apply_filters( 'opalestate_email_date_format', 'F j, Y, g:i a' );
|
|
}
|
|
|
|
/**
|
|
* Get autocomplete restrictions.
|
|
*
|
|
* @return string
|
|
*/
|
|
function opalestate_get_autocomplete_restrictions() {
|
|
$restrictions_option = trim( opalestate_options( 'autocomplete_restrictions', '' ) );
|
|
|
|
if ( ! $restrictions_option ) {
|
|
return '';
|
|
}
|
|
|
|
$array = explode( ',', $restrictions_option );
|
|
$results = [];
|
|
|
|
foreach ( $array as $res ) {
|
|
$results[] = strtolower( trim( $res ) );
|
|
}
|
|
|
|
if ( ! $results ) {
|
|
return '';
|
|
}
|
|
|
|
return json_encode( $results );
|
|
}
|
|
|
|
/**
|
|
* Query property data for a term and return IDs.
|
|
*
|
|
* Use for 'post__in' in WP_Query.
|
|
*
|
|
* @param string $term The term to search.
|
|
* @return array
|
|
*/
|
|
function opalestate_search_property_by_term( $term ) {
|
|
global $wpdb;
|
|
|
|
// Filters the search fields.
|
|
$search_fields = array_map( 'opalestate_clean', apply_filters( 'opalestate_search_property_fields', [
|
|
'opalestate_ppt_sku',
|
|
'opalestate_ppt_address',
|
|
] ) );
|
|
|
|
// Prepare search bookings.
|
|
$property_ids = [];
|
|
|
|
if ( is_numeric( $term ) ) {
|
|
$property_ids[] = absint( $term );
|
|
}
|
|
|
|
if ( ! empty( $search_fields ) ) {
|
|
$search = $wpdb->get_col( $wpdb->prepare(
|
|
"SELECT DISTINCT `p1`.`post_id` FROM {$wpdb->postmeta} AS `p1` WHERE `p1`.`meta_value` LIKE %s AND `p1`.`meta_key` IN ('" . implode( "','",
|
|
array_map( 'esc_sql', $search_fields ) ) . "')", // @codingStandardsIgnoreLine
|
|
'%' . $wpdb->esc_like( opalestate_clean( $term ) ) . '%'
|
|
) );
|
|
|
|
$property_ids = array_unique( array_merge( $property_ids, $search ) );
|
|
}
|
|
|
|
return apply_filters( 'opalestate_search_property_results', $property_ids, $term, $search_fields );
|
|
}
|