HEX
Server: Apache
System: Linux pdx1-shared-a2-04 6.6.104-grsec-jammy+ #3 SMP Tue Sep 16 00:28:11 UTC 2025 x86_64
User: dh_hwg2wc (6369923)
PHP: 8.1.33
Disabled: NONE
Upload Files
File: /home/dh_hwg2wc/fnaluxury.com/wp-content/plugins/houzez-crm/includes/class-enquiry.php
<?php
if ( ! class_exists( 'Houzez_Enquiry' ) ) {

	class Houzez_Enquiry {

		
		public function __construct() {
			add_action( 'wp_ajax_crm_add_new_enquiry', array( $this, 'add_enquiry' ) );
			add_action( 'wp_ajax_get_single_enquiry', array( $this, 'get_single_enquiry' ) );
			add_action( 'wp_ajax_houzez_delete_enquiry', array( $this, 'delete_enquiry') );
			add_action( 'wp_ajax_houzez_match_listing_email', array( $this, 'send_match_listing_email') );
			
		}

		public function add_enquiry() {
			$lead_id = sanitize_text_field( $_POST['lead_id'] );
			$enquiry_type = sanitize_text_field( $_POST['enquiry_type'] );
			$property_type = sanitize_text_field( $_POST['e_meta']['property_type'] );
			$property_status = sanitize_text_field( $_POST['e_meta']['property_status'] );
			$property_label = sanitize_text_field( $_POST['e_meta']['property_label'] );

			if(empty($lead_id)) {
				echo json_encode( array( 'success' => false, 'msg' => esc_html__('Enter a valid contact', 'houzez-crm') ) );
	            wp_die();
			}

			if(empty($property_type)) {
				echo json_encode( array( 'success' => false, 'msg' => esc_html__('Select property type', 'houzez-crm') ) );
	            wp_die();
			}

			if(isset($_POST['enquiry_id']) && !empty($_POST['enquiry_id'])) {
				$enquiry_id = intval($_POST['enquiry_id']);
	        	$enquiry_id = $this->update_enquiry($enquiry_id);

				echo json_encode( array(
	                'success' => true,
	                'msg' => esc_html__("Successfully updated!", 'houzez-crm')
	            ));
	            wp_die();

	        } else {

				$save_enquiry = $this->save_enquiry();
				if($save_enquiry) {
					echo json_encode( array( 'success' => true, 'msg' => esc_html__('Successfully added!', 'houzez-crm') ) );
			            wp_die();
				}
			}
		}

		public function save_enquiry($lead_id = "") {

			global $wpdb;

			$listing_id = 0;
			if ( isset( $_POST['listing_id'] ) ) {
				$listing_id = intval( $_POST['listing_id'] );
			}

			$negotiator = '';
			if ( isset( $_POST['negotiator'] ) ) {
				$negotiator = sanitize_text_field( $_POST['negotiator'] );
			}

			$source = '';
			if ( isset( $_POST['source'] ) ) {
				$source = sanitize_text_field( $_POST['source'] );
			}

			$status = '';
			if ( isset( $_POST['status'] ) ) {
				$status = sanitize_text_field( $_POST['status'] );
			}

			$agent_id = '';
			if ( isset( $_POST['agent_id'] ) ) {
				$agent_id = sanitize_text_field( $_POST['agent_id'] );
			}

			$agent_type = '';
			if ( isset( $_POST['agent_type'] ) ) {
				$agent_type = sanitize_text_field( $_POST['agent_type'] );
			}

			$private_note = '';
			if ( isset( $_POST['private_note'] ) ) {
				$private_note = sanitize_textarea_field( $_POST['private_note'] );
			}

			$enquiry_type = '';
			if ( isset( $_POST['enquiry_type'] ) ) {
				$enquiry_type = sanitize_text_field( $_POST['enquiry_type'] );
			}

			$message = '';
			if ( isset( $_POST['message'] ) ) {
				$message = sanitize_textarea_field( $_POST['message'] );
			}

			if(!empty($listing_id)) {
				$enquiry_meta = $this->get_property_info($listing_id);
				$enquiry_meta = maybe_serialize($enquiry_meta);

			} else if( isset($_POST['is_estimation']) && $_POST['is_estimation'] == 'yes' ) {
				$meta = isset($_POST['e_meta']) ? $_POST['e_meta'] : '';
				$enquiry_meta = $this->prepare_estimation_meta($meta);
				$enquiry_meta = maybe_serialize($enquiry_meta);

			} else {
				$lead_id = intval( $_POST['lead_id'] );
				$meta = isset($_POST['e_meta']) ? $_POST['e_meta'] : '';
				$enquiry_meta = $this->prepare_property_meta($meta);
				$enquiry_meta = maybe_serialize($enquiry_meta);
			}

			if(!empty($listing_id)) {
				$user_id = get_post_field( 'post_author', $listing_id );
			}

			if( (isset($_POST['houzez_contact_form']) && $_POST['houzez_contact_form'] == 'yes') || (isset($_POST['is_estimation']) && $_POST['is_estimation'] == 'yes') || empty($user_id) ) {

				$adminData = get_user_by( 'email', get_option( 'admin_email' ) );
				$user_id = $adminData->ID;
				$agent_id = $adminData->ID;
				$agent_type = 'author_info';
			}

			if( isset($_POST['action']) && $_POST['action'] == 'crm_add_new_enquiry' ) {
				$user_id = get_current_user_id();
			}
		

            $data_table        = $wpdb->prefix . 'houzez_crm_enquiries';
	        $data = array(
	        	'user_id'       	=> $user_id,
                'lead_id'           => $lead_id,
                'listing_id'  		=> $listing_id,
                'negotiator'    	=> $negotiator,
                'source'     		=> $source,
                'status'         	=> $status,
                'enquiry_to'        => $agent_id,
                'enquiry_user_type' => $agent_type,
                'message'    		=> $message,
                'enquiry_type'    	=> $enquiry_type,
                'enquiry_meta'    	=> $enquiry_meta,
                'private_note'    	=> $private_note
            );

            $format = array(
                '%d',
                '%d',
                '%d',
                '%s',
                '%s',
                '%s',
                '%d',
                '%s',
                '%s',
                '%s',
                '%s',
                '%s'
            );

            $inserted_id = $wpdb->insert($data_table, $data, $format);
            return $inserted_id;

		}

		public function update_enquiry($enquiry_id) {

			global $wpdb;

			$listing_id = 0;
			if ( isset( $_POST['listing_id'] ) ) {
				$listing_id = intval( $_POST['listing_id'] );
			}

			$negotiator = '';
			if ( isset( $_POST['negotiator'] ) ) {
				$negotiator = sanitize_text_field( $_POST['negotiator'] );
			}

			$source = '';
			if ( isset( $_POST['source'] ) ) {
				$source = sanitize_text_field( $_POST['source'] );
			}

			$status = '';
			if ( isset( $_POST['status'] ) ) {
				$status = sanitize_text_field( $_POST['status'] );
			}

			$agent_id = '';
			if ( isset( $_POST['agent_id'] ) ) {
				$agent_id = sanitize_text_field( $_POST['agent_id'] );
			}

			$agent_type = '';
			if ( isset( $_POST['agent_type'] ) ) {
				$agent_type = sanitize_text_field( $_POST['agent_type'] );
			}

			$private_note = '';
			if ( isset( $_POST['private_note'] ) ) {
				$private_note = sanitize_text_field( $_POST['private_note'] );
			}

			$enquiry_type = '';
			if ( isset( $_POST['enquiry_type'] ) ) {
				$enquiry_type = sanitize_text_field( $_POST['enquiry_type'] );
			}

			$message = '';
			if ( isset( $_POST['message'] ) ) {
				$message = sanitize_textarea_field( $_POST['message'] );
			}

			if(!empty($listing_id)) {
				$enquiry_meta = $this->get_property_info($listing_id);
				$enquiry_meta = maybe_serialize($enquiry_meta);
			} else {
				$lead_id = intval( $_POST['lead_id'] );
				$meta = $_POST['e_meta'];
				$enquiry_meta = $this->prepare_property_meta($meta);
				$enquiry_meta = maybe_serialize($enquiry_meta);
			}
		

            $data_table        = $wpdb->prefix . 'houzez_crm_enquiries';
	        $data = array(
                'lead_id'           => $lead_id,
                'listing_id'  		=> $listing_id,
                'negotiator'    	=> $negotiator,
                'source'     		=> $source,
                'status'         	=> $status,
                'enquiry_to'        => $agent_id,
                'enquiry_user_type' => $agent_type,
                'message'    		=> $message,
                'enquiry_type'    	=> $enquiry_type,
                'enquiry_meta'    	=> $enquiry_meta,
                'private_note'    	=> $private_note
            );

            $format = array(
                '%d',
                '%d',
                '%s',
                '%s',
                '%s',
                '%d',
                '%s',
                '%s',
                '%s',
                '%s',
                '%s'
            );

            $where = array(
            	'enquiry_id' => $enquiry_id
            );

            $where_format = array(
            	'%d'
            );

            $updated = $wpdb->update( $data_table, $data, $where, $format, $where_format );

            if ( false === $updated ) {
			    return false;
			} else {
			    return true;
			}

		}

		public static function get_enquires() {
		    global $wpdb;
		    $table_name = $wpdb->prefix . 'houzez_crm_enquiries';

		    $andwhere = '';
		    if(isset($_GET['lead-id']) && !empty($_GET['lead-id'])) {
		        $lead_id = intval($_GET['lead-id']);
		        $andwhere = $wpdb->prepare(' AND lead_id = %d ', $lead_id);
		    }

		    $items_per_page = isset($_GET['records']) ? intval($_GET['records']) : 10;
		    $page = isset( $_GET['cpage'] ) ? abs( (int) $_GET['cpage'] ) : 1;
		    $offset = ( $page * $items_per_page ) - $items_per_page;
		    $user_id = get_current_user_id();

		    $query = $wpdb->prepare('SELECT * FROM '.$table_name.' WHERE user_id= %d '.$andwhere, $user_id);
		    $total_query = "SELECT COUNT(1) FROM ({$query}) AS combined_table";
		    $total = $wpdb->get_var( $total_query );

		    $results = $wpdb->get_results( $wpdb->prepare($query.' ORDER BY enquiry_id DESC LIMIT %d, %d', $offset, $items_per_page), OBJECT );

		    $return_array['data'] = array(
		        'results' => $results,
		        'total_records' => $total,
		        'items_per_page' => $items_per_page,
		        'page' => $page,
		    );

		    return $return_array;
		}


		public function get_property_info($listing_id) {
			
			$enquiry_meta = array();

		    // Check if the listing ID is an integer before proceeding
		    if(empty($listing_id) || !is_int($listing_id)) {
		        return $enquiry_meta;
		    }

		    $listing_id = absint($listing_id);  // Make sure it's a positive integer


			$enquiry_meta['property_type'] = $this->crm_taxonomy( 'property_type', $listing_id );
			$enquiry_meta['property_status'] = $this->crm_taxonomy( 'property_status', $listing_id );
			$enquiry_meta['property_label'] = $this->crm_taxonomy( 'property_label', $listing_id );

			$enquiry_meta['country'] = $this->crm_taxonomy( 'property_country', $listing_id );
			$enquiry_meta['state'] = $this->crm_taxonomy( 'property_state', $listing_id );
			$enquiry_meta['city'] = $this->crm_taxonomy( 'property_city', $listing_id );
			$enquiry_meta['area'] = $this->crm_taxonomy( 'property_area', $listing_id );

			$enquiry_meta['min_beds'] = get_post_meta( $listing_id, 'fave_property_bedrooms', true );
			$enquiry_meta['max_beds'] = get_post_meta( $listing_id, 'fave_property_bedrooms', true );

			$enquiry_meta['min_baths'] = get_post_meta( $listing_id, 'fave_property_bathrooms', true );
			$enquiry_meta['max_baths'] = get_post_meta( $listing_id, 'fave_property_bathrooms', true );
			$enquiry_meta['min_price'] = get_post_meta( $listing_id, 'fave_property_price', true );
			$enquiry_meta['max_price'] = get_post_meta( $listing_id, 'fave_property_price', true );

			$enquiry_meta['min_area'] = get_post_meta( $listing_id, 'fave_property_size', true );
			$enquiry_meta['max_area'] = get_post_meta( $listing_id, 'fave_property_size', true );
			$enquiry_meta['zipcode'] = get_post_meta( $listing_id, 'fave_property_zip', true );
			$enquiry_meta['streat_address'] = get_post_meta( $listing_id, 'fave_property_address', true );

			return $enquiry_meta;
		}

		public function prepare_property_meta($meta) {
			$enquiry_meta = array();

			$enquiry_meta['property_type'] = hcrm_get_term_by( 'slug', sanitize_text_field($meta['property_type']), 'property_type');
			$enquiry_meta['property_status'] = hcrm_get_term_by( 'slug', sanitize_text_field($meta['property_status']), 'property_status');
			$enquiry_meta['property_label'] = hcrm_get_term_by( 'slug', sanitize_text_field($meta['property_label']), 'property_label');

			$enquiry_meta['country'] = hcrm_get_term_by( 'slug', sanitize_text_field($meta['country']), 'property_country');
			$enquiry_meta['state'] = hcrm_get_term_by( 'slug', sanitize_text_field($meta['state']), 'property_state');
			$enquiry_meta['city'] = hcrm_get_term_by( 'slug', sanitize_text_field($meta['city']), 'property_city');
			$enquiry_meta['area'] = hcrm_get_term_by( 'slug', sanitize_text_field($meta['area']), 'property_area');

			$enquiry_meta['min_beds'] = sanitize_text_field($meta['min-beds']);
			$enquiry_meta['max_beds'] = sanitize_text_field($meta['max-beds']);

			$enquiry_meta['min_baths'] = sanitize_text_field($meta['min-baths']);
			$enquiry_meta['max_baths'] = sanitize_text_field($meta['max-baths']);

			$enquiry_meta['min_price'] = sanitize_text_field($meta['min-price']);
			$enquiry_meta['max_price'] = sanitize_text_field($meta['max-price']);

			$enquiry_meta['min_area'] = sanitize_text_field($meta['min-area']);
			$enquiry_meta['max_area'] = sanitize_text_field($meta['max-area']);
			$enquiry_meta['zipcode'] = sanitize_text_field($meta['zipcode']);
			$enquiry_meta['streat_address'] = sanitize_text_field($meta['streat_address']);

			return $enquiry_meta;

		}

		public function prepare_estimation_meta($meta) {
			$enquiry_meta = array();
			$beds = isset($meta['beds']) ? $meta['beds'] : '';
			$max_beds = isset($meta['max-beds']) ? $meta['max-beds'] : '';
			$baths = isset($meta['baths']) ? $meta['baths'] : '';
			$max_baths = isset($meta['max-baths']) ? $meta['max-baths'] : '';
			$price = isset($meta['price']) ? $meta['price'] : '';
			$max_price = isset($meta['max-price']) ? $meta['max-price'] : '';
			$area_size = isset($meta['area-size']) ? $meta['area-size'] : '';
			$max_area_size = isset($meta['max-area-size']) ? $meta['max-area-size'] : '';
			$zipcode = isset($meta['zipcode']) ? $meta['zipcode'] : '';
			$streat_address = isset($meta['streat_address']) ? $meta['streat_address'] : '';

			$property_type = isset($meta['property_type']) ? sanitize_text_field($meta['property_type']) : '';
			$property_status = isset($meta['property_status']) ? sanitize_text_field($meta['property_status']) : '';
			$property_label = isset($meta['property_label']) ? sanitize_text_field($meta['property_label']) : '';

			$country = isset($meta['country']) ? sanitize_text_field($meta['country']) : '';
			$state = isset($meta['state']) ? sanitize_text_field($meta['state']) : '';
			$city = isset($meta['city']) ? sanitize_text_field($meta['city']) : '';
			$area = isset($meta['area']) ? sanitize_text_field($meta['area']) : '';

			$enquiry_meta['property_type'] = hcrm_get_term_by( 'slug', $property_type, 'property_type');
			$enquiry_meta['country'] = hcrm_get_term_by( 'slug', $country, 'property_country');
			$enquiry_meta['state'] = hcrm_get_term_by( 'slug', $state, 'property_state');
			$enquiry_meta['city'] = hcrm_get_term_by( 'slug', $city, 'property_city');
			$enquiry_meta['area'] = hcrm_get_term_by( 'slug', $area, 'property_area');

			$enquiry_meta['min_beds'] = sanitize_text_field($beds);
			$enquiry_meta['max_beds'] = sanitize_text_field($max_beds);

			$enquiry_meta['min_baths'] = sanitize_text_field($baths);
			$enquiry_meta['max_baths'] = sanitize_text_field($max_baths);

			$enquiry_meta['min_price'] = sanitize_text_field($price);
			$enquiry_meta['max_price'] = sanitize_text_field($max_price);

			$enquiry_meta['min_area'] = sanitize_text_field($area_size);
			$enquiry_meta['max_area'] = sanitize_text_field($max_area_size);
			$enquiry_meta['zipcode'] = sanitize_text_field($zipcode);
			$enquiry_meta['streat_address'] = sanitize_text_field($streat_address);

			return $enquiry_meta;

		}

		public function crm_taxonomy( $tax_name, $propID ) {
			$data = array();
	        $terms = get_the_terms( $propID, $tax_name );
			if ( $terms && ! is_wp_error( $terms ) ) {
			    // get the first term
			    $term = array_shift( $terms );
			    $data['name'] = $term->name;
			    $data['slug'] = $term->slug;
			}

			return $data;
	    }

	    public static function get_enquiry($enquiry_id) {
		    global $wpdb;
		    $table_name = $wpdb->prefix . 'houzez_crm_enquiries';

		    // Make sure the ID is a positive integer
		    $enquiry_id = absint($enquiry_id);

		    $user_id = get_current_user_id();

		    $sql = $wpdb->prepare("SELECT * FROM $table_name WHERE enquiry_id = %d AND user_id = %d", $enquiry_id, $user_id);

		    $result = $wpdb->get_row($sql, OBJECT);

		    if( is_object( $result ) && ! empty( $result ) ) {
		        return $result;
		    }

		    return '';
		}


		public function get_single_enquiry() {
		    global $wpdb;
		    $table_name = $wpdb->prefix . 'houzez_crm_enquiries';
		    
		    $enquiry_id = '';
		    if ( isset( $_POST['enquiry_id'] ) ) {
		        $enquiry_id = intval( $_POST['enquiry_id'] );
		    }

		    if(empty($enquiry_id)) {
		        echo json_encode( 
		            array( 
		                'success' => false, 
		                'msg' => esc_html__('Something went wrong!', 'houzez-crm') 
		            ) 
		        );
		        wp_die();
		    }

		    $sql = $wpdb->prepare("SELECT * FROM {$table_name} WHERE enquiry_id = %d", $enquiry_id);

		    $result = $wpdb->get_row( $sql, OBJECT );

		    $meta = maybe_unserialize($result->enquiry_meta);
		    
		    if( is_object( $result ) && ! empty( $result ) ) {
		        echo json_encode( 
		            array( 
		                'success' => true, 
		                'data' => $result,
		                'meta' => $meta
		            ) 
		        );
		        wp_die();
		    }
		    return '';
		}

		

		public function delete_enquiry() {
		    global $wpdb;

		    $user_id = get_current_user_id();

		    $table_name = $wpdb->prefix . 'houzez_crm_enquiries';

		    if ( !isset( $_POST['ids'] ) ) {
		        $ajax_response = array( 'success' => false , 'reason' => esc_html__( 'No enquiry selected', 'houzez-crm' ) );
		        echo json_encode( $ajax_response );
		        die;
		    }
		    $ids = $_POST['ids'];

		    // Ensure each id is an integer
		    $ids_array = explode(',', $ids);
		    $ids_array = array_map('intval', $ids_array);
		    $ids = implode(',', $ids_array);

		    $query = $wpdb->prepare("DELETE FROM {$table_name} WHERE enquiry_id IN (%s) AND user_id = %d", $ids, $user_id);
		    $deleted = $wpdb->query($query);

		    if( $deleted ) {
		        $ajax_response = array( 'success' => true , 'reason' => '' );
		    } else {
		        $ajax_response = array( 'success' => false , 'reason' => esc_html__("You don't have rights to perform this action", 'houzez-crm') );
		    }
		    echo json_encode( $ajax_response );
		    die;
		}



		public function send_match_listing_email() {
			$current_user = wp_get_current_user();
			$from_email = $current_user->user_email;
			$display_name = $current_user->display_name;

			$listing_ids = sanitize_text_field($_POST['ids']);
			
			$target_email = $_POST['email_to'];
			$target_email = is_email($target_email);

			$subject = sprintf( esc_html__('Matched Listing Email from %s', 'houzez-crm'), get_bloginfo('name') );

	        $body = esc_html__("We found these listings against your inquiry", 'houzez-crm')." <br/>";

	        $listing_ids = explode(',', $listing_ids);

	        $i = 0;
	        foreach ($listing_ids as $id) { $i++;
	        	$body .= $i.') <a href="'.get_permalink($id).'">'.get_the_title($id).'</a>'. "<br/>";
	        }

	        
	        $headers = array();
	        $headers[] = 'From: '.$display_name.' <'.$from_email.'>';
	        $headers[] = 'Content-Type: text/html; charset=UTF-8';

			if ( wp_mail( $target_email, $subject, $body, $headers ) ) {
	            echo json_encode( array(
	                'success' => true,
	                'msg' => esc_html__("Email Sent Successfully!", 'houzez-crm')
	            ));
	        } else {
	            echo json_encode(array(
	                    'success' => false,
	                    'msg' => esc_html__("Server Error: Make sure Email function working on your server!", 'houzez-crm')
	                )
	            );
	        }
			wp_die();

		}


	} // end Houzez_Enquiry

	new Houzez_Enquiry();
}